FIRE EMBLEM:
ULTIMATE TUTORIAL
Welcome to my “ultimate” Fire Emblem hacking tutorial,
dedicated towards hacking the GBA Fire Emblem games. Don’t say I didn’t warn
you: this tutorial is massive and it
has tons of details. Although this
tutorial is a bit inclined towards Fire Emblem 7: Blazing Sword, the
information can usually apply to the other games. However, this tutorial will
help most for FE7 hackers as it IS FE7 oriented. I will try and add details on
the differences between modules and offsets for different games when I can (the
tutorial is already really long as it is).
Downloads:
HTML Version (Online)
Last
Updated: November 7th, 2011
Background
Info (Not necessary to read): Anyhow, I’m a 4-year or so Fire Emblem hacker
who is most commonly known by Blazer. My original username was Fire Blazer as
in, one who starts a fire by setting something ablaze, but that was kinda lame,
so now I just go by ‘Blazer’. Anyway, I’ve made several Fire Emblem hacks. My
biggest ones are Prince of Durand (now dead) and Tactics Universe (in-progress)
but I’ve also made other hacks like Fire Emblem: Shining Armor, Fire Emblem:
Sacred Contention, Fire Emblem DS: Evil Version, Fire Emblem Wars, Fire Emblem
Rebirth, Fire Emblem Prisoner of Darkness, and some other minor ones. I’m also
working on the Fire Emblem 12 Translation Project and Fire Emblem Rebirth 2
with teams of other dedicated people.
Contact
Info: If you need to contact me about something, here’s my contact info.
Please do not ask questions about hacking, ask for ROMs, or anything else
that’s illegal or time-consuming, because I don’t have the time. I do
appreciate some nice feedback though and I’d love to know if this tutorial came
in use for someone, so feel free to let me know that I spent my time on
something someone used. =P
E-mail: smashfire17@gmail.com
AIM:
fireblazerx17
MSN: blazer@feshrine.net (not used very often)
Skype:
ballin1337
Website: http://www.feshrine.net Forums: http://forums.feshrine.net
Youtube: http://www.youtube.com/FireShrine/
Disclaimer: I do not have any rights to Fire
Emblem, Intelligent Systems, or Nintendo, nor do I claim anything by writing
this tutorial, etc., I am just a humble video game player.
Please do not post this tutorial anywhere but the Fire Emblem
Shrine. If I want it to be on a website, I will post it there myself. Thank you
for your understanding.
Please read the
“Epilogue” at the end of this tutorial for more details on using and sharing
the Ultimate Tutorial.
Update Log:
July 8th, 2010 – I’ve remade the tutorial from
near scratch (but included parts of former tutorials as well).
August 19th, 2010 – Updates, added more chapters
(sorry, I forgot to record which things I updated).
February 19th, 2011 – More updates/chapters (see
above).
November 6th, 2011 – Chapter 26 has been slightly
updated. Chapter 45 and the Epilogue have been majorly updated. Added new JFP
patching chapter, and renumbered chapters past it accordingly. Started and
finished IPS, UPS, JFP, and XDelta patching chapters, as well as the Nightmare
Module Format chapter. Also revised chapters 72, 73, and the final chapter.
Only chapters 59-61 remain, which will most likely be finished in the next
update.
November 7th, 2011 – Finished chapters 60 on
weapon icons and 61 on map sprites in one fell swoop. Then, after several
hours, finished chapter 59 on custom spell animations. This means that the
tutorial is now complete—all chapters are finished. Any future updates will
likely only be revisions, adding small details, updates, and adding more
information to the archive chapter, chapter 72. Thanks for reading and waiting
so long for this tutorial’s completion. I hope it helps many people make
awesome hacks! - Blazer
With that,
it’s time to start my tutorial!
Table of Contents:
Prologue:
Bare Basics
Chapter 1:
Key Terminology & Abbreviations
Chapter 2: Using
Nightmare Modules
Chapter 3:
File Management
Chapter 4:
Pointer Tables
Chapter 5:
Battle Animation Editor
Chapter 6:
Character Editor
Chapter 7:
Class Editor
Chapter 8:
Item Editor
Chapter 9:
Spell Association Editor
Chapter 10:
Stat Bonuses Editor
Chapter 11:
Promotion Editing
Chapter 12:
Map Sprite Editing in Nightmare
Chapter 13:
Movement Cost Editor
Chapter 14:
Terrain Stat Editor
Chapter 15:
Portrait Editor Module
Chapter 16:
Battle Palette Reference Editor
Chapter 17:
Arena Class Editor
Chapter 18:
Boss Music Editor
Chapter 19:
CG Editing – Custom Cutscene Graphics
Chapter 20:
Lyn’s Ending Editor
Chapter 21:
Tutorial Editing/Getting Rid of the Tutorial
Chapter 22:
Legendary Weapon Editing
Chapter 23-24:
Music Insertion Tutorial (ELF Method) & Documentation
Chapter 25:
Music Editing with Zahlman’s Song Editor (OUTDATED)
Chapter 26:
Exporting Music with GBA2MIDI
Chapter 27:
Battle Background Graphics
Chapter 28:
Music Array Module
Chapter 29:
Sound Room Editor
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
Chapter 37:
Support Editing
Chapter 38:
Miscellaneous Nightmare Modules
Chapter 39:
Loading FEditor Adv
Chapter 40:
Text Editing with FEditor Adv
Chapter 41:
Portrait Formatting & Preparation
Chapter 42:
Portrait Insertion with FEditor Adv
Chapter 43:
Locating Palettes
Chapter 44:
Editing Palettes
Chapter 45:
Working with GBAGE
Chapter 46:
Chapter Data Editor
Chapter 47:
Map Creation
Chapter 48:
Map Insertion
Chapter 49: Event
Assembler Basics
Chapter 50:
Events – The Layout
Chapter 51:
Events – The Event Codes
Chapter 52:
Event Construction
Chapter 53: Map
Tile Changes
Chapter 54:
Chapter Creation Finishing Touches
Chapter 55:
Importing Tilesets
Chapter 56:
Animation Importation
Chapter 57:
Custom Battle Animations – Frames
Chapter 58:
Custom Battle Animations – Scripts
Chapter 59:
Custom Spell Animations
Chapter 60:
Weapon Icons
Chapter 61:
Map Sprites
Chapter 62:
Proper Betatesting
Chapter 63:
VBA’s Tools
Chapter 64:
Other VBA Options
Chapter 65:
Recording Videos & Sound
Chapter 66:
Fixing the Desync with VirtualDubMod & Video Rendering
Chapter 67:
IPS Patching
Chapter 68:
UPS Patching
Chapter 69: JFP
Patching
Chapter 70:
XDelta Patching
Chapter 71:
Nightmare Module Format
Chapter 72:
Miscellaneous Information Archive
Chapter 73:
Useful Links & Websites
Final
Chapter: Credits, Thanks, and the Epilogue
Prologue: Bare Basics
Before you
start hacking, you need to know some basics. I’ll be as brief as I can.
Think of a
ROM as a game file. It contains the data for the game in it. When you play the
game and save, save files are created. They contain data about where you are in
the game, what stats there are, what weapons you have, etc.
An emulator
emulates—imitates—playing the game on the actual system. So instead of playing
your ROM on a Gameboy Advance, you’d play it on the computer through an
emulator, which acts like a Gameboy Advance, but with more features.
The system
has some limits to it. There is a limit to the number of colors you can use, a
limit to the # of layers, a limit to the # of tracks a song can have. This is
the hardware’s limits—if you don’t want to deal with these limits, then you are
better off hacking a greater system, like the Nintendo DS, or making your own
game through something like RPG Maker.
That’s about
it for the basics.
Chapter 1: Key Terminology &
Abbreviations
If you want
to follow along hacking discussions, tutorials, and understand what someone is
saying when they are answering one of your questions, you’re going to need to
know some terminology. They may also use some abbreviations as well. Here’s
everything I can think of:
Note: These are not literal or exact
definitions. I define them so that a person can understand them and their
purpose. Please do not contact me to correct me on the actual meaning of a
word. Thank you for your understanding.
-
ROM
– Read-Only Memory, the “game file”
-
Emulator
– plays a game, imitating playing on the actual system
-
GBA
– Gameboy Advance.
-
NDS
– Nintendo DS.
-
DS
– short for NDS… lol.
-
Hardware
– we’ll just say it’s the ‘system’ the GBA uses to interpret data found from a
cartridge or ROM.
-
Cartridge
– the actual game as it is bought from a store.
-
Save
file – contains save data for the game
-
Savestate
– contains save data for a specific point in the game. One can come back to
this moment in the game through a savestate.
-
ASM
– assembly, the programming for the game
-
TSA
– No one knows for sure what it stands for. Educated guess is “tile sortment
array” or something like that. It’s also called map data. It’s purpose is to take a bunch
of mixed-up disorderly graphics and make some sense out of it so that when you
see the graphics in-game, they look nice. It’s a sort of “layout” for graphics.
Hard to explain.
-
Debugger
– a program that helps debug or a game, or search for bugs, find the cause of
them, and fix them. It’s also used to find other things though.
-
Debugging
– the act of using a debugger for its said purpose.
-
Hacking
– editing a ROM.
-
Modding
– another term for hacking, less juvenile I suppose.
-
Formatting
– preparing something to be inserted or used
-
Patching
– applying changes to a game.
-
Patcher
– a program that does patching.
-
Utility
– a tool.
-
Text
– words, characters, script, all types of writing.
-
Graphics
– ‘pictures’, ‘images’, visual aspects of the game.
-
Frame
– a still picture, one part of an animation.
-
Animations
– ‘moving’ pictures—frames put together to give the appearance of something
moving.
-
Compression
– a way to scrunch up data as to save space.
-
LZ77
– A type of compression. Used with graphics, TSA, palettes, and other data.
-
Huffman
– A type of compression. Used in text.
-
RLE
– Run-length encoding. A type of compression that saves space by scrunching up
strings of data.
-
Strings
– hexadecimal bytes one after another.
-
Hexadecimal
– “Base 16”, a way to count, essentially. To denote hexadecimal, one can use
various prefixes, such as ‘0x’ and ‘$’. The basic counting is as follows: 0x00,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
0x0E, 0x0F, 0x10. For simplicity purposes sometimes people are lazy and do not
put a ‘0x’ before 0-9, since the decimal and hexadecimal values are the same.
-
Decimal
– “Base 10”, another way to count. Most people are familiar with this.
-
Binary
– “Base 2”, another way to count, sort of. Only uses 0s and 1s. Google for more
info on binary (I RARELY use it).
-
MS
– Microsoft
-
Converter
– something that converts one thing to another type of thing. For example, MS
Calculator can convert hexadecimal to decimal and vice-versa.
-
GBAGE
– GBA Graphics Editor, the best GBA graphics editor for uncompressed and LZ77
data, made by Nintenlord.
-
EA
– Event Assembler, used to edit and insert events. The best way to edit events.
-
NLZ-GBA
– an older program similar to GBAGE, but outdated.
-
unLZ-GBA – an obsolete graphics editor that I probably shouldn’t even
mention.
-
Text
Editing Suite – an obsolete way to edit text.
-
FEditor
Adv – the best way to edit text, animations, and portraits. A program by Xeld,
a veteran Fire Emblem hacker.
-
Song
Editor – A program by Zahlman that can rip and insert songs that use the Sappy
engine.
-
Sappy
engine – a way that Fire Emblem and other GBA games can interpret music data.
-
Sappy
– it is also a program that is somewhat obsolete that was used to insert music.
-
MIDI2GBA
– a program used to convert MIDIs to GBA data.
-
tr.exe
– a program used to convert MIDIs to GBA data and then put it inside a ROM such
that one could listen to the song by emulating said ROM.
-
MIDI
– music file that pretty much says what instrument to use to play what notes of
what kind. A simple music file that tells what to play as opposed to a
recording (WAV).
-
WAV
– a recording of sound waves.
-
MP3
– a compressed WAV.
-
Sprite
– a graphical object (can’t think of a better way to say this). Usually refers
to portraits or battle graphics (the characters that you see move in
animations) but can also refer to other graphics.
-
Backgrounds
– background graphics that don’t really move.
-
Map
sprites – refers to the overworld sprites that a player moves on the map.
-
Hex
editor – a program that edits data in hex (and often includes an ASCII editor
to the side).
-
ASCII
text editor – a text editor that edits text in ASCII ‘format’—google for more
information. Standard for many things. Fire Emblem uses this, but it compresses
the text with Huffman (not that you needed to know that).
-
Offset
– a place in the ROM denoted by a number. For example, the song table is
located at 0x69D6E0.
-
Hex
– short for hexadecimal.
-
Byte
– one ‘unit’ of editing. Corresponds to a number. Bytes can go from 0x00-0xFF
(0-255 in decimal).
-
Bits
– smaller than bytes. Google.
-
Word
– 4 bytes put together. Common input. Also the size of a pointer.
-
Half-word
– two bytes, half a word.
-
Pointer
– a word that points to some data. In ROMs, it has a prefix of 0x08 to it
because the hardware accesses all ROM data at 0x08000000.
-
Little
endian (byte reversal)- Reverses bytes. 0x12345678
becomes 0x78563412. Practice makes perfect. The
easiest way to do this is to split up words into bytes.
-
Big
endian- google it, not really too important for you to know.
-
Word-alignment
– Aligning data by the word. Is recommended all the time, but in some rare
cases, isn’t necessary. That means that data should start at an offset that
ends in 0x0, 0x4, 0x8, or 0xC. 0x57120C is word aligned. 0x571205 is not. Think
even/odd, except only the values mentioned above are even,
and everything else is odd. XD
-
Table
or Array – look up what an array is. XP. I really can’t explain this—you’ll
have to figure out yourself along the way.
-
Nightmare
– a program that edits data tables.
-
Modules
– files with information on what data nightmare should edit. Also called
“Nightmare Modules”.
-
NMM
– stands for Nightmare Modules.
-
Nightmare
2.0 – a new version of Nightmare recreated from scratch by Xeld. Has more features than the original Nightmare along with
some fixes.
-
ZIP
archive – a way of compressing files. It takes a bunch of files and puts them
into one archive. The files can later be extracted (taken out) from it. It is a
very common format. This is something on your computer, not used in-game. It’s
used to share lots of files without having to download each one individually.
-
RAR
Archive – Same as above, but better. Also less common. Requires winRAR to use.
-
7zip
Archive – Supposedly the best file archiver there is, but not used as much, and
thus less convenient. Requires 7zip or winRAR to use.
-
Java
– google it. Is required for FEditor Adv to work (as well as some other
programs like Nightmare 2.0).
-
Net
framework – required for Nintenlord’s various awesome programs to work. The
alternative for non-Windows users is Mono.
-
Tilesets
– sets of tiles (lol). It’s what is used to make a map.
-
Mappy
Map Editor – the main program used to make maps.
-
MAR
Array File – a file that can be exported from Mappy. It’s used in conjunction
with the MAR Array Inserter to insert maps.
-
MAR
Array Inserter – inserts maps.
-
Repointing
– making a pointer point to something else. Also involves moving data.
-
Expanding
– adding space/room for editing. Making something larger.
-
Kilobyte/Megabyte/Gigabyte/
- KB, MB, and GB, google these and make sure you know them. Just bigger ways to
count bytes.
-
Palette
– a range of colors. When one talks about a palette he’s talking about the
colors used in some sort of graphic or art. Most graphics only use 16 colors,
including the transparent color, but on occasion more colors are used (for
things like CGs).
-
VisualBoyAdvance
– most people’s emulator of choice, almost always referred to as “VBA” for
short.
That’s all I can think of for now.
Anything else I’ll mention later in the tutorial. I think it’s
enough definitions for now, anyway.
Chapter 2: Using Nightmare Modules
Nightmare is useful for editing a lot
of things. The first things a person thinks of are stats, growths, and classes,
but it can do more than that. Each game has different modules though. Fire
Emblem 7 has the most modules, for example. And FE8 might have some modules for
say, the Valni Tower, which FE7 won’t have. That being said I will go through
how to use as many Nightmare modules as I can.
First, you need to get your clean
Fire Emblem 7 (U) #1235 ROM. (U) is for U.S.A., #1235 is the ROM #. I nor anyone else can help you with this, so you have to be
self-sufficient here. If you know how, you can always rip it straight from the
cartridge. I don’t suggest you download any ROMs unless you have the original
game either. :\
To get Nightmare Modules as well as
everything else you’ll need to hack, I suggest you go here: http://www.feshrine.net/hacks.html
I upload anything that I think might
be useful to someone on that site. Just use the menus and search until you find
it.
Once you’ve downloaded them, you have
to extract the files. winRAR can extract ZIP, RAR, and
7ZIP files, so you might as well just download that and install it. Then
right-click and hit “extract here” or “extract to ‘X FOLDER’” on the Nightmare
Modules’ file and some folders will pop up.
Navigate to the folder with your
stuff. If Nightmare.exe (the actual nightmare PROGRAM) is not included, you can
also download that off of the website separately.
Double-click Nightmare to load it. Go
to File-> Open Rom… or Ctrl+O and then locate your game. Select it. Then do
Modules-> Load Modules and select some modules you would like to use.
Nightmare modules have the .nmm extension to them. If you want, you can just
load a ton of modules.
Once you’ve loaded your modules,
you’re ready to start editing, technically. However, I’m going to go through
some of Nightmare’s (the original Nightmare’s, NOT Nightmare 2.0’s) menu
options.
File-Open ROM opens the ROM, of
course. Do this BEFORE loading your modules.
File-Close ROM closes the ROM. I
actually suggest just closing Nightmare and then reloading Nightmare whenever
you want to open another ROM.
To save changes, you must first hit
“apply changes” (under the File menu) to whatever area you are changing. Easier
than that, just hit “enter”. To save all of your accumulated changes, do
File>Save ROM, or just do Ctrl+S.
To unload a module and take it off of
your list, do Modules->Unload Module.
“Link Rom to Modules” makes it so
that whenever you load that ROM, it’ll automatically load those modules.
However, if you move or rename the ROM or the modules, it won’t work, and will
instead give an error message.
The other options aren’t too useful,
so I wouldn’t bother with them.
Now, if Nightmare isn’t working for
you, there are several things to look out for:
-
Make
sure you are applying your changes correctly
-
Make
sure you open the right ROM
-
Make
sure if you’ve linked ROMs and modules together, you don’t move or rename the
files (it’ll mess it up)
-
Make
sure you open the right modules for the right game, and that they are
compatible
Here are some basic Nightmare issues.
After the issue are a list of numbers that tell which things to look at. If
there is another issue, it’s possible one of the mentioned things applies to
your problem as well.
1. Check if you have the right ROM #-
1235, the American version.
2. The ROM is unzipped, meaning, it's
a .gba file and not a .zip file. Right-click and extract.
3. Module is not extracted/unzipped.
Right-click and extract. Download WinRar if needed.
4. Check if files are updated to the
most recent ones.
5. ROM is a .gba file.
6. ROM may need to be expanded.
"The stats are absolutely crazy!
Lyn has -128 speed!"
1.
4.
"The Module and ROM are not
compatible."
1.
2.
3.
4.
5.
6.
"It's just not loading. It says
I'm trying to crash Nightmare."
2.
3.
5.
Now, about the different aspects:
At the very top is what module you
are using.
Below that is a list of the different
entries in the module you can edit. Usually the entries are labeled so that you
know what you are editing.
Below that is the actual data to
edit. There are different types of slots. Dropdowns allow you to choose from a
list (although sometimes those lists limit you to only certain values).
Othertimes you can edit data in decimal—for example, character stats are in
decimal. If it was in hexadecimal, I’m sure it’d confuse some of you a bit
more.
There are also signed and unsigned
bytes. Some values can go up to 255. Other ones become negative once they reach
127 or so. I really forgot the details of signed/unsigned bytes but because of
this and other reasons, stats can’t go to like 255.
Whenever you make a change to an
ENTRY, you have to press ‘enter’ to apply changes. When you switch entries (say
you were editing Eliwood and then you go to Lyn, it’s the same module but a
different entry) you have to press enter again for the new changes you make.
(You press enter AFTER the changes, btw.)
When you’re done with all your
changes, then you can press Ctrl+S.
Here’s an image to help with the
Nightmare layout:

That’s pretty much all you need to
know about using Nightmare in general. Good luck with your Nightmare editing!
Chapter 3: File Management
In order to be a successful hacker
you need to have a lot of good management.
To start, try and use as few programs
at once as possible. What you can’t do is use one program to edit something,
use another program to edit it, and then go back to the 1st program
and edit it again. It’ll undo changes from the 2nd edit because the
1st program doesn’t know that the 2nd program edited it.
What I suggest doing is when you’re
done making edits with a program, save, and then exit out, and go to another
program. This helps avoid confusions between programs.
Note that HxD, a hex editor, reloads
a file from its source, so it DOES recognize edits made in between, this is
kind of an exception.
Also, when a ROM or some other file
is being edited, you can’t edit it with another program or the other program
will give an error. As said, finish up what you’re doing with one program
first.
Another key to file management is to
organize your folders and the such. Make a hacking
folder and divide that into a few more folders—one with programs, one with CLEAN
ROMs (unedited), one with hacks, one with other files, etc., it really helps.
Most importantly, BACK UP YOUR GAME.
After every major change, BACK UP YOUR GAME. Before you apply some patch to
some game, BACK UP YOUR GAME. Before and after you insert graphics, BACK UP
YOUR GAME. You never know when something crappy might happen. Have a folder
JUST for back-ups and label your back-ups with the date, and maybe even what
you did before or after that back-up. For example, if I was about to insert
some portraits, I would back-up my game, call it “PrePortraitsBUP-070410.gba”
and store it in a folder. Then I know what I did after (inserted portraits), I
know it’s a back-up, and when I took it.
If you have good file management then
you’re on your way to making a big successful hack. ^_^
Chapter 4: Pointer Tables
Note: This is a copy/paste from my
old hacking tutorial.
What is a pointer table? Start by opening your hex editor, and selecting
Go to, jump, or whatever sounds like that. I’d like you to go to c9c9cc for
this.
At 0xc9c9cc you’ll find pointers. It’ll look like a bunch of numbers and
08’s for that matter. If it doesn’t, then you are either at the wrong place or
in a wrong ROM. To make sure, it should look like this.


Now that you are there, you are probably confused with all these
“pointers”. I call this the Event Reference Table, although since it has more
than events, you can call it the Reference Table I suppose.
A pointer is reversed by little Endian, that formatting thing I talked
about. So the first pointer 4CC73408 is 0834C74C. The 08 is added onto every
address in the game. I’ll get into that later, but for now, just sort of ignore
it. You won’t need to worry about it too much until you get into ASM (assembly)
or expansion.
Now this is the great table that you will use to repoint things.
Repointing is changing the pointer to somewhere else. Now let’s say I repoint
to extra space, where this is tons of free space to do whatever. Then I could
put tons of information there, or rather much more information than the game
normally allows. For instance, you are limited to around 150 weapons by editing
the data that’s already there. But if you have more space, you can add more
items. Repointing data to this new space is expansion. Hopefully it’ll get
clearer as the guide continues.
I hope that was useful for you!
Chapter 5: Battle Animation Editor
Note: This is a copy/paste from an
old tutorial.
For some reason, this confuses some people. This isn’t fully custom animations, this is the basic animation thing using
Nightmare.
1. Load up Nightmare, the game, and the
Custom Battle Animation module and the Class Editor. It should look like this.

2. Now for each animation you need to
select the weapon type. Let’s say we are making a mercenary animation. Then
select All Swords (already selected).
3. For the second slot make it All
Weapons because it is for all swords, not just one sword. Otherwise use Custom
Animation for a Weapon.
4. Select the animation to use.
5. Don’t touch the separator. Then do
the same thing for the next 3 slots, and a separator, continuing to however
many you need. Then enter and ctrl+s and you are done with that part. It should
look like this.

Now the game needs to know about this animation.
6. Go to the class editor.
7. Go down to the Battle Animation
Pointer. 
Change that to 0x8POINTER. 0x8 is the beginning of any pointer (except
for expansion), and the pointer would be the number at the top of the custom
battle animation pointer. Which is this one.

So that would be what you put in. 0x8FFF800. Now enter and ctrl+s again,
and play as Eliwood. Should look like this.

And what happens in-game?

Ah! He’s messed up! That’s because of his palette, unfortunately.
Remember, that this changes the class animation and not the character
animation. For a custom character animation you either need a class just for
them, or a custom battle sprite which will also be explained later (this is
another type of custom battle sprite).
That’s all for today. =)
Chapter 6: Character Editor
I will do a run-down through this
module.
At the top is a list of characters to
edit. Generic units lack portraits, chibis, amongst other things. The tutorial
characters are used in Lyn’s mode, while the non-tutorial ones are used in
Eliwood’s/Hector’s mode. Lyn’s mode characters don’t have supports, but they
can have them—you just have to add the support pointer to them.
IIRC unit 0xFB is labeled “Enemy” and
is the generic enemy unit used in the arena, so I suggest that you don’t edit
it. I would also not edit “Wall” or “Snag” at the end, as well as any other
character that seems fishy or special (like the Fire Dragon, don’t edit him
into something else—he is a special character).
Now, onto the actual data:
-
Character
name – the index for the character name text. Type it into FEditor Adv.
-
Character
description – same, but for description text.
-
Character
number – used to reference the character. I suggest you don’t edit this.
-
Class
(support viewer only) – only affects the class shown in the support viewer.
-
Portrait
– the portrait used for the character.
-
Mini-portrait
– default uses the portrait’s chibi, everything else is for generic enemies.
-
Affinity
– self-explanatory.
-
Character
number 2? – don’t edit, just to be safe.
-
Level
– doesn’t affect the actual level. It affects autoleveling, I think. You’ll
find more about this when using the Chapter Unit Editor or Event Assembler when
you edit units.
-
Base
stats – these are added to the class stats to get the FINAL character stats.
Stats can be negative but might glitch if they are unless you use FEditor Adv’s
autopatch.
-
Con
bonus – same, it’s added to the class bonus. It can be negative as well.
-
Weapon
levels – the weapon levels the unit has. Unless you’re hax like Athos, you
can’t have more than 1 S level weapon—try and figure out how to do it like
Athos if you want. Also, if the class has a base weapon level, it is used
unless the character weapon level is higher.
-
Growths
– self-explanatory, aren’t added to class growths, they are as you see them.
-
Palette
– which palette to use. Generic default colors are for generic enemies.
-
Custom
battle sprite – gives the option to use a custom battle sprite/animation, but
NOT use a custom class.
-
Character
abilities – they are all pretty self-explanatory. You can combine values to
have multiple skills from one list. For example, to have a character that could
use steal and thief key (but not have the class ability to use it), you would
do 0x04 + 0x08 = 0x0C.
-
Supports
Data pointer – a pointer to support data… self-explanatory I suppose. 0x00
means no supports.
Chapter 7: Class Editor
This module edits class data, NOT what character is what class.
Just wanted to make that clear.
There are 3 ‘unused classes’ at the
end that you might think you can use, but probably shouldn’t be used.
Apparently they actually are used for something, and what’s important is not
what it’s used for (because I’m not sure myself), but the fact that they aren’t
free to be edited and all. There are also some classes that are only used in
cutscenes as NPCs (like the Peer class, Elbert’s class) and some unused female
classes. Some classes don’t have animations. For example, there is no female
Myrmidon animation, and the Paladin (F) does not use Isadora’s animation by
default.
Rundown:
-
Class
name/description – text index to be used with FEditor Adv.
-
Class
number – class reference number. Better to not be edited.
-
This
class promotes to – obvious…
-
Standing
map sprite – the map sprite used when you aren’t selecting the character. For
the moving map sprite, you have to edit it using the map sprite pointer table
editor, another module (with a somewhat long name).
-
Walking
speed – obvious, slow or fast.
-
Default
portrait – for the class, if there is no real portrait, what portrait is used.
Typically the enemy class card. Supposedly if someone has a custom class you
can use this so that their unpromoted class uses one portrait and their
promoted class uses another portrait. It’s a cool idea, but I don’t know if it
actually works, since I haven’t tested it myself. XP
-
Base
stats – obvious.
-
Max
stats – the limit to what the cap can be. Without Xeld’s patch included in
FEditor Adv, the max is 31. To see how to get past that max without glitches,
see FEditor Adv’s documentation. Note that HP normally cannot go past 60 for
allies either. Enemies can go higher though.
-
Class
relative power – affects experience. A lower number means more experience. 0x03
is like the default.
-
Class
growths – IIRC affects enemies and how they grow. I forgot for sure.
-
Promotion
bonuses – stats added when a unit promotes. For the CON bonus, it’s the
difference between the promoted and unpromoted class.
-
Class
abilities – self-explanatory. They can be combined as well (see the character
module chapter for more info).
-
Base
weapon-levels – the “minimum” weapon levels that a character of this class must
have. Can’t go lower than this.
-
Battle
animation pointer – a pointer to the data that says what animation to use for
what weapon. You can edit this with the battle animation editor OR make your
own data with the custom battle animation editor.
-
Movement/Terrain
data pointers – you can edit these with the appropriate nightmare modules. It
affects what tiles a unit can move on and the terrain bonuses they get there.
Chapter 8: Item Editor
There are a few unused weapons/items
and ones that aren’t obtainable without some bonus requirements, so I suggest
you replace these, because expanding this stuff to allow for more item slots is
tedious (mainly because you also need more space for weapon icons).
Run-down:
-
Item
Name/Description pointers – by now you should know what this is- text index.
-
Item
number – reference number.
-
Weapon
type – obvious.
-
Weapon
abilities – you can combine bytes, just as you can with character/class
abilities.
-
Stat
bonuses pointer – points to stat bonuses, for example, Durandal gives +5
strength. You can use the stat bonus editor to make your own stat bonuses, or
go to the offset mentioned in a hex editor to edit the data there.
-
Effectiveness
– same as above, essentially. The pointer just points to a list of class
numbers that the weapon is effective against.
-
Durability
– uses
-
Power
– might
-
Hit%
- obvious
-
Weight
– obvious
-
Critical
– obvious
-
Range
– To get the range, the first bit is the starting range and the 2nd
is the end range. So 0x11 means only within 1, but 0x12 means 1-2 range, and
0x24 means 2-4 range, etc.
-
Cost
per use – uses x cost per use = actual cost (sell price is ½ of that)
-
Weapon
Rank – obvious
-
Item
icon – obvious
-
Staff/Use
Effect – from my experience this is tricky trying to get it working, so if you
play around with it and it’s not working right, there’s nothing you can do
about it unless you know ASM.
-
Weapon
effect – obvious
-
Weapon
experience – how much ‘experience’ the weapon gives towards getting to the next
weapon level. 1 is normal, 2 is high, 0 is nothing, and you can do 3 and on,
but it’d be a bit broken to have 3 WEXP.
Chapter 9: Spell Association Editor
This module controls what weapon has
what animation. It’s mainly for magic weapons, tomes, and staves. However other
weapons have “blank” entries where the “animation used” slot is set to 0xFFFF
because there is no spell animation used.
Note that ‘spell animation’ can also
refer to non-spell animations such as javelins and arrows. It just refers to
any separate animation associated with a weapon that isn’t actually apart of
the class battle sprites. I hope that made sense.
Run-down:
-
Weapon
– which weapon to use
-
#
of chars to display – 1 or 2, anything else will glitch (this one is obvious
too)
-
Animation
used – also obvious
-
Return
to original position (map) – I suggest putting this on.
-
Facing
position (map) – unless it’s a staff, this should be towards the target
-
Enemy’s
flashing color (map) – white is default for weapons, dark is for dark magic,
red is for fire magic, etc., just do what you think looks nice.
That’s all there is to it.
Chapter 10: Stat Bonuses Editor
All you have to do here is type the
bonuses you want, then take the pointer at the top and type it in the item
editor. For example, the first entry is 0xFFF2A0 so in the Item Editor under
“Stat Bonuses Pointer” you’d type 0x8FFF2A0. That’s all there is to it.
Chapter 11: Promotion Editing
If you want edited promotions for the
classes, use one of the custom pointer slots in the Promotion Item Editor (in
the dropdown where it says “Promotion Pointer”) and then go to that offset in a
hex editor and type the class numbers of the classes that can promote through
this item. Remember to save your changes in both nightmare and the hex editor
and not to overlap changes by having both programs open at once.
To change which class promotes to
which class, there is a dropdown slot in the class editor.
Chapter 12: Map Sprite Editing in Nightmare
Note: I don’t know how this works in
FE6 or FE8 for sure. This is for FE7.
The Map Sprite Pointer Table Editor
module controls the moving map sprites. Each class has its own pointers. The
‘animation pointer’ would better be called the graphics pointer as it is a
pointer to the actual map sprite graphics which you can edit in GBAGE. The
other pointer is from what I know more like an actual animation pointer—it
tells like, how to work the map sprite and its animation and crap. Sometimes
when you import map sprites from other games the animation will still not look
good because of the ‘Another Pointer’ in which case you have to import that
data too.
Anyway, if you want to reuse a map
sprite of one class on another class, simply copy the pointers and paste them
onto the new class’ slot in the module. That’s it.
Chapter 13: Movement Cost Editor
Note: The nightmare module is actually called ‘Movement Type Editor’ as
of writing this tutorial, but it’s better called what the name of this chapter
is called, really.
This controls how many ‘movement
points’ it costs to travel certain types of terrain. Think of the movement of a
class as a # of points they are allowed to use to
travel. So if the value next to a type of terrain is ‘1’ it just takes 1
movement. If it’s ‘2’ then it requires 2 movement spaces, meaning a unit with 5
movement can only travel through 2 forest tiles because forest tiles require 2
movement and 5/2 = 2.5, rounded down to 2.
If the value next to a type of
terrain is ‘255’ then it is uncrossable because a unit won’t have 255 movement
points.
There are offsets at the beginning of
the name of each entry—use that offset to repoint movement data. The pointer to
movement data is located in the class editor.
Chapter 14: Terrain Stat Editor
Another very short chapter. It is
split up into ground and air units. How/what to edit is very obvious. Just know
that Pegasus Knights, Wyvern Riders, etc. use the air movement—as they are
flying they are unaffected by most terrain and do not really receive bonuses.
All other units receive the standard ground bonuses.
The pointers to this data are in the
class editor. That’s all you really need to know.
Chapter 15: Portrait Editor Module
There is a portrait module made by
Ace that was used to repoint graphics and edit miscellaneous stuff like frame
positions and eye control. However, because of Xeld and Zahlman, you can do
everything this module can do in FEditor Adv.
Just some quick notes for those who
are curious:
-
FE6
does not have blinking frames
-
Portraits
and chibis are LZ77 compressed
-
Mouth
and eye frames are uncompressed data
-
Sometimes
the game has separate portraits—one with the eyes already open, and one with
the eyes already closed. Just a heads-up.
That’s all I have to say about this
module.
Chapter 16: Battle Palette Reference Editor
This is a very useful module that
tells the offset of the palette of a certain character/class. In the character
editor is a byte that affects the palette-that byte references this table,
finds the offset of the palette, and then loads the palette.
The good thing about this table is
that it already has some empty slots near the end to use if you need the extra
palette space.
The actual offsets given are offsets
to the LZ77 compressed palette data. If you want to edit it real quickly, you
don’t have to decompress the data to edit it. However, if you are editing the
data and you want to edit all 4 palettes—1 for each allegiance (including the
P4 allegiance located in the arena) then you can do so by decompressing the
data using NLZ77 Compressor, editing it like any other palette, and then
recompressing it and re-inserting it.
One more quick
thing. If you want to make it so that your edited palette works for all
allegiances, you should edit a palette of the same class as your new character.
For example, let’s say you are making a guy named David and he is a knight. His
character data replaces Lute from Fire Emblem 8: Sacred Stones. Well, here’s
what you’d do. You’d “steal” the palette of Gilliam, who is a knight, by going
to the offset, copying the palette data there (palette data starts with a 10,
so with that clue you should be able to know when the palette data ends) and
pasting it somewhere else. Then repoint Lute’s/David’s palette to the
Gilliam-replica palette. Then edit Gilliam’s copied palette to whatever you
want through a battle palette editing technique. Save the edited battle palette
and you now have a knight palette for David that will work right on all 4
allegiances and not look glitch when David is an enemy or an NPC.
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
This is pretty simple as it only has
one thing to edit (which class appears). The thing is,
I don’t suggest editing the ‘empty’ slots at all. This is because these empty
slots are most likely separators.
What do they separate? If I had to
take a guess, I’d say they separate different modes, meaning the first set of
classes is for Lyn’s, the 2nd is for Eliwood’s, and the 3rd
is for Hector’s.
My only other comment is that from
what I remember, character 0xFB in FE7 (labeled as “Enemy”) is the unit used in
the arena. FE6 and FE8 probably also have some unit reserved for the arena in
their character editor, I just don’t know which one.
That’s all I have to say about this module.
Chapter 18: Boss Music Editor
Very, very simple to use module, but
also very useful. I just want to note that you can’t have allies have their own
battle themes, to my knowledge. It only works if they are an enemy. However, if
you give one of your allied units a battle theme anyway, and then you fight them in the arena,
the ‘boss music’ may very well play. I haven’t actually tried this, so it’s
just an idea.
Chapter 19: CG Editing – Custom Cutscene Graphics
Note: Currently FE7 oriented.
You want to make your own CGs to
insert into a game? Well, here’s all you need to know about making them as well
as making use of them.
To start, let’s take a look at the CG
Editor module I made. It’s just a table editor, but it can be useful. The
graphics pointer points to either A) graphics or B) a set of pointers that has
more graphics. The TSA pointers points to the TSA that says how to use the CG
graphics and make it into a full-fledged background. The palette pointer is
kinda obvious—it’s the palette.
With that out of the way, let’s take
a look at the alternate graphics pointer. Lyn mode CGs point to a set of
graphics. Take the first entry in the CG editor-- 0x8CED6D0. We’ll go to the offset
0xCED6D0 in a hex editor.

