News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - paranvoi

Pages: [1] 2 3
ROM Hacking Discussion / Repointing text (using Advance Text)
« on: March 24, 2012, 05:19:24 pm »
I'm using Schizz's Advance Text -program to edit battle screen text in Pokémon Fire Red.

When trying to insert text that is longer than the original string, the program usually just automatically repoints the inserted text and everything is fine. However, for some reason, the text is sometimes NOT repointed and this message comes up:

"There's enough space after the text. The text won't be repointed."

What happens then is the text is left in its original position and spills over into surrounding strings, corrupting or deleting them from the ROM entirely. For example, if I replace a 10-character long string with one that is 40 characters long, and Advance Text decides not to repoint it, it will entirely swallow up a 10-character long string that was positioned somewhere else in order to make room for itself, thus deleting said string from the game and corrupting the ROM.

In other words, when this message comes up, there is certainly NOT "enough space after the text" and it shouldn't be doing this at all.

Are there any workarounds for this problem? Is there any way to set Advance Text to always repoint text longer than the original, rather than leaving it in the same position?

ROM Hacking Discussion / Re: 2 questions about Advance Text!
« on: March 17, 2012, 06:54:39 pm »
The readme of the tool talks about repointing text.

All I see in the readme is "- added a feature to the save procedure, it now checks if there's enough space behind the current text before it repoints" ... there's no other mention of repointing.

ROM Hacking Discussion / Re: 2 questions about Advance Text!
« on: March 17, 2012, 04:30:01 pm »
By Advance, you mean Gameboy Advance?

1) Not always true. It depends on the game and what you are writing over in those 20 bytes.
If the extra 20 bytes is assembly or other game data that is read, then yea, you could corrupt the game.
If it is nothing used by the game, then it won't hurt anything.
If it is other dialog text, then you need to move that text over 20 bytes too and update its pointer (a value that tells the game where to find the text in the ROM), otherwise you need to find a way to shorten the space taken by your text, or you need to find another spot to place the text, and still update its pointer, to tell it where the new spot is.

2) It is called a 'patch'. It compares the original ROM to your modified version and extracts only the parts you modified.
I believe you can use LunarIPS for GBA games.

No, Advance Text is a program for modifying the text of GBA games, downloadable from here:

I just don't know if the program is made to automatically repoint extra text or what. But let's say I have to move the text and update its pointer. Does this require the text be dumped with Cartographer? Because I'm trying to avoid having to use Cartographer entirely.

ROM Hacking Discussion / 2 questions about Advance Text!
« on: March 17, 2012, 01:31:03 pm »
1) I read somewhere that by inserting text into the game that is longer than the original, the ROM can become corrupted. By that I mean, say for example a line in the original dialogue is 60 characters long, and I insert an 80-character line into the slot where the 60-character line was. I read that doing this messes up all other text boxes and makes the ROM unplayable, something about the program not being able to repoint the extra characters or something? Are there any ways of working around this problem BESIDES always adding text that is shorter than the original, which is imposible?

2) Once I have edited the game script to my liking, how do I go about, um how do I say this.. extracting my work and making it into a downloadable patch that others can use? Sorry, I don't know how to phrase that without it sounding illegal, but you know what I'm talking about. With this program you can edit the ROM directly but I need to a make a patch that others can use to patch their own ROMs.

Thank you :)

ROM Hacking Discussion / Re: Thingy32 (text editor)
« on: March 10, 2012, 03:14:10 pm »
Ok regarding the incomplete dumps. I asked someone for help and he told me they could be a result of 1 of 3 things:

1. They're actually substrings, which are pointed to from elsewhere in the game's coding (dictionary-packing or something like that?)
2. They're made up graphically of, for example, 16- or 8-bit pieces, and in between every 8th or 16th bit there comes an address in the "screen-/video-memory" (yay Google translate...) to which the text is then drawn, "or some other special type of coding"
3. Maybe WindHex is interpreting some bit as a line break, but in all actuality the bit is something else such as a change of speed or some control (change of colour, focus, or anything).

