(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
04-17-24 12:30 AM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - FFTA hacking, but I've never hacked before! New poll | |
Pages: 1 2Add to favorites | Next newer thread | Next older thread
User Post
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-16-07 06:19 AM Link | Quote
Hello everyone. I've decided to clear the bad name of Final Fantasy Tactics Advance. I know the story line sucks, the characters act like children (actually they are but thats lame), and there are limited choices for you to make. The script writers didn't realize that a tactical game would be played by people who wore boxers instead of diapers, but the programmers did. They created an awesome battle system, and I'm here to clean up FFTA's mess they call a story.

I'm not really doing anything drastic as of yet, just changing some numbers around.

What do I do first? I'm going to want to add some equipment / monsters / missions / etc., so I'll have to expand the rom right? Move data, make sure the pointers repoint to the same thing right? (This is what I've gathered from things I've read) Okay, so is there a program for this or will I have to do it on my own? If I do do it on my own, how will I know which ones are pointers and where they point? A tutorial would be nice, I'm going to search right now.

I'm also going to modify the preview's text and possibly the characters movements in the preview, if I prove compentent enough. This is mostly an experiment to keep me entertained, but I have enough patience to stick it through if people show me where to go.
Thank you all.


(edited by Bones_the_Great on 01-16-07 01:52 AM)
Omega45889

Shyguy


 





Since: 11-18-05

Last post: 6300 days
Last view: 6315 days
Posted on 01-16-07 11:43 AM Link | Quote
Ok, im going to give you some valuable advice here. Hacking isnt easy. It takes time, patience, determination, and skill. If your serious about hacking FFTA its most defintely going to take all of these.

The way to start is to decide exactly what you want to change about the game. Changing the story and stats probably wont be that hard, but if you want to make drastic changes like adding levels thats different.

You need to begin by compiling a lot of information about the game like offsets, structures, ect.

This includes stuff like Stats of all kinds which are probably grouped together. You can probably find those just by writing down stats for stuff like armor and weapons in game and just searching for those values with a hex editor. To see if youve found it, just change it slightly and then check it ingame again.

For text you can probably do the same thing unless they somehow encode it, which i doubt.

What your going to find hard is changing levels. If you understand assembly, you can probably figure it out with a debugger of some kind. Another option is using a corrupter to find the data and fool around with it until you figure out the structure of it, but this takes a lot of time and luck.

My personal recommendation is to start with something easier, because whats going to happen is your going to feel totally overwhelmed and just give up. Its happened to me before.

Good luck.
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-16-07 05:28 PM Link | Quote
wow, how helpful! And only after one day.

I realize this is a big project, and I'm going to stick to it. As of now I'm taking things very slow. The only thing I'm missing from your list is skill. I have zero experience hacking or using hex, but I think I get it. Every number does something different, based on where its at. Just a simple task of figuring it out, then chainging it, right?

Okay, so, first I have to figure out where the offsets are for things like stats and such? Is there anyway I can figure out what order the game reads values? Like on a list? If I could get a hold of something like that, I could look to see whats changing when I move my guy or equip something. This would help me greatly. Does anyone know of such a device?

I want to open up space by moving everything down but I'm afraid that its going to mess up. Pointers are to blame I bet. Any suggestions?

Thank you for the terms: Debugger, Assembly, Offsets, and of course Structures. I have homework!

PS they did encode the text I think... Bastards
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-16-07 06:47 PM Link | Quote
Did you consider that it may be compressed? I expect a Final Fantasy game would be extensive enough to make text compression the better choice, but I have no problem doubting myself on this belief.

If it's just encoded, I imagine a hex editor with a relative search could take care of this issue fairly easily. That is, assuming the font table isn't arranged in some ridiculous order so as to completely encrypt the text. But then, you would simply have to find the font table to determine the relative distances between each character's (or characters', if this game uses Dual Tile Encoding) hypothetical hex value. You can probably just Google "relative search" if you don't know what that is.

Now, if the text is compressed, knowledge of assembly and use of a debugger will likely be your method of locating the text. Then comes the problem of decompressing it. If you discover the compression method by viewing the SWI used in the decompression process, you may be able to decompress it. If you're like me, and completely fail at anything that has to do with compression, you may have to reprogram the decompression routine to simply read the text as-is, and then expand the text by editing the pointer table and retyping all of the text by hand. If you don't plan on changing all of the text, you would have to make the decompression conditional, or just learn how to decompress it. (Am I saying this to you, or to myself? )

The first thing I hacked in a ROM was weapon data for Fire Emblem 7. I looked at the stats the game reads to you when you press "R" (the info button in this game), and searched for strings of numbers I saw. Unfortunately, I didn't know what order the stats were stored in (and the game's help window didn't make it apparent), so I took 4 numbers, and began to arrange them in any of 24 possible orders. About the 7th order I tried ( for luck), the hex editor found a match, and there was my weapon data.