What’s highlighted is the set of
pointers. It’s 10 pointers, 0x24 bytes (or 40 bytes).
Each graphic is actually a 240x16 piece of the entire CG. If you take all 10
pieces together (vertically) you get a 240x(16x10) or
240x160 image. The size of the GBA screen is 240x160,
so we have a full background.
Why do Lyn mode
CGs work this way? I can’t say for sure, but I have a good feeling it’s because
of the Lyn’s Mode Ending, which uses the CGs as a background. In any case, you
can go to one of the pointers and see the graphics if you want. I must admit it
is a bit troublesome to use CGs in this manner, which is why you may not want
to actually replace these CGs unless you replace them
with black graphics (which is what I did in my hack Tactics Universe).
Now, there’s something the current
version of the CG Editor is missing (at the time that I am writing this—I may
update the module later). It’s a byte that is a flag as to whether the CG works
like a Lyn’s mode CG or a normal CG.
Go to 0xCED888 in a hex editor. The
byte you see there is 01. If it’s 01, it’s a Lyn mode CG. Else, it works like a
normal Eliwood/Hector mode CG. That’s all there is to it.
Some other quick notes:
-
Palettes
are uncompressed
-
Graphics
are compressed
-
TSA
is compressed
Alright. There’s something else I
want to tell you about editing CGs. If you want a simple 16 colored CG, there
is an easy way to do it.
Just make an image that is 240x160 in
size. Load it into Usenti, a bitmap editing program oriented for the GBA that
you can find on my site. Hit Palette-> Requantize and type “16” to make it
16 colors. If the image has too many colors to start with, it won’t look good,
which is why I suggest you use simple images.
You can also do something like a
sepia tone or a one-color image—something that is like grayscale, but tinted
with a color, so that it is all red, all blue, etc.
This is a graphics editing thing,
however, and I cannot help you with this. You’ll have to ask in a graphics area
how to do such an effect.
Anyway, once you get a 16 colored
image, change the size to 256x160 using Usenti. The 16x160 portion on the far
right that you just added should be the transparent part. Also, at the very top
left, there should be a pixel with the color that is going to be transparent.
Said pixel will turn up black in-game, but it can’t be helped (by me),
unfortunately.

As you can see, I managed to save
some quality by making the entire image red, but it’s still kinda eh. On the
right in the color box you can see I only have 16 colors (1 row). Although you
most likely can’t see it, at the very top left of the CG is a dark red pixel
that is the SAME dark red on the right. When I insert this CG, it’ll turn up
black, of course.
Once that’s all done, save your
image. Load the CG stuff with GBAGE-everything you need to edit a CG is in the
CG Editor module. I suggest editing an Eliwood’s mode CG, of course. Type in
the graphics offset and the ROMPalette Offset as it is in the CG editor. You
don’t really need to load the TSA for the image.

Hit “Import Bitmap” and select your
graphic where it says “File”. Put in an offset for the CG to be inserted and
check the following stuff:

When that’s done hit “OK” and hit
“OK” again. Now save with GBAGE (File->Save) and then exit out.
There’s one last thing. We haven’t
touched the TSA, have we?
Well, there’s a ‘trick’ of sorts with
images that are 16 colors. The game already has some TSA made to use with a
256x160 image that only has 16 colors. It’s offset is
0x50BE54. Open up the CG Editor in Nightmare and type that under the TSA for
your image (remember that since it is a pointer, you type 0x850BE54). Then
save.
Now all you have to do is test your
CG in game.
…Wait, how to do that?
Well, you need to load the CG using
events. The event assembler code to load a CG is-
Shows a CG picture
SHCG XX
XX = picture value
(Direct copy/paste from EA files)
To do it in hex, the code is D3 00 XX
00, not that anyone uses hex anymore… right?
I suggest putting fading codes before
and after the CG to smoothen the transition. It’s kinda necessary if you want
the CG to look right.
FADI
SHCG 0xNN
FADU
STAL 0xFF
The above is an event to fade into
the CG, load the CG “0xNN” (obviously put a real value there), and then wait
for time 0xFF (255) in who knows what units (frames?). You can put other codes
in between the fading codes, of course. I just showed the bare minimum.
There’s also a macro made by
Nintenlord to make it easier:
//Smooth changing to CG
#ifdef _FE7_
#define ChangeToCutScene(cutscene) "FADICG
0x10; SHCG cutscene; FADUCG 0x10"
#endif
All you have to do in your events is
put ChangeToCutScene(value) and it’ll change to the
cutscene specified. Makes it slightly easier, I suppose. That’s it for events…
BUT WAIT!
There’s a nifty program that can help
you insert CGs OVER 16 COLORS! AND THE METHOD IS KINDA EASIER!!!
FEditor Adv has it with it. The batch
file is called “Execute CG Maker”. Execute it and you’re your original 240x160
CG image. It’ll ask where to save an image showing what the converted CG looks
like after it’s GBA-ification. I’m using an arena
(shown below) so I’ll just call my new one “arena2.png”. Next you need to tell
it what to call the image data dump. “arenadmp”, “arenaimg”,
or “arenagraphics” works. Something to tell you what it is,
that’s all that matters. Then you need to save the map data (Xeld calls it map
data, but everyone else is so accustomed to saying “TSA” that I just say TSA as
well). Save it as something you’ll recognize. Same for the palette data. Then
you’re done.

Below is what my image looks like
afterwards.

Pretty good, amirite? It uses more
than 16 colors and manipulates the TSA/map data in a complex way to do so.
Thank Xeld for his program.
Now all you have to do is copy the
data from each respective file into some freespace in your ROM, and mark down
each offset you insert it at. So for example, we’ll say I am inserting my
graphics at 0xD20000, my TSA at 0xD25000, and my palette at 0xD26000. I have
them all written down and labeled. I save my hex editor.
Then using the CG Editor module I
repoint everything, making sure to add an 0x08 to the
beginning of each pointers (0x8D20000, 0x8D25000, 0x8D26000). Then I save with
Nightmare and test my ROM (I already went over how to load CGs).
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
This module changes what text is used
in the Lyn’s ending module as well as what character’s data is used. You see,
the ending shows a record of battles fought, won, and lost, and it gets that
from the character #. Depending on whether the character “died” (got injured)
or not, there are two different text.
Actually, there’s an error in the
current Lyn’s Ending Editor (if you do not see this error in your version,
don’t worry about it). It says that there is an Injured Text for the Tactician,
but from my foggy memory, I think the latter text is actually for the female
tactician, while the former text is for the Male tactician. The game knows the
male/female thing based off of what you chose when you started the game and
stuff.
The “Lyn Hilltop” text is just some
text near the end that has a CG of Lyn on a hilltop. For simplicity’s sake I
made the whole module one entry.
There’s one more thing I want to say
about this. When editing the text, there is a trick to it—after each line on
the text, you have to add a bunch of spaces. For whatever reason, this is how
the game knows to make a new line, and if you don’t add a bunch of spaces, the
text glitches.
So your ending should look something
like this, except you don’t need the words ‘space’ and you won’t SEE the
spaces, but the game will know they are there.
Gravyman, Saucy Boy (spaces)
(invisible linebreaks)
He served gravy to people (space
space space space space space)
in all the kitchens of the (spaces)
world, disgusting people with (spaces)
his inferior cuisine. (spaces)
I don’t know exactly how many spaces
you need after each line so I would just add as many as necessary, really.
Experiment, play around, and work it out.
One more chapter, down!
Chapter 21: Tutorial Editing/Getting Rid of the Tutorial
This is a frequently touched upon
subject. I want to make this quick.
To get rid of the very basic tutorial
events, you can A) use the Tutorial Editor nightmare
module B) use the Event Assembler or C) use some patch somewhere.
Method A:
Load the tutorial editor module for
FE7. Repoint each pointer to an empty space of 4 00s. If you don’t know of a
space, you can type in 0x80000B4 because at that very offset are 4
kinda-random-but-probably-important-for-something 00s.
Just do that for every pointer and
bam.
Method B:
At the very top of events, before
even the #include stuff, put DISABLE_TUTORIALS and the Event Assembler should disable
the tutorials when you insert your events.
Method C:
I don’t know where this patch is but
it does the same thing as the stuff above. It’s just a patch way. There is a
‘Tutorial Killer Patch’ I made but it gets rid of complex tutorial events as well.
However, it is reported as glitchy, but I have given up on trying to fix it after such a long time.
Chapter 22: Legendary Weapon Editing
FE7:
There is a nightmare module thanks to
Xeld that can edit which weapons have the special stuff that goes with the
legendary weapons Armads, Durandal, Forblaze, and Aureola. It’s very
simplistic.
However, if you want to add more
weapons to this list, you have to do some different stuff (you can’t just
expand it like normal). See this topic for more information-- http://forums.feshrine.net/index.php?showtopic=3285
Chapter 23-24: Music Insertion Tutorial (ELF Method) & Documentation
This is a copy/paste from my music
hacking tutorial I released. It tells how to insert music using the “Elf
Method” (tr.exe, a hex editor, Nightmare, and a few other things). It also
tells how to make a song loop and includes documentation.
This tutorial does NOT cover how to
rip music from other games and import them, however.
This tutorial, created by me, Blazer, will guide you step-by-step on how to take a MIDI and insert it into either Fire Emblem 6 or Fire Emblem 7. I have not made an instrument patch for Fire Emblem 8 so you’ll have to either find some other way to hack music or bribe me into making one for FE8. :P
Tools Needed:
Required:
Music List.txt
Your MIDI, i.e. a song file ending in .mid
Midi2AGB/Midi2GBA*
Anvil Studio (or another good MIDI editing program, although Anvil is preferable)
HxD (or another good Hex Editing program)
A Fire Emblem ROM (or another GBA ROM—this tutorial is direct towards Fire Emblem hacking, however)
Blazer’s Instrument Patch (found in tutorial)
NUPS
Optionals:
Sappy 1.6
Sappy 2005
*(Same programs, I’ve seen them under both names, I will reference it as Midi2GBA)
YOU CAN FIND MOST PROGRAMS AT HTTP://WWW.FESHRINE.NET/
Part 1: Background Information
Before trying to insert custom music into Fire Emblem or any other GBA game, you should:
- Know how to manipulate a hex editor and its basic commands (go to, find, opening, saving, copying, pasting, and editing)
- Know how to make patches as well as apply patches
- Use Visual Boy Advance to play ROMs, savestate test, etc.
- Know how to back-up ROMs. Backing up is very important. I will not constantly warn you to back up your ROM, but I will on occasion—it’s up to you to do it.
Terms: (note: some definitions may have been simplified or otherwise defined as something else for the sake of making it easier to understand, please don’t talk to me about technicality terms, I’m a casual hacker and I don’t care for 100% accurate definitions.)
MIDI- a song file that contains all the tracks of a song.
Track- one part to a song, a track contains all the info about what a certain instrument should play. Each track has one instrument and the track has all the notes for it.
Instrument- Digital instruments, an instrument is a sound or set of sounds to play. Acoustic Grand is a type of instrument. The track would tell what sounds of the instrument to play, when, for how long, etc.
General Hex Editing Terms- This includes—offset, hex, byte, word, pointer, little-endian, header, etc.
Pitch- How high or low a sound is.
Octave- What set of pitches to use. A lower octave has lower, deeper sounds, while a higher octave will produce higher pitched sounds.
Volume- The loudness, in this case, the loudness of a track or song.
Part 2: Downloading the Programs
Everything you need (excluding illegal ROMs, which btw, a ROM isn’t really a program) can be found at http://www.feshrine.net/hacks.html, simply navigate that site and download what you need.
The music list can be found in the documentation section. Anvil Studio and Mid2GBA can be found on the Music Editors page, just as HxD can be found on the hex editors page. The instrument patch can be found in the Patches section and NUPS can be found on the patchers page.
Finding a MIDI is up to you. Use google and http://www.vgmusic.com to find a MIDI of a song you may like or something. Don’t ask for help with this.
Part 3: Preparing Your MIDI
Before you insert your MIDI, you need to make sure it is properly prepared. This includes quite a few things. Ease up your mind, it’s pretty straightforward and you use a easy program to help you with it.
Load up Anvil Studio, and then load up your MIDI file. In the middle you should see a bunch of tracks.

