|Mainsite · Rules||Portal Search Members Calendar Shop Shoutbox SBox Settings IRC Chat Downloads|
|Welcome Guest ( Log In | Register )||Resend Validation Email|
Posted: Feb 7 2009, 02:19 AM
Group: Honorary Members
Member No.: 99
Joined: 21-January 09
The purpose of this is to help you understand better the intricacies of event hacking, in a very simplified way.
Now, before you read this guide, I suggest you obtain some common knowledge on event hacking. At least read Arch's guide to chapter construction, as well as the FE7 Event assembler language readme that comes with the event assembler. You don't have to understand it per se, as of course this guide is supposed to elaborate on some of the more confusing concepts.
Anyways, let's get started.
First off, remember that template you found in Arch's guide? I'm going to give you an even more complete one that will hopefully save you some more work.
Note the CODE $00. This basically just adds a bunch of zeroes to the code to indicate the end of that section. This is pretty vital iirc.
So is the first turn event pointing to the opening event. I couldn't seem to get it to load any other way, so I'm assuming this is completely necessary.
Event Identifier Numbers
So, I see the question "how do I know which event number to use?" asked a lot. Well, really, you have quite a few choices. But be careful, and follow these guidelines:
1. Don't use the same event number twice, unless you want that certain event to disable another event or visa versa. But this can also be done with the ENUF code, but whatevs. Oh, also, 0x00 can be used as many times as you want.
2. Don't use extremely high numbers. I don't know exactly where it cuts off, but around 0x30 is where event IDs start becoming permanent, and can only be used once per game as opposed to once per chapter.
3. Be careful you aren't replacing other events with this. For example, some boss quotes seem to be placed at 0x01 (you can use nightmare to change that though) but yeah, make sure you aren't covering those up. If you play through your chapter and something isn't showing up when it should, you should check these things.
4. If you think something should happen more than once, either give it the ID 0x00, or add a ENUT 0xZZ code to the event. This goes especially for houses. It took me a while to identify that the reason it kept going to the ending event after I visited a house in one of my custom chapters was because I didn't make it revisitable.
Where's the text?
So, you want the game to load text, but don't know what you're supposed to put in for 0xZZZZ? Well, this part of the guide will hopefully help clarify that for you.
Now first of all, what can you use to identify what is what in text values? Well, I haven't been editing FE for too long, and so I have no idea how to use the antihuffman patch or the parser, but I do know that Xeld's FEditor makes finding these text values cake.
So yeah, open his editor, go to the text editor, and see that box with the numbers in it below the text? That's the Zs in 0xZZZZ. But, you can't just randomly use any text values in your event. Trust me, I tried using data reserved for support convos. Didn't work out so well.
Anyways, there's a range of data that's usable for events. That range starts around 0x0800 and ends somewhere around 0x1000. But I highly suggest you look at what data you're editing, and think of it in context of the game before just randomly using that number. For example, I would advise against using data reserved for Boss battle convos. But yeah, that's pretty much it on text editing.
Here's a cool section. So, you want to insert cool custom battles like the one's you've seen in the game? Then look no further, it's custom battles 101!
So, look in the event assembler language file. You'll see this:
Now most of this is pretty straight forward. For the code, I always put 00000000 as it says. I don't know what other kind of fight you can really have, so I don't really mess with it. But, here's the tricky part. There's that pointer. What does it point to? Well, this is where the customization comes in.
Let's look at an example, when Jaffar silences Lelia, an example you should remember:
Now, let's go backwards and start with the end. Battles should always end with 0x00 0x00 0x80 0x00, or $00800000 (since the latter reverses the bytes). Just know that's an end battle code.
Now, for the actual battle, you'll want to go by this (Remember, the bytes are reversed):
So, to interpret this, the first byte (since Jaffar is the attacker) is Jaffar's first attack. Since it's 00, the attack is a hit. The second byte is 08, so he uses the famous assassin special move, silencer. The third byte is 01. I'm not quite sure what that means, but it seems to be in turns where the defender dies, so I'm just going to assume it means Lelia is now dead. Fourth byte is the amount of damage, in hex. Yeah, I know 4B (75) is not Lelia's HP, but I forgot how much HP she had, and I was testing this, of course, on Nergal. XD
So now, you want character to get from point A to point B, but think walking is for squares? Why walk...when you can warp! I'm going to teach you how to make the illusion that the character you want to warp is actually warping. (yeah, there's no actual warp code, just an animation that plays over the character)
First of all though, I don't understand exactly how the REPA (reappear) code works (or rather, have never gotten it to work) so I'm going to use the DISA code to remove the character from the map, then make them reappear using the LOU1 code.
The CODE for reappear is pretty much the same as the disappear one, but instead of 0x72 it's 0x73. Also, make sure you're only loading one unit and it doesn't move until after the warp animation, or it will look very fake.
But nothing serves converting abstract to concrete like an example. So, to help you understand the structure of event data better, I'm going to provide you with an example.
(Note: This is a crappy example that I made for the purpose of being an example. I do not actually make my chapters this bland and boring and neither should you. But it does serve its purpose. (hopefully))
Now, you see a bunch of commands in front of you...but you're not sure exactly how it all runs together. So, to further help you understand, I'm going to go through step by step what the script is telling the game to do in each of these instances.
First, when you load the chapter, the game immediately goes to the turn based data, which says to load the opening event to start things off. The opening event starts off by loading the music specified. Then the camera shifts to the specified coordinates (remember that coordinates are counted from the top left corner of the map). Next, a load units command points to the two unit lists, which loads them accordingly. ENUN is added directly after and is necessary to tell the game to stop loading units. A cursor flashes on the character specified (Athos) (Remember, you can also use the coordinate format for CURF as well). Then the screen fades to black at the speed 0x10, loads the specified background while it's black, then fades back in at 0x15 (this prevents the BG from just magically popping up). Then the text is loading. As REMA is specified next, you are returned to the map, and all character mugs fade out. Lastly, the event is ended with ENDA, and player phase one begins.
Anyways, I think you get the idea.
Writing the Data
Now, you have your event ready, but you don't know how to write it. Well, as you should know #org (Offset) should be specified at the top and this will tell the assembler where to write the data. I suggest you either expand the rom, or find a safe free space range to write it in.
Now, all you have to do is repoint the pointer in chapter data pointer table at 0xC9C9CC. You can find which pointer using Nightmare. Remember, for pointers to expanded data, you use 09 as the last byte instead of 08.
Alright, so I'm declaring the thread to be in a permanent state of construction. As in, if you think there's something you're still unsure about basic event hacking, point it out, and I'll see about what I can do to add something.
Also, some of this guide maybe somewhat incoherent, as I wrote it early in the morning. Well, if you can't understand something, don't hesitate to tell me.
Posted: Feb 7 2009, 12:50 PM
Member No.: 1
Joined: 25-November 08
Awesome guide/tutorial so far, since you wrote it rather early I recommend you read it through as if though you didn't know anything and then fix stuff up as necessary, it can really help.
|Mobile Version||Delete Cookies Mark Board as Read|