He gave me those explanations but didn't tell me a way to fix the problem.... does anyone know what I can do to fix any of those possibilites? :\

The problem text in question is the menu-text which gets dumped like this (here's an extract):
Code: [Select]

That should read "STATUS PROBLEM" but the first 2 letters of "STATUS" are missing, plus there's an unnessecary line break after the first letter of "PROBLEM". The entire dumped .txt file looks like that.

ROM Hacking Discussion / Re: Thingy32 (text editor)
« on: March 10, 2012, 12:09:03 am »
You can do that, but pretty soon you'll end up with a disorganized mess of strings with pointers pointing every which way.  I'd recommend that you dump your script with something like Cartographer, do your translating and editing, and reinsert it with Atlas.  That way, your script is reinserted neatly, you don't have to worry about manually redirecting pointers, and any future edits to your script can be easily inserted.

Aaaagh that's exactly what I was trying to avoid.

Is there a simple, non-complicated way of dumping a game's script? The game in question has what looks like 500 different pointer tables that, to the best of my knowledge, have to be sought out one-by-one, which is sooo tedious. Plus some don't even dump correctly, resulting in either empty .txt files or ones in which the text is incomplete... i.e. where the first 1-3 letters of every line is missing, etc.

ROM Hacking Discussion / Re: Thingy32 (text editor)
« on: March 09, 2012, 12:39:05 pm »
You can edit the text in Windhex too, you know.  Just press tab and edit away.  Not that I'd recommend this method for translation.  Script dumping really does make text editing easier.

Oh well what do you know! I never knew you could do that with Windhex. There's still the problem with inserting text longer than the original, though. Is there a way to type in the text elsewhere (in a blank area where's there's nothing but FFFFFFFF, for example) and then change the pointers that a specific area of the dialogue points to, i.e. from the location of the original text to the location of the translated text?

ROM Hacking Discussion / Re: Thingy32 (text editor)
« on: March 08, 2012, 09:33:29 pm »
I've tried WindHex but it's far too complicated for me to use. Thingy32 is nice because you can change the text directly in the program without having to dump it to a .txt file first.

ROM Hacking Discussion / Thingy32 (text editor)
« on: March 08, 2012, 06:54:34 pm »
Anyone got experience with this program? I'm thinking of using it for translating a GBA pokemon game. But:

1) Is there an English version? I've got the Spanish version at the moment and seen screenshots of a German version, but no English...
2) Furthermore, are there any guides for this program in general? I've found one in German that I'm reading through with Google Translate, but the text is understandably clunky and difficult to understand.

What I need help with at the moment is inserting a line of text that is longer than the original. I cannot for example insert a 6-character word into the position of a 4-character word because it is 2 characters longer than the original. It looks like you have to write the text to a different location and then change the pointer that directs to it with Advance Map (a scripting program I believe). Help?

ROM Hacking Discussion / Re: Translating Pokémon Fire Red
« on: February 28, 2012, 10:39:16 am »
Yes! I got the trainer names and some menu text to dump using the raw method. I have a problem though. Here's what I wound up with:

Code: [Select]
//GAME NAME: Pokemon - Fire Red.GBA

//BLOCK #007 NAME: menu_pok(raw)
//Block Range: $1B7CC1 - $1B7E14

//. <$F9><$13>EX[LINE]
//P. Poi[LINE]

In other words some names are not only split up by lines breaks but the beginning letters of some names are missing altogether. Like here:

Code: [Select]

That should be "STATUS PROBLEM" but the word "problem" is split by a line break after the first letter, plus the first 2 letters of "status" are missing altogether. Why did this happen, and does this mean it's not possible to edit this data? When I translate this, do I also need to split the word up by a line break just like was done with "problem"? How do I accomodate for the first 2 letters of "status"? :\

Also Ryusui said in another thread that after you've dumped a script in raw mode you need to "insert the pointers into the dumped script manually". What does this mean?

Ok, I've got to be doing something wrong. D: I just tried to raw dump a different block of text and got the same problem I've been having repeatedly, i.e. ended up with a super short text file that contains almost nothing. Just to be clear: when you raw dump, you don't do any hex searches, right? You just add the start and end addresses of the text block itself, NOT its pointer table, right? Here's the text I'm trying to dump:

I tried to raw dump that using this end block:

Code: [Select]
#BLOCK NAME: menu_pok(raw)
#TABLE: table_raw.tbl


And the result was this:
Code: [Select]
//GAME NAME: Pokemon - Fire Red.GBA

//BLOCK #008 NAME: menu_pok(raw)
//Block Range: $1B7CC1 - $1B7E14


Does anyone have any idea what I'm doing wrong here? :| Is there something special I need to take into consideration when dumping text raw?

ROM Hacking Discussion / Re: Translating Pokémon Fire Red
« on: February 19, 2012, 12:13:48 pm »
Ok I fixed that R6002 problem. For some reason there was something wrong with Darkdata's table, because all I had to do was switch back to the table I was using previously and cartographer started working again.

(moving question to other thread)

ROM Hacking Discussion / Re: Translating Pokémon Fire Red
« on: February 17, 2012, 05:38:43 pm »
Okay. Remember what we discussed in the other topic, about dumping scripts? We're talking about reinserting them. You're going to edit the text in the files you've dumped, and you're going to reinsert the changed text into the game.

The nice thing about GBA games is that you don't have to worry about pesky things like bank pointers. Just change the #JMP address to point to somewhere in the ROM where you have a lot of free space; that's where your script resides now. Then you can use Atlas to reinsert the script into the game.

Ah, I see! I don't think this will help with the trainer names though because I still have to figure out how to actually dump them first.

In the mean time, can anyone tell me why I'm getting this error message in cartographer:


I'm using the table that Darkdata posted above (scroll up). Is something missing from it? Oh, and this is my .bat file:

Code: [Select]
cartographer firered.GBA frcommands.txt firered_script -m


ROM Hacking Discussion / Re: Translating Pokémon Fire Red
« on: February 16, 2012, 11:42:54 pm »
make a script that uses a command that locates text from that offsets.

I don't know how to do this.. :\
I'm also not able to "put" text anywhere, at least not by typing it directly (either by typing the word with ascii characters or by typing out the code for each symbol, e.g. BB for A, BC for B, etc.)
Sorry, I'm totally new to all of this.

ROM Hacking Discussion / Re: Translating Pokémon Fire Red
« on: February 16, 2012, 11:18:35 am »
Now, we just need to find some free space. There's about 3MB of free space floating around for anyone to use, just look around 0x800000. So i'll just use that.

So, I insert/write my new text into that slot.

Now, we just convert 0x800000 into a pointer the same way we did the old text: [80] [00] [00] -> [00] [00] [80] [08] adding [08] to the end like normal.

Now we go back to the first text pointer we found: 0DD81708 at 0x165831, remember? and replace that pointer (0DD81708) with our new one (00008008).

FE=|br|, is the first linebreak you make, then you use FB=|nb2|, for each line after in the same box. To make a new box appear, you use FA=|nb|. Always have a [FF] at the end to terminate the string.

I'm bumping this in hopes that maybe someone can help me with this part. I can't figure out how to insert text into an new/empty slot (like 0x800000) and also cannot figure out how to replace a pointer (like 0DD81708) with a new one (like 00008008)? Help?

Hey! I gave you that table file a while ago, you can just load it and search normally.

You should read the threads that you make before! LOOK! It even tells you how to re-point strings that are too long!

You asked the same question on the pokecommunity too! With the same answer.

I'll go grumble in a corner now...

Ok, I admit I forgot I made another thread here, thank you for answering to it. It was very helpful. Your table is also much more complete than mine, I appreciate that too! :) The part about replacing pointers went a bit over my head but that's okay... As for the pokemon community or whatever if I recall correctly they require new threads to be approved before they appear, I made 2 and they both never seemed to go through the filter so I gave up, I can't help it if the mods decided to accept one thread ages after I wrote it at a time when I've long forgotten about it. :P

But maybe you have an idea how to get the trainer names to be dumped? :\ Go a couple posts back and you'll see the problem there.