That's the lame way to do anything. Best thing to do is to just trace with a debugger, but if the game explicitly gives you numbers, you should use that to your advantage to gain speed.

Don't worry about pointers. In my personal opinion, it's the easiest thing to deal with. It's like, "Hey this data doesn't fit. Wait! Now it does! In your face, pathetically small ROM."

The best part of all this is that FFTA is for GBA, and I specialize in GBA hacking. I should be able to help you quite a bit...in fact, I think I'll nab this game and do a bit of offset logging myself.

I do have other things I plan to do for several other games, and college/high school classes to do homework for, so I won't have much time. I'll try anyway, though.

Edit: I think I'll address the vocabulary word "Structures" real quick. Because of programming issues (i.e. incredibly obvious logical issues), data is often stored in "tables". In such a table, the same type of data will be repeated at a fixed interval with minor differences that discern each entry into the table. An example is the class data of Fire Emblem 7. It is "structured" to where every 84th byte, starting with the 4th byte of the first entry, contains a "class ID" number that determines how a unit looks on the overworld map (their graphics). In Fire Emblem 8, this number is also used to determine which skills the class has. I did an assembly hack to mess around with this and make skills more interchangeable among the classes (well, actually, they just plain weren't interchangeable at all to begin with).

Anyhow, the "entry size" of the table is 84 bytes, which is 54 in hex. So, from the first offset of the table, 0xBE015C, you could add 0x54 to get the first entry. I should not say it this way, however. See, you must start at 0. The first entry is entry 0. The entry you acquire by adding 0x54 is not the first entry, but it IS "entry 1". Try not to be confused. Just think: "Start with 0". Anyhow, you add 0x54 and get 0xBE01B0. This is the first real class data's starting point (class 0 is a NULL class). I said the 4th byte contained Class ID. Well, add 0x4, and you will get 0xBE01B4. This is class 1's ID. You want class 2's ID? Add 0x54 again, because that's the entry size- the amount of bytes that each entry consumes (thus forming a "structure", because it's all nice and organized). 0xBE0208 is the Class ID byte for class 2.

Other things to note about structure:
Sometimes the data won't be in the form of a table, but it's data. It has to be organized somehow, or the game won't be programmable. Usually in cases like this, there will be bytes called "flags" that tell the game what to do with the next bits of data (haha, bits. That was a nice pun). You will need to recognize numbers that are repeated in certain types of data, as they may be flags. If those numbers are anywhere else, they may as well be useless, but where they are at in particular gives them meaning. Thus, you have "structure", because location gives the numbers meaning. That's all this stuff really is...numbers, and where they are. Or, if you want to get technical: electricity, and where it is stored.

I really do type too much.

'nother Edit: That last edit was not only the opposite of what I said it would be ("real quick"), but it's almost the same size as what I had typed originally. Actually, I think it may be bigger, since my first post was full of empty space to give organization and legibility to the post. I guess I just fail at compressing anything (even my forum posts).

Relative search failed. The text is either grotesquely encrypted or compressed.

If it's both, then Nintendo is off their rocker. (Actually, yeah, they are.)

Dang, even the font table is compressed. Also, judging by how the text appeared in the tile viewer, it looks like that first capital A and that next lowercase w are two letters of a single character. Which means DTE. It may or may not be compressed, but it seems to be DTE'd, and that is going to be a pain. "st" is most likely one of the DTE characters, so perhaps instead of looking for the word "stuck" I should look for "uck". Unfortunately, such a tiny string would be difficult to find a proper match for, assuming there is one. Not only that, but ck is likely a DTE character as well.

I'm gonna debug it later if I get interested again, but for now I think I'll look at something else.


(edited by Zeld on 01-16-07 01:03 PM)
(edited by Zeld on 01-16-07 01:08 PM)
(edited by Zeld on 01-16-07 01:21 PM)
(edited by Zeld on 01-16-07 01:29 PM)
(edited by Zeld on 01-16-07 01:30 PM)
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-16-07 10:33 PM Link | Quote
Oh my god thank you so much. I'm glad I have some support on this, it's a big project. Anyway I didn't know about tables but I did assume that stats would be repeating, becuase for a group of information you only need so much data (IE attack power, defense, magic power, resitance, etc.) and I've been fiddling with the rom so I've found the area that your clan is stored in. I have some pretty basic stuff, like the current hp (I set it to 255 so now I can't die, lol). Although this is of no help with remaking the game I'm starting to understand some things. The really important stuff never changes so it's gonna be hell trying to find the value so I can edit them.