The middle part is where all your tracks and their information are. To the left is the track name, then the type it is, and the instrument used (example, Acoustic Grand, Violin, String Ensemble 1, etc.).
Step 1: Minimizing Tracks
Having more than 10 tracks in a song will probably screw things up somewhere down the line. I wouldn’t even try and do it—I remember a friend telling me he tried to and it failed.
One thing to do is delete any tracks without notes. It will say to the left of the play/pause buttons “no notes” if a track doesn’t have any notes. Sometimes there are redundant tracks labeled “Copyright” or something. If there are any, go to Track->Delete at the top of the menu.

That shows a redundant track named “Copyright by Bla Bla Bla” and at the top it says “no notes”.
If you still have more than 10 tracks, you should find another MIDI. Sorry but, there are limits in life.
Step 2: Truncating Your Song
Some songs repeat within themselves. Like a song may be 6 minutes, but at 3 minutes it just repeats itself all over again. Well, in-game, this uses up some space and for maximum efficiency, you’d best get rid of the repeat. Do so by finding out exactly where the song repeats and then going File->Truncate Song-> Delete from Current Position to End.
Going to View-> Composer may help you find the place where it repeats—otherwise just listen to the song and stop once you hear it, then click around in the track area until you get to the point where it repeats. Then do as I say and TRUNCATE!
Step 3: Track Timings
In order for your MIDI to properly repeat in-game, all of the tracks need to be aligned. Otherwise one track might go ahead and play itself before another track has finished its rounds, and then once it repeats in-game, you’ll be like “WOAH THE SONG IS ALL MIXE D UP WHAT DO I DO?!!!!”.
I got this trick from someone else—I believe it was Charon the Ferryman, a member on my forums. Go to View-> Composer if your composer scroll isn’t loaded already. Select the first track, then click in the composer area. Hit “page down” on your keyboard (or if you don’t have that, do it slowly by holding the right arrow) until you reach the end of the track. Making sure you are at the end, look at the top.
![]()
Make sure the time and the duration are the exact same. If it isn’t, then add rests by clicking the “Insert a Rest” button until it is.

There’s the button if you can’t find it. Now if your song’s duration CHANGES, that’s also bad. Press the backspace button to delete rests. Usually one backspace will get it to the perfect timing. In my case, the duration went to 3:03:07 due to an extra rest, and then I pressed backspace once, and now it is back to 3:03:04.
Click on the next track (simply click on the row of the track underneath the column named “Track Name” if you’re stuck on how to do select a track, and then make sure the track is highlighted) and do that with EVERY SINGLE TRACK. Yeah, the repeating process makes you hate large #’s of tracks. D:
Once that’s done, best save your song. You’ve now prepared your song for insertion. That was arguably the hardest part of the entire process. :P
Part 4: Applying Blazer’s Beta Music Insertion/Instrument Patch
So, get my epic patch from my website at http://www.feshrine.net/hacking/patches.html
I probably sound narcissistic for calling it epic, but everyone needs to feel some good self-accomplishment. I’m just having some fun… XP
Right, back to hacking,
Here’s the Readme:
README
-------
This is a private patch supplied by Blazer. It is not for use without permission. Credit must be given.
It adds all instruments at offset 0x107d7d0. Data ends at 0x11b6530. The actual instrument map can be referenced by the offset 0x11ae42c when creating songs.
Back-up your ROM before using and be very careful with this. If you have not gotten this patch directly from Fire Blazer than the data will not be repointed properly and it WILL screw up your ROM if used in combination with a MIDI.
Thank you for your time.
As long as you don’t post this tutorial anywhere (you can link people to it, but link them to the WEBSITE, DO NOT REPOST IT SOMEWHERE ELSE), then you’re free to use it. Also give credit if you use it in your hack. Not only because I indirectly helped you with your hack but I’m curious to see if people actually make use of things like these, and curiosity is just so hard to control.
Now, with that said, if you read the README (that’s the point of it), it says some data is inserted at some scary offset. Well, if you happened to have data at that offset, we have a problem—the patch’s data has pointers inside of it. TONS of pointers. The pointers are relative of each other. Unless you want to repoint hundreds of pointers, the data has to go where the patch says it is going. In short, make sure there is nothing at that offset.
So you’ll need to move out any data you have there—go use a hex editor and check to see if there is any data between those offsets. If there is, it WILL be overwritten, beware. Also, if you have a clean ROM, this WILL expand your ROM, meaning you will now have to start using UPS patches if you haven’t already, and if you simply dislike expanding... well too bad. -_-
BEFORE you use NUPS (find it on
feshrine.net) to apply that patch, BACK UP YOUR ROM!
I make no guarantees that nothing will go wrong and everything works. It’s
worked for several people but that doesn’t mean it won’t screw up your ROM. You have been warned.
That being said, go ahead and apply the patch, because you’ll never get anywhere without it.
Part 5: Converting Your MIDI
With that done, time to convert your song to GBA format. Crack out MIDI2GBA. Open up that program called “tr.exe”. It has an icon with the text ‘ELF’. Put your MIDI file into the folder called ‘mid’. The ‘mid’ folder is inside of the MIDI2GBA folder. Make sure it is your ONLY and I mean ONLY Midi there. In fact, make sure it is your only file there. Otherwise things can get confusing later on and my methods won’t necessarily work if you try and insert/convert multiple MIDIs at a time.
Once you’re sure it’s in, press the “??” button in tr.exe (the ELF program). A pop-up window will come up and your song will either be on the left or the right. If it’s on the right, the conversion failed. If it’s on the left, it’s a success.
Now if it’s on the right, don’t get all pissed at me. There are some reasons why this might happen.
- Errors in the MIDI. Try to repair it using Anvil Studio. In Anvil, go to File-> Repair and hit “No” to any pop-ups, then save and retry.
- The following may actually mess it up as well. Don’t try to repair the song and then insert, first try to insert and then repair.
- Awkward instruments or something. Perhaps your MIDI file has some instrument that the program “doesn’t like”. I doubt it, but who knows.
- Bad tracks, some unsupported type of track.
- MIDI file type. Try saving it as MIDI format 1 and midi format 0, although I’m not sure if this makes a difference, maybe it does. It has to be a MIDI by the way—MP3’s and WAV’s are totally different, don’t even try them.
- The file name has some weird symbols in it.
- You could just be unlucky and your song doesn’t want to work. This often times happens with Felover3, a hacker who seems to fail at a lot of things… Poor dude.
If you can’t get it fixed, I’m sorry, this is a flaw in this method. I can’t help you too much besides saying redo the process or try a different MIDI. To be honest, while writing this tutorial I did one myself, but the MIDI I tried to insert ended up being on the right. In fact, so did the 2nd one. Not until I got to the 3rd one did it work like it should.

Now, time to test out how your song should sound in-game.
Already?! We already get to test?!
YESZ!
In the MIDI2GBA folder is a ROM called song.gba – load said ROM using VBA and then press “Z” (the equivalent of the “A” button in-game), wait a second, and then listen to your song.

If it’s choppy, then that means conversion had some difficulty. If the sounds are a little different or something, then that’s due to instruments. Conversion isn’t perfect and the GBA hardware has its limitations, thus the song won’t sound perfect. If it sounds pretty good, that’s great let’s continue. If not, try repairing the song, manually fixing it using MIDI editing skills (if you have any), or try another MIDI.
My song, Celica’s Map Theme, sounds great, although not exactly like it should, so I am continuing. My other two choices (Awkward Justice from Tales of the Abyss and Rick Roll by Rick Astley) didn’t work… it was quite unfortunate really, but such is hacking. :P
Now time to get it to Fire Emblem.
Nub approach: can’t we just copy the song from song.gba, the game we just played, into our game?
My approach: Let’s just copy the song from the test game into our game!
Hey, something IS simple! Sorta. Let’s get down to it.
Part 6: Making Your MIDI Repeat and Transferring
it to Your ROM
Sigh, this tutorial is getting really long. And my hands are tired. Yeah. Not cool. Also, I’m making more and more redundant comments like these.
Get your hex editor out, open up your Fire Emblem ROM as well as song.gba. Back-up your ROM, btw.
Go to 0x1B3BB8 in song.gba – this is where your first track starts. Now copy everything from here to the end of the ROM. You’ve just copied all of the music data as well as the song’s header. That’s all you need to know for now. :P
Now I’m going to make use of a new method of doing the repeats in the game. What you have to do is paste all that data you just copied into a blank file. Using HxD, just press Ctrl+N or File->New and a new tab will come up. Go to that an press Ctrl+V to paste all of your song data. Bam.
Now here’s how this works. The command to end a track is B1. The repeat command is B2 *pointer*. For whatever reason, tr.exe doesn’t add a repeat to the tracks, so you have to do it yourself. My easy way is to just use a find and replace feature.
Press Ctrl+R in HxD, or if you’re using some other hex editor, find the option to do a find and replace. In the find menu, type in “B1” (hex) and in the replace area type in “B2 00000000 B1 000000”—without the spaces. It should look identical to this.

With that done, press “OK”. If you selected “Prompt on Replace” it will ask whether you want to replace each instance of B1. In most cases you want to replace every one, but SOMETIMES there will be a B1 byte that isn’t actually the B1 we want to replace. If that doesn’t make any sense, sometimes there will be a ninja B1, but we DON’T want to replace those, because they are ninja. The way to make sure that you don’t replace a wrong byte is look at the B1 thing and check to make sure that after the B1 is a “BC” byte. This’ll make more sense with a picture.
![]()
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.
What you’ve just done is preformatted the song to have repeats. You added in the code, so now you have to insert the MIDI into your ROM and then fix up ALL the pointers. Fun.
As I just said, we need to put the MIDI in your Fire Emblem ROM. Copy all the MIDI data (the one that you just did a find-and-replace function on). We’ll need a bunch of free space for this song. I’m going to paste at some offset farther into the game that isn’t being used at all. Make sure wherever you paste your edited song/MIDI IS NOT BEING USED and there is plenty of free space around it, just to be safe.
For your info (in case you didn’t
know), it is best to insert at offsets that end in ‘00’. Like 0x1200000 is
easier to remember than 0x10849C4, although both will work. I just expanded my
ROM further and am inserting it at 0x11E4000. That’s an easy to remember
offset. Because offsets are always important, I am going to write it down. You should be writing down all these offsets in something
like a notepad file yourself—do it or you’ll suffer
consequences later on.
Now, once you paste it, go to the end of wherever your pasted data is… my hex editor (HxD) automatically takes me there. By the way, you should paste write, not paste insert. Paste insert = Ctrl + V and it adds the data in the middle of the game, which messes up pointers. Ctrl + B overwrites the free space you have and doesn’t mess up pointers.
Once you’re at the end of your song data, you should see to the right (in the ASCII text part) the name of your file, something like “awesome.mid” with “awesome” being the name of your song… If you see that, you are in the right area. Congratulations.

Boxed in dark red is the text. On the right you can see the name of my MIDI and on the left you can see the hex for that text. 4 bytes before the text is what I consider a garbage pointer. That’s all you need to know, it’s garbage. Like all garbage, you get rid of it. The name of the MIDI is garbage too, so just ‘00’ all that out. Your end product should be something as beautiful as this.

With that, on to the next part!
Part 7: Track Pointers & Repointing
![]()
This is the final part of your MIDI, which is ironically called the header. The part in the dark red box, the first 4 bytes, are 06 00 0A 00 in this example. 0x06 is the # of tracks I have in my song. My song DOES have 6 tracks.
After that is a pointer to the Instrument Maps, also known as Voice Groups, although instrument map is a much better term in my opinion. My patch inserts instrument maps at 0x11AE42C. In “pointer form”, that is 2C E4 1A 09. If you notice, the only difference between the current pointer and what the new pointer should be is the ‘09’, so change that. Once you do, you will have set up your instruments for the
song. Simple as that. Not only this, but any of the songs that are inserted with this method will use the exact same instrument map, so there’s no hassle. :D
After that, in the purple box, are the pointers to the tracks. Right now they still point to our old tracks, eww. A pointer is 4 bytes and if you notice there are 6 sets of 4 bytes up in that data I posted, or 6 pointers. 6 pointers for 6 tracks. Your song will probably be different. It might have 10 pointers or 3 pointers and the pointers won’t all be the same as mine.
Anyway, first we need to add in the repeat pointers. If you remember we added the B2 code to the song for every track earlier on. What we were doing was adding the repeat code, 0xB2, and space for us to put in a pointer. The pointer points back to the beginning of the track so that the track just plays over again… and over again, and over again. :P
Go to the offset where you put your data. For example I put my data at 0x11E4000. From now on, write down offsets, because it is very important to for you to repoint stuff. Do a search for the hex 0xB2 and you’ll get to the end of your track.

![]()
Now the beginning of this track is at 0x11E4000 for me. You just wrote this offset down, it’ll be something different for you, depending on where you put your song. In pointer form that is 00 40 1E 09.
About turning offsets into pointers:
Break up the offset into parts:
AB + CD + EF + GH = GH + EF + CD + (AB+8)
So 0x00123456 would turn into
56 34 12 08
And 01 1E 40 00 becomes 00 40 1E 01, but you add an ‘08’ to the last byte making it 00 40 1E 09. Bam.
Now type that in where the 00’s are between the B2 and B1. Like so.
![]()
Now that you’ve done that, there will be a “BC” byte soon after that. “BC” is the first byte of a track. I could load you with lots of more information, but this is confusing enough as it is, so if you’re looking for documentation on how track data is made up, look at the end of this tutorial.
Anyway, we want to know where the beginning of the next track is so that we can tell the game where to repeat to. So find out the offset of the next track—look for the magical BC.

At the bottom left of HxD it tells you the offset of wherever you are. So that byte is at 11E4902. Yes, great. I’m going to write that down, then do a search for B2 again. Then I’m going to take that offset, put it into pointer form (02 49 1E 09) and then place it in the middle of the repeat code. Then I’m going to find the next BC and start the process ALL over again, writing down the offsets each time, until I get to the final repeat code.
And, stinks for you, but you’re going to have to do this too, and the more tracks you have, the more frustrating and tedious it gets.
Eventually you should see your track header again, you know, the 06 00 0A 00 bytes, where “06” is the number of tracks in your song. Once you see that, you know you’ve finished doing the repeating for all the tracks. Congratulations, now you have to repoint the entire track header.
Take all those offsets of the track headers and repoint the tracks.

![]()
Remember a pointer is 4 bytes. There are 24 bytes there so if each pointer is 4 bytes then that means there are 6 pointers, because my song has 6 tracks. If your song has 10 tracks, that means you have to replace 10 pointers with the 10 offsets of the beginning of each track. Great. Do that and save your game/ROM so you don’t lose all your work. Hahah.
Part 8: Finale- Assembling Your Song & Profit
This differs for each game.
Use the Music List for each game (comes with Nightmare Modules) to find out which song you want to be replace. You can also replace a “blank” song.
Now, take the hex of that song and note it down. I am going to replace song 0x7A in Fire Emblem 7, which is a “Nothing” song. But it’s OK. :D
Now you need to find out where in the pointer table that song is. You can optionally use Sappy 2005 to load up your game, find the song, and then look at Sappy to find the offset of it.

“Table” is where the pointer to the header is. That offset there, circled in red, is what we want.
“Header” (blue) is the offset of the song header. We just made that—it includes pointers to all the tracks, tells the game how many tracks, and where the instrument map is.
“Voices” (green) is the offset of the instrument map. My patch makes a universal version and the offset of it is 0x11AE42C. That’s also in the song header, and we’ve already repointed that too. Just a little bit more!
Go to the “Table” offset with Sappy. If you don’t have Sappy, follow the directions below
1. For FE7, go to 0x69D6E0. For FE6, go to 0x3994D8. For FE8, go to 0x224470. For any other game, you’ll need to use Sappy to find out where the Song Table is.
2. Take your song # (mine is 0x7A—yours is whatever you got from the Nightmare Module’s Music List) and multiply it by 8. Use Microsoft Calculator or something (make it Scientific and then select hex—it can multiply hex, that’s right). You could probably find some calculator online too. Then take that number and add it to the song table offset. So for me, 0x7A times 8 = 0x3D0. 0x3D0 + 0x69D6E0 = 0x69DAB0. That is the offset of my song.
Alternatively, for Fire Emblem 7, I made a Music Array Editor which can help you edit any of the songs up to a certain point, but it’s limited due to an incomplete music list and it’s only for FE7.