Okay, silly suggestion. Open up your Cartographer.bat file (the one you double-click to dump the script) and add one line to the end, if it's not there already:

Code: [Select]
This means that the batch file will pause after running Cartographer instead of vanishing into the ether, so you can actually read what it has to say. If Cartographer's throwing up some kind of error, this is how you can find out.

"Pause" was already there, unfortunately... :\ Still no dice. Here's what my .bat file looks like:

Code: [Select]
cartographer firered.GBA frcommands.txt firered_script -m



February 14, 2012, 04:58:17 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Bumping this in hopes that maybe someone has a solution to the above conundrum...

Make an alternate version of your table, and remove the "/" from the start of the end tag. That should work.

Just tried that. Dumped the same exact thing :\

This is what the end of my alternate table looks like:
Code: [Select]
Didn't change anything else in it. And yes I did remember to go into the command file and change the text in the #TABLE slot of the end block to match the file name of the alternate table.

? D:

Okay, this is gonna be kinda funky: what he's saying is that the game doesn't have pointers to each individual string in this case. What it does instead is iterate through the list until it finds the string it wants.

Say the game tries to look up String #36 for a particular event. In normal cases, it would take the start of the pointer table and do a little math to get the address of Pointer #36, which would point to the string the game wants. In this case, it instead goes through the list and identifies each string ending by the telltale FF byte at the end.

The upshot of all this: good news! You don't need a pointer table, because the game just looks through the whole block for the string it wants! Horribly inefficient, but there you go. You can just dump the whole block in raw mode and reinsert it without any trouble.

Oh, cool! Good to know :laugh:

Well I've gotta be doing something wrong. I dumped the block in raw mode and got this:
Code: [Select]
//GAME NAME: Pokemon - Fire Red.GBA

//BLOCK #007 NAME: trainer_names (raw)
//Block Range: $FB93 - $FC03

//<$08><$80><$20><$40><$02><$08><$40> <$28><$03>V <$20><END>


Here's the end block I made for that:
Code: [Select]
#BLOCK NAME: trainer_names (raw)
#TABLE: table.tbl

I wasn't really sure where to stop the script. I did a hex search for that 23EAC8 value and just picked the position of the 08 at the end of the string that came up.

EDIT: I just tried it again with this block:
Code: [Select]
#BLOCK NAME: trainer_names (raw)
#TABLE: table.tbl

In other words I'm using the start and end of the block of trainer names itself and not doing any hex searches. But this too resulted in a super small amount of dumped material:

Code: [Select]
//GAME NAME: Pokemon - Fire Red.GBA

//BLOCK #007 NAME: trainer_names (raw)
//Block Range: $23E588 - $23EAC8


What does the other pointer point to? What's at 23EAC8?

Oho, nice one, I didn't even notice that value there. This is what's at 23EAC8:

It's the very end of the list of trainer names. Doing a hex search for it actually did return a match, but it wasn't very fruitful. Just a couple stranded 08's. There was what looked like a potential pointer table at the top:

But I dumped it and got this:

Code: [Select]
//GAME NAME: Pokemon - Fire Red.GBA

//BLOCK #006 NAME: trainer_names2

In other words it was totally empty. :D

Here's a message someone else sent me about this problem. I already asked him to explain what he meant a bit clearer but maybe you can look at it too Ryusui and get something out of it  :P
Quote from: Tauwasser
Well, anyway, your current problem seems to be not finding pointers to the individual trainer data.
The reason for this is simple: There are none.
IIRC, all Pokemon games so far (at least GB/C + GBA) have always counted trainers from the start of the respective trainer class. So basically, you will need to find the first "Cooltrainer" on that list and look for a pointer to his data. All other Cooltrainers' data is then computed by counting 0xFF bytes, which end one trainer's data. You can go look for the start of the list. There should be a pointer to it regardless of me being correct or not. That way, you should find the master pointer table and find all sub table-entries from there. You will of course have to repoint the whole table for a sub-trainer type.

I don't really get what Tauwasser means here by "look for a pointer to his data". Is that something different from the start address to the string?

Pages: [1] 2 3