- •Downloads:
- •Update Log:
- •Table of Contents:
- •Prologue: Bare Basics
- •Chapter 1: Key Terminology & Abbreviations
- •7Zip Archive – Supposedly the best file archiver there is, but not used as much, and thus less convenient. Requires 7zip or winRar to use.
- •VisualBoyAdvance – most people’s emulator of choice, almost always referred to as “vba” for short.
- •Chapter 2: Using Nightmare Modules
- •I upload anything that I think might be useful to someone on that site. Just use the menus and search until you find it.
- •Chapter 3: File Management
- •In order to be a successful hacker you need to have a lot of good management.
- •Chapter 4: Pointer Tables
- •Chapter 5: Battle Animation Editor
- •Chapter 6: Character Editor
- •Chapter 7: Class Editor
- •Chapter 8: Item Editor
- •Item icon – obvious
- •Chapter 9: Spell Association Editor
- •Chapter 13: Movement Cost Editor
- •If the value next to a type of terrain is ‘255’ then it is uncrossable because a unit won’t have 255 movement points.
- •Chapter 16: Battle Palette Reference Editor
- •If you want to know how to actually edit battle palettes’ colors, you can find that in a later chapter that I will make.
- •Chapter 17: Arena Class Editor
- •It’s a bit of work, but making cGs is quite rewarding, and it’s easier than some stuff, that’s for sure! Good luck with your cg making!
- •Chapter 20: Lyn’s Ending Editor
- •Chapter 21: Tutorial Editing/Getting Rid of the Tutorial
- •Part 2: Downloading the Programs
- •Part 3: Preparing Your midi
- •If you still have more than 10 tracks, you should find another midi. Sorry but, there are limits in life.
- •Part 4: Applying Blazer’s Beta Music Insertion/Instrument Patch
- •Part 5: Converting Your midi
- •Part 6: Making Your midi Repeat and Transferring it to Your rom
- •If the b1 and bc are next to each other then I can almost guarantee you want to replace it, so hit “replace” and do that with every instance and once you’re finished you’re good to go.
- •Part 7: Track Pointers & Repointing
- •Part 8: Finale- Assembling Your Song & Profit
- •If you don’t have this module, you’ll have to use this outdated way of doing it. Do check to see if you have the latest Nightmare Modules in general, but otherwise… well, sorry I guess. Xp
- •Part 9: Possible Errors & Wrap-up
- •Part 10: Documentation and Stuff
- •Atrius’ Notes:
- •Charon’s Notes:
- •Part 11: The Music Hacking Run-Down (Shorter Version of Tutorial & Walls of Text)
- •Part 12: Credits & Thanks
- •Chapter 25: Music Editing with Zahlman’s Song Editor
- •If you actually do type in help and press ‘enter’ on your keyboard, it’ll give you a list of commands, and tell you some stuff. Here’s the important stuff:
- •It worked! Great! I know how to import a song!
- •Chapter 26: Exporting Music with gba2midi
- •Chapter 27: Battle Background Graphics
- •If it doesn’t, I suggest double-checking all your settings (everything should be compressed) and make sure your width is set to 30 and your height is set to 32.
- •Chapter 28: Music Array Module
- •Chapter 29: Sound Room Editing
- •Chapter 30: Chapter Unit Editing with Nightmare
- •Chapter 31: Death Quotes
- •Chapter 32: Event iDs
- •Chapter 33: Battle Conversations
- •Chapter 34: Triangle Attacks
- •Chapter 35-36: The Animation Modules & Repointing Tutorial
- •It should look like this:
- •Chapter 37: Support Editing
- •Chapter 38: Miscellaneous Nightmare Modules
- •In this chapter I’m going to quickly run through what some other nightmare modules do.
- •Vendor/Armory Editors – edits the contents of vendors and armories.
- •Vulnerary Editor – edits the amount of hp restored by a vulnerary. (Default: 10)
- •Vulnerary Editor – edits the amount of hp restored by a vulnerary.
- •Chapter 40: Text Editing with fEditor Adv
- •Chapter 41: Portrait Formatting & Preparation
- •Chapter 42: Portrait Insertion with fEditor Adv
- •I wouldn’t mess with the palette editor (the colorful boxes).
- •Chapter 43: Locating Palettes
- •Chapter 44: Editing Palettes
- •I don’t exactly have a color I want to use for this title screen background, so I’m just going to show you how to get the rgb of some random color on a portrait.
- •If something didn’t work right, make sure you:
- •Chapter 45: Working with gbage
- •Chapter 46: Chapter Data Editor
- •Vision Distance is for Fog of War (fow). If it’s ‘0’, it’s assumed there is no fog of war.
- •Hold it! (Unless you aren’t hacking fe7!)
- •Chapter 47: Map Creation
- •I’m tired of writing this tutorial. Honestly. So from now on, I’m going to stop making so many wasteful comments like the one I am typing right now.
- •Chapter 48: Map Insertion
- •If you’re looking to make a totally new chapter (instead of being limited to the old game’s exact same scenes with exact same events) then read on, because I’m going to hack events next!
- •Chapter 49: Event Assembler Basics
- •I would just always add end guards since it’s not something you need to worry about too much.
- •Chapter 50: Events – The Layout
- •Including the stlb
- •Chapter 51: Events – The Event Codes
- •Items is just a list of items with a max of 4 starting items. I prefer to use the 3rd method of writing them, with the brackets and all. Each item is separated by a comma.
- •Chapter 52: Event Construction
- •VillageGate: // name of tile data group
- •Chapter 54: Chapter Creation Finishing Touches
- •Chapter 55: Importing Tilesets
- •Part 2: The First Frame
- •Part 1b: Palette Preparing
- •Part 2: Testing the Foundation to Your Animation
- •If all goes well, your guy should be standing, kinda like this.
- •Part 3: Making the Rest of Your Frames
- •Chapter 58: Custom Battle Animations – Scripts
- •I just pulled a Xeld. Had to do that at least once in this tutorial.
- •If you don’t know what a sound sounds like, just test it out with your animation and find out. Experiment with the codes if you need to.
- •Chapter 59: Custom Spell Animations
- •0X85 command count for this spell: 10
- •It’s true! It did work! It’s still very much a work in progress, as you can see, but the point is we got he test frame working. The rest just takes time, patience, and the attitude that you can do it!
- •Chapter 60: Weapon Icons
- •If you did, you are successful. Despite the odd format of the icons, you have spotted them, and that is what is most important, in my honest opinion.
- •I have this show up:
- •Chapter 61: Map Sprites
- •Chapter 62: Proper Betatesting
- •Chapter 63: vba’s Tools
- •Chapter 64: Other vba Options
- •In this chapter I’m going to detail some of vba’s semi-obscure but not totally obscure options. Knowing how to use vba will help you test your game in various ways.
- •Chapter 65: Recording Videos & Sound
- •Chapter 66: Fixing the Desync with VirtualDubMod & Video Rendering
- •Chapter 67: ips Patching & General Patching Information
- •Chapter 68: ups Patching
- •I suggest you read the ips patching tutorial (at least the beginning) if you haven’t done so as I will not be as thorough with this chapter as I was the previous.
- •In an extremely similar manner you can apply patches. Take a look.
- •Chapter 69: jfp Patching
- •Chapter 70: xDelta Patching
- •Chapter 71: Nightmare Module Format
- •It is recommended (for reasons of readability by humans) that a newline
- •Is unused ("null") for editboxes.
- •Chapter 72: Miscellaneous Information Archive
- •Chapter 73: Useful Links & Websites
- •Chapter 74: Bonus – Assembly Hacking
- •Preparations:
- •Part 1: Background Info
- •Part 2: Inserting an Assembly Hack
- •Part 2: Breaking Down Your First asm Hack
- •I digressed a lot, but back to the point:
- •Part 3: Second Example – More Codes, More Fun
- •Read other people’s doc.
- •Part 4: More Examples – “Speed-Analyzing”
- •It’s thumb. Write to offset 0. Start with label “Initial”. Push 5 registers and the last register, then start a loop counter in r2 with starting value 0x00.
- •Ifat *Conditional id* *asm routine pointer*
- •I may have mentioned this before, but finding where to hack routines is difficult. And I’m sure I mentioned that finding space for them is difficult.
- •It’s not super long, but it’s got some new things we need to learn. Let’s get started.
- •Part 5: Finding asm Routines & Basics of Using a Debugger
- •Warning: terms may not be accurate. In fact, they almost definitely aren’t accurate, as you’ve probably figured out by now.
- •I don’t know what the flags do either, but they’re there, right next to the window. That’s g.
- •I hope to hear of your achievements in the near future!
- •Final Chapter: Credits, Thanks, and the Epilogue
Chapter 51: Events – The Event Codes
This part is going to be a drag—it’s where I explain all the codes in the Event Assembler so that you have no excuse to not know how any of them work unless it’s A) a code not listed here, B) something I can’t work, C) glitch due to the program, or D) a CODE or ASMC thing that you can’t figure out because it’s not a supported code but rather some special code.
Open up the EALF. The EAL text file contains a list of all the codes, as said. It doesn’t include some macros though. I’m going to skip any codes that can be easier done with macros, and I’m skipping any codes I don’t know. I’m also only going to give the important details that aren’t obvious, so if I don’t mention an aspect of something, that means it is obvious.
Here are some generic principles to know:
Event ID/event identifier is covered with its own chapter, and thus I will not cover how it works again, and will just expect that you know it.
$ and 0x both denote hex, otherwise it is decimal. Binary has a ‘b’ at the end of it.
a pointer is a name, not an offset. When it asks for a pointer, you give a name, and later on you use “NameofLabel:” and give the appropriate info for that event (i.e. you use codes to tell what happens during said event).
[X,Y] asks for co-ordinates. Co-ordinates are from the top-left of the map, which is considered (0,0). You can use Mappy to figure out co-ordinates easily by just highlighting a tile in Mappy (it tells you at the top left what the co-ordinates are).
With that, let’s get started! XP
Turn based events.
TURN 0xPP $pointer [XX,YY] 0xZ 0xMM
PP = event identifier
XX = starting turn
YY = ending turn+1
Z = 0 beginning of player phase
Z = 8 beginning of enemy phase
MM=mode 01=ENM 02=HNM 03=EHM 04=HHM, FE7 only
This is like, the only code you’ll used in the Turn_events area. If you want an event to happen on any mode, just set ‘0xMM’ to ‘0x00’. A turn-based event might look like this:
TURN 0x00 Opening_scene [01,00] 0x0 0x00
Character based events.
CHAR 0xPP $pointer 0xAA 0xÄÄ 0xMM
PP = event identifier
AA = character1
ÄÄ = character2
MM = 1, eliwood
MM = 2, hector
MM = 00XX0003, if event XX has happened, for FE7 and FE8 only
These go in the character events area, of course. This code is for a talk between two characters. To make a talk go both ways you need two events, with the characters switched in them. However make sure that they have the same event ID so that if the conversation goes one way, it can’t go the other way as well.
Example:
CHAR 0x07 RecruitmentConvo 0x03 0x0D 0x00
CHAR 0x07 RecruitmentConvo 0x0D 0x03 0x00
CODE 0x00 // - nullifier
Shop list.
SHLI 0xI1 0xI2 0xI3
0xI1,2,3... = item.
This is an easy code. In a shop/armory/secret label use this to specify what items/weapons are available. Note that there IS a limit to how many there can be, so I would not add too many. Idk what the specific limit is though. 0xI1, 0xI2, etc. are just the hex values of the items. You can also use names ‘IronSword,IronSpear’, but they have to be defined (I covered definitions earlier—this is how you use them).
Area events.
AREA 0xPP $pointer [X1,Y1] [X2,Y2]
[X1,Y1] = upper left corner of trigger area
[X2,Y2] = lower right corner of trigger area
Honestly, I’ve sort of forgotten where this goes, but I think it actually goes in the Misc_events section, NOT the location events. It sounds ironic, but this is what I remember (and I’ve been doing events for years, guys). This is pretty self-explanatory—it sets a rectangular area to have an event such that when you wait on a tile there, the event activates. Note that certain codes won’t work with an area event because the character is still considered moving when this activates (thus the DISA code, which removes a character from the map, does not function properly).
Event after another event.
AFEV 0xPP *pointer* 0xRR
0xRR = The event ID of previous event.
This goes in the Miscellaneous section as well. It activates an event after another event has been activated. This is actually how the game over event works—when event 0x65 is activated/triggered, it uses an after event to go to the game over screen. *this is one of the event codes I told NL about, tee hee*
Event if ASM condition is fulfilled
ASME 0xPP *pointer* *ASM pointer*
ASM pointer = pointer to ASM code
Unless you are familiar with specific ASM conditions, I don’t suggest using this codevery often. Despite this I think the ‘Defeat All Enemies’ goal uses this kind of event (but there should be a macro for it…).
Unit data FE7 and FE6:
UNIT 0xZZ 0xCC 0xLC 0xLL [X1,Y1] [X2,Y2] I1 I2 I3 I4 A1 A2 A3 A4
UNIT 0xZZ 0xCC 0xLC 0xLL [X1,Y1] [X2,Y2] *Items* *AI*
UNIT 0xZZ 0xCC 0xLC 0xLL [X1,Y1] [X2,Y2] [I1,I2,I3,I4] [A1,A2,A3,A4]
ZZ = Character
CC = Class
LC = Leader character
LL = Starting level
[X1,Y1] = Loading coordinate
[X2,Y2] = Starting coordinate
I1 I2 I3 I4 or *Items* = Starting inventory
A1 A2 A3 A4 or *AI* = Units artificial intelligence
Character and class are obvious. Leader character is described in the “Chapter Unit Editing with Nightmare” chapter (it’s not very important, so you can just set it to 0x00 if you want). Starting level is a byte that determines the allegiance, starting level, and whether a unit is autoleveled or not. There is a list of values in the Nightmare modules; however, there is also another (MUCH better) way to do starting levels. Use the macro:
Level(Level,Allegiance,T/F) where “Level” is a number that determines the level, “Allegiance” is either “Ally”, “NPC”, or “Enemy”, and T/F is either “True” or “False”.
The first co-ordinates are the loading position. Units will then move to the starting positions. If battle preparations are on, these co-ordinates might as well be the same.