As for what you said about the text, I noticed near the bottom (kinda, more in the middle) that there were letters like A % B % C % D % E % etc. whereas % is some wierd symbol. It continues through with every letter so maybe it's some hint to the coding? Then again, maybe it's just the naming screen for clan and for the main character (it's in that order).

thanks for your help Zeld, I truly appreciate it.

**EDIT!
This is like 2 seconds after I posted...
You know how each unit has a name? Well the name is random, and stored by the unit I think. I know the general table that the units have, so one of the variables must represent the name... If I could figure that out, it might lead to where the actual string is. Then use that to decode, maybe. Then agian I don't know if theres any way to see where it points...


(edited by Bones_the_Great on 01-16-07 04:38 PM)
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-16-07 11:17 PM Link | Quote
Not quite sure what you mean by the "random" thing (from my experience, nothing is ever random...I posted another thread on this board that explained the formula used to generate what everyone used to call random numbers for the Fire Emblem series). I believe a debugger will help there too, but of course, debuggers help everywhere...

I can't find the text in the RAM (usually there's some raw text in the RAM that can be traced to the text in the ROM), so I'm going to have to trace the actual font. :sadpanda:

Let me remember what you wanted to change...just text and the introduction scenes, right? Hacking how the characters move around will probably be easier than hacking text, so I'll mess with text first to get the hard part started.

Oh, that's what the other stuff was...equipment should be easy as well. New monsters will involve learning how to add every aspect of a sprite's animation, which could be fairly difficult. New missions...I don't know what to think of that. Perhaps making the levels won't be too difficult (though it won't go by quickly), but making the game let you select more missions sounds difficult to me. The whole menu thing...

Here's what I have so far:

R00=03007e0c - Source
R01=0600a000 - Destination (tile data)
R02=01000160 - Mode/Size (Fill Mode, 0x160 in size)
08141868 df0c swi $0c

The text is decompressed to the IRAM, then copied to the tile data in order to be displayed. What's I've pasted here from my debugger is the location of the copying instruction. Next, I'll set a breakpoint at 3007e0c to find out how the text got there...


(edited by Zeld on 01-16-07 05:40 PM)
(edited by Zeld on 01-16-07 06:24 PM)
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-17-07 01:25 AM Link | Quote
What I meant about the random names thing is that everyone you get in the game save the main character and the storyline characters has a name that is picked from a huge list. I've seen only two names twice, and I've had a couple files on this. What I was trying to say was that the names are stored by the character, so if we know that david (or whatever) has the number 3B in this spot. If we change the number to oh say 17 his name becomes donald. Then maybe we could use this number to figure out where dave and donald are stored in the rom and use them to decode the text. Not sure if we'll be able to find the numbers that make the string up, but I'm gonna try. I still have no idea where the number is though. Oh yeah, the main character's name is up to the player to choose so maybe I should look for the numbers that make up his name first.

Yes making new missions is going to be difficult, basically I'm going to change the ones that are already there before I add anything. That goes for levels, missions, monsters, pretty much everything. And I'm no artist so most new monsters I add will be copied and pasted from old ones... new abilities or a new pallette, just for a bit of diversity. Eventually though, I'm planning on making at least an extra 50 missions.

By the way, what debugger do you recomend? Are there any other GBA programs I might need?
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-17-07 03:24 AM Link | Quote
I use VBA-H, as recommended by labmaster. I saw a thread in which he explained a short assembly hack to some fellows from another forum who came here seeking help, and with his example I was able to make sense of assembly and get started myself. I'm fairly new at it...(it's been 3 or 4 months, but who's counting?) Ironically, I'm dealing with a bit of fanboyism from that forum now, since I went a did a whole bunch of short (but awesome >.>) assembly hacks that I was able to do after reading the same tutorial they did.

Yes, that whole "a single number is the label for an entire name" thing is definitely an opportunity to use a debugger with fairly no complications. Sometimes assembly hacking isn't all that straight forward, but what you've given me sounds like a simple task of tracing a read of the number you have mentioned.

50 missions sounds a little intense. Are missions really short or something? I haven't played many, so I don't know yet. I'll play the game a bit more soon.

I'm a fairly decent spriter, as well (look at my avatar), so perhaps I could mess around making a few monsters using combinations of existing ones and inspire you?

Another program you will definitely need is unLZ GBA. It's a decompresser for much of a GBA game's data, since, of the many methods of compression available, it is the most commonly used. "Why 'unLZ'?" Because, the compression method was devised by a couple of dudes whose last names began with L and Z, so the compression method is called LZ77 (for the year 1977), and unLZ literally un-does the LZ. I felt like explaining that, since I thought "unLZ" was just a random 4 letter word that the program writer came up with out of nowhere when I first downloaded it.
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-17-07 05:58 AM Link | Quote
Wow, nice avatar... I thought that was from some fire emblem game or something.

Could you provide a link to that topic so I can get a better grip on ASM? I've got the basics down, but I could really use some good tutorials though.

I'll try and get those values for the names, but it's gonna be hard, theres like 180 values per guy. I have to find the exact one. I've found many good ones, none of which help us because most are edited by the game (strength, level, etc., stuff that doesn't need to be hacked). Once I find one, I've found them all though.

About missions, a mission is a couple minutes. I have a play time of 3 hours and I've done three, and the main preview (so each is about 3 minutes long, lol. Stupid intro) but I leave the thing idle to go do stuff so I'm not sure how acurate that is. The game has 300 missions, but I think most of them are dispatch missions (So retarded), so I'm planning on adding a bundle. It's gonna be tough, each mission needs a new map and fully armored bad guys whose level I have to estimate based on how far it is in the game. a lot of work but well worth it, that's the part I'm going to enjoy the most. I might add a couple dispatch mission, but I'm definately going to get rid of a lot of them to replace them for combat missions.

I'm going to rip as much graphics out as I can, but it's hard because there so shuffled I can hardly tell whats graphics. If you want me to, I can get them though. Theres like 15 different kinds of monster with 2-3 veriations so you don't really have to add some, we have plenty. Still the more the merrier.

First thing that should be done is the text, so I'm going to slave over all 108 numbers a player gets. (gonna find some wierd stuff in the process, like making Marche, the main guy, look like a flan)
HyperHacker

Star Mario
Finally being paid to code in VB! If only I still enjoyed that. <_<
Wii #7182 6487 4198 1828


 





Since: 11-18-05
From: Canada, w00t!
My computer's specs, if anyone gives a damn.
STOP TRUNCATING THIS >8^(

Last post: 6267 days
Last view: 6267 days
Posted on 01-17-07 08:43 AM Link | Quote
Are you sure the text is DTE and not just variable-width font?

Also, when "random" numbers are generated via a big long equation that produces results that seem to be random, it's generally called pseudorandom, IE, as close to random as a computer can get. Without extra hardware to do something crazy like grab random radio signals out of the air, a computer can't generate truly random numbers, only numbers whose pattern is very difficult to determine.

One other thing, an easy way to think of data structures is much like they'd be written in most programming languages. For example, a game might use this structure for character stats:
Name (10 bytes)
HP (2 bytes)
Max HP (2 bytes)
Attack (2 bytes)
Defense (2 bytes)
Magic Attack (2 bytes)
Magic Defense (2 bytes)
Speed (2 bytes)
Class (1 byte)
Level (1 byte)
That's 26 bytes in the structure in total. Now if you have a big table of character stats, just think of it as several of these structures in a row (generally called an array of structures). If you want character #4's max HP, you look at the 5th structure in the table (start at zero), so 26 * 5 = 130, and the max HP is 10 bytes from the start of the structure, so go 140 bytes from the start of the table. Simple eh?
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-17-07 02:38 PM Link | Quote
Originally posted by Alice
Are you sure the text is DTE and not just variable-width font?


I've never heard of variable width font, but I imagine it would explain why the A ad the W overlapped. I mean, for all I know, they were only drawn overlapping as a result of...varying width...and don't actually overlap in the font table in the ROM. Either way, I'm gonna trace the sucker, so I don't need to worry about bad theories.

Originally posted by Alice
Also, when "random" numbers are generated via a big long equation that produces results that seem to be random, it's generally called pseudorandom, IE, as close to random as a computer can get. Without extra hardware to do something crazy like grab random radio signals out of the air, a computer can't generate truly random numbers, only numbers whose pattern is very difficult to determine.


I kinda mentioned that (in much less detail) at the beginning of one of my other posts (I never would have thought of using radio signals as a way of generating random numbers; I always wondered how that worked).

Originally posted by Alice
One other thing, an easy way to think of data structures...blah blah ...Simple eh?


What was wrong with my example?

Also, for my avatar: It isn't a character from Fire Emblem, but it is composed of pieces of several Fire Emblem characters. The character I used to make the face didn't have a right eye, because his hair originally covered it. The face had all kinds of holes where the hair had been. Most of the face is done by hand, while the rest is mixed parts from existing characters. And, of course, I changed the palette. I plan on making him the Lord of my FE 7 patch. I'm working on expanding everything first, though.

Edit: I must apologize for my stupidity. I completely neglected the idea that perhaps other tile data would be loaded into the place where the text ended up in the process of loading text graphics. I wound up altering...the text bubble's background. Realizing that I ignored the idea of the same addresses being reused for other things at the rapid computer processing speed that still blows my mind, I started messing with registers during my breakpoints to make sure I knew which write was right.

That was a terrible rhyme; I apologize for that too.

I remembered seeing an "e" in the WRAM the other day (graphically, of course; noticing an ASCII e would be pointless). I had scanned the WRAM with my tile editor upon noticing a WRAM address in the registers of my breakpoints that looked suspicious and recognized the e as being the same font as the ones displayed in the text bubble, but I foolishly ignored it.

I decided not to ignore it this time, and found the capital G of the beginning of the text I had been looking for. Turns out, each letter is separately loaded into the WRAM, copied to the VRAM, then replaced by the next letter that is loaded.

I know you wanted to change the intro text, and at first I thought that meant the text during the snowball fight. I'm sure you'd like to edit in game text, either way, but the text during the opening movie that I completely forgot about until recently is a different matter altogether. I suppose you meant that text, and not the rest of the text, so I should probably look into that so I don't end up helping with the wrong things (which I seem to be good at).


(edited by Zeld on 01-17-07 06:33 PM)
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-18-07 06:27 AM Link | Quote
I knew it was fire emblem! I have a keen eye for there style... I like the picture.

Stupid random numbers! All computers should come with a radio transmitter so that random numbers would be more common! Grrr, now I know every game I've ever played is a lie! Lol.

About the intro, I hate it. It doesn't even make sense why they use it. I want it gone completely. The storyline I had in mind was the main character is in prison for violating a severe law, one that forbids the entry of jagds. He was looking for the clan his sister joined who mysteriously vanished shortly after he joining (but the player won't find this out until later, all they know is he's in jail for entering a jagd). Anyways, a stranger comes to the prison to pay your bail, in return he asks that you help him and his clan. He agrees, and thats where the fun starts. you see, your main guy is a couple levels higher than everyone else in the clan giving you both a easy begining, but at a cost. Sinse your level is higher the average level of you clan is higher making the bad guys harder. And he's higher level so everyone in the clan kinda follows him. Also, in one mission you find out that the clan was in debt to a bigger clan, that lent the leader some money, he tells the bad guy to come after you, it's your clan now, and so you meet up at the end of a mission. Hehe, right after a fight you have to fight again, which is unlike anything in the normal version of FFTA. you tell the guy that you could pay him back because of the mission's reward but he says he's had enough of your clan's games. Basically that'll take you through like 3-4 main missions.

I'll change it if you guys think it's lame. I though about it in like 10 minutes, I could probably do better. Do remeber this is just how things get going though.

This is going to require hacking character's graphics and movements; the mission's titles, descriptions, rewards; the levels; the wording in the previews, and the scripts for the characters; and more... Plus first I'm planning on messing with the class system (*cough* animist is gay *cough*), adding more jobs and such (Theres unused graphcis in there, like for main characters and stuff, and you might make some), and changing the old ones a bit. I'm also going to completely redo the monsters, not that there bad, but a lot of them only have 1 or 2 moves and stats that don't make sense to me.

We should totally mount our troops too, call em knights or something. Have various kinds. They have chocobos for the judges.

On top of that I'm really considering changing the weapon system. You know there are like 8 different kinds of swords (great, normal, blade, saber, rapier, katana, knight, the list goes on) but no axes. What the hell is up with that? Maybe should add fire emblem's "Sword -> Axe -> Spear -> Sword" system, I love that thing. Plus I'm gonna throw in some whips. Becuase I like whips. Whips and Hammers.

Basically to get this project going we're going to need a lot of really hidden values, and sinse I don't really understand debugging, I'm kinda screwed (thank god someones helping me, I'd've given up by now probably). I'm going to stick to it. Try to contribute to my own project, lol. Ah, this is what it must feel like to own a company... Hehe. It's not that I haven't been working, I'm just not able to be productive as I can't figure out how to find all the stuff I'm trying to edit.

Gotta sleep soon, gotta wake up at 5. I'll work as late as possible though. Gonna figure out where weapon data is stored. I have just the way to figure it out too.
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-18-07 06:36 PM Link | Quote
As long as you know I'm not nearly as devoted to this project as you are...

I usually patrol Fire Emblem forums looking for a simple yet effective hack that someone wants done that only I can do. I'm just not good at doing whole projects. I'm not even sure I'll finish my own...

I like your plot idea, actually. Since you said you made it up in ten minutes, I would imagine that spending more time on it would be a good idea, because there's no such thing as a plot that's too good (I wonder sometimes if game developers even realize this v_v).

Just remember that everything you plan has to actually be done, and won't happen automatically.

I don't think I've ever seen (and hopefully never will see) graphics that are compressed using a method other than LZ77, so changing the graphics should be fairly easy. Adding graphics should be easy as well. Animating them, however, will be difficult. I've hacked animations before (as in, I not only hacked the graphics of a sprite, but I was able to hack how the sprite was displayed). The animation I hacked was the Fire Emblem battle animations (I dunno about you guys, but I think it's a pretty big deal >.>). Unfortunately, Fire Emblem's animation data is really easy to understand. FFTA's animation data could be difficult and painstaking.