What’s highlighted is my song’s info. The final bit. The pointer is a pointer to the song’s header. Mine is at 0x11EC900. Good luck if you didn’t write it down like a good boy.
0x11EC900 = 00 C9 1E 09, so I type that in. The next 4 bytes, which are currently just 00000000, have to do with priority.
00 = Top Priority, 01 = Map Song Priority, and I had others noted down but pretty much the higher the # gets the lower priority it has. Sound effects have a high priority of 6-8 generally, while backgrounds music generally has 0-1, misc. music has 2-3, and yeah… You should be able to figure things out. Most of the time you’ll just need to use 00 or 01 anyway.
01 00 01 00 is necessary for map songs to work correctly, or else when a unit goes into battle the map music will stop playing. Just letting you guys know about that.
My final result is:

As usual, red is the edited stuff. I save, and then I test. You can test using Sappy v1.6 or just go straight into Visual Boy Advance. Obviously you need to make your song play in game, which means you have to somehow load it, whatever that way is. If you’re replacing something like the title theme, then that’s really easy to test, because you just load up the game and bam. If you’re replacing a song that currently wasn’t used, it’s up to you to test that song out.
Part 9: Possible Errors & Wrap-UP
Hopefully your song works. If it doesn’t, error could be
- Number of tracks
- Song wasn’t converted properly (program’s fault)
- Faulty pointers (very very likely, double check pointers, check for 08/09 for the last byte)
- Messed up data
- Overwrote some important data
- Edited the wrong pointer (rather than messing it up)
- You inserted some data somewhere, thus shifting everything, making pointers go wrong
- Some sort of pointer error >_>
- The song simply doesn’t want to play?
- You aren’t playing the right song in-game, you think you’re playing the edited song but you really aren’t
- I dunno dude. Leave me alone. This tutorial is 4,900+ words and 19 pages. I’M FREAKIN TIRED.
Once you do a couple, you can make up your own tricks to make it go faster, and you’ll know how it all works, making things go a LOT faster. I can probably insert a 5 track song in 30 minutes, a 10 track song in like an hour and a half (yeah # of tracks can totally make things harder…). And I haven’t done a ton of insertions either. A little bit of practice and you’ll make every minute of music insertion worth it.
Update: I recently inserted like, a 6 track song in 10 minutes, so it just takes some practice and then things like repointing and knowing what to do will come REALLY easy. ^_^
Part 10: Documentation and Stuff
Commands:
BC PP
BD II
BE VV
These are commands that set stuff. There are other commands too but I won’t get into it. The first is BC PP where PP = octave. 0x00 is default while adding or subtracting 0x0C will get you lower and higher octaves, for example, 0x0C or 0xF4.
BD II sets the instrument. The conversion already does this for you but if you want to change it you can do so manually. The instrument is the one labeled in Anvil Studio—[you] take that # and then subtract one, then convert the number from decimal to hex. Wala, you have your instrument.
BE VV sets the volume, IIRC. VV is a # between 0-127, except in hex.
You shouldn’t need to change this but if you want to, it’s available to you, and it’s better than having to edit the MIDI with anvil studio and then reinsert everything, IMO, assuming you don’t have to make massive changes to the tracks.
B0 = Rest
B1 = End Son
B2 = Repeat
Some more commands for you to know*.
*(I am calling them commands, even if the name sometimes doesn’t make sense)
Atrius’ Notes:
The audio track data is a list of commands and arguments for
playing music/sound effects.
Anything below 0x80 is an argument, and anything 0x80
and above is a command.
0x80 - 0xB0 = Rest commands of varying lengths, to wait a certain amount of
time before playing each note.
0xB1 = Stop command, to signal the end of the audio track. From what I've
noticed even if a song loops it has one of these after the loop command.
0xB2 = Jump command, to jump the playback pointer to another location in memory.
Often used to loop songs by jumping back to the beginning of it.
0xB3 = Jump command where playback can jump back to after it again later. Used
when you want to repeat part of a song before continuing with the rest of it.
0xB4 = Return to last 0xB3 command.
0xB5-0xBA = Unidentified
0xBB = Set Tempo
0xBC = Set Pitch offset
0xBD = Set instrument
0xBE = Set Volume
0xBF = Set Panning
0xC0 - 0xCE = Unidentified
0xCF - 0xFF = Play notes of varying lengths.
So to break apart the track information I gave you:
BE FF BC 00 BB 01 BD 00-CF 3C 7F B0 B1
BE FF = A volume command with an argument of 0xFF (Volume is an odd exception
to the rule that arguments must be less than 0x80)
BC 00 = Set the pitch offset to zero
BB 01 = Very low tempo so that the note is drawn out long enough for voice
samples to play their full length.
BD 00 = Set the instrument to the first entry in the instrument map.
CF 3C 7F = Play a note with a pitch of 0x3C (Right in the middle of the
available range), and a volume of 0x7F (The maximum available)
B0 = Wait long enough for the note to finish playing
B1 = End the audio track
Charon’s Notes:
Pitch
Pitch is very easy to understand. As Atrius noted, it is follows the byte 0xBC
(which is usually the first byte in a given track anyhow). Pitch works like
this:
0x00 is the base, equivalent to Middle C.
0x0C is one octave higher; High C.
0xF4 is one octave lower; Low C.
If you haven't noticed, it goes by increments of 0x0C, so for higher
increments, they would be 0x18, 0x24, ect, while for lower increments they
would be 0xE8, 0xDC, ect.
Tracks can be transposed by any value, however, so if you wanted it to be in a
different key, you could change these values. If done, make sure to
add/subtract 0x0C when raising/lowering octaves.
Tempo
Tempo is simply the tempo transfered into Hex. So, if your original tempo was
80, you would put in 0x50. It follows a 0xBB byte.
Instruments
The instruments correspond with the instruments of the voicegroup. Although the
instruments can be anything you want, the typical way is to have the
instruments correspond directly. It follows a 0xBD The direct map:
PIANO
0x00 Acoustic Grand (often used as a drum kit)
0x01 Bright Acoustic
0x02 Electric Grand
0x03 Honky-Tonk
0x04 Electric Piano 1
0x05 Electric Piano 2
0x06 Harpsichord
0x07 Clav
CHROMATIC PERCUSSION
0x08 Celesta
0x09 Glockenspiel
0x0A Music Box
0x0B Vibraphone
0x0C Marimba
0x0D Xylophone
0x0E Tubular Bells
0x0F Dulcimer
ORGAN
0x10 Drawbar Organ
0x11 Percussive Organ
0x12 Rock Organ
0x13 Church Organ
0x14 Reed Organ
0x15 Accoridan
0x16 Harmonica
0x17 Tango Accordian
GUITAR
0x18 Acoustic Guitar(nylon)
0x19 Acoustic Guitar(steel)
0x1A Electric Guitar(jazz)
0x1B Electric Guitar(clean)
0x1C Electric Guitar(muted)
0x1D Overdriven Guitar
0x1E Distortion Guitar
0x1F Guitar Harmonics
BASS
0x20 Acoustic Bass
0x21 Electric Bass(finger)
0x22 Electric Bass(pick)
0x23 Fretless Bass
0x24 Slap Bass 1
0x25 Slap Bass 2
0x26 Synth Bass 1
0x27 Synth Bass 2
STRINGS
0x28 Violin
0x29 Viola
0x2A Cello
0x2B Contrabass
0x2C Tremolo Strings
0x2D Pizzicato Strings
0x2E Orchestral Strings
0x2F Timpani
ENSEMBLE
0x30 String Ensemble 1
0x31 String Ensemble 2
0x32 SynthStrings 1
0x33 SynthStrings 2
0x34 Choir Aahs
0x35 Voice Oohs
0x36 Synth Voice
0x37 Orchestra Hit
BRASS
0x38 Trumpet
0x39 Trombone
0x3A Tuba
0x3B Muted Trumpet
0x3C French Horn
0x3D Brass Section
0x3E SynthBrass 1
0x3F SynthBrass 2
REED
0x40 Soprano Sax
0x41 Alto Sax
0x42 Tenor Sax
0x43 Baritone Sax
0x44 Oboe
0x45 English Horn
0x46 Bassoon
0x47 Clarinet
PIPE
0x48 Piccolo
0x49 Flute
0x4A Recorder
0x4B Pan Flute
0x4C Blown Bottle
0x4D Shakuhachi
0x4E Whistle
0x4F Ocarina
SYNTH LEAD
0x50 Lead 1 (square)
0x51 Lead 2 (sawtooth)
0x52 Lead 3 (calliope)
0x53 Lead 4 (chiff)
0x54 Lead 5 (charang)
0x55 Lead 6 (voice)
0x56 Lead 7 (fifths)
0x57 Lead 8 (bass+lead)
SYNTH PAD
0x58 Pad 1 (new age)
0x59 Pad 2 (warm)
0x5A Pad 3 (polysynth)
0x5B Pad 4 (choir)
0x5C Pad 5 (bowed)
0x5D Pad 6 (metallic)
0x5E Pad 7 (halo)
0x5F Pad 8 (sweep)
SYNTH EFFECTS
0x60 FX 1 (rain)
0x61 FX 2 (soundtrack)
0x62 FX 3 (crystal)
0x63 FX 4 (atmosphere)
0x64 FX 5 (brightness)
0x65 FX 6 (goblins)
0x66 FX 7 (echoes)
0x67 FX 8 (sci-fi)
ETHNIC
0x68 Sitar
0x69 Banjo
0x6A Shamisen
0x6B Koto
0x6C Kalimba
0x6D Bagpipe
0x6E Fiddle
0x6F Shanai
PERCUSSIVE
0x70 Tinkle Bell
0x71 Agogo
0x72 Steel Drums
0x73 Woodblock
0x74 Taiko Drum
0x75 Melodic Tom
0x76 Synth Drum
0x77 Reverse Cymbal
SOUND EFFECTS
0x78 Guitar Fret Noise
0x79 Breath Noise
0x7A Seashore
0x7B Bird Tweet
0x7C Telephone Ring
0x7D Helicopter
0x7E Applause
0x7F Gunshot (also commonly used as a drum kit)
Volume
Volume is a simple concept as well, but unlike most of the song arguments, it
must be a value less than 0x80, or else (for some whacked out reason) it acts
as a rest o.o
It follows 0xBE.
Panning
I need to investigate panning a little more, but I do believe that 0x00 is the
neutral value. Either that, or it's 0x0C. I believe that pan's range is from
0x00 to 0x0F; Atrius, correct me if I'm wrong.
Also, about 0xB1 - if your track doesn't end in it, it will cause the game to
crash and make that horrible noise some of us know too well o-o
Part 11: The Music
Hacking Run-Down (Shorter Version of Tutorial & Walls of Text)
Let’s say you’ve already hacked music before but you forgot how it works. Perhaps you just want to know the general idea of how to hack music or the general layout of GBA game’s music, whether that game be Fire Emblem (which is the focus of this tutorial) or not. This is the section for you. It won’t go into huge detail but it’ll still give directions and whatnot.
First you have to download all the programs related to music hacking. Once you’ve unzipped them and everything, take your MIDI and load it in Anvil Studio.
What we’re going to do here is have the MIDI formatted so it can be properly inserted. To start, we don’t want the song to repeat inside of the MIDI, because we’re going to have the game repeat the song for us. If the MIDI repeats within itself then we’re just consuming space. Use Anvil Studio to truncate the song such that it only plays once.
Next we have to get rid of all unnecessary tracks to minimize tracks. I don’t recommend inserting a song with more than 14 tracks. I’ve done 14 tracks but on occasion I actually have problems with them. It’s best to limit a MIDI to 10 tracks or under if you can, just to be safe. Delete any tracks without any notes (Anvil Studio will have some red text at the top left letting you know) and delete any tracks that are already muted. If you still have too many tracks, look for some redundant tracks that only have a few notes or have minor instruments that you can live without.
After optimizing the number of tracks you will need to equalize your track’s lengths. Making sure that you go to View-> Composer, select a track, go all the way to the end of it, and make sure that the track length and the song length match exactly. If it doesn’t, insert rests until the track length matches the song length. Make sure you don’t add so many rests to the track that it makes the song longer. If you make the song longer it’ll mess up the other tracks and it’ll also be adding rests to the end of the song, so when your song repeats, it will have a pause in between the repeat, and thus sound bad. That being said, optimize the song to be repeated properly with equal track lengths—with all tracks.
You can now save your MIDI (I recommend to use the “Save as” option in Anvil Studio to make a separate copy with the new edited MIDI). Go to where you saved the MIDI and drag it into the ‘midi’ folder inside of MIDI2GBA, making sure that the MIDI you are going to insert is the ONLY file inside of that folder. Double-click tr.exe in the MIDI2GBA folder and hit the ?? button. Click “OK” and then look in the two columns. If your song is on the left side, the program and MIDI worked fine… well, they should have, anyway. If it’s on the right side, something is up with the MIDI, in which case please refer to part 5 of the tutorial.
If you have not already applied the instrument patch for FE6/FE7, please do so. If there is no instrument patch for your game, what you can do is just apply the patch to a clean FE6/FE7 game anyway and copy the new data in the expanded section of the game (0x1000000 to the end of the game) and copy it to whatever game you are hacking. If you don’t get what I mean by this, then oh well, this tutorial is optimized for Fire Emblem hacking, but as usual I just keep FE8 out of the mix.
Anyway, the patch aside, load the ROM “song.gba” (located in the MIDI2GBA folder) into Visual Boy Advance or your GBA emulator of choice (VBA is the best GBA emulator though…). Press “A” or your keyboard alternative which will make the ROM play your inserted song. Make sure it plays nicely and whatnot. Then close the ROM.
You’ve now heard your song play in a GBA ROM, so hopefully that’s motivation to continue this music insertion process. Load your ROM (for example, your hacked Fire Emblem 7 ROM) and song.gba in a hex editor. I most definitely recommend using HxD because it has all of the features needed and that’s what I use. Copy all the data from 0x1B3BB8 to the end of the game into a new, blank file. Use a find and replace function to find “B1” and replace it with “B2 00 00 00 00 B1 00 00 00”. Do that to all instances—you should find as many “B1” bytes as you have tracks. Once you’re done with the find and replace function go to the end of the ROM and delete the ASCII text that has the name of your MIDI. Also delete the 4 bytes before the text as they are part of a stupid pointer that you don’t need.
Now copy the data in this file you’ve just done some stuff with and paste write (for HxD, use Ctrl+B, NOT Ctrl+V, Ctrl+V will INSERT data and possibly mess up your ROM) your data into a lot of clear, open space in your FE7 ROM. Make sure there is plenty of space just to be safe. You will need enough space for all of the data you are pasting so just look at HxD to find out how much space that exactly is.
Now go to the beginning of where you pasted your data and write that offset down. In fact, write every relevant offset down from now on. You will need it. I recommend just opening a notepad and typing important offsets.
Do a search for 0xB2. You’ll find the data B2 00 00 00 00 B1 00 00 00. The first 4 00’s are where your pointer will go. They point to the beginning of the track. This data here is the repeat code and for the track to repeat you need to tell it to play itself over from the beginning of the song. So the pointer should go to the beginning of the song, which I told you to write down the offset. Put it into pointer form (little endian, noting that offsets have an ‘08’ at the beginning of them, such that the offset 005C3984 will become 08 5C 39 84 which will finally be 84 39 5C 08) and enter it into that space of 4 00’s. Now right after the “B1 00 00 00” should be a “BC” byte. This is the beginning of the NEXT track. Write down the offset that the BC byte/write the offset of the beginning of the track. Do another search for B2 and do the same thing you just did with the pointer. Repeat this for every track until you end up noticing that there is no “BC” byte for the next track because you’ve added the repeat code for every track. After the final “B1 00 00 00” part you’ll end up at the header (TT 00 0A 00 where “TT” is the number of tracks your song has, in hex). After the first 4 bytes is a pointer to the instrument map. My patch inserts it such that all you have to do is turn the ‘08’ in that pointer to a ‘09’. All the other pointers in the song’s header are pointers to the tracks.
Assuming you listened to me and wrote down all the offsets of the tracks, you can now take those offsets and type them in “pointer form”, one after another, until you’ve replaced all the old track pointers with the new track pointers.
Save your ROM and go to your song’s song table. You can use Sappy 2005 to find this or look at the full-length tutorial for specific offsets for Fire Emblem games. Alternatively there is also an FE7 Music Array Editor which lets you edit the pointers and priority of songs in the song table/array. You’ll now need to find which song you’re going to replace.
Let’s say you’re replacing song 0x4C, whatever that is. That’s great. Each entry is 0x08 bytes—at least it is in Fire Emblem games, I’m not sure about other games—so multiple 0x4C by 0x08. Add this to the offset of the music array (for example, FE7’s music array is at 0x69D6E0). Go to that offset and replace the pointer here with a pointer to your new song’s header. Change the priority accordingly noting that 00000000 is for background music, 000100001 is for map music, and lower numbers are for various things, see the full-length tutorial for more details. XP.
You’ve now done a lot of stuff. Let’s think it over… we’ve formatted the song, got it converted to GBA format, added repeats, made an appropriate song header, made sure that the song has appropriate instruments (it’ll use standard MIDI instruments) and told the game where the song is as well as what priority it has. All we have to do now is make the game use that song. That’s up to you—if you’re replacing something like the title theme then that’s not a problem because the song already plays in game. If you’re replacing some random song or an unused song then you’ll have to make the game use that song yourself which is up to you. For Fire Emblem I suggest using the Chapter Data Editor, Sound Room Editor, or Boss Music Editor to get your song to play in-game if it doesn’t already.
Hopefully it sounds nice and well. If you need more help or if the song had some issues, please see the full-length tutorial (parts 1-9). This is mainly to give the general idea without completely explaining anything, dividing into parts, etc.
Part 12: Credits
& Thanks
My last part, I would appreciate credits and thanks for this tutorial. I sacrificed a ton of time creating this and learning how music works and stuff. I’m not trying to complain butaAll I ask is that if you use it, you put my name (Blazer) and Charon the Ferryman somewhere obvious, like in the credits. Thanks for your understanding – I hope this guide helped you.
Special Thanks To:
Atrius – Lots of information about music editing, helped me insert WAV’s (which is NOT explained here)
Charon the Ferryman – her tutorial on music editing helped and inspired me to make my own tutorial. She also gave me some one-on-one help with how to hack music and I took her method and just expanded on it and stuff like that.
Chapter 25: Music Editing with Zahlman’s Song Editor
First of all, you need to download
Zahlman’s song editor to do this. I suggest going to this topic- http://www.feuniverse.net/forums/index.php?showtopic=7874&st=0
Next, download and install Python.
It’s necessary.
Once that’s done, extract the files
from the download. Read the README and transcript just to give some background.
Who knows if it’ll actually help, but it wouldn’t be included if it wasn’t
meant to be read, right? XP
Now, double-click cli.py, and some
stuff’ll happen. Mainly a screen will come up with a disclaimer and a comment
saying that if you need ‘help’ you should press ‘help’.

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:
-
Commands
are not case sensitive. Filenames, probably yeah, just stick with doing proper
capitalization always, to limit the chance for problems.
-
Decimal
doesn’t have a prefix, while hexadecimal (AKA ‘hex’) has the 0x prefix. We know
this already (if you don’t, then this might be hard for you…).
-
Don’t
include extensions or quotes with filenames
-
You
can use relative paths or absolute paths. To make things easy, when the program
needs to access a file, make sure the
file is in the same folder as the program. That way you just type the file
name—no fuss, no mess.
-
(some
other stuff you can read if you want to—isn’t completely necessary to know when
using the program, but a good read anyway)
Now, onto actually using the program.
To start, you should know how to find more information on a command. Simply
type ‘help commandname’. So for example, to find out how the ‘open’ command
works, type ‘help open’.
The open command is the easiest. Just
type ‘open nameofrom’. So if my game is called ‘fireemblem8.gba’ I’d type ‘open
fireemblem8’. It’ll say “Loaded ROM from disk”.
Now, what to do with this ROM… Well,
let’s say I want to extract a song from this game and put it into Fire Emblem
7. First we need to know where the song is in Fire Emblem 8. This is where
Sappy can actually be useful. You can have it locate the song table for you and
grab the offset from it.
That being said, open Sappy 2005 and
then load the ROM you want to export from. It’ll (hopefully) find the song
table of the game you are trying to hack—if it doesn’t, then something tells me
the game doesn’t use the Sappy engine, so you can’t hack its music with these
methods. On the left it’ll say the offset of the song table.
For FE8, the song table is at
0x224470. Now, in the FE8 nightmare modules is a music list. This will actually
prove very useful because it tells us which song is which. One day I was
feeling nice and I uploaded this song list here, for your reference- http://www.feshrine.net/hacking/downloads/fe8_music_list.txt
Let’s rip Truth, Despair, and Hope
(TDH for short) because it’s an awesome song. It’s song 0x0D. Since each entry
in the song table is 8 bytes, we need to do (0x0D x 0x08) + 0x224470 to find
where the pointer to the song is. We can use Microsoft calculator or an online
hexadecimal calculator to do this.
If you don’t see options for hex in MS
Calculator, set your view to scientific (View-> Scientific). Then hit “hex”
at the top left.

D x 8 = 68, according to MS Calc. +
224470 (the program knows it is hex because it is in hex mode, so no need to
put ‘0x’ in MS Calc) is 2244D8. So we’ll go to 0x2244D8 in a hex editor.

I see 5C 2A 55 08. That’s a pointer.
It has little endian, i.e. byte reversal, so let’s flip it and we get 08552A5C.
Take off the ‘08’ (only the game needs to know about the ‘08’) and we have
0x552A5C. Finally, we have the offset we need.
Back to Zahlman’s Song Editor. All
we’ve done so far is ‘open fireemblem8’ to open our FE8 game (or in your case,
whatever game you’re using). Next we’ll do rip 0x552A5C to rip the song we
want.

Great! All 7 tracks were ripped.
Let’s consider ourselves lucky that the program supports those kind of tracks.
Now we can do two things. We can A)
save the data in a binary file or B) burn the data to another ROM. Let’s save
it and then burn it, for teaching matters.
Type in ‘save songname’ to save the
data to a binary file. Since I just ripped TDH, this is what I did:

Now it says we can still burn it if
we want. So let’s do that. First, we’ll open up the ROM we want to burn it to.
Mine is called ‘sc.gba’ so I’ll do ‘open sc’. Then I’m going to burn the song.
I need two offsets—one offset where the pointer to the song will go, and
another offset for where the song is going to be inserted to. I know I have
some free space at 0xD40000, so that’s solved.
But how do I know which pointer to
replace? I have to go to FE7 and do the same thing I did with FE8 to find a
song. We’ll say I am trying to replace song 0x5A, which is the main theme. 0x5A
x 8 + 0x69D6E0 (offset for FE7’s song table) = 69D9B0. So that is where my
pointer is going to go.
So I have to type ‘burn 0x69D9B0
0xD40000’ to make it repoint the song at 0x69D9B0 to the new song I am
importing to the offset 0xD40000.

Burning successful! Now I just have
to save my game. WAIT, DON’T USE THE SAVE COMMAND. Remember, the save command
is to DUMP SONG DATA. We’re trying to save our ROM. Do “close romname”. In this
case, I just opened ‘sc.gba’, so I do ‘close sc’.

YESZ. Saved ROM to disk. Alright, I’m
going to go test my song out now.
(*Tests…*)
It worked! Great! I know how to
import a song!
But, wait, this song is cool and all,
but I want some new music in my hack! I want to insert a MIDI!
Well, here we go. Let’s start all
over again—let’s close and re-open Zahlman’s Song Editor just to refresh
ourselves.
Before we continue, we need to apply
a patch. This patch supplies us with basic MIDI instruments. You can find it
here- http://www.feshrine.net/hacking/patches/Blazer%27s%20Instrument%20Hack.zip
But wait, thing is, this inserts data
at a place, and it may very well overwrite some of your data. This is why I
suggest you don’t apply this patch unless you have an unexpanded ROM, and if
your ROM is expanded, that will be a problem, so this method will not work for
you (D: D: D:).
Assuming you can apply the patch (use NUPS and make sure to hit ‘Notify’ on the left so that
it bypasses the fact that the patch will most likely not match your file) we
now have instruments to use so we can continue.
Let’s open our hack. ‘open romname’. Bam. Now, we need to convert a MIDI. ‘help convert’ tells us we need an offset for the instrument
map (my patch takes care of that) and the name of the MIDI. I am a very simple
person (lol), and have called my MIDI ‘cm’ for ‘custom music’.
I will give you the offset for the
instrument map (since it comes with my patch): 0x11AE42C. So we must now type
‘convert 0x11AE42C cm’. We can now save our data to a binary file and load it
later, or we can just burn straight to the ROM. I’m going to do the latter.
Like before, we need to know which
song to repoint. I am going to use the same song as before in FE7—song 0x5A,
the main theme. I’m using this because I can test the main theme right after I
load the game. I got the offset I needed already by doing 0x5A x 8 + 69D6E0 =
69D9B0. I have empty space at 0xD50000 so I will insert my song there. So I
type ‘burn 0x69D9B0 0xD50000’.
Now I save my ROM (‘close sc’) and
test.

I hope it works for you, because it
sure did work for me. It wasn’t perfect, but I didn’t expect it to be perfect,
since the program is still a work in progress, and the MIDI I used wasn’t great
either.
The tutorial on how to do it is a bit
long, but get the hang of it and it’s a 1-to-3 minute job. Enjoy your new song!
^_^
Chapter 26: Exporting Music with GBA2MIDI
There’s another way to import music from
other games besides Shadowofchaos’ very hard method and the ZSE (Zahlman Song
Editor) method.
You can use a program called GBA2MIDI
to convert a song to a MIDI and then use my Elf Method tutorial to insert that
MIDI. All I will do in this chapter is quickly teach
you how to export a MIDI.
First, you need your game. It has to
use the Sappy engine or this won’t work. You know that if you try and load your
game and it doesn’t load/the program crashes, it is most
likely because your game does not use this music format. It’s unfortunate, but
it happens.
Anyway, first download GBA2MIDI from
my site. Extract the files and open it up. You should see the following-

First, let’s load the ROM. Hit the
“…” at the top right to browse for the file and select it. Then, using the
browse button right underneath it, choose a generic file that the MIDI will be
exported to. No matter which song you choose, the MIDI will ALWAYS be called
this. Keep this in mind. Your screen should look something like this (but
perhaps with a different game).

Next, use the arrow keys next to
‘OFS:’ to choose which song to play. If you’re not sure which one to use, you
can try ‘convert’ (make sure you have ‘Play at once’ checked) and listen to the
song. To stop it, press the “Play/Stop” button. The same thing to play it
again.
The ‘list’ and ‘help’ buttons
probably won’t be too useful to you. The ‘list’ button can be used to supply
your own offset for a song table to the program, but the program has its own
way of locating the song table, so that shouldn’t be necessary. We already know
what every other button does except for the ‘close’ button which simply closes
the program.
Now for the checkboxes:
Play at once – plays the song right
after conversion.
Output Instruments – outputs the
instruments used in the song as WAVs in a subfolder. Useful if you wanted to
import the instruments, but it’s not very easy to do something like that
manually, so if you want to import instruments from another game, you’re going
to need ZSE (no way to get everything in one package, huh?).
Optimize for XG – sort of alters the
instruments used and stuff. Hard to explain what it changes, but you can hear
the difference. It often times affects drums.
Extract sequence data – I’m not too
sure what this is, actually, nor am I too curious about it.
Minimal conversion – same as above. I
don’t know everything, lol.
When you convert a song it’ll output
as whatever you told it to output. I suggest renaming the exported MIDI and
then you can use it for whatever you want—if you’re a hacker, then that most
likely means you will insert the MIDI into another game.
You’d only really use this method if
ZSE was not able to export the tracks because the tracks were unsupported.
Otherwise, ZSE > GBA2MIDI. That’s it for this chapter. =D
Chapter 27: Battle Background Graphics
Note: This chapter will only cover how to insert custom battle
background graphics. It may help with some other types of graphics, but it will
not cover other battle related graphics such as sprites or the battle template.
To start, what are battle backgrounds?
I gave this term to the backgrounds
that you see while you are fighting—not the platforms but the image behind it.
If you don’t like these, then you can change them. I’m not going to supply you
with the graphics to change to, but I will tell you how the whole shebang
works.
First, using Nightmare, load my
Battle BG Editor. Skip over to the Desert one (0x08). There are 3 pointers,
very much like the CG editor.
-
Graphics
are LZ77 compressed
-
TSA
is LZ77 compressed, unlike CGs
-
Palettes
are also compressed, unlike CGs
Oshi- everything is compressed. Well,
that’s actually not a problem. GBAGE can decompress said stuff.
However, there’s another trick to
this. Compressed and uncompressed TSA work differently. When you look at an
image with uncompressed TSA in GBAGE, you’ll notice that the whole image is
flipped, and every 240x16 line is also flipped. Compressed TSA ‘doesn’t have
this problem’ and works ‘normally’. With CGs, which use uncompressed TSA,
either the re-used TSA or FEditor Adv’s custom TSA takes care of the weird
image flipping. With battle backgrounds, you can just use my custom TSA and it
should handle all 16 colored images.
That being said, we’re going to need
a 240x160 image for the background. The WHOLE image doesn’t NEED to be apart of
the background—you can have just a background strip like the original games
do-but whatever, your choice. An important note about your image; battle
sprite’s feet are typically set to be 100 pixels down from the top of the
image. This means that if you are using a background and removing platforms
from the game (like I did with Tactics Universe, for those who have played) you
have to make sure there is a place to stand 100 pixels down.

You can stink
that image into MS Paint and see if you want, verily there is a place to stand
100 pixels down. Also, to ‘format’ your image, you need a portion of the
transparent color at the very bottom (the size of said transparent area is
240x8) and a pixel of the transparent color at the very top-left which will
become black (there IS a way to avoid having this pixel here, but it’s so
insignificant that I am not going to give you TSA to do it).
OK, we have a lot of things on our
mind with all the information I’ve given. What we’re going to do is take this
formatted image, make it 16 colors, save it, import it as a bitmap with GBAGE,
repoint the graphics, insert over the old palette, insert our own custom TSA to
use with any 16-colored image formatted like above, and then repoint the TSA.
Then good thing is, once you insert the TSA once, all you have to do is repoint
every custom battle background to use that TSA. That bad news is, you’re stuck with 16 colors, because I don’t feel like
inventing a method to not be stuck with 16 colors.
http://www.sendspace.com/file/brdyeq
There’s my TSA/map data. Download it.
Open it up in a hex editor like HxD.

Alright, cool stuff. Looks like a
bunch of numbers going straight up from 00 and on, with some LZ77 compression
in the mix. It pretty much is.
Copy that and paste it into your ROM
into some free space. Note the offset that you insert it at. In fact, write down all significant offsets from
this point on. You’ll find it quite useful.
So I’ll say I inserted mine at
0x1376100. Now we need to insert the palette and the image. To GBAGE!

Now, using the offsets given in the
Battle BG nmm, let’s load a background. I am using the desert one so the
graphics are at 0x2F758C.

Don’t worry about what you see in the
graphics area. It’s not going to look right until we load the palette and TSA.
So do that—my palette is at 0x2F83A8. Make SURE you select ‘Compressed
ROMpalette’ or else it won’t work.

Now, to load the (original) TSA.
0x2F8454.

Make sure that ‘Use TSA’ and
‘Compressed’ are both checked. If that’s done, your image should look like
this, or look like whatever background you were trying to load:

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.
Once that’s done, it’s time to insert
your formatted graphic. Hit “Import a bitmap” in the Image Control window. Time
to put up some write options.

Hit “browse” to locate the formatted
graphic you want to insert. Make sure that it A) has a transparent pixel at the
very top-left, B) is 240x168, C) is 16 colors (use Usenti’s
palette->requantize option to do that very quickly if you haven’t already—if
the image has too many colors to start with, after you make it 16 colors it
won’t look good, see the CG tutorial for more info on this). Next to “Graphics
offset” put in an offset to insert the graphics at (duh). Make sure there is
plenty of freespace and always write
down your offsets.
Do the same thing for the
palette-although you CAN just insert over the old palette, it doesn’t hurt to
repoint stuff anyway, and there’s less room for error
if you repoint data to freespace. Check all the boxes like I have.

Note how my palette is exactly 0x100
bytes BEFORE my graphics. So I left some space in between, even though my
palette should only take up about 0x20 (32) bytes. (Each color is 2 bytes, and
since the image is 16 colors, 16x2=32 bytes, which is 0x20 in hex. However
there’s compression and stuff so it doesn’t actually take that many bytes…) If
you want to be REAL safe, you can leave 0x200 bytes between the graphics and
palette, because palette data should never taken up more than 0x200 bytes.
Anyway, hit “OK” and then hit “OK” to
anything else. It should insert and look real weird because we haven’t loaded
our TSA yet. Load your TSA (mine is at 0x1376100-I remember because I wrote
down my offset :P) so I will do that.

I’m going to save my changes so far
(File->Save) and then see how my image looks so far:

Looks exactly like I thought it would
look. No complaints from me!
Now the final step-repointing. Reload
Nightmare and the Battle BG editor (remember that we close programs after we
move to another program to avoid overlapping changes and causing confuzltion)
and go to whatever background you just inserted over. In my very case, the
desert background (even though I inserted mountains…). The graphics and palette
should already be repointed thanks to GBAGE, so we just have to type in the
TSA. Again, mine is at 0x1376100, so I type 0x9376100.

Enter/ctrl+s to save nightmare, exit
out, test in VBA… and it should work. Wooh! Now that we know how to do this, it
should get a lot quicker (like most things). Let’s keep it up =D.
Chapter 28: Music Array Module
The Music/Song Table/Array module
helps 1) repoint music and 2) control the purpose of the music.
If you open up said module with
Nightmare, you’ll see a list of songs. Said list of songs gets cut-off after a
while because the Music List you commonly see skips some of the entries. Thus my solution was to simply leave
them unlabeled (unless somebody else wants to go back and label them).
Anyway, aside from being able to
repoint the song data with this module, you can change the priority. For most
songs used in cutscenes, during battle, etc. it’s the highest one (0x00). For
map music, you want to set it to 0x01000100 (the 2nd option) because
otherwise the song will stop playing after a battle. What’ll happen is it’ll
play to start, but after you go into an animated battle, it’ll stop playing,
and it won’t start playing again unless you reset the music in the game’s
options, suspend/resume, or wait until the next turn.
That’s all there is to it, really.
Chapter 29: Sound Room Editing
There is a nightmare module that can
edit the songs in the sound room. Open that up in Nightmare and we’ll get
started.
This is going to be a very quick
chapter. The song is which song plays in that entry. The song length is for
when you use random mode and there is a sort of music player. It has a time
limit of sorts to play the song, and it needs to know how long the song is. As
mentioned, 0x3B is about 1 second. 0x3B = 59 in decimal. What we have to do is
take how many seconds our song is (let’s say it’s 74 seconds) and multiply it
by 59. 74x59 = 4,366. In hex that is 110E (hint: I’m not a genius, I just use a
calc by Microsoft). If I’m right about how this works, then that’s what you put
for the time.
The ASM pointer is something used for
the songs toward the end—possibly something to do with unlocking the songs
without actually listening to them (IIRC they require some Mario bonus disk
thing). It’s nothing to worry about.
The text pointer is just the index
for the text. You can edit the song name in FEditor Adv by just typing in said
text ID/pointer/index/whatever you want to call it.
Chapter done!
Chapter 30: Chapter Unit Editing with Nightmare
There are two main ways to edit units.
The first way is to use Nightmare. The second is using the Event Assembler. The
latter is mainly for people who want to use custom events or want to add more
units. I’m going to cover the first way here in this chapter.
To start, in unit data, you will find
some empty slots. Don’t edit these—they are separators. The point of them is to
separate different groups of units. Allies and enemies of normal/hard mode are
separated, as are “event units”—units that only appear in events (NPCs and the
like)—and reinforcement units (units that show up mid-chapter as opposed to the
beginning).
The character and class are obvious.
The character’s leader just specifies who is the boss/leader
of that allegiance of units. Not really important.
The starting level is kinda obvious
too. Note that there are two options for each level/allegiance though—the 2nd
one is the autolevel feature which adds stats based off of ‘automatic
level-ups’. It’s mainly used for enemies so that a level 1 enemy doesn’t have
the same stats as a level 10 enemy, even if they use the same character data.
The loading coordinates is where they
start on the map. They will then move to the starting X-coordinates. Sometimes
this can just be the same, other times (during cutscenes) you may want to actually
have them move to wherever they are gonna be stationed. Note that coordinates
start from the top left (0,0) and X is to the right
while Y is to the left. If you are using a custom map, it is sometimes useful
to use Mappy to figure out which tile is what co-ordinate.
There are only 4 spots for items,
unfortunately. It’s kinda obvious what to do here as well.
AI is sort of tricky, if only a
little. AI stands for ‘Artificial Intelligence’ IIRC. There are 3 main AIs I
use. 00000000 – default attack anything. 00030900 – attack
anything within range. 03030920 – attack only if a
unit can be attacked without moving. The first is for main enemies, the second
is for guarding enemies, and the third is for bosses who guard a gate or throne
or something. There are also dropdown lists that have some other options
though, so you’re free to play around with those things.
Notes on How the Game Loads Units:
Once a unit is marked as an ally and
you play as them for a chapter, their data is in the save data, so all you need
to do to is load their character with their character #. Everything else is
insignificant (allies don’t use AI). However, if that unit is killed, that’s a
different thing—you have to reload their data again, from ‘scratch’.
Battle preps work similarly, however,
if a unit is killed OR their allegiance is changed, they will no longer be
considered an ally and will not show up in battle preps. How many units are
allowed in battle preps is dependent on how many characters you add. It doesn’t
matter which characters you add or where you add them because the player gets
to choose which characters he/she wants to use in the battle as well as
reposition them. However, if you put in 10 character slots, that means the player can only choose 10 characters, and the
characters can only be at the spots that you designated with the starting
co-ordinates.
Also, units will NOT show up in
battle preps unless they joined the chapter BEFORE. That means you can’t just
add a new unit to the unit data and expect them to show up in the battle preps.
They have to A) be secretly loaded the chapter before at the end cutscene, so
the game recognizes they are a part of the ally team, or B) loaded separately
from the battle preps through events. This is important-just adding a new unit
to the unit data when battle preps is on doesn’t do anything. As said, if
battle preps are off, that’s different.
Chapter unit editing in Nightmare can
get tedious and may sometimes be limiting or confusing, but that’s Nightmare
and hacking in general for you. If you don’t like it, learn how to use the
Event Assembler! :P
Chapter 31: Death Quotes
This will not teach how to edit death
quote text. Death quote text works the same as other text (even though I
haven’t actually taught how to edit text yet). This just edits the stuff in the
Nightmare modules.
We’ll start with death quote editor
part 1. If I’m right, this is Lyn’s mode death quotes. Character and chapter is
obvious-use 0x43 for most characters unless they have a special death quote in
a specific chapter (in which case specify the chapter, of course).

The pointer to the death event is a
pointer to a very short event that usually just contains a text event. For
example, if you go to CC0808 in a hex editor (for Lyn’s death quote, the first
entry) you’ll see “0D000000 A8070000 09000000 0A000000 00000000”.

The 0D part is the command for normal
text. A807 is the text pointer, but reversed due to little endian, so it’s
actually 7A8. This is what you go to in FEditor Adv to edit her death quote
text. The ‘09’ command clears the text and ‘0A’ ends the event. The 00s are
just insignificant nullifiers for the most part (but don’t edit them anyhow).
The main part to worry about is the A8070000 since that’s the text
pointer/ID/reference (from now on I’m calling it text ID for simplicity’s sake)
that you might want to change.
The trigger ID is something that will
take a bit of learning to understand. It’s like a number that references an
event. I call it an event ID. In this case, Lyn’s death quote has event ID 0x65
attached to it. This is important because when event 0x65 is triggered, the
game over scene occurs. Yes—if you want a game over scene after the death
quote, just give the character a ‘Trigger ID’ of 0x65.
The Trigger ID can also be used in
conjunction with other events though. You could set it to say, 0x0B, and then
make an event that happens when 0x0B is triggered. So you could make it so that
if you kill a unit, the chapter ends right after… Just like a boss. Yes, bosses typically have a Trigger ID of 0x02
(although their data is in death quote editor part 2, for whatever reason).
Similarly Trigger IDs 0x01 and 0x03 are also reserved, so it’s better not to
touch 0x01-0x03 and 0x65. Managing them is kinda hard but it’s feasible. I’ll
cover more about this in the next chapter.
Anyway, let’s continue to part 2 of
the death quote editors. This one is a bit better. It’s the same except it
gives us the option to just put a text ID instead of ALWAYS having to have an
event. But still, there is an option for an event if you want (if not, it’s
00). The Trigger ID works the same (I will cover more about it in the next
chapter).
Chapter 32: Event IDs
Well, my order is a bit messed up.
Maybe I should be teaching things like how to edit text and portraits before
going onto teaching event IDs. Maybe I should. Oh well.
Before you read this part of the
tutorial, please read the previous chapter on death quotes because it contains
information on Trigger IDs, AKA Event IDs.
^With that out of the way… event IDs
come from various places. One place is scenic events-there are event IDs there
that have many purposes. When we get to events, you’ll start seeing spots to
put event IDs ALL over. There’s even codes that can
trigger them on and off ‘manually’.
One thing is that the event IDs are
shared-meaning you shouldn’t use the same one in a chapter, unless it’s 0x00.
If an event has an event ID of 0x00, it can happen infinitely (unless something
ELSE is stopping it from happening-like if you visit a village and the village
gate is closed, you can’t visit the village, regardless of whether the event ID
is 0x00 or not). Thus events with 0x00 are like ‘generic events’ and don’t have
any special properties to them.
Event 0x01 is for something—I think
boss battle quotes. Event 0x02 is for death quotes, I believe. Event 0x03 is
for the seize event. Event 0x65 is the ‘game over event’-if this is triggered,
the game will go the game over screen. I would say almost anything after event
0x65 is a ‘perma-event’, meaning that the event ID remains in use after every chapter. Earlier event IDs,
like 0x01-0x64, are not permanent. After the chapter is done, they get reset to
not being triggered.
Actually, I have a confession. I’m
not sure which events are permaevents and which are not-I only have a VERY
vague idea. It shouldn’t be a problem though, hopefully. Oh well. :\
So, back to where event
IDs come from:
-
Scenic
events
-
Location
events (villages, seize)
-
Death
quotes
-
Battle
quotes
-
Triangle
attack battle quotes (yes, even this)
These are all shared. Meaning if say,
event 0x14 is triggered because of a battle quote, and an event with ID 0x14 is
supposed to happen in a scenic event, it won’t happen, because event 0x14 was
already triggered (and the game is trying to avoid having the same event happen
twice). Thus you have to manage which events you use and how you manipulate
them.
With this background, you’re ready to
step into events! Unfortunately, events are chapters ahead of us. D=
Chapter 33: Battle Conversations
There are two types of battle conversations: specified and unspecified. Specified means it is between two specific characters, while an unspecified battle conversation can happen when one character fights with any character.
We’ll start with the unspecified battle conversation module by Icy Toast. The character and chapter are obvious. Now depending on your version of this NMM, you may have ‘Convo Text’ and ‘Convo Bank’, or just ‘Convo Text Pointer’. Regardless of where it’s broken up into two slots or not, it’s just the text pointer that is used.
For information on trigger IDs, see the other topic. If you wanted a battle conversation to occur everytime you fight a unit, you could use 00. The default value for boss battle convos (assuming there aren’t any special properties) is 01. If you wanted an event to happen after a battle conversation, you could set it to something else and make an AFEV event happen when said event ID is triggered. You’ll learn about after events (AFEV events) in the event chapters of this tutorial.

The specified battle conversation editor works similarly, except there are 2 characters, and the event ID is not 01. It’s some other value that the game uses. Remember that event IDs for a chapter are shared between battle conversations and scenic events/the main events, so don’t have two events with the same ID. L
The ‘event data pointer’ can be used in place of a text pointer. It’s really only used when there’s special properties for a battle conversation-for example, if there is a different battle conversation for Hector’s mode and Eliwood’s mode of a chapter. It’s just a pointer to an event-you have to either edit the event in hex or make an event with the EA, specify an exact location for that event, and then put the pointer to that event in the battle conversation ‘Event Data Pointer’ slot. It’s something you most likely won’t use in your hack, so I wouldn’t worry about it too much.
That’s all there is to it. Another chapter down, w00t!
Chapter 34: Triangle Attacks
Before I go on writing a tutorial, I’m going to post some notes I have on triangle attacks.
Notes on Triangle Attack:
Character Editor Nightmare Module:
Ability 3, 0x20 is Triangle Attack. This is for Pegasus Knights. There is
another triangle attack option, 0x40. I am almost certain this is leftover from
FE6 as the armor knight triangle 'skill' is 0x40 in FE6. However, this triangle
attack could probably be used for something else too.
0xC9F130 - Triangle Attack Convos
Character, chapter (0x43=any), Text ID, Trigger ID
(Info thanks to NL)
Should be able to expand to allow more triangle attack convos, for say,
alternate combinations of triangle attacks (like if there are 4 pegasus
knights) or usage of the currently unused triangle attack skill (just add more
convos, set the skills, and if the game already has the code there [just
unused], then it should work).
Triangle Attack Graphics- Start around image 495 (+ or - a few) in GBAGE
0x2E5CB8 - First Graphic
Order:
PegasusKnight (Lance)
FalcoKnight (Lance)
FalcoKnight (Sword)
PegasusKnight (Lance) (2nd sheet)
FalcoKnight (Lance) (2nd sheet)
FalcoKnight (Sword) (2nd sheet)
ArmorKnight (Standing)
General (Spear) (Standing)
General (Axe) (Standing)
General (Handaxe) (Standing)
ArmorKnight (Attack Motion)
General (Spear) (Attack Motion)
General (Axe) (Attack Motion)
General (Handaxe) (Attack Motion)
Pointer to ArmorKnight graphics at 0x6AAC8 in ASM
This means that they are probably already coded into the game and leftover from
FE6, but simply unused (most likely since there aren't 3 armor knights to do it
with). This also means that it's likely that one can use the Armor Knight
triangle if they just set it up.
Data continues right after the final graphics (i.e. there is more graphics
right after the General handaxe graphics) meaning
miscellaneous data (animation and whatever else) is probably both before and in
the first megabyte's span of data.
0x2E58BC - compressed data right before graphics. Slight resemblance to TSA at
first but then diverts from this and shows signs of graphical data (0xF0 0x01,
which is in essence blank graphics). Idk if it has to do with anything.
In any case the only way to tell how this works and what is relevant or not is
through ASM. One could edit the existing graphics, triangle convos, who has the
skills, and test the usage of the unused [once used as FE6's armor knight]
triangle attack.
For palettes, I believe that the palette of the surrounding characters is
used... that is, use the battle reference module to get the palette of the
Pegasus Knight sisters. I tested this and it loads
fine and looks great.
Farina's Palette- 0xFDA00C
Fiora's Palette- 0xFDA07C
Florina's Palette- 0xFDA0EC
Alright. Now that that is off my back, I can tell you how to make use of this information.
To start, there’s a module called the Triangle Attack Convo Editor or something like it. At least, there is such a module for Fire Emblem 7. I’d like you to open that up in Nightmare.
The character, chapter, and convo value/text pointer work as they always have. If you don’t know how these work, I suggest learning about death quotes and battle conversations first.
The ‘trigger ID’ also works as it usually does. There’s a whole chapter on these, so I won’t explain this either. Which means we’re almost done here.
By default there’s only room for 3 conversations. But what if you want more than 3 conversations? There could be many reasons for wanting more conversations—if there’s another Pegasus Knight, if there’s a special conversation for a chapter, or something else. Well, to do this, you have to expand the table. To expand it, you have to first move the data to empty space and then repoint it. The details? I’ll cover them in a later chapter.
Now, how does the game know which characters have the triangle attack ‘ability’? The keyword is ‘ability’. It’s in the character abilities. Load up Fiora in the character module and scroll down all the way to ‘character ability 3’. You should see 0x20 – Triangle Attack. Bam. There’s also another set of triangle attacks with the value 0x40. I think this was originally the armor knight triangle attack, but when I tested it out myself with 3 FalcoKnights, it showed FalcoKnights, not Armor Knights, so maybe the game checks to see if there are 3 armor knights first. I really don’t know, but the alternate triangle attack is there and ready to use.
As for palettes, the palettes of the FalcoKnights that cut-in are from the other characters palettes… err, that means that as long as the palettes of whoever is in the Triangle Attack are working palettes, they should work/look fine during a triangle attack.
If you’re really into graphic editing, you could try fiddling with the jumbled graphics that I noted in my notes (I gave offsets and some other information). However, it’s not very easy, nor is there a lot of freedom with it, so I wouldn’t exactly suggest it.
With this, have fun editing triangle attack conversations, making your own triangle attacks, etc.!
Chapter 35-36: The Animation Modules & Repointing Tutorial
In this chapter we’re going to quickly go over the modules in the ‘Animation’ folder-at least, the modules we haven’t gone over yet.
First, we’re going to start with the Animation Pointer Table Editor. It’s a table for both reference and repointing that has relevant offsets for each animation. The header is just some text that I probably wouldn’t edit. The ‘mode divider’ is also something I wouldn’t edit. Frame data can be edited but you have to know how and it’s not something that’s really suggested or needed very often. I might cover the basics of how to do it. I wouldn’t suggest editing anything there except maybe the palette. The palette is like, the generic class palette, for generic units. Yeah. :\
Next, the Item Animation Reference Pointer module. All it can possibly do for you is repoint two pointers to something else. Since it uses a dropdown, you are limited to only repointing it to one area.
Since we don’t want to be too limited in our hacking, I’m going to teach you how to repoint it in a hex editor. Skip this if you don’t care about expanding/repointing data, especially if you don’t care about this data at all. All it does is repoint Spell Associations so that you can add more weapons to the list.
Go to offset 0x052B24. If you’re wondering how I figured this offset out, all I did was edit the Nightmare module (.nmm file) in a text editor and looked under the line that says the name of the module.

As said, this is sort of limiting. We can just go to that offset in a hex editor and repoint it to whatever we want.

If you don’t know, ‘pointer form’ in a hex editor is (0x08000000 + offset) – reversed. The default offset to animation lists or whatever is 0x00C999C0. I add 0x08000000 so it becomes 0x08C999C0. Then I reverse the order of the bytes (a byte is like two digits). 0x08 C9 99 C0 becomes C0 99 C9 08. At that offset I told you to go to, we see exactly those bytes. If we wanted to repoint it to some other blank space, we’d take the offset of the blank space and reverse it like I just did, then just type it in.
However, if you remember, the NMM has TWO pointers to repoint. Well, to find the other pointer, we’ll just search for its bytes. So we do a search (typically ctrl+F) in our hex editor of C0 99 C9 08.

(Make sure to set the input/datatype to hexadecimal, not decimal, text, or something else.)

Alright, we found another instance. That’s the only other instance there is. So we repoint this one too. After that, we’re almost done.
Now we’re going to copy the old data to the new area. Let’s say our new area is at 0xD70500, just for teaching purposes. We’re going to copy the data there where there is plenty of free space to be used. The point of free space is to add more things to a list or table.
The purpose of repointing is like moving books to another room. You can only put so many books into a room before you get to the walls and you can’t put anymore. So we just designate another room for all the books. This room has PLENTY of space though, so we can add even more books. However, we can’t have an infinite number of books, because the building has its limits as well.
The equivalent:
We can only put so many entries of data (in this case, item animation/spell animations) into one area before we run into other data. So we have to designate another area to use, and then move all of our old animations there. Then we can add our own item/spell animations there.
Hopefully this is all starting to make sense. We did the designating (repointing), so now we have to move our stuff. Go to 0xC999C0 and copy all the data from there to 0xC9A1B0 (but don’t include that last 0xFF byte).

Copy it (ctrl+C) and paste it into our new area. Per my example, I am putting it at 0xD70500. You know how to paste data, hopefully (make sure you are PASTING data, NOT inserting new data, if you insert new data it’ll shift over the offsets of other data and your ROM will get royally screwed).
Now save your ROM in your hex editor. We’re going to do one last thing. To make sure we don’t have to edit data in hex, we’ll edit our Nightmare Module to edit the data at our new offset.
The “repointing module” is the one we were using before I said “this has its limits, it’s lame”. The actual data we are repointing is the item animations, AKA spell associations. So go to the spell association editor and make a copy of that .NMM file. Make a copy for your repointed table of data.

Call it something to remind you that it’s repointed. Now open it with a text editor (my NMMs are already set to open with a text editor-if yours don’t, just double-click them, hit “open with a specific program” or something like that, and choose Notepad or your preferred text editor from the list of programs).
It should look like this:

We’re going to A) rename the module to remind us that it is repointed, B) change the offset from 0xC999C0 to 0xD70500/your equivalent offset, and C) change the # of entries from 127 to however many entries you want (I suggest 150 because you probably won’t need anymore than that many, and if you do, good luck on actually making over 23 custom weapons and items). Here’s my changes to show you what I did (you should be able to figure out what to change based off of my image and what I said).

Save it and you’re ALMOST done, I’m serious this time. Now you just have to open up your new module and you’re ready to start editing. You’ve learned how to repoint and expand data, as well as customize your own Nightmare Module for it! Congrats!
Unfortunately, this chapter is not yet done. FE7 has one more animation module. A “custom item animation list” one. The module is just an outdated version of the Spell Association editor that was made to be at 0x9000000 instead of 0xC999C0. In other words, like the Item Animation Reference Pointer module, you probably won’t make use of it anymore. (Still, you have to admit Pukachi was nice to make all these nightmare modules to help us out with our hacking. After all, she started most of the thing, some years ago… before that, only a few people did FE hacking… myself not included… L)
Chapter 37: Support Editing
This is a tedious job, especially for a sole hacker to do, but sometimes it is worth it. Personally the Fire Emblem games that had legitimate supports (where the characters actually had personality and background) were some of the best.
Anyway, if you have outdated modules, you may have ‘Custom Support Pointer Editor’ and ‘Support Pointer Editor’ modules. The former is used for expansion but it’s limiting, and thus trash.
We’ll start with the Support Bonus Editor. It lists the affinity and the bonuses that said affinity gives. Attack and defense bonuses are stats while the others are percentage boosts.
The support compatibility editor is a list of what supports a character has. A character can have a max of 7 supports, and to my knowledge, can have no more than 4 “active” supports at a time (supports that actually have reached at least level C and can be seen on the menu).
The initial support count is the count towards getting the next level of supports. Some general values for supports are:
- 100 for C level
- 180 for B level
- 241 for A level
These aren’t exact/for sure. They are just general ranged if you want a set support. Otherwise, you can have it set at 0, or something higher. Two characters that already have some relationship with each other (like Eliwood and Hector) are more likely to support realistically, and thus have a higher initial support count.
The support gain per turn is how much the support level grows for every turn they are next to each other. A higher the number the quicker it grows (although you don’t see the effect of a support relationship growing until you have the next level’s support conversation).
To make use of these entries, there is a pointer in the character editor called the “Supports Data Pointer”. It points to a specific slot as opposed to a reference byte like 0x00 for Eliwood or 0x0A for Oswin. This actually makes it somewhat easier to make use of. :\
By the way, each entry is 0x18 bytes IIRC, meaning pointers will be 0x18 bytes apart. This information may or may not be useful to you.
The Support Convo Availability Editor just specifies which conversation values (text pointers) there are for the C, B, and A level support conversations between two characters. By now you should know enough about hacking that I don’t have to explain anything here.
Everything in the Endings Editor should be obvious so I’m not going to even cover that. Thus, we’re done with learning about supports and endings!
Chapter 38: Miscellaneous Nightmare Modules
In this chapter I’m going to quickly run through what some other nightmare modules do.
FE6:
Army Editor – same thing as chapter unit editor, pretty much.
Battle Screen Editor – edits the layout of the battle screen. I myself don’t really get how to use this, and thus am not covering it.
Critical Bonus Editor – edits the critical bonus. (Default: 15)
Event References – a module for the event table. It helps with knowing where event data is located as well as repointing.
Level Cap Editor – edits the level cap. (Default: 20)
Promotion Level Editor – edits the level at which a unit must be higher than to promote. (Default: 9, meaning level 10 or higher)
Shop Event Editors – edits the events for shops (location, shop pointer, shop type).
Vendor/Armory Editors – edits the contents of vendors and armories.
FE7:
Afa’s Drop Bonus Editor – edits the bonuses given by Afa’s drops.
AI Recruitment Editors – edits info about “AI recruitments”, where an NPC or enemy unit moves to and talks to a character in order to be recruited. Clarine of FE6 and Xane of FE12 are just a couple examples.
Battle Screen Editor – edits the layout of the battle screen. I myself don’t really get how to use this, and thus am not covering it.
Beta Modules – for editing the FE7 beta.
Chest Editors – edits the contents of chests.
Critical Bonus Editor - edits the critical bonus. (Default: 15)
Event Pointer Tables – can edit the individual event pointer tables of chapters. Not very useful anymore.
Event References - a module for the event table. It helps with knowing where event data is located as well as repointing.
Level Cap Editor - edits the level cap. (Default: 20)
Luck Cap Editors – edits the luck cap. Comes in two parts. (Default: 30)
Promotion Level Editor - edits the level at which a unit must be higher than to promote. (Default: 9, meaning level 10 or higher)
Shop Editors – edits the contents of shops.
Seize Throne Editors – edits the location of thrones that can be seized. Currently incomplete.
S-Rank Bonus Editor – edits the bonuses of S rank weapons.
Vulnerary Editor – edits the amount of HP restored by a vulnerary. (Default: 10)
World Map Event References – A list of pointers for world map events, the one you see before a chapter actually starts.
FE8:
Battle Screen Editor – edits the layout of the battle screen. I myself don’t really get how to use this, and thus am not covering it.
Chest Editors – edits the contents of chests.
Critical Bonus Editor - edits the critical bonus. (Default: 15)
Event Table Editor – same as the Event References editors for other games, just for FE8, and with a different name.
Level Cap Editor - edits the level cap. (Default: 20)
Palette Association Editors – edits which palettes go with which characters and classes.
Promotion Level Editor - edits the level at which a unit must be higher than to promote. (Default: 9, meaning level 10 or higher)
Recruitment Editors – edits recruitments.
Reinforcement Editors – edits unit reinforcements.
Shop Editors – edits the contents of shops.
Summon Editors – edits which classes can summon and what character/class is summoned.
Vulnerary Editor – edits the amount of HP restored by a vulnerary.
You may be wondering “hey, wait, we still haven’t done the Chapter Data Editor yet!”. That’s because I’m saving the “best for last”. Sort of. Something tells me the Chapter Data Editor is going to be a long chapter, so I am going to try and keep it as short as I can, but it has a lot of important information related to map and event editing and creation. All this, after something else. :P
Chapter 39: Loading FEditor Advance
What, I’m dedicating a whole chapter just to loading FEditor Advance?
Eh, it’s not that big a deal, I dedicated chapters to minor modules like the Arena Class Editor. Plus I’ve seen so many topics on getting FEditor Advance to work that I feel I must make this chapter.
Step-by-Step Tutorial:
1. Go to the Java website. http://www.java.com/en/download/manual.jsp
2. Download the program by clicking on it. If you are a Windows user, use the online download if you don’t know what to do. There are instructions on how to download and install Java. For example, a windows user would look to the right where it says “instructions” and click there, getting them to this page- http://www.java.com/en/download/help/windows_manual_download.xml.
3. Save the file to your desktop or run it automatically. If it is saved, double-click and install. Wait, why am I typing this, the website gives instructions.
4. Once Java is installed, restart your computer. Just to be safe. There is no harm in restarting your computer, and I want this to be fool-proof. So do it.
5. http://www.java.com/en/download/installed.jsp Test your java. It should work. If it doesn’t, re-install while following the directions.
6. Download FEditor Adv. You can find a link to the topic on my website, or you can just google “FEditor Adv” and it should show up on Fire Emblem Universe, a bunch of crappy forums.
7. Extract the files. To do this, use 7zip. To download 7zip, go here- http://www.7-zip.org/. Note that 7zip files can also be extracted with winRAR. Once it is installed, right-click and hit ‘extract here’ or something like that.
8. A folder should come up. I suggest you move this folder to wherever you keep your hacking stuff (as opposed to just lying about on the desktop; organization is key to a successful hack).
9. Open the FEditor Adv folder.
10. To run FEditor, you can either A) click the ‘run’ file or B) go to the dist folder and double-click FEditor Adv.jar…
11. It will ask you to open an FE ROM. Open up an English, U.S.A. release GBA Fire Emblem ROM of your choice. For FE6 (Sealed Sword/Binding Blade/Fuuin no Tsurigi) the ROM should be the Japanese ROM patched with the translation patch found on romhacking.net. Please do not ask me for ROMs, I will flame you. :D
12. If your ROM is edited, it will most likely give you an error message. Just hit “OK” or “Yes” or something.
Congratulations. You have hopefully followed my overly specific directions and successfully loaded FEditor Adv. If you have not, I would check the following:
- Program, make sure to have the latest version *ironically, I am using an older version because FEditor Adv is not compatible with some of my older hack, and yet I am telling you to use the latest version at all costs*
- ROM, it should be the (U) version. Check the ROM# as well, and for FE6, use the RHDN patch, as said.
- The ‘cleanness’—if you’ve made massive edits and most importantly edited something that the program uses to check which FE game it is, that could be a problem. Like the ROM header, for instance. IIRC FEditor Adv checks something in the header, so if you’ve edited that, it could very well be a problem.
- Your java. I can only hope you installed it right…
- Your file extraction. If by somehow you extracted it wrong, the files could get corrupt, although the chance of this happening is very low, I think…
If it’s still not working, then check yourself. No, really, I don’t know what else to do. I can’t write more than a page on how to load a program. It’d suck if you couldn’t get it loaded, but plenty of people can, so it’s not the program, at the very least. Sorry if that happens to you. :\
With FEditor Adv loaded, we can now use all of its features! Huzzah!
Chapter 40: Text Editing with FEditor Adv
The reason why this chapter is called ‘Text Editing with FEditor Adv’ and not just ‘Text Editing’ is because there ARE other ways to edit text, but they are kind of inferior and obsolete. So much so that I am not even going to cover it in this tutorial, because there is no point in teaching old methods if the old methods are inferior in almost all ways.
Anyway, open up FEditor Adv. The first thing I see is a Memory and Free Space Manager that I have no idea how to use. Sounds pretty bad, right? Well, I’ve gotten along without it just fine… That’s probably the only major thing you won’t find in this tutorial, unless someone else submits a chapter on how to work it.
Go to Tools-> Text Editor. Bam, text editor loaded. It should look like this:

It starts at text entry 1. It goes as far as text entry 133D. The input index is what text entry is being loaded at the moment. The max index is as far as it goes-you can change it if you want to, but you shouldn’t have to change it unless your game is like 40 chapters long and text-heavy.
The find and replace boxes should be simple. You can find some text in the script or you can find AND replace some text in the scrip. Just type in the text and hit “find”, and hit “find next” to find every other occurrence after that (find previous obviously just goes back an instance). It works like a hex editor, except it’s a tex-t editor. “Replace all” replaces all occurrences of something.
I don’t know what the “Use Reg ex?” does. It’s probably not too important.
Now, actually editing text is easy. There are some control codes you should know and stuff but mainly it’s just loading portraits, typing text, and pauses. I’ll get into the details later, but when you make changes to text, you have to hit ‘apply’-you have to do this after EVERY ENTRY, not after you’re all done with text. Wait to press it, you’ll regret it. :P
The ‘revert’ button just undoes applying something. I think. The ‘dump…’ button dumps the script to a text file (and it asks you where to save it/what to call it). The insert is the opposite, it lets you insert a dump script. The idea is that you dump a script, edit it, and then re-insert it. And when you’re done with the text editor, you press ‘Quit’.
Now, about actually making text. You have to load portraits, and to do that, you use the following code:
[LoadFace][0xPP][0xVV]
0xPP is the portrait value. You can find a portrait list in the folder with the character and class editor modules, and probably some other folders too. 0xVV is almost always 0x01, except for when you’re in a village, house, or other type of scene. To have a portrait be the portrait of the current character in use, use [0xFF][0xFF]. So in a village you’d just use that and whatever character is used to visit the village will show up with their portrait.
However, there’s one more aspect to loading Portraits. Positioning. There are various positions. You just put the positions right before the [LoadFace].
[OpenFarLeft]
[OpenMidLeft]
[OpenLeft]
[OpenRight]
[OpenMidRight]
[OpenFarRight]
[OpenFarFarLeft]
[OpenFarFarRight]
To move a portrait from one position to another, just change the ‘Open’ to ‘Move. So to move to the Far Right, you’d do [MoveFarRight]. However, note that when a portrait moves, the way they are facing does not change, so you have to clear a portrait and then reload it to change position. To clear a portrait, use the code [ClearFace]. [ClearFace] is also commonly used in special battle conversations; after every line one character says, their portrait is cleared, because during a battle there is only room for one person to be talking (lol).
When typing your text, you can’t just type straight through. After about a max of 30-35 text characters (it depends on how big the characters are), you should make a new line.
01234567890123456789012345
About that long. That’s actually only 26 numbers, but trust me here. However, sometimes if you do this you’ll have one line that has reached its max length and another line that only has one word. It looks odd, and so I suggest evening out the length when ‘formatting’ text.
Text text text text text text text
text.
Should become
Text text text text
text text text text.
It’s better for reading and professionality. Another thing that helps a lot with reading is pauses where you have to press the “A” button to continue the text. To make one of these “blue-arrow pauses” (a blue arrow appears in the corner when it happens), use [A]. This is best used every two lines, but once in a while you may make it 3 lines. The original game sometimes has pauses in the middle of sentences, which is kind of odd and unprofessional, but it means that if you don’t care so much, use [A] every two lines and whoever plays your game shouldn’t miss any text.
[.] is a very quick pause. Sometimes you’ll see it randomly but it’s not random—just don’t worry about it. […..] is a slightly longer pause. [ToggleSmile] makes a character smile, [ToggleMouthMove] makes their mouth stop moving (used for ellipses), [Yes] asks a Yes/No question with “Yes” selected to start (No does the same but with “No” to start), [CloseEyes], [OpenEyes], and [HalfEyes] are obvious, and for all the other interesting