Now, for things like mission titles...from my experience, titles aren't handled the same way text is. If titles for things like missions appear on a plaque in a big fancy font, that generally means that the text isn't text, but is actually just graphics. So, simple graphical hacking would suffice.

Item descriptions will most likely have a pointer to a bundle of descriptions that are for all items (which is analogous to the way names are handled that you mentioned earlier). So, you can change item descriptions by changing a single number, but if you do that you will only be able to choose between existing descriptions. That would be ridiculous. This will require text hacking of the sort that I've looked into. I'm still not sure of the compression method.

Rewards and other object data will be easy to change (add? I don't know; change? Easy enough); all you have to do is target the number that tells the game what item to use and change it.

Making a weapon triangle, as in FE, will require assembly hacking. Having pondered increasing entry length of data tables recently, I've noticed issues with making the loading process. I will have to create a stand alone table to take care of a potential loading issue. I've made plenty of those in other assembly hacks, so no worries. Each weapon will get a byte, supplying you with 8 bits per weapon to determine what sort of weapon it is. You could use this awkwardly to have 256 types of weapons, or do the smart thing and have 8 or less. Really, a wooden sword and a metal sword should be "swords", not "wooden sword type" and "metal sword type".

I mentioned character movement before. Because of how easy it is to locate RAM addresses to set breakpoints on when what I'm trying to change can be altered in real time, movement shouldn't be too difficult either.

It seems like text will be the biggest problem, really. Map data could be too, since that's such a big thing to change. Because of the awkward angle of viewing the game, I theorize that the maps are actually just big graphics, and that the actual data that determines where you can stand and move to is separate. Sometimes the graphical data for a map and the ability you have to traverse the map are linked, which makes things easier, but sadly, I don't think this is the case this time.
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-19-07 04:00 AM Link | Quote
So I'm starting to hack into the hex and deleting information in rather large groups to see the effect is has on the game. In this manner I might be able to locate values for certain maps or weapons or something. Heres my results after a couple hours of effort.



everything after 00a39920 is deleted
no results!
what could the code possibly do? Make save files?

everything after 00a38d10 is deleted
cant get in a battle with another clan
cant go into shops or the pub
I can go on the world map and view the party menu, characters, weapons, etc
graphics rendering? no the map works and the party menu works
tilesets? possibly
maps? I sure hope so
any other ideas?

ok back to the drawing board!

everything from 00a38570 to 00a38adf is replaced by 00's
complete failure to run the game. Wierd. I though it was just the text writing program. The coding shows letters so it's wierd. like R%S%T%U%V%W%X%Y%Z%1%2%3%4 etc. I'm pretty sure this writes out the text.

Moving right along!

everything from 00a38370 to 00a3844f is replaced by 00's
no appearant change. Wierd.

Right-o then...

four groups of code that range from 00a38200 to 00a382df
no appearant chnage. I didn't expect any, it's just four lines. Probably text at the end of the game.

Okay, whos next?

Trashing the code from 00a37c10 through 00a380cf to 00's.
A guy isn't there! Is this random nonsense or is this the code! I dare say I've found somehting important. Lets see if similar code is above. If I can get rid of a couple goons that would be somewhat of an acomplishment.

Carry the one...

trashed the above code and the code from 00a3bc0 through the old 00a380cf.
no change to the battle, scept different guys but I think its random in that respect. That means that the last code is actually unknown, and so is this one. Well guess i'm done with that guess.

This is becoming tedious! But strangely fun...

Okay I found a semi-patern and I erased large portion of it. I'm going to check if it's weapons, armor, maybe maps... Could be the characters so I'll check that too. Maybe he won't gain stats or something.
Range is 00433340 to 004339b0
And of course, no obvious effect.

My patience is wearing thin. I shall resume tomaro.
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-19-07 04:21 AM Link | Quote
What you're doing is called "corruption", and should probably be done with a specialized program called a corrupter (lololol says it's spelled "corrupter", but my familiarity with the English language leads me to believe it should be "corruptor". I guess not). Though, of the ones I've tried, none worked properly. That method of hacking is rather inefficient anyway, so it shouldn't be your first method of changing things.

The way I hack things that aren't as obvious as weapon and item stats is to dump RAM states, make changes by playing the game, and load half of the RAM state to see if I achieve a desired effect. If I don't, I toss the hex, and if I do, I chop the hex in half again and test the halves as I had previously. This is how you find invisible RAM addresses with ease. Then, if you find a pile of say, map data, in the RAM, you can copy the first few bytes of it and search for it in the ROM with a hex editor. You should find a match, but if you don't, the data is probably compressed. Of course, if you do find a match, then you're ready to actually hack something in the ROM. Naturally, this method is limited, as are all methods, but it's especially helpful to me, because I can trace RAM addresses to ROM addresses if data is compressed or just altogether nonsensical in my eyes.
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-19-07 06:03 AM Link | Quote
Oh, so thats what corruptors are for! Thanks a bunch for the info.

You use Visual Boy I take it?

Wow I feel so dumb. All the whole time I've had these tools but I never really looked at the list. I opened up the tile viewer and all my graphics is right there. I opened up the Map viewer and got even easier to edit graphics.

Whats the disasemble feature for?
And the Logging?
IO is input and output but what is the viewer for?

And in the memory viewer is where the RAM is right? Which do I use? IRAM or WRAM? Whats the difference? What about the rest of them? What are they?

These questions will definately help me hack the game. It seems so easy now... And to think I had any doubts... Almost funny!

Oh yeah, I noticed that there is only graphics of marche, red soldiers, and blue soldiers for the world map. Think you could make me some of those based on the starting units for all the races? Not that you need to do it any time soon, but I think it would be pretty cool if the clan leaders looked different on the world map... That would take serious work though... I don't know if I'll be up for it for a long time... One thing I really need is replacement graphics for the main guy (because I'm replacing his graphics), but if you dont wanna, I can use the blue soldier.

**EDIT!
JACKPOT!!!
I think I just found the map editing values... They won't effect where you can and can't move but I can change any level to look how I want. Lets test it!

**EDIT
Oh I just figured out what there for. Each one is just a section of the ROM... Makes sense. I'd still like a more in depth description if you have one.

**EDIT
Well, my change didn't change the map, it just glitched out my game... Lame.

**YET ANOTHER EDIT
My second edit doesn't make any sense... I meant the they're as the IRAM and WRAM and stuff... I thought they were different numbers in the same places, but read differently or somehting but now I know that they each take up different spots on the ROM. I'm going to look those up, maybe someone wrote a tutorial or something.


(edited by Bones_the_Great on 01-19-07 12:06 AM)
(edited by Bones_the_Great on 01-19-07 12:19 AM)
(edited by Bones_the_Great on 01-19-07 12:23 AM)
(edited by Bones_the_Great on 01-19-07 01:57 AM)
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-19-07 09:06 PM Link | Quote
BIOS - Stored at 0x0
Boot up script. It is the program that tells the Gameboy how to start and contains information for universal programming routines such as decompression, copying data, etc.

WRAM - Stored at 0x2000000
Work Ram. Size is 0x40000. This is where most of the stuff that code makers (gameshark, action replay) like to hack is.

IRAM - Stored at 0x3000000
In Chip RAM. Size is 0x8000. This RAM is located on your game cartridge, whereas everything else is either on the Gameboy itself, or copied to it (e.g. ROM). Also a great place for making gameshark codes, but lots of this area is used for actual programming instructions, and contains a block of data called the "stack" that stores variables for active math operations. Changing stuff in the IRAM can often crash the emulator. This can happen with the WRAM, too, though not nearly as often.

I/O - Stored at 0x4000000
Input/Output. Pretty self explanatory. At 0x4000130 is a set of bits that change depending on keypad input. Great for making button activated gameshark codes, but most gamesharks are programmed to check that address by use of a dummy address (at least, that's what I theorize a joker code does). So, you don't have to know this address...

Palette RAM - Stored at 0x5000000
Palette data. Can contain 16 lines of 16 color palettes or a single block of 256 colors.

VRAM - Stored at 0x6000000
Video RAM. One section of this RAM creates "tiles" by using a chosen codec (4bpp for 16 color mode, 8bpp for 256 color mode) to call colors from the palette data and use them as a single pixel. The pixels form colorful squares called "tiles". The other section of VRAM, which I believe comes first, contains "map" data, which is a bunch of data using numbers that are assigned to the "tiles" in the latter part of the data to generate a map. The maps are layered, given transparency, translated, etc. to show you what you see on screen. The VBA has a cute little sine function in the BIOS used for rotation effects (I may be easily intrigued, but I think the sine function is a wondrous piece of work).

ROM - Copied from the cartridge and loaded into 0x8000000
Read Only Memory. Everything you want to hack spawns from here.

SRAM - Stored at 0xE000000
Save RAM. You know those files that are called ".sav"s? This is where they come from. They are exact dumps of the data at 0xE000000.

That's pretty much the entire memory map of a Gameboy Advance.

You could always just google GBATEK and click the link called "specifications" and read more about the GBA (and the Nintendo DS!) in your free time. That site helped me a lot when I was writing programs by hand due to my lack of common sense, which forced me to use something other than an assembler. I don't think I type the opcodes syntactically correct. I seem to add or leave out symbols...

As for features: I don't know what the logging or I/O features do. I estimated that the logging function would debug specific instructions and that the I/O window would allow you to alter I/O bytes, but changing stuff around in either of those windows didn't affect anything for me. The disassembler, however, is a very useful tool. You punch in an address and it actually reads off the programming code of that address. Thing is, if you don't know assembly, you won't know what the hell to type in.

I do use VBA. I was able to get into ROM hacking and hacking in general because I was enthralled with all of the features that VBA comes with. It's by far my favorite emulator.


(edited by Zeld on 01-19-07 03:08 PM)
(edited by Zeld on 01-19-07 03:09 PM)
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-21-07 10:00 PM Link | Quote
I've been progressing slowly, but I have gotten a few things. I've found the memeory where the hero's name and the clan's name are stored and each number for each letter. I think we can use this in any text area, but sinse I might miss somehting, I was hoping you could check it out. Here it is, I'm going to try to locate the text for the snowball fight.

020021A0 - xx80xx80xx80xx80xx80xx80xx80xx80xx80
^ Thats the clan name

02001F1C - xx80xx80xx80xx80xx80xx80xx80xx80xx80
^ Thats the hero name

Just replace the xx's with these:

A3 ‚
A4 .
A5 -
A6 0
A7 1
A8 2
A9 3
AA 4
AB 5
AC 6
AD 7
AE 8
AF 9
B0 A
B1 B
B2 C
B3 D
B4 E
B5 F
B6 G
B7 H
B8 I
B9 J
BA K
BB L
BC M
BD N
BE O
BF P
C0 Q
C1 R
C2 S
C3 T
C4 U
C5 V
C6 W
C7 X
C8 Y
C9 Z
CA a
CB b
CC c
CD d
CE e
CF f
D0 g
D1 h
D2 i
D3 j
D4 k
D5 l
D6 m
D7 n
D8 o
D9 p
DA q
DB r
DC s
DD t
DE u
DF v
E0 w
E1 x
E2 y
E3 z
E4 ?
E9 ...
EA ?
EB !
EC ,
EF ·
F0 :
F1 _
F3 /
F4 ~
F5 '
F6 '
F7 (
F8 )
F9 {
FA }
FB [
FC ]
FD +
FE -
FF ±

Spaces are 7340

Still haven't got the extra character's names but I'll have them very soon hopefully.

**EDIT
Those are where they are in the VBA, to find them in hex you have to drop the 2 right? Thats where I'm having some trouble. I can hack a new name in for Marche on the VBA, but I don't care about that, I wanna hack the defaults but I can't find them. Plus where are the default names that are picked by random for the other guys? I tried searching for Montblanc's name but found nothing. I think I forgot the n though, gonna keep trying.


(edited by Bones_the_Great on 01-21-07 04:20 PM)
(edited by Bones_the_Great on 01-21-07 04:32 PM)
(edited by Bones_the_Great on 01-21-07 04:47 PM)
Zeld

Red Paragoomba








Since: 11-05-06

Last post: 6270 days
Last view: 6268 days
Posted on 01-21-07 11:47 PM Link | Quote
That's for if you find the data in the ROM in VBA (an address that looks like 0x8XXXXXX). You simply found it in the RAM.

The next step is to take that table you've found and search through the ROM for strings of familiar text that match up with your table. You might not find a match though, in which case, I'll see if I can use your findings to speed up the debugging process (although the reason I'm debugging so slowly is because I haven't worked on it lately; see my thread in the programming forum for my excuse).
Bones_the_Great

Red Goomba








Since: 07-11-06
From: Alaska, it's real cold...

Last post: 6288 days
Last view: 6281 days
Posted on 01-22-07 12:00 AM Link | Quote
Darn, ok I'll keep working on it. I thought I was on to something but I guess I'm further behind than I thought. I'll keep looking.

**EDIT
Wierd glitches
I found "Marche" (that is, according to the chart) when searching for hex values. SoI changed them. It's still a 6 letter word. When I ran the game it still output Marche! So I searched again thinking the first Marche text was mere coincidence, I found nothing. I dropped the 80's. Nothing.

**EDIT
I just found "Magic" while looking for Ma. Right after that is "reflect" and "status!". All of this is roughly around 004983D0. "Magic reflect status!" I don't recal seeing that exact phrase anywhere, but possibly on the reflect spell's description? Wait, theres more text... Before and after with a couple numbers inbetween. Shall I start deciphering from the 00400000 and work my way up to 00500000? Thats a lot, but it might have quest text and thats worth getting to! Or is there a better way?


(edited by Bones_the_Great on 01-21-07 06:21 PM)
(edited by Bones_the_Great on 01-21-07 06:23 PM)
(edited by Bones_the_Great on 01-21-07 06:26 PM)
(edited by Bones_the_Great on 01-21-07 06:36 PM)
(edited by Bones_the_Great on 01-21-07 11:54 PM)
Pages: 1 2Add to favorites | Next newer thread | Next older thread
Acmlm's Board - I3 Archive - ROM Hacking - FFTA hacking, but I've never hacked before! |


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.021 seconds; used 509.92 kB (max 650.09 kB)