Jump to content

Arch's Really Long Event Tutorial


Arch
 Share

Recommended Posts

Introduction

Welcome, reader, to Arch's Really Long Event Tutorial. This is the second edition of my Chapter Construction tutorial adapted for Serenes Forest (where I can't abuse my admin powers and have 1 chapter per post). I figured I would bring this tutorial over here in hopes more people would be able to learn from it. Before we begin I do understand that my writing skills are lacking, I ask for your tolerance. This guide mostly revolves around using the Event Assembler to create chapters. This guide assumes you have a basic knowledge of Fire Emblem hacking. Please do not attempt to learn event editing as your first bit of FE hacking. Before attempting to dive straight into the guide you'll need the proper tools.

- Nintenlord's Event Assembler

- Mappy

- Nintenlord's .MAR Inserter

- A hex editor (I personally use HxD)

- Nightmare Modules

- Xeld's FE Editor or the Text Editing Suites (for text editing).

Maps

Before you can start coding events you'll need a map to place the events on. Mappy is the best way to accomplish this. When your masterpiece of a map is complete go to "File" and select "Export" and then put a check mark in the box marked "Map Array (?MAR)" and then press "Ok".

Now that we've got the .MAR file we use Nintenlord's .MAR Inserter. Open it up and fill out the required information. If your starting chapter hacking you should already know what an offset is. Open up your ROM and find some empty space (there's quite a bit in the 00D00000 area or you can make your own). When you've found the offset you wish to write the map to put it in the "offset" box. Make sure your map's dimensions are correct (mappy will tell you the dimensions of the map).

When your map is inserted it's time to put the finishing touches on. First off open up the Event Table Nightmare Module. Find the chapter who's map you wish to replace and replace the offset of the original map with the offset of yours. Your map is almost ready! The only thing left to do is to open up the Chapter Data Nightmare Module and fix the tileset. When the module is loaded select the proper tileset for the chapter to use.

Congratulations! Your map is all inserted and ready for coding!

Setting Up

If your thinking this is going to be easy like the map, then you are dead wrong! Event coding is a tricky process and you will often find yourself frustrated at the fact that errors are quite difficult to spot unless their major errors.

I, the author of this tutorial, am not responsible for any head-to-desk injuries that may result from event glitches.

I will be teaching you using the Event Assembler because that is the easiest way to make events.

So, the first step is to create a .txt file. Name it whatever you wish.

Now, the first thing you need to know are the main types of events. There are turn-based events, location-based events, character-based events and miscellaneous events.

We start out by inserting the following code at the very top of our event file.

#include EAstdlib.event

You don't need to know what that does, Nintenlord is the only one who needs to know. All you need to know is that you need to have that line of code at the top of your file, got it?

Next hit the 'Enter' key at least twice (I prefer twice), and insert this next lil' item.

org 0xC9C9C8+(4*0x??)

This is going to do something extraordinarily useful for us. This edits the event pointer table with a pointer to your new events. All you have to do is replace the ?? with an actual value. When picking a value I find it useful to reference Nintenlord's notes on the pointer table.

[spoiler=Nintenlord's Notes: C9C9CC]0x00 None

0x01 ObjectSets: Sacae Plains

0x02 Palette: Sacae Plains: Light Sand

0x03 Set confic: Sacae Plains

0x04 Prologue Map

0x05 Animation: Water (Fields; Plains; M&S)

0x06 Prologue Events

0x07 Palette: Sacae Plains: Dark Sand

0x08 Ch.1 Map

0x09 Ch.1 Events

0x0A ObjectSets: Plains&Castle

0x0B Palette: Plains&Castle: Bright

0x0C Set config: Plains&Castle

0x0D Ch.2 Map

0x0E Ch.2 Map Tile change

0x0F Ch.2 Events

0x10 ObjectSets: Town&Docks

0x11 Palette: Town: Cliffs&stone road unusable

0x12 Set config: Town&Docks

0x13 Ch.3 Map

0x14 Ch.3 Map Tile change

0x15 Ch.3 Events

0x16 ObjectSets: Fortress&Fields

0x17 Palette: Fortress&Fields: Dawn

0x18 Set config: Fortress&Fields

0x19 Ch.4 Map

0x1A Ch.4 Map Tile change

0x1B Ch.4 Events

0x1C ObjectSets: Fields

0x1D ObjectSets: Fields

0x1E Palette: Fields: Sunny weather

0x1F Set config: Fields

0x20 Ch.5 Map

0x21 Ch.5 Events

0x22 Palette: Town: Cliffs&ship unusable

0x23 Ch.6 Map

0x24 Ch.6 Map Tile change

0x25 Ch.6 Events

0x26 Ch.7 Map

0x27 Ch.7 Map Tile change

0x28 Ch.7 Events

0x29 Palette: Plains&Castle: Neutral

0x2A Ch.7x Map

0x2B Ch.7x Map Tile change

0x2C Ch.7x Events

0x2D Ch.8 Map

0x2E Ch.8 Map Tile change

0x2F Ch.8 Events

0x30 Ch.9 Map

0x31 Ch.9 Map Tile change

0x32 Ch.9 Events

0x33 Palette: Fields: Darker; suitable for rain

0x34 Ch.10 Map

0x35 Ch.10 Map Tile change

0x36 Ch.10 Events

0x37 Ch.11E Map

0x38 Ch.11E Map Tile Change

0x39 Ch.11E Events

0x3A Palette: Plains&Castle: Castle Ostia/Laus

0x3B Ch.11H Map

0x3C Ch.11H Map Tile Change

0x3D Ch.11H Events

0x3E Ch.12 Map

0x3F Ch.12 Map Tile change

0x40 Ch.12 Events

0x41 Ch.13 Map

0x42 Ch.13 Map Tile change

0x43 Ch.13 Events

0x44 Palette: Fields: Night

0x45 Ch.13x Map

0x46 Ch.13x Map Tile change

0x47 Ch.13x Events

0x48 Palette: Fields: Darker; suitable for rain

0x49 Ch.14 Map

0x4A Ch.14 Map Tile change

0x4B Ch.14 Events

0x4C Ch.15H Map

0x4D Ch.15H Map Tile change

0x4E Ch.15H Events

0x4F Ch.15/16 Map

0x50 Ch.15/16 Map Tile change

0x51 Ch.15/16 Events

0x52 Palette: Plains&Castle: Castle Caelin

0x53 Ch.16/17 Map

0x54 Ch.16/17 Map Tile change

0x55 Ch.16/17 Events

0x56 Palette: Town: Ship&stone road unusable

0x57 Ch.16x/17x Map

0x58 Animation: Water (Town&Docks)

0x59 Ch.16x/17x Map Tile change

0x5A Ch.16x/17x Events

0x5B ObjectSets: Ship

0x5C Palette: Ship

0x5D Set config: Ship

0x5E Ch.17/18 Map

0x5F Animation: Water (Ship)

0x60 Ch.17/18 Map Tile Change

0x61 Ch.17/18 Events

0x62 Palette: Fields: Dull; suitable for fog

0x63 Ch.18/19 Map

0x64 Ch.18/19 Map Tile change

0x65 Ch.18/19 Events

0x66 Palette: Fields: Sunny weather

0x67 Ch.18x/19x Map

0x68 Ch.18x/19x Map Tile change

0x69 Ch.18x/19x Events

0x6A ObjectSets: Mountains&Shrine

0x6B Palette: Mountains&Shrine: Neutral

0x6C Set config: Mountains&Shrine

0x6D Ch.19x pt2 Map

0x6E Ch.19x pt2 Map Tile changes

0x6F Ch.19x pt2 Events

0x70 Ch.19/20 Map

0x71 Ch.19/20 Map Tile changes

0x72 Ch.19/20 Events

0x73 Palette: Town: Night

0x74 Ch.20/21 Map

0x75 Ch.20/21 Map Tile changes

0x76 Ch.20/21 Events

0x77 Palette: Fortress&Fields: Daytime

0x78 Ch.21/22 Map

0x79 Ch.21/22 Map Tile changes

0x7A Ch.21/22 Events

0x7B ObjectSets: Desert

0x7C Palette: Desert

0x7D Set config: Desert

0x7E Ch.22/23 Map

0x7F Ch.22/23 Events

0x80 Palette: Plains&Castle: Green&blue

0x81 Ch.22x/23x Map

0x82 Ch.22x/23x Map Tile changes

0x83 Ch.22x/23x Events

0x84 Ch.23/24 Map (Lloyd)

0x85 Ch.23/24 Map (Lloyd) Tile changes

0x86 Ch.23/24 (Lloyd) Events

0x87 Ch.23/24 Map (Linus)

0x88 Ch.23/24 Map (Linus) Tile changes

0x89 Ch.23/24 (Linus) Events

0x8A Palette: Fields: Neutral

0x8B Ch.25H Map

0x8C Ch.25H Map Tile changes

0x8D Ch.25H Events

0x8E Ch.24/26 Map

0x8F Ch.24/26 Map tile changes

0x90 Ch.24/26 Events

0x91 ObjectSets: Snow

0x92 Palette: Snow

0x93 Set confic: Snow

0x94 Ch.25/27 Map (Kenneth)

0x95 Ch.25/27 Map (Kenneth) Tile changes

0x96 Ch.25/27 (Kenneth) Events

0x97 Ch.25/27 Map (Jerme)

0x98 Animation: Shimmering ice (Snow)

0x99 Ch.25/27 Map (Jerme) Tile change

0x9A Ch.25/27 (Jerme) Events

0x9B Palette: Plains&Castle: Night

0x9C Ch.26/28 Map

0x9D Ch.26/28 Map Tile change

0x9E Ch.26/28 Events

0x9F Palette: Plains&Castle: Purple

0xA0 Ch.26x/28x Map

0xA1 Animation: Water (Plains&Castle)

0xA2 Ch.26x/28x Map Tile changes

0xA3 Ch.26x/28x Events

0xA4 Ch.27/29 Map

0xA5 Ch.27/29 Map Tile changes

0xA6 Ch.27/29 Events

0xA7 ObjectSets: Lava Cave

0xA8 Palette: Lava Cave

0xA9 Set config: Lava Cave

0xAA Ch.28E Map

0xAB Animation: Lava (Lava Cave)

0xAC Ch.28E Map

0xAD Ch.28E Events

0xAE ObjectSets: Sand Cave

0xAF Palette: Sand Cave

0xB0 Set config: Sand Cave

0xB1 Ch.30H Map

0xB2 Ch.30H Map Tile changes

0xB3 Ch.30H Events

0xB4 Ch.29/31 Map

0xB5 Ch.29/31 Map Tile change

0xB6 Ch.29/31 Events

0xB7 Palette: Town: Ship&stone road unusable

0xB8 Ch.29x/31x Map

0xB9 Ch.29x/31x Events

0xBA Ch.30/32 Map

0xBB Ch.30/32 Map Tile Changes

0xBC Ch.30/32 Events

0xBD Palette: Mountains&Shrine: No plains

0xBE Ch.32x Map

0xBF Ch.32x Map Tile changes

0xC0 Ch.32x Events

0xC1 ObjectSets: Dragon's Gate

0xC2 Palette: Dragon's Gate

0xC3 Set config Dragon's Gate

0xC4 Final Ch. pt1 Map

0xC5 Animation: Gate and flames (Dragon's Gate)

0xC6 Final Ch. pt1 Map Tile change

0xC7 Final Ch. pt1 Events

0xC8 Final Ch. pt2 Map

0xC9 Final Ch. pt2 Map Tile change

0xCA Final Ch. pt2 Events

0xCB [3642E8]

0xCC [CE3A60] Tile change

0xCD [CA6890]

0xCE [36423C]

0xCF [CA68F0]

0xD0 [364108]

0xD1 [CA6950]

0xD2 [363FE4]

0xD3 [CA69B0]

0xD4 [366678]

0xD5 [363E80]

0xD6 [CA6A10]

0xD7 [363D2C]

0xD8 [CA6A70]

0xD9 [360538]

0xDA [363C58]

0xDB [CA6AD0]

0xDC [363B7C]

0xDD [CA6B30]

0xDE [363A38]

0xDF [CA6B90]

0xE0 [3603F8]

0xE1 [363900]

0xE2 [CA6BF0]

0xE3 [363800]

0xE4 [CA6C50]

0xE5 [3636F4]

0xE6 [CA6CB0]

0xE7 [3602B8]

0xE8 [3635B0]

0xE9 [CA6D10]

0xEA [363474]

0xEB [CA6D70]

0xEC [363328]

0xDE [CA6DD0]

0xEE [3631C8]

0xEF [CE3B40] Tile change

0xF0 [CA6E30]

0xF1 [3630C0]

0xF2 [362FB8]

Just pick a value. I'll usually use the value of the chapter I'm overwriting. If I'm making the Prologue to a game I'll use 0x06 (Prologue Events). You can use any slot you want but for more basic hackers I'd recommend sticking to overwriting the value of the chapter you're using.

Alright, the next thing we need to do is create our POINs. POIN stands for pointer which points to some data. In FE7 there are 16 starting POINs which each must go in a correct order. The first POIN points to your turn events. The second to your character events, the third to location events and the fourth to miscellaneous events. the 5th and 6th point to ballista data for normal and hard modes. 7-10 point to enemy data for all four modes (Eliwood Normal, Eliwood Hard, Hector Normal, Hector Hard) while 11-14 point to ally data for all four modes. 15 is your opening event and 16 is your closing event.

Now, this is all quite a lot to remember. It took me quite a while to memorize this. What really helped me to memorize it is this template I made. This has all the POINs sorted and labeled for you.

[spoiler=POIN Template]POIN Pointers

org 0x????????

Pointers:

POIN Turn_events

POIN Character_event

POIN Location_events

POIN Misc_events

POIN BallistaN BallistaH

POIN BadEN BadEH BadHN BadHH

POIN GoodEN GoodEH GoodHN GoodHH

POIN Opening_event Ending_event

Now, your probably wondering "Turn_events? Opening_event? What does this mean?" Well, you see. ____ points to a specified event. 'Character_events' points to another location in the file labeled 'Character_events.' This method saves a lot of hassle as before you had to make all the character events and then handle the offset in the POIN table. Now all you have to do is label something and your good to go!

Another important concept I need to cover is how to specify where to write the data into the game. With old versions of the assembler you just filled in a box and that was it, however, Nintenlord thought it'd be more beneficial to specify it within the file. In that POIN template I posted above before the POINs there is another piece of code.

org 0x????????

This specifies where you are writing your events. Just plug in a pointer. Use any space you want, I recommend using the free space which begins around D80000.

There is a template included in the Event Assembler download. For convenience I'll post it below. It has the basic setup for your event file.

[spoiler=Basic Setup]//Made by markyjoe1990 of Youtube

//Modified by Nintenlord

#define DISABLE_TUTORIALS

#include EAstdlib.event

EventPointerTable(0x??,Pointers)

org 0x????????

Pointers:

POIN Turn_events

POIN Character_events

POIN Location_events

POIN Misc_events

POIN BallistaData BallistaData

POIN Bad Bad Bad Bad

POIN Good Good Good Good

POIN Opening_event Ending_event

Bad:

UNIT

Good:

UNIT

Turn_events:

TURN

Character_events:

CHAR

Location_events:

LOCA

Misc_events:

CauseGameOverIfLordDies

AFEV

Opening_event:

ENDA

Ending_event:

MNCH 0x??

ENDA

BallistaData:

BLST

MESSAGE Events end at offset currentOffset

//The map for this chapter is at offset: ????????

This template not only includes the POINs but also the labels. Just follow the instructions in the template and you'll be well off!

Something worth noting, you can make comments in your event files. "//" is the code for the assembler to stop reading for the rest of that line. You can type anything after a "//" and it won't effect your events at all (very useful for noting where you put things).

Scenic Events

Now that we have our setup I'll move on to teaching you some basics about making the events themselves.

Something you need to be wary of are the ENDA and ENDB commands. You put ENDA at the end of any event. ENDB is used in opening events of chapters that use the preparations screen.

The most basic scenic event you will need to know is how to load text. The basic text loading code is

TEX1 (Index of text)

What's in parenthesis will be replaced by the value you need. The text index # is something you'll need to find on your own with the parser or FEditor.

But hey! What's a good conversation without a little music?

MUS1 (Value of song)

[spoiler=Song values]

0x0001 Precious Things

0x0002 Companions

0x0003 Friendship and Adventure

0x0004 Dragon's Gate II

0x0005 Scars of the Scouring

0x0006 Raise Your Spirits

0x0007 Shadow Approaches

0x0008 Binding Ties

0x0009 Winning Road

0x000A Distant Travels

0x000B Inescapable Fate

0x000C Enemies Appear

0x000D The Messenger

0x000E Darkness Comes

0x000F Nabata's Wandering Messenger

0x0010 Dragon's Gate I

0x0011 Legendary Inheritance

0x0012 Raid!

0x0013 Messenger from the Darkness

0x0014 Victory Now!

0x0015 Rise to the Challenge

0x0016 Softly with Grace

0x0017 Everything into the Dark

0x0018 Campaign of Fire

0x0019 Healing

0x001A Curing

0x001B To the Heights

0x001C Blessing of the 8 Generals I

0x001D Receive the Blessings of Water

0x001E Ride the Wind

0x001F Strike

0x0020 Safeguard

0x0021 Requiem

0x0022 Land of Swirling Sands

0x0023 The Kingdom of Bern

0x0024 Bern - A Mother's Wish

0x0025 A Hint of Things to Come

0x0026 Road of Trials

0x0027 Destiny Enlaced by Fear

0x0028 None

0x0029 Results

0x002A Treasured Hope

0x002B Game Over

0x002C Within Sadness

0x002D Arena Victory

0x002E Arena Tactics

0x002F None

0x0030 Winds Across the Plains

0x0031 None

0x0032 An Unexpected Caller

0x0033 When the Rush Comes

0x0034 The Cogs of Fate

0x0035 Shocking Truth I

0x0036 Shocking Truth II

0x0037 The Eight Generals

0x0038 Triumph

0x0039 In the Shadow of Triumph

0x003A Reminiscence

0x003B Nergal's Wrath

0x003C The Archsage Athos

0x003D One Heart: Eliwood's Theme

0x003E Loyalty: Hector's Theme

0x003F Girl of the Plains: Lyn's Theme

0x0040 Final Farewell

0x0041 Going My Way

0x0042 Together, We Ride!

0x0043 A Knight's Oath

0x0044 Happiness Abounds

0x0045 Main Theme Arrangement

0x0046 Shop

0x0047 Arena Entrance

0x0048 Arena Battle

0x0049 Prepare to Charge

0x004A Calamity Bringer: Nergal's Theme

0x004B Light to Tomorrow

0x004C Merlinus

0x004D Armory

0x004E Ships and Homes

0x004F Silent Ground

0x0050 Black Fang

0x0051 Recollection of a Petal

0x0052 What Comes from Darkness

0x0053 Stratagem

0x0054 Lyn's Desire

0x0055 None

0x0056 Eyes of Sorrow

0x0057 Unshakable Faith

0x0058 The Grieving Heart

0x0059 None

0x005A Fire Emblem Theme

0x005B Main Theme Arrangement

0x005C Opening: History Unveiled

0x005D Distant Utopia

0x005E Fortune Telling

0x005F Fire Emblem Theme (+Intro)

0x0060 Chapter Title Sound 1

0x0061 Chapter Title Sound 2

0x0062 Droplet (Opening scene)

0x0063 Fire&Sword (Opening scene)

0x0064 What Comes from Darkness

0x0065 Black Fang

0x0066 Going My Way

0x0067 Safeguard

0x0068 Shattered Life

0x0069 Anguish

0x006A Respite in Battle

0x006B The Inn

0x006C None

0x006D None

0x006E Blessing of the 8 Generals II

0x006F Campaign of Fire (No intro)

0x0070 Beneath a New Light

0x0071 The Path to Greatness

0x0072 In the Name of Bern

0x0073 Legend of Athos

0x0074 Avoided Fate (All parts)

0x0075 Legend of the Dragon God

0x0076 Royal Palace of Silezha

0x0077 Avoided Fate (Part I)

0x0078 Avoided Fate (Part II)

0x0079 Avoided Fate (Part III)

0x03A3 Silent Ground + Birds/wind ambience

0x03A4 Ambience (Breeze and birds)

0x03A6 Ambience (Storm (low-pitched))

0x03A8 Ambience (Bubbling and thunder)

0x03A9 Ambience (Night)

0x03AA Ambience (Ocean)

0x03AC Ambience (Coast)

0x03AE Ambience (Storm (high-pitched)

0x03B1 Ambience (Magical sounds)

0x03B8 Ambience (Night sounds and breeze)

Now, when the little conversation is over you'll need to have a REMA command to clear the map of unwanted face sprites. You use this command anytime you load text and a background. You will also use the MUEN command to fade out music.

REMA

MUEN (value of fadeout, recommended 0x05)

Here is an example of a conversation

@Conversation1
MUS1 0x0076
TEX1 0x000008
MUEN 0x05
REMA
ENDA

You can also use background for text.

BACG (Value of background)

[spoiler=Backgrounds]

0x00 - Lyn's Tent Background

0x01 - House with fireplace

0x02 - Village (Garden)

0x03 - Village (Garden) (Night)

0x04 - On a Road to a Town or Village

0x05 - On a Road to a Town or Village (Night)

0x06 - On a Road to a Town or Village (Sunset)

0x07 - On a Road to a Town or Village (Partial Dark)

0x08 - On a Road to a Town or Village (Lighter Thing?)

0x09 - Destroyed Village (Originally 0x02)

0x0A - Sea Port

0x0B - Ship

0x0C - Ocean Coast with Rocks

0x0D - Hotel/House

0x0E - Outside of Palace (One in Bern)

0x0F - Outside of Castle (Special)

0x10 - Inside of Castle (Bluish-Green Pillars)

0x11 - Same as 0x10, Darker

0x12 - Room in a Castle (Used in Laus and Caelin?)

0x13 - Same as 0x12, Darker

0x14 - Castle Room (Used in Bern)

0x15 - Castle Hall (Light-Colored Walls)

0x16 - Same as 0x15, Darker, Purple Walls

0x17 - Caelin Castle Garden (used in end of Lyn's Tale)

0x18 - Castle Garden with Bushes

0x19 - Castle Hallway, Door in Front

0x1A - Same as 0x19, Darker, Purple Walls

0x1B - Prison/Cell

0x1C - Outside, Forest on Left (Grass)

0x1D - Plains with Hill and Mountains in background

0x1E - Same as 0x1C, Sunset

0x1F - Same as 0x1C, Dark/Night

0x20 - Same as 0x1C, Foggy/Cloudy

0x21 - Same as 0x20, More Fog

0x22 - Plains

0x23 - Outside, Forest and Mountains Background

0x24 - Same as 0x23, Part Darker

0x25 - Same as 0x23, Fog

0x26 - Same as 0x23, Sunset

0x27 - Same as 0x24, Darker/Night

0x28 - Same as 0x24, Lighter

0x29 - Forest/Grass with Mountains (Special)

0x2A - Forest with Tall Trees

0x2B - Forest (Special)

0x2C - Forest (Different)

0x2D - Forest with Light out of Corner

0x2E - Forest of 0x2C (Foggy)

0x2F - City (Bulgar)

0x30 - City (Bulgar, Golden)

0x31 - Outside of City Gate

0x32 - Same as 0x31, Sunset

0x33 - Same as 0x31, Darker

0x34 - Same as 0x31 (???)

0x35 - House/Hotel with Bed

0x36 - Outside of Castle/Fortress (Brown)

0x37 - Outside of Castle/Fortress (Gray)

0x38 - Same as 0x36, Night

0x39 - Outside of Castle/Fortress (Different) (Brown)

0x3A - Outside of Castle/Fortress (Gray)

0x3B - Same as 0x39, Different Palette

0x3C - Castle/Dungeon (Inside)

0x3D - Same as 0x3C, Night? (Purple)

0x3E - Same as 0x3C, Sunset?

0x3F - Outside, Abandoned Fortress Background

0x40 - Same as 0x3F, Sunset

0x41 - Same as 0x3F, Foggy

0x42 - Inside Abandoned Fortress (Brown)

0x43 - Inside Abandoned Fortress (Purple/Dark?)

0x44 - Dragon's Gate Hall/Chamber (Brown)

0x45 - Dragon's Gate Hall/Chamber (Green)

0x46 - Dungeon Hallway (Brown)

0x47 - Dungeon Hallway (Blue)

0x48 - Dungeon Hallway (Green)

0x49 - Shrine/Alter

0x4A - Athos Shrine/Alter

0x4B - Athos Shrine/Alter (Darker)

0x4C - Shrine Hallway

0x4D - Shrine Hallway (Darker)

0x4E - Shrine Hallway (Purple)

0x4F - Shrine/Alter 2 (Brown)

0x50 - Shrine/Alter 2 (Golden)

0x51 - Desert

0x52 - Desert (Sunset)

0x53 - Dragon's Gate (Green)

0x54 - Dragon's Gate (Dark/Night)

0x55 - Fire Pit/Underworld

0x56 - Shrine/Alter 3 (Durandal?)

0x57 - Cave

0x58 - Shrine/Alter 4

0x59 - Sky

0x5A - Camp/Tent with Weapons

0x5B - Black Background

0x5C - Dragon's Gate (Close-Up)

0x5D - Dragon's Gate (Close-Up) (Lighter)

0x5E - To Be Continued

0x5F- Game Over

Now, just instantaneously loading a background doesn't look good. For this we use the FADI and FADU to fade-in and fade-out respectively.

FADI (value of fade-in, recommended 0x10)

FADU (value of fade-in, recommended 0x10)

However, there is a quicker method. Thanks to Nintenlord's macros.

Text(background,text)

This is the same thing as

FADI 0x10
BACG background
FADU 0x10
TEX1 text
REMA

Sometimes multiple conversations will take place back to back. If you want to change the background smoothly you can use this macro.

ChangeBackground(background)

This would not be good to use with the Text(background,text) macro since that macro returns to the map.

A plain conversation is all fine and good but there are several things you can do with this conversation to make it a little more rewarding.

One thing we could do is give one of our units an item for initiating the conversation.

ITGV (Character to give to) (Item received)

A little bit of gold couldn't hurt...

MONE 0x00 (Amount)

For that first parameter, your options are 0x00 (Village) or 0x01 (Cutscene). I don't know any more than that.

Oh hey, maybe even a recruitment conversation!

CUSI (character) (alliance)

For the alliance $00 makes the character an ally, $57 makes the character and NPC, and $A7 makes the character an enemy.

There are all sorts of fun things you can make with events, however conversations is only one part of it. You can also play around with things on the map.

Like forcibly moving units.

MOVE (unit) (coordinates)

- Co-ordinates are in this format [XX,YY]. Always have 2 digits for good measure (for example use 06 instead of 6)
- The unit MUST be on the map to make this work. If the unit isn't it can cause all sorts of glitches.

Of course, sometimes you just want somebody to disappear.

DISA (unit)

Units

Making units for your chapters is really quite simple. Anyone familiar with the Chapter Unit Editor nightmare modules will get this really fast.

UNIT (Unit value) (Class) (Leader) (Starting Level) (Loading Coordinates, [XX,YY]) (Starting Coordinates, [XX,YY]) [(Item1),(Item2),(Item3),(Item4)] [(AI byte1),(AI byte2),(AI byte3),(AI byte4)]

Notes:

  • The unit value is the unit's hex number. For instance if I wanted to load Eliwood then I would use 0x01. The unit's class is also a hex value. These hex values can be replaced with defined variables (shown below).
  • The loading coordinates are where the unit is loaded, after being loaded the unit will move to its starting coordinates. For non-moving units just set both coordinates to be the same.
  • The unit's leader is not of much importance, however I suppose you could put it in.
  • Starting level is in hex, the values are a little funky so I have a list for you.

[spoiler=Starting level list]

0x00 0, Player

0x01 0, Player (autolevel)

0x02 0, NPC

0x03 0, NPC (autolevel)

0x04 0, Enemy

0x05 0, Enemy (autolevel)

0x06 0

0x07 0

0x08 1, Player

0x09 1, Player (autolevel)

0x0A 1, NPC

0x0B 1, NPC (autolevel)

0x0C 1, Enemy

0x0D 1, Enemy (autolevel)

0x0E 1

0x0F 1

0x10 2, Player

0x11 2, Player (autolevel)

0x12 2, NPC

0x13 2, NPC (autolevel)

0x14 2, Enemy

0x15 2, Enemy (autolevel)

0x16 2

0x17 2

0x18 3, Player

0x19 3, Player (autolevel)

0x1A 3, NPC

0x1B 3, NPC (autolevel)

0x1C 3, Enemy

0x1D 3, Enemy (autolevel)

0x1E 3

0x1F 3

0x20 4, Player

0x21 4, Player (autolevel)

0x22 4, NPC

0x23 4, NPC (autolevel)

0x24 4, Enemy

0x25 4, Enemy (autolevel)

0x26 4

0x27 4

0x28 5, Player

0x29 5, Player (autolevel)

0x2A 5, NPC

0x2B 5, NPC (autolevel)

0x2C 5, Enemy

0x2D 5, Enemy (autolevel)

0x2E 5

0x2F 5

0x30 6, Player

0x31 6, Player (autolevel)

0x32 6, NPC

0x33 6, NPC (autolevel)

0x34 6, Enemy

0x35 6, Enemy (autolevel)

0x36 6

0x37 6

0x38 7, Player

0x39 7, Player (autolevel)

0x3A 7, NPC

0x3B 7, NPC (autolevel)

0x3C 7, Enemy

0x3D 7, Enemy (autolevel)

0x3E 7

0x3F 7

0x40 8, Player

0x41 8, Player (autolevel)

0x42 8, NPC

0x43 8, NPC (autolevel)

0x44 8, Enemy

0x45 8, Enemy (autolevel)

0x46 8

0x47 8

0x48 9, Player

0x49 9, Player (autolevel)

0x4A 9, NPC

0x4B 9, NPC (autolevel)

0x4C 9, Enemy

0x4D 9, Enemy (autolevel)

0x4E 9

0x4F 9

0x50 10, Player / Predetermined

0x51 10, Player (autolevel)

0x52 10, NPC

0x53 10, NPC (autolevel)

0x54 10, Enemy

0x55 10, Enemy (autolevel)

0x56 10

0x57 10

0x58 11, Player

0x59 11, Player (autolevel)

0x5A 11, NPC

0x5B 11, NPC (autolevel)

0x5C 11, Enemy

0x5D 11, Enemy (autolevel)

0x5E 11

0x5F 11

0x60 12, Player

0x61 12, Player (autolevel)

0x62 12, NPC

0x63 12, NPC (autolevel)

0x64 12, Enemy

0x65 12, Enemy (autolevel)

0x66 12

0x67 12

0x68 13, Player

0x69 13, Player (autolevel)

0x6A 13, NPC

0x6B 13, NPC (autolevel)

0x6C 13, Enemy

0x6D 13, Enemy (autolevel)

0x6E 13

0x6F 13

0x70 14, Player

0x71 14, Player (autolevel)

0x72 14, NPC

0x73 14, NPC (autolevel)

0x74 14, Enemy

0x75 14, Enemy (autolevel)

0x76 14

0x77 14

0x78 15, Player

0x79 15, Player (autolevel)

0x7A 15, NPC

0x7B 15, NPC (autolevel)

0x7C 15, Enemy

0x7D 15, Enemy (autolevel)

0x7E 15

0x7F 15

0x80 16, Player

0x81 16, Player (autolevel)

0x82 16, NPC

0x83 16, NPC (autolevel)

0x84 16, Enemy

0x85 16, Enemy (autolevel)

0x86 16

0x87 16

0x88 17, Player

0x89 17, Player (autolevel)

0x8A 17, NPC

0x8B 17, NPC (autolevel)

0x8C 17, Enemy

0x8D 17, Enemy (autolevel)

0x8E 17

0x8F 17

0x90 18, Player

0x91 18, Player (autolevel)

0x92 18, NPC

0x93 18, NPC (autolevel)

0x94 18, Enemy

0x95 18, Enemy (autolevel)

0x96 18

0x97 18

0x98 19, Player

0x99 19, Player (autolevel)

0x9A 19, NPC

0x9B 19, NPC (autolevel)

0x9C 19, Enemy

0x9D 19, Enemy (autolevel)

0x9E 19

0x9F 19

0xA0 20, Player

0xA1 20, Player (autolevel)

0xA2 20, NPC

0xA3 20, NPC (autolevel)

0xA4 20, Enemy

0xA5 20, Enemy (autolevel)

0xA6 20

0xA7 20

0xA8 21, Player

0xA9 21, Player (autolevel)

0xAA 21, NPC

0xAB 21, NPC (autolevel)

0xAC 21, Enemy

0xAD 21, Enemy (autolevel)

0xAE 21

0xAF 21

0xB0 22, Player

0xB1 22, Player (autolevel)

0xB2 22, NPC

0xB3 22, NPC (autolevel)

0xB4 22, Enemy

0xB5 22, Enemy (autolevel)

0xB6 22

0xB7 22

0xB8 23, Player

0xB9 23, Player (autolevel)

0xBA 23, NPC

0xBB 23, NPC (autolevel)

0xBC 23, Enemy

0xBD 23, Enemy (autolevel)

0xBE 23

0xBF 23

0xC0 24, Player

0xC1 24, Player (autolevel)

0xC2 24, NPC

0xC3 24, NPC (autolevel)

0xC4 24, Enemy

0xC5 24, Enemy (autolevel)

0xC6 24

0xC7 24

0xC8 25, Player

0xC9 25, Player (autolevel)

0xCA 25, NPC

0xCB 25, NPC (autolevel)

0xCC 25, Enemy

0xCD 25, Enemy (autolevel)

0xCE 25

0xCF 25

0xD0 26, Player

0xD1 26, Player (autolevel)

0xD2 26, NPC

0xD3 26, NPC (autolevel)

0xD4 26, Enemy

0xD5 26, Enemy (autolevel)

0xD6 26

0xD7 26

0xD8 27, Player

0xD9 27, Player (autolevel)

0xDA 27, NPC

0xDB 27, NPC (autolevel)

0xDC 27, Enemy

0xDD 27, Enemy (autolevel)

0xDE 27

0xDF 27

0xE0 28, Player

0xE1 28, Player (autolevel)

0xE2 28, NPC

0xE3 28, NPC (autolevel)

0xE4 28, Enemy

0xE5 28, Enemy (autolevel)

0xE6 28

0xE7 28

0xE8 29, Player

0xE9 29, Player (autolevel)

0xEA 29, NPC

0xEB 29, NPC (autolevel)

0xEC 29, Enemy

0xED 29, Enemy (autolevel)

0xEE 29

0xEF 29

0xF0 30, Player

0xF1 30, Player (autolevel)

0xF2 30, NPC

0xF3 30, NPC (autolevel)

0xF4 30, Enemy

0xF5 30, Enemy (autolevel)

0xF6 30

0xF7 30

0xF8 31, Player

0xF9 31, Player (autolevel)

0xFA 31, NPC

0xFB 31, NPC (autolevel)

0xFC 31, Enemy

0xFD 31, Enemy (autolevel)

0xFE 31

0xFF 31

But, thanks to Nintenlord, there is a much more convenient way to do enemy levels. Instead of a hex value, use the following code.

Level(level,side,autolevel?)

For 'side' put either Ally, NPC or Enemy. For 'autolevel?' it will be either True of False. 'level' will be the numerical value of the level.

As you may have noticed there are two sets of coordinates. The loading coordinates are where the unit is loaded onto the map. Once loaded, a unit will move to the specified starting coordinates.

Then comes the unit's inventory, all values are once again in hex. If you don't want to use an inventory slot just use 0x00 to specify that there's no item in that slot. However, you cannot have a 0x00 followed by an item. If you do then your game will crash and...well... your ears will heart...

And now the finishing touch is the unit's artificial intelligence. It comes in four bytes.

[spoiler=AI Byte 1]0x00 Nothing Specific

0x01

0x02

0x03 Stand Still

0x04

0x05

0x06 Do not attack, even if in range. (Unless only one left?)

0x07

0x08

0x09

0x0A

0x0B

0x0C

0x0D

0x0E

0x0F Heal Units

0x10

0x11

0x12

0x13

0x14

0x15

0x16

0x17

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20

0x21

0x22

0x23

0x24

0x25

0x26

0x27

0x28

0x29

0x2A

0x2B

0x2C

0x2D

0x2E

0x2F

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

0x3A

0x3B

0x3C

0x3D

0x3E

0x3F

0x40

0x41

0x42

0x43

0x44

0x45

0x46

0x47

0x48

0x49

0x4A

0x4B

0x4C

0x4D

0x4E

0x4F

0x50

0x51

0x52

0x53

0x54

0x55

0x56

0x57

0x58

0x59

0x5A

0x5B

0x5C

0x5D

0x5E

0x5F

0x60

0x61

0x62

0x63

0x64

0x65

0x66

0x67

0x68

0x69

0x6A

0x6B

0x6C

0x6D

0x6E

0x6F

0x70

0x71

0x72

0x73

0x74

0x75

0x76

0x77

0x78

0x79

0x7A

0x7B

0x7C

0x7D

0x7E

0x7F

0x80

0x81

0x82

0x83

0x84

0x85

0x86

0x87

0x88

0x89

0x8A

0x8B

0x8C

0x8D

0x8E

0x8F

0x90

0x91

0x92

0x93

0x94

0x95

0x96

0x97

0x98

0x99

0x9A

0x9B

0x9C

0x9D

0x9E

0x9F

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

0xA6

0xA7

0xA8

0xA9

0xAA

0xAB

0xAC

0xAD

0xAE

0xAF

0xB0

0xB1

0xB2

0xB3

0xB4

0xB5

0xB6

0xB7

0xB8

0xB9

0xBA

0xBB

0xBC

0xBD

0xBE

0xBF

0xC0

0xC1

0xC2

0xC3

0xC4

0xC5

0xC6

0xC7

0xC8

0xC9

0xCA

0xCB

0xCC

0xCD

0xCE

0xCF

0xD0

0xD1

0xD2

0xD3

0xD4

0xD5

0xD6

0xD7

0xD8

0xD9

0xDA

0xDB

0xDC

0xDD

0xDE

0xDF

0xE0

0xE1

0xE2

0xE3

0xE4

0xE5

0xE6

0xE7

0xE8

0xE9

0xEA

0xEB

0xEC

0xED

0xEE

0xEF

0xF0

0xF1

0xF2

0xF3

0xF4

0xF5

0xF6

0xF7

0xF8

0xF9

0xFA

0xFB

0xFC

0xFD

0xFE

0xFF All of the above

[spoiler=AI Byte 2]0x00 Nothing Specific

0x01

0x02 Pursue

0x03 Guard, Attack only those in range

0x04 Heal Allies, if possible (Regular AI)

0x05 1st turn only, acquire target once. If target ever moves out of range, disable AI for rest of map.

0x06 Regular AI

0x07 ""

0x08 ""

0x09 Random movement + Guard

0x0A Regular AI

0x0B Regular AI

0x0C Guard

0x0D Guard

0x0E Regular AI

0x0F Regular AI

0x10

0x11

0x12 Wait one turn, then pursue

0x13

0x14

0x15

0x16

0x17

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20

0x21

0x22 Wait two turns, then pursue

0x23

0x24

0x25

0x26

0x27

0x28

0x29

0x2A

0x2B

0x2C

0x2D

0x2E

0x2F

0x30 (Crashes or nothing beyond this point)

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

0x3A

0x3B

0x3C

0x3D

0x3E

0x3F

0x40

0x41

0x42

0x43

0x44

0x45

0x46

0x47

0x48

0x49

0x4A

0x4B

0x4C

0x4D

0x4E

0x4F

0x50

0x51

0x52

0x53

0x54

0x55

0x56

0x57

0x58

0x59

0x5A

0x5B

0x5C

0x5D

0x5E

0x5F

0x60

0x61

0x62

0x63

0x64

0x65

0x66

0x67

0x68

0x69

0x6A

0x6B

0x6C

0x6D

0x6E

0x6F

0x70

0x71

0x72

0x73

0x74

0x75

0x76

0x77

0x78

0x79

0x7A

0x7B

0x7C

0x7D

0x7E

0x7F

0x80

0x81

0x82

0x83

0x84

0x85

0x86

0x87

0x88

0x89

0x8A

0x8B

0x8C

0x8D

0x8E

0x8F

0x90

0x91

0x92

0x93

0x94

0x95

0x96

0x97

0x98

0x99

0x9A

0x9B

0x9C

0x9D

0x9E

0x9F

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

0xA6

0xA7

0xA8

0xA9

0xAA

0xAB

0xAC

0xAD

0xAE

0xAF

0xB0

0xB1

0xB2

0xB3

0xB4

0xB5

0xB6

0xB7

0xB8

0xB9

0xBA

0xBB

0xBC

0xBD

0xBE

0xBF

0xC0

0xC1

0xC2

0xC3

0xC4

0xC5

0xC6

0xC7

0xC8

0xC9

0xCA

0xCB

0xCC

0xCD

0xCE

0xCF

0xD0

0xD1

0xD2

0xD3

0xD4

0xD5

0xD6

0xD7

0xD8

0xD9

0xDA

0xDB

0xDC

0xDD

0xDE

0xDF

0xE0

0xE1

0xE2

0xE3

0xE4

0xE5

0xE6

0xE7

0xE8

0xE9

0xEA

0xEB

0xEC

0xED

0xEE

0xEF

0xF0

0xF1

0xF2

0xF3

0xF4

0xF5

0xF6

0xF7

0xF8

0xF9

0xFA

0xFB

0xFC

0xFD

0xFE

0xFF All of the above

[spoiler=AI Byte 3]0x00 Nothing Specific

0x01

0x02 Attack without heed to HP.

0x03

0x04

0x05

0x06

0x07

0x08

0x09

0x0A

0x0B

0x0C

0x0D

0x0E

0x0F

0x10

0x11

0x12

0x13

0x14

0x15

0x16

0x17

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20

0x21

0x22

0x23

0x24

0x25

0x26

0x27

0x28

0x29

0x2A

0x2B

0x2C

0x2D

0x2E

0x2F

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

0x3A

0x3B

0x3C

0x3D

0x3E

0x3F

0x40

0x41

0x42

0x43

0x44

0x45

0x46

0x47

0x48

0x49

0x4A

0x4B

0x4C

0x4D

0x4E

0x4F

0x50

0x51

0x52

0x53

0x54

0x55

0x56

0x57

0x58

0x59

0x5A

0x5B

0x5C

0x5D

0x5E

0x5F

0x60

0x61

0x62

0x63

0x64

0x65

0x66

0x67

0x68

0x69

0x6A

0x6B

0x6C

0x6D

0x6E

0x6F

0x70

0x71

0x72

0x73

0x74

0x75

0x76

0x77

0x78

0x79

0x7A

0x7B

0x7C

0x7D

0x7E

0x7F

0x80

0x81

0x82

0x83

0x84

0x85

0x86

0x87

0x88

0x89

0x8A

0x8B

0x8C

0x8D

0x8E

0x8F

0x90

0x91

0x92

0x93

0x94

0x95

0x96

0x97

0x98

0x99

0x9A

0x9B

0x9C

0x9D

0x9E

0x9F

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

0xA6

0xA7

0xA8

0xA9

0xAA

0xAB

0xAC

0xAD

0xAE

0xAF

0xB0

0xB1

0xB2

0xB3

0xB4

0xB5

0xB6

0xB7

0xB8

0xB9

0xBA

0xBB

0xBC

0xBD

0xBE

0xBF

0xC0

0xC1

0xC2

0xC3

0xC4

0xC5

0xC6

0xC7

0xC8

0xC9

0xCA

0xCB

0xCC

0xCD

0xCE

0xCF

0xD0

0xD1

0xD2

0xD3

0xD4

0xD5

0xD6

0xD7

0xD8

0xD9

0xDA

0xDB

0xDC

0xDD

0xDE

0xDF

0xE0

0xE1

0xE2

0xE3

0xE4

0xE5

0xE6

0xE7

0xE8

0xE9

0xEA

0xEB

0xEC

0xED

0xEE

0xEF

0xF0

0xF1

0xF2

0xF3

0xF4

0xF5

0xF6

0xF7

0xF8

0xF9

0xFA

0xFB

0xFC

0xFD

0xFE

0xFF All of the above

[spoiler=AI Byte 4]0x00 Nothing Specific

0x01

0x02

0x03

0x04

0x05

0x06

0x07

0x08

0x09

0x0A

0x0B

0x0C

0x0D

0x0E

0x0F

0x10

0x11

0x12

0x13

0x14

0x15

0x16

0x17

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20 Stand Still (Do not pursue)

0x21

0x22

0x23

0x24

0x25

0x26

0x27

0x28

0x29

0x2A

0x2B

0x2C

0x2D

0x2E

0x2F

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

0x3A

0x3B

0x3C

0x3D

0x3E

0x3F

0x40

0x41

0x42

0x43

0x44

0x45

0x46

0x47

0x48

0x49

0x4A

0x4B

0x4C

0x4D

0x4E

0x4F

0x50

0x51

0x52

0x53

0x54

0x55

0x56

0x57

0x58

0x59

0x5A

0x5B

0x5C

0x5D

0x5E

0x5F

0x60

0x61

0x62

0x63

0x64

0x65

0x66

0x67

0x68

0x69

0x6A

0x6B

0x6C

0x6D

0x6E

0x6F

0x70

0x71

0x72

0x73

0x74

0x75

0x76

0x77

0x78

0x79

0x7A

0x7B

0x7C

0x7D

0x7E

0x7F

0x80

0x81

0x82

0x83

0x84

0x85

0x86

0x87

0x88

0x89

0x8A

0x8B

0x8C

0x8D

0x8E

0x8F

0x90

0x91

0x92

0x93

0x94

0x95

0x96

0x97

0x98

0x99

0x9A

0x9B

0x9C

0x9D

0x9E

0x9F

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

0xA6

0xA7

0xA8

0xA9

0xAA

0xAB

0xAC

0xAD

0xAE

0xAF

0xB0

0xB1

0xB2

0xB3

0xB4

0xB5

0xB6

0xB7

0xB8

0xB9

0xBA

0xBB

0xBC

0xBD

0xBE

0xBF

0xC0

0xC1

0xC2

0xC3

0xC4

0xC5

0xC6

0xC7

0xC8

0xC9

0xCA

0xCB

0xCC

0xCD

0xCE

0xCF

0xD0

0xD1

0xD2

0xD3

0xD4

0xD5

0xD6

0xD7

0xD8

0xD9

0xDA

0xDB

0xDC

0xDD

0xDE

0xDF

0xE0

0xE1

0xE2

0xE3

0xE4

0xE5

0xE6

0xE7

0xE8

0xE9

0xEA

0xEB

0xEC

0xED

0xEE

0xEF

0xF0

0xF1

0xF2

0xF3

0xF4

0xF5

0xF6

0xF7

0xF8

0xF9

0xFA

0xFB

0xFC

0xFD

0xFE

0xFF All of the above

And while we're on the topic of AI, I'd like to give you guys a list of AI combinations. AI combinations are combinations of AI bytes that create a desired effect.

[spoiler=AI Combos]0x00 0x04 0x01 0x00 - Destroy Village

0x06 0x0B 0x0A 0x00 - Talk to main lord

0x00 0x03 0x00 0x20 - Do not move and attack only when next to unit (defending bosses)

0x06 0x05 0x09 0x00 - Steal from chests

0x10 0x05 0x09 0x00 - Steal from units

0x00 0x03 0x09 0x00 - Attack enemies only within range

NOTES: The ability to destroy villages isn't locked to class. You could have any character of any class destroy a village.

You must create units in groups. The unit group will be loaded together so keep that in mind when grouping them together. A unit group must begin with the following:

(Unit group name):
UNIT........

The name can be anything you choose. You end a group of units with:

UNIT Empty

Without the above code the game would keep loading data. For the game that code separates groups. The game only knows to stop loading when it reaches the end of a group.

Once you've got your units all created you're going to need to get them onto the map. The command to load units is:

LOU1 (Name of unit group)
ENUN

Always place the ENUN code after loading or moving units.

For an example I'll show you guys a unit group from FE4A.

Chalphy:
UNIT Sigurd Knight_lord 0x00 Level(5,Ally,False) [34,09] [34,12] [iron_sword,Iron_lance] [00000000]
UNIT Alec Cavalier Sigurd Level(2,Ally,False) [34,09] [35,11] [iron_sword,Vulnerary] [000000000]
UNIT Noish Cavalier Sigurd Level(3,Ally,False) [34,09] [33,11] [steel_sword] [000000000]
UNIT Empty

Did you notice that instead of using hex values I used actual names? This is an advanced feature of the assembler that I will cover that in the next section.

You can load an infinite number of groups with one LOU1 command. However, four per LOU1 is strongly recommended for the readability of your events.

LOU1 Group1 Group2 Group3 Group4

When loading more than four groups just make a new LOU1 command below and continue. Remember to put ENUN once all your unit groups are loaded!

User-defined Variables

Recall a few chapters back, when instructing you on building the structure for your events, I told you to include this in your file always.

#include EAstdlib.event

That file comes with the Event Assembler. It contains a plethora of macros and definitions for you to use. It contains a lot of data you don't really need, but there are some gems for ordinary non-Super Genius people like us. The definitions are what I'm looking at. Nintenlord has been nice enough to provide some default definitions for us. He has defined every item, character and class for all three games. Now, this is fine and dandy but being restricted to the definitions for the GBA games limits our ability to be creative. So I'm going to show you how to make your own definitions file.

Make a new .txt file, name it whatever you desire. For the purposes of this tutorial I will be demonstrating with 'definitions.txt'

Open up your newly created text file, it is (hopefully) blank.

The to make the definitions we need to write the following code.

#define (name) (value)

The name is the word you want to define and the value is the value in hex. Here's a sample from my 'FE4A_definitions.txt' file.

#define Sigurd 0x03

Now you can define until your face turns blue. But all that defining is rather useless when you can't use the definitions! So now you need to learn how to use them in your events. Just insert this into your events underneath "#include EAstdlib.event".

#include "(file name)"

For my example I will be using definitions.txt.

#include "definitions.txt"

Remember, the file can be named whatever you like. Have fun defining! It makes the life of an event maker much MUCH easier.

Location Events

Now that we've got a strong hold on the basic setup and the things that makeup the events themselves, it's time to start working on our types of events. This lesson will focus on location based events.

Now, before we get started into location events there is a very important concept I need to go over. This concept is the event number. Each even that is placed in one of the four types is labeled with an event number. Each event must have a different number than another event in the event file. Unless you want to have a "pick your poison" type of event. You could...oh say give two recruitment conversations the same event number. You recruit one of the characters but then you cannot recruit the other (like Johan and Johalva in FE4). It is reccomended that you put your event number in hex instead of a normal number (a.k.a. 0x05 instead of 05).

And now unto the location events! The most common location event I find myself using is the village event, which goes something like this...

Village(event#,nameofevent,x-coordinate,y-coordinate)

The nameofevent works exactly the same as referencing a unit group.

Here's an example for you.

Village(0x24,South_village,14,33)

In addition to villages, we also have houses which can be revisited.

House(event#,nameofevent,x-coordinate,y-coordinate)

Very similar to the setup for a village.

Now, another one that gets a lot of use from me is the seize command.

Seize(event#,nameofevent,x-coordinate,y-coordinate)

As you should notice it follows the same basic setup as a village event. You can not include the nameofevent, which will result in it simply loading the event specified as the ending event. That would look like this:

Sieze(event#,x-coordinate,y-coordinate)

Another fun location event is a Treasure Chest. There are two different formats you can use for a chest event. A chest where you get an item or a chest where you get money.

Chest(item,X-coordinate,Y-coordinate)
ChestMoney(amountOfMoney,X-coordinate,Y-coordinate)

Its as simple as that!

Now comes the door event.

Door(X-coordinate,Y-coordinate)

And the last major location event I'll be teaching is the shop event.

Armory(pointertoshopdata,x-coordinate,y-coordinate)

Now, this one differs a bit. The pointer to the shop data will not be within the event file. And so, you have to use a pointer you make yourself to point to. For example I put my shop data at 0xD80000, my code would look like this.

Armory(0xD80000,x-coordinate,y-coordinate)

There are multiple types of shops in the game. For an item shop replace 'Armory' with 'Vendor', for a Secret Shop replace 'Armory' with 'SecretShop'.

However, there is (of course) a way to do this in the assembler. You start off with an ID (@____ for you slow learners out there) and then use the code

SHLI (items)

You can have as many items as you want, put them hex values or defined variables. For example...

SHLI 0x01 0x02 0x03 0x04 0x05

SHLI IronSword SlimSword SteelSword SilverSword IronBlade

Character Events

One of my favorite event types, character events. Now, character events are 'Talk' commands on the battlefield. Selecting the 'Talk' command initiates a conversation between the characters (something I've used a lot in FE4 Advance). Here's the format for a basic character event

CHAR (event#) (name of event) (initiating char) (receiving char) (condition)

Some of this should look familiar. Event number is still the same thing and the pointer works exactly the same. What's new here are the initiating and receiving characters. The initiating character, when moved next to the receiving character, has the 'Talk' command. The receiving character only receives the conversation, he/she can never initiate it. Pretty simple, right? The biggest new thing is condition. Just ignore that for now (you can use $0000000 for where the condition is supposed to be) as conditions will be covered in a later lesson.

This piece of code goes in the "Character_events" part of the POINs. Just place it under "Character_events:" and you're good to go. Remember to end that section with $00000000!

Here's an example from FE4A:

This is the Character_events table. It contains all my character events. The bolded character event is used in an example below.

Character_events:

CHAR 0x0E Alvis_and_Sigurd Alvis Sigurd 0x00

CHAR 0x0E Alvis_and_Sigurd Sigurd Alvis 0x00

CHAR 0x13 Alec_and_Ethlin Alec Ethlin 0x00

CHAR 0x0F Sigurd_and_Ethlin Ethlin Sigurd 0x00

CHAR 0x10 Lex_and_Sigurd Lex Sigurd 0x00

CHAR 0x10 Azel_and_Sigurd Sigurd Azel 0x00

CHAR 0x11 Cuan_and_Sigurd Cuan Sigurd 0x00

CHAR 0x11 Cuan_and_Sigurd Sigurd Cuan 0x00

CODE $00000000

Sigurd_and_Ethlin:

MUS1 0x3D //line 338

TEX1 0x0823

REMA

MUEN 0x05

ENDA

Turn Events

The basic format for turn events is:

TURN (event#) (name of event) [starting turn,ending turn] (phase) 0x00

This looks somewhat familiar, right? I hope you're starting to get the concept of (event#) and (name of event). If you aren't I strongly suggest becoming familiar with those concepts before advancing further in the tutorial.

For (event#) you will almost always use 0. Turn events cannot repeat, therefore you should use 0.

Starting turn is the turn the event starts on. Ending turn is the turn the events end on. If you want the event to last 1 turn then have both values be the same. If you want it to span multiple turns (useful for reinforcements) then make them different values.

The phase is determined by 3 values only. 0x00 denotes Player Phase. 0x08 denotes Enemy Phase. 0x16(?) denotes Neutral Phase.

Here's my example. 5 turns of enemy reinforcements would be:

TURN 0 Reinforcements [10,15] 0x08 0x00

Reinforcements:
LOU1 Reinfocement_units
ENUN
ENDA

This turn event starts on turn 10 and ends on turn 15, providing 5 turns of enemy reinforcements.

The TURN command goes under the "Turn_events" section of your file. Here's an example of my Turn_events section from Chapter 1 of FE4A.

Turn_events:

TURN 0 Turn_twenty_five [30,00] 0x00 0x00 //Turn 25 Event (marks Ch. 1x)

TURN 0 Turn_two [02,00] 0x00 0x00 //Jamka and Eden event

TURN 0 Reinforcements [10,10] 0x08 0x00 //Reinforcements event

TURN 0 Opening_event [01,00] 0x00 0x00 //Opening event

CODE 0x00

An important thing to note: I included my opening event in the Turn_events area. Why did I do this if Opening Event is already specified with the POINs? My Chapter 1 does not utilize the Preparations Screen. For chapters that do not use the Prep Screen you must include the opening event in the Turn_events area. For your opening event is must start before the Player's Phase of Turn 1.

Ballistae

Prepare yourself to tackle the shortest lesson of this tutorial. This one is even smaller than the last. Ballistae events look like this:

BLST (coordinates) (type)

The types are

34 = Normal Ballista
35 = Iron Ballista
36 = Killer Ballista

And coordinates work the same as they always do. Just make sure all your Ballista events are under the "Ballista:" section and you're good to go.

A list of BLST events should end in BLST (with nothing else written).

Example:

BLST [01,05] 34
BLST [01,06] 35
BLST [01,04] 35
BLST
ALIGN 4
CODE $00

Notice something else, I used ALIGN 4. I strongly recommend putting this at the end of your Ballista lists under the blank BLST. It helps keep the data aligned properly, which means less headaches for you!

Misc. Events

Now, misc. events are tricky little guys. They don't follow any particular pattern or event do the same thing. One command is completely different from another.

The most common Misc. event is the Game Over command, which allows you to be defeated.

CauseGameOverIfLordDies

Then another common one is the area event, like the hidden treasure in the desert.

AREA (event number) (name of event) (starting coordinate) (ending coordinate)

Starting coordinate and ending coordinate are the only new things. The two sets of coordinates together create a range where the area event can happen. If you want it to be only one tile on the map then just have the two sets of coordinates the same. I compared this event to the desert chapters. However it doesn't automatically base the activation rate off luck unless you specify it (which will be covered in the lesson on conditions).

Another commonly used one is the command for Route missions

DefeatAll(name of ending event)

And then there's the command for missions where you must kill the boss.

DefeatBoss(name of ending event)

And that's all there is to know. Here's an example of a Misc_events area.

Misc_events:

CauseGameOverIfLordDies

DefeatBoss(ending_event)

AREA 0x26 Marpha_siezed [26,24] [26,27] //Game over if castle siezed command

CODE 0x00

Text

I'm not going to spend much time on text. Consider this a mini-chapter. There are already tutorials that teach text editing so its a a waste of time to make another for this tutorial.

I personally still use Darktwiliktri's Text Editing Suite for text editing, however, any method will produce the same results. Here's the basic rundown with the Text Editing Suite. In FE7 all the in-game conversations start at 0x0815, you can just start there. (that's the pointer you'd use for TEX1) The easiest way to insert text is to just go from that pointer onward (0x0816, 0x0817, etc.) and then play your chapter to find out what that text slot actually contains. Then find the text in the alltext file and edit to your heart's content.

When using Xeld's FEditor Adv there's an easier way. In the index selection reel type in 815 and that will land you at the first text slot in the game. The numbers in the index selection are the digits for the offset; text slot 815 will be 0x0815. 450 would be 0x0450. Get the picture?

Conditions

Alright, this is where we can add depth to our events.

If you'll remember, with the character events there was a slot for conditions. The only condition usable for character events is making the event only happen after another event has occurred.

00XX0003

XX = Event number

Now, that one teeny tiny taste of conditions. It is nothing compared to what will be covered in this chapter.

Alright, our first major concept for this chapter is the condition number. The condition number is the number of the condition. It's the same idea as event numbers. No two conditions should have the same condition number.

Lets start learning conditions by learning a condition. Fantastic idea, no? We'll start with one of my personal favorites, the "if certain character" condition.

IFCA (Condition number) (Character)

Now, lets get an event. To save myself some time I'll take on from my hack, Fire Emblem 4 Advance.

This is when Lex gets his Hero Axe from the lady of the lake (who looks suspiciously similar to Queen Rahna of Silesia but that's another problem for another day).

TEX1 0x0949
REMA
ITGV 0x2C 0x22
ENDA

Now, I'm obviously going to add a condition which makes it so this only happens when Lex (0x2C) steps on the tile.

IFCA 0x01 0x2C
TEX1 0x0949
REMA
ITGV 0x2C 0x22
ENDA

But wait... slight problem. What if someone ELSE steps on the tile? Well, the event will still go off which means the event won't happen for Lex if he steps on the tile after the other unit because the event was set to off mode. Well, first off we need to specify what happens when another character steps on the tile. We use the "ELSE" command for this one. There's nothing fancy attatched to this code. Then under ELSE we say what we want to happen. In my case I want to reset the even number so if a unit other than Lex steps on the tile, the event will still happen for Lex.

I do this with this little baby.

ENUT (EVent #)

Of course, you could always do the opposite and disable an event if something happens.

ENUF (Event #)

And my end result should come out looking like this.

IFCA 0x01 0x2C
TEX1 0x0949
REMA
ITGV 0x2C 0x22
ENDA
ELSE 0x02
ENUT 0x17
ENDA

But wait! It seems I've forgotten something... what could it be? Bah... I just can't... AHA!!! ENIF!!! You must be going "wtf?" but we need to include the something called the ENIF command. ENIF stands for "ENd of IF statement". Basically, when all your possible conditions are done you put an ENIF there and then follow it up with ELSE.

So, the correct code for Lex's Brave Axe is.

IFCA 0x01 Lex
TEX1 0x0949
REMA
ITGV 0x2C 0x22
ENDA
ELSE 0x02
ENIF  0x01
ENUT 0x17
ENDA
ENIF 0x02

Now, there are many conditions you could attach to an event.

If certain turn. Like in FE6, to reach a Gaiden chapter you had to complete the chapter before a certain turn.

IFTU (condition number) (turn)

If a character is dead is another popular one. Say I kill off a character that has a line later in the game. Can't have him come back from the dead for his line now can we?

IFCD (condition number) (character to be dead)

If you bring a character into a battle and want to throw them a line make sure you use this one which checks if the unit is fielded or not. (like how Guy complains he's seasick on the Pirate Ship chapter)

IFUF (condition #) (unit)

Another one is having the game check to see if a certain event happened.

IFEV 0xII 0xVV

There's also a way to make an event dependant on a Yes/No choice given to the player. (like choosing to go on a sidequest)

IFYN (condition #)

Now, the actual Yes/No option is created in the text with

And then there's the most dreaded condition of all. The Tutorial Mode condition. Yes, this one four letter command is responsible for all those boring tutorials you have to sit through. That four letter command is...

IFTT (condition number)

And while we're checking modes, here's one that checks if you're in Eliwood's Mode or not. Personally I found if odd that the programmers chose to base mode events off whether it was Eliwood's mode or not since Hector's mode is the one with the bonus content but whatever...

IFEM (condition #)

Congratulations, if you understood all that you have officially risen beyond the rank of chapter making noob! Give yourself a pat on the back and brace yourself for the next chapter.

In-Chapter Events

Alright, we've got most of our stuff down. These are events I've dubbed "In-Chapter Events" because they are best used during a battle. But, you can use them in any scene.

The first one I'll cover is weather. You can change the weather mid-chapter with this baby.

WEA1 (weather)

And what kind of tutor would I be without providing you with a list of possible weather effects and the value to imput to get them?

[spoiler=Weather]0x00 Normal

0x01 Snow

0x02 Snowstorm

0x03 Blue Background

0x04 Rain

0x05 Fiery Glow

0x06 Sandstorm

0x07 Moving Clouds Background

And then there's the ever-so-popular Fog of War.

VCBF (vision distance) //black fog
VCWF (vision distance) //white fog

The default vision distance in FE7 is __. If you want to disable Fog of War at a later time then just enter the code again and have your value as 0x00.

Now, for what is probably the most important one, the command to end the chapter and move unto the next.

MNCH (chapter number of next chapter)

You can change the AI of a unit in the middle of a chapter with

CHAI (character) $(AI Code)

The AI commands are located in the unit making chapter.

More Scenic Events

We covered scenic events in the beginning. However we only scratched the surface. I wanted to ease you into events so I left out the extra stuff for later.

Now, here's a code that I admit I just plain forgot about. It makes the cursor flash on a tile.

CURF (coordinates)

Another one that I just plain forgot about is the ability to make a unit reappear after disappearing.

REPA (character)

So, now that we've gotten past all the things I forgot about. The first topic I'd like to cover in this chapter is music. There's more than just loading music you know.

First there are sound effects which are loaded with

SOUN (sound effect)

And then there's volume control codes.

MUSI //makes music more silent
MUNO //makes music normal after MUSI

They have no parameters.

Now, the next topic is move events. We already covered the basic move event but there are quite a few variations.

The first variation is move to a character.

MOVE (character) [1,2]

At the end of a MOVE code you can also add the speed the character is moving at.

[spoiler=Movement speed]0x00 Normal

0x01 Slow

For example...

MOVE 0x03 [1,2] 0x01

And then there's the ever so popular fight sequence.

FIGH (attacker) (defender) (pointer to fight) $00000000

The fight code works like this.

CODE $XX000000
Normal attack command.
XX = Damage

CODE $XX000001
Critical command.
XX = Damage

CODE $XX000002
Attack but miss.
XX = Damage

CODE $XX000040
Attack that poisons.
XX = Damage

CODE $XX008000
Instant kill (damage does not matter).
XX = Damage

CODE $00800000
End the battle sequence.

NOTE: These commands were created for the attacking character by default. To make a defending character attack replace the second pair of numbers with 08. For example instead of $XX000000 for an attack I would use $XX080000 to have the defender attack.

The damage needs to be in hex. As an example.

CODE $20000000
CODE $00800000

The attacker attacks for 32 damage and then the battle ends. Now, you only get one attack per fight sequence. If you want the person attacked to counter you need to create another FIGH event and swap the attacker and defender.

Now, say you want a healing event. Create a FIGH event between two allies and do a normal attack command. For the damage FF = -1, FE = -2 and so on and so forth. This trend goes all the way down to 80 which is -123.

After the fight is finished, you may need to kill the loser right? Well, this little code takes care of that.

KILL (character) //kills a certain character
KILL (coordinates) //kills a character on a tile

Now, a fight sequence can occur between any two units, their alliance (Ally, Enemy or Neutral) does not matter.

So there we have it. Now that you've finished this chapter you officially know how to do anything you could ever want to do in a chapter. Give yourself a pat on the back.

FE8 differences

This tutorial has been dealing with FE7's events. Since FE7 is the most popular game for hacking I figured it would be advantageous to do so. Out of the three games, FE8 is definitely the oddball of the trio.

Preparations Screen

In FE8, ENDB doesn't exist. Instead you must use

GotoPrepScreen

This ends the event and sends you to the Prep Screen.

Cursor Events

In FE8, the commands regarding the cursor are also different.

FlashCursor(X,Y,time)

This flashes the cursor on a specific tile.

FlashCursor(character,time)

This flashes the cursor on a specific character.

For both commands the recommended time is 60 (the same time it takes for a cursor flash in FE6 or FE7)

Units

FE8 also structures the UNIT command differently.

 UNIT (Unit value) (Class) (Leader) (Starting Level) (Coordinates, [XX,YY]) (Flags) (Byte1) (Amount) (Reinforcement pointer) [(Item1),(Item2),(Item3),(Item4)] [(AI byte1)(AI byte2)(AI byte3)(AI byte4)]

The difference is the added information for the units. 'Flags' have various uses which are, as of yet, largely unexplored. We do know that 2 makes the last item dropable. 'Byte1' is mysterious also, we do not know its function. Most units, however, simply have 0x00 as 'Byte1.' Now, I'm going to be honest; I couldn't teach you about 'Amount' and 'Reinforcement pointer.' FE8 events are not my forte. I'm looking to add more information on this later, if anyone can help me it would be greatly appreciated. Basically the Reinforcement pointer points to an event which moves the unit after they are loaded. This works similarly to FE7's loading and starting coordinates.

A Reinforcement Pointer event would be structured like this:

REDA [X,Y] (Speed) (Rescuing character) (Delay before executing)

Coordinates work as they normally would, the unit will move to those coordinates. 'Delay before executing' can be any numerical value. The higher the number the longer the delay. The rescuing character is the ID of the unit the character would rescue when moving. It can be left as 0x00 if you don't want the unit to rescue anybody when performing this event.

Unit Alliance

Also regarding units, FE8 has a different way of changing a unit's alliance. Instead of one command we have three.

CUSA (character) //to ally (blue)
CUSE (character) //to enemy (red)
CUSN (character) //to neutral (green)

Text

FE8's text also works differently. In FE7 you would just use this.

TEX1 (text)
REMA

However, FE8 requires something else to be added.

TEX1 (text)
GOTO $9EE310
REMA

POINs

One of the biggest differences is how POINs are structured.

POIN TurnBasedEvents 
POIN CharacterBasedEvents 
POIN LocationBasedEvents 
POIN MiscBasedEvents 
POIN Dunno Dunno Dunno 
POIN Tutorial 
POIN Ballisa1 Ballista2 
POIN Units1 Units1 
POIN $0 $0 $0 $0 $0 $0 
POIN BeginningScene EndingScene

FE6 differences

FE6's events are largely similar to FE7's. The biggest difference is the POINs.

POIN TurnBasedEvents 
POIN CharacterBasedEvents 
POIN LocationBasedEvents 
POIN MiscBasedEvents 
POIN EnemyUnits AllyUnits 
POIN EndingScene

You'll notice that there is no pointed to an opening event. Opening events are always handled as a turn event occurring before the Player's Phase of Turn 1. For example:

TURN 0x0 Opening_event [1,0] 0x0

This is the Opening event of FE6's Chapter 1.

The Final Battle

With the knowledge of making events obtained, there remains one final challenge. Luckily, like Idoun in FE6, the final challenge is relatively easy. If, however, you are using this code:

org 0xC9C9C8+(4*0x??) //FE7
org 0xB363C+(4*0x??) //FE8

you don't need to read the rest of this chapter! Instead, just use the two lists I included with spoilers, pick a slot, then assemble the events. However, if for some reason you don't want to do that, here's how one would do it manually. You will probably want to read this so you can point to maps (since we don't have a super easy way to do that yet).

Since we already know how to insert maps and events we'll need to get the offsets where they were written. Make sure that you keep track of where a piece of data ends so that you don't accidentally overwrite it later on down the road. As an example my events are written at 0xD80000 and my map is at 0xDA0000. Now, this is the part that requires us to open up a Hex Editor. Now, the event pointer table (a table which pointes to all the events/maps/tilesets in the ROM) is where we need to go. That table starts at offset 00C9C9CC so use the Goto function of your hex editor and type in that offset. Now, what you'll see if a bunch of numbers, these numbers are pointers which point to various things in the game.

Nintenlord made excellent documentation of the C9C9CC table.

[spoiler=Nintenlord's Notes]0x00 None

0x01 ObjectSets: Sacae Plains

0x02 Palette: Sacae Plains: Light Sand

0x03 Set confic: Sacae Plains

0x04 Prologue Map

0x05 Animation: Water (Fields; Plains; M&S)

0x06 Prologue Events

0x07 Palette: Sacae Plains: Dark Sand

0x08 Ch.1 Map

0x09 Ch.1 Events

0x0A ObjectSets: Plains&Castle

0x0B Palette: Plains&Castle: Bright

0x0C Set config: Plains&Castle

0x0D Ch.2 Map

0x0E Ch.2 Map Tile change

0x0F Ch.2 Events

0x10 ObjectSets: Town&Docks

0x11 Palette: Town: Cliffs&stone road unusable

0x12 Set config: Town&Docks

0x13 Ch.3 Map

0x14 Ch.3 Map Tile change

0x15 Ch.3 Events

0x16 ObjectSets: Fortress&Fields

0x17 Palette: Fortress&Fields: Dawn

0x18 Set config: Fortress&Fields

0x19 Ch.4 Map

0x1A Ch.4 Map Tile change

0x1B Ch.4 Events

0x1C ObjectSets: Fields

0x1D ObjectSets: Fields

0x1E Palette: Fields: Sunny weather

0x1F Set config: Fields

0x20 Ch.5 Map

0x21 Ch.5 Events

0x22 Palette: Town: Cliffs&ship unusable

0x23 Ch.6 Map

0x24 Ch.6 Map Tile change

0x25 Ch.6 Events

0x26 Ch.7 Map

0x27 Ch.7 Map Tile change

0x28 Ch.7 Events

0x29 Palette: Plains&Castle: Neutral

0x2A Ch.7x Map

0x2B Ch.7x Map Tile change

0x2C Ch.7x Events

0x2D Ch.8 Map

0x2E Ch.8 Map Tile change

0x2F Ch.8 Events

0x30 Ch.9 Map

0x31 Ch.9 Map Tile change

0x32 Ch.9 Events

0x33 Palette: Fields: Darker; suitable for rain

0x34 Ch.10 Map

0x35 Ch.10 Map Tile change

0x36 Ch.10 Events

0x37 Ch.11E Map

0x38 Ch.11E Map Tile Change

0x39 Ch.11E Events

0x3A Palette: Plains&Castle: Castle Ostia/Laus

0x3B Ch.11H Map

0x3C Ch.11H Map Tile Change

0x3D Ch.11H Events

0x3E Ch.12 Map

0x3F Ch.12 Map Tile change

0x40 Ch.12 Events

0x41 Ch.13 Map

0x42 Ch.13 Map Tile change

0x43 Ch.13 Events

0x44 Palette: Fields: Night

0x45 Ch.13x Map

0x46 Ch.13x Map Tile change

0x47 Ch.13x Events

0x48 Palette: Fields: Darker; suitable for rain

0x49 Ch.14 Map

0x4A Ch.14 Map Tile change

0x4B Ch.14 Events

0x4C Ch.15H Map

0x4D Ch.15H Map Tile change

0x4E Ch.15H Events

0x4F Ch.15/16 Map

0x50 Ch.15/16 Map Tile change

0x51 Ch.15/16 Events

0x52 Palette: Plains&Castle: Castle Caelin

0x53 Ch.16/17 Map

0x54 Ch.16/17 Map Tile change

0x55 Ch.16/17 Events

0x56 Palette: Town: Ship&stone road unusable

0x57 Ch.16x/17x Map

0x58 Animation: Water (Town&Docks)

0x59 Ch.16x/17x Map Tile change

0x5A Ch.16x/17x Events

0x5B ObjectSets: Ship

0x5C Palette: Ship

0x5D Set config: Ship

0x5E Ch.17/18 Map

0x5F Animation: Water (Ship)

0x60 Ch.17/18 Map Tile Change

0x61 Ch.17/18 Events

0x62 Palette: Fields: Dull; suitable for fog

0x63 Ch.18/19 Map

0x64 Ch.18/19 Map Tile change

0x65 Ch.18/19 Events

0x66 Palette: Fields: Sunny weather

0x67 Ch.18x/19x Map

0x68 Ch.18x/19x Map Tile change

0x69 Ch.18x/19x Events

0x6A ObjectSets: Mountains&Shrine

0x6B Palette: Mountains&Shrine: Neutral

0x6C Set config: Mountains&Shrine

0x6D Ch.19x pt2 Map

0x6E Ch.19x pt2 Map Tile changes

0x6F Ch.19x pt2 Events

0x70 Ch.19/20 Map

0x71 Ch.19/20 Map Tile changes

0x72 Ch.19/20 Events

0x73 Palette: Town: Night

0x74 Ch.20/21 Map

0x75 Ch.20/21 Map Tile changes

0x76 Ch.20/21 Events

0x77 Palette: Fortress&Fields: Daytime

0x78 Ch.21/22 Map

0x79 Ch.21/22 Map Tile changes

0x7A Ch.21/22 Events

0x7B ObjectSets: Desert

0x7C Palette: Desert

0x7D Set config: Desert

0x7E Ch.22/23 Map

0x7F Ch.22/23 Events

0x80 Palette: Plains&Castle: Green&blue

0x81 Ch.22x/23x Map

0x82 Ch.22x/23x Map Tile changes

0x83 Ch.22x/23x Events

0x84 Ch.23/24 Map (Lloyd)

0x85 Ch.23/24 Map (Lloyd) Tile changes

0x86 Ch.23/24 (Lloyd) Events

0x87 Ch.23/24 Map (Linus)

0x88 Ch.23/24 Map (Linus) Tile changes

0x89 Ch.23/24 (Linus) Events

0x8A Palette: Fields: Neutral

0x8B Ch.25H Map

0x8C Ch.25H Map Tile changes

0x8D Ch.25H Events

0x8E Ch.24/26 Map

0x8F Ch.24/26 Map tile changes

0x90 Ch.24/26 Events

0x91 ObjectSets: Snow

0x92 Palette: Snow

0x93 Set confic: Snow

0x94 Ch.25/27 Map (Kenneth)

0x95 Ch.25/27 Map (Kenneth) Tile changes

0x96 Ch.25/27 (Kenneth) Events

0x97 Ch.25/27 Map (Jerme)

0x98 Animation: Shimmering ice (Snow)

0x99 Ch.25/27 Map (Jerme) Tile change

0x9A Ch.25/27 (Jerme) Events

0x9B Palette: Plains&Castle: Night

0x9C Ch.26/28 Map

0x9D Ch.26/28 Map Tile change

0x9E Ch.26/28 Events

0x9F Palette: Plains&Castle: Purple

0xA0 Ch.26x/28x Map

0xA1 Animation: Water (Plains&Castle)

0xA2 Ch.26x/28x Map Tile changes

0xA3 Ch.26x/28x Events

0xA4 Ch.27/29 Map

0xA5 Ch.27/29 Map Tile changes

0xA6 Ch.27/29 Events

0xA7 ObjectSets: Lava Cave

0xA8 Palette: Lava Cave

0xA9 Set config: Lava Cave

0xAA Ch.28E Map

0xAB Animation: Lava (Lava Cave)

0xAC Ch.28E Map

0xAD Ch.28E Events

0xAE ObjectSets: Sand Cave

0xAF Palette: Sand Cave

0xB0 Set config: Sand Cave

0xB1 Ch.30H Map

0xB2 Ch.30H Map Tile changes

0xB3 Ch.30H Events

0xB4 Ch.29/31 Map

0xB5 Ch.29/31 Map Tile change

0xB6 Ch.29/31 Events

0xB7 Palette: Town: Ship&stone road unusable

0xB8 Ch.29x/31x Map

0xB9 Ch.29x/31x Events

0xBA Ch.30/32 Map

0xBB Ch.30/32 Map Tile Changes

0xBC Ch.30/32 Events

0xBD Palette: Mountains&Shrine: No plains

0xBE Ch.32x Map

0xBF Ch.32x Map Tile changes

0xC0 Ch.32x Events

0xC1 ObjectSets: Dragon's Gate

0xC2 Palette: Dragon's Gate

0xC3 Set config Dragon's Gate

0xC4 Final Ch. pt1 Map

0xC5 Animation: Gate and flames (Dragon's Gate)

0xC6 Final Ch. pt1 Map Tile change

0xC7 Final Ch. pt1 Events

0xC8 Final Ch. pt2 Map

0xC9 Final Ch. pt2 Map Tile change

0xCA Final Ch. pt2 Events

0xCB [3642E8]

0xCC [CE3A60] Tile change

0xCD [CA6890]

0xCE [36423C]

0xCF [CA68F0]

0xD0 [364108]

0xD1 [CA6950]

0xD2 [363FE4]

0xD3 [CA69B0]

0xD4 [366678]

0xD5 [363E80]

0xD6 [CA6A10]

0xD7 [363D2C]

0xD8 [CA6A70]

0xD9 [360538]

0xDA [363C58]

0xDB [CA6AD0]

0xDC [363B7C]

0xDD [CA6B30]

0xDE [363A38]

0xDF [CA6B90]

0xE0 [3603F8]

0xE1 [363900]

0xE2 [CA6BF0]

0xE3 [363800]

0xE4 [CA6C50]

0xE5 [3636F4]

0xE6 [CA6CB0]

0xE7 [3602B8]

0xE8 [3635B0]

0xE9 [CA6D10]

0xEA [363474]

0xEB [CA6D70]

0xEC [363328]

0xDE [CA6DD0]

0xEE [3631C8]

0xEF [CE3B40] Tile change

0xF0 [CA6E30]

0xF1 [3630C0]

0xF2 [362FB8]

What his list references as 0x__ is the number on the pointer. Each pointer is ended by 08. So, what he calls 0x01 is 4C C7 34 08, all you have to do is count pointers to end up in the right spot.

For FE8 the table starts at B363C.

[spoiler=B363C Notes]Not used

Object type

Map Palette 1

Tile Configuration

Prologue Map

Tile animations 1

Prologue Map changes

Prologue events

Ch 1 Map

Ch 1 map changes

Ch 1 events

Ch 2 map

Ch 2 Tile changes

Ch 2 events

Object type 2

Map palette 2

Tile configuration 2

Ch 3 map

Tile animations 2

Ch 3 map changes

Ch 3 events

Ch 4 Map

Ch 4 Map changes

Ch 4 events

Object type 3

Map palette 3

Tile confihutation 3

Ch 5x map

Tile animations 3

Ch 5x Map changes

Ch 5x Events

Ch 5 Map

Ch 5 map changes

Ch 5 event data

Ch 6 map

Ch 6 Map changes

Ch 6 events

Ch 7 map

Ch 7 map changes

Ch 7 event data

Ch 8 map

Ch 8 map changes

Ch 8 event data

Ch 9 Eir. map

Ch 9 Eir. map changes

Ch 9 Eir. Events

Object type 4

Map palette 4

Tile configuration 4

Ch 10 Eir. Map

Ch 10 Eir. Map changes

Ch 10 Eir. Events

Map palette 5

Ch 12 Eir. Map

Ch 12 Eir. map changes

Ch 12 Eir. event data

Map palette 6

Ch 13 Eir. Map

Ch 13 Eir. Map changes

Ch 13 Eir. Events (3B)

Object type

Map palette 7

Tile configuration 5

Ch 14 Eir. Map

Ch 14 Eir. Map changes

Ch 14 Eir. Events

Object type 6

Map palette 8

Tile configuration 6

Ch 15 map

Ch 15 Map changes

Ch 15 Eir. events

Map palette 9

Ch 16 Map

Ch 16 Map changes

Ch 16 Eir events

Map palette 10

Ch 17 Map

Ch 17 Map changes

Ch 17 Eir. Events

Object type 7

Map palette 11

Tile configuration 7

Ch 18 Map

Tile animations 4

Ch 18 Map changes

Ch 18 Eir. Events

Map palette 12

Ch 19 Map

Ch 19 Map changes

Ch 19 Eir. Events

Map palette 13

Ch 20 Map

Ch 20 Map changes

Ch 20 Eir. Events

Object type 8

Map palette 14

Tile configuration 8

Final Chapter Map 1

Final Chapter Map 1 changes

Final Eir. events 1

Final Chapter Map 2

Final Chapter Map 2 changes

Final Eirika events 2

Map palette 15

Ch 9 Eph map

Ch 9 Eph Map changes

Ch 9 events

Object type 9

Map palette 15

Tile configuration 9

Ch 10 Ephraim map

Ch 10 Ephraim map changes

Ch 10 Ephraim events

Map palette 16

Ch 11 Ephraim map

Ch 11 Ephraim map changes

Ch 11 Ephraim events

Ch 13 Ephraim map

Ch 13 Ephraim map changes

Ch 13 Ephraim event data

Object type 10

Map palette 17

Tile configuration 10

Ch 14 Ephraim map

Tile animations 5

Ch 14 Ephraim map changes

Ch 14 Ephraim event data

Ch 15 Ephraim event data

Ch 16 Ephraim event data

Ch 17 Ephraim event data

Ch 18 Ephraim event data

Ch 19 Ephraim event data

Ch 20 Ephraim event data

Final Ephraim events 1

Final Ephraim events 2

Tower of Valni Object type

Tower of Valni map palette

Tower of Valni Tile configuration

Tower of Valni 1 Map

Tower of Valni 1 Map changes

Tower of Valni 1 events

Tower of Valni 2 map

Tower of Valni 2 map changes

Tower of Valni 2 events

Tower of Valni 3 map

Tower of Valni 3 map changes

Tower of Valni 3 events

Tower of Valni 4 map

Tower of Valni 4 map changes

Tower of Valni 4 events

Tower of Valni 5 map

Tower of Valni 5 map changes

Tower of Valni 5 events

Tower of Valni 6 map

Tower of Valni 6 map changes

Tower of Valni 6 events

Tower of Valni 7 map

Tower of Valni 7 map changes

Tower of Valni 7 events

Tower of Valni 8 map

Tower of Valni 8 map changes

Tower of Valni 8 events

Lagdou ruins palette

Lagdou ruins 1 Map

Lagdou ruins 1 Map changes

Lagdou ruins 1 Event

Lagdou ruins 2 Map

Lagdou ruins 2 Map changes

Lagdou ruins 2 Event

Lagdou ruins 3 Map

Lagdou ruins 3 Map changes

Lagdou ruins 3 Event

Lagdou ruins 4 Map

Lagdou ruins 4 Map changes

Lagdou ruins 4 Event

Lagdou ruins 5 Map

Lagdou ruins 5 Map changes

Lagdou ruins 5 Event

Lagdou ruins 6 Map

Lagdou ruins 6 Map changes

Lagdou ruins 6 Event

Lagdou ruins 7 Map

Lagdou ruins 7 Map changes

Lagdou ruins 7 Event

Lagdou ruins 8 palette

Lagdou ruins 8 Map

Lagdou ruins 8 Map changes

Lagdou ruins 8 Event

Lagdou ruins 9 Map

Lagdou ruins 9 Map changes

Lagdou ruins 9 Event

Lagdou ruins 10 Map

Lagdou ruins 10 Map changes

Lagdou ruins 10 Event

Lords split map

Lords split map changes

Lords split events

Melkaen Coast map

Melkaen Coast map changes

Melkaen Coast event

Link arena map C9

An interesting map...

An interesting map events...

Debug map

Debug map events

Map palette

Ch 11 Eirika map

Ch 11 Eirika map changes D0

Ch 11 Eirika events

Ch 11 Ephraim map

Ch 11 Ephraim tile animations

Ch 11 Ephraim map changes

Ch 11 Ephraim events

Grado castle map

Renais castle map

Caer Pelyn map

Renais throne map

Renais throne map changes

Renais audience map

Renval gate map

Grado borders map

Grado prison map

Grado prison map changes

Grado shrine map (past)

Grado shrine map changes (past)

Renais shrine map

Renais shrine map changes

Some path map

Some building map

Another shrine palette

Another shrine map

Another path map

Grado shrine map (present)

Ch 5 town palette (past)

Ch 5 town map (past)

Now, pointers are written in little endian. For those of you who aren't vocabulary savvy (like myself) it basically means that the bytes are reversed. So, my offset for my events is written at 00D80000. In little endian the offset would be 00 00 D8 08. However there's something wrong with that pointer. Every pointer MUST end with a 08. The only exception to this rule is when you expand your ROM past 00FFFFFF in which case you must use 09 to end your offsets. If you do not use 08 or 09 when necessary nothing will work!

So, by counting offsets I've discovered that 20 07 CA 08 is the pointer to the prologue's events in the original game. So, by replacing that with 00 00 D8 08 I successfully point to my new events. The same method applies for maps. Now, when your map is inserted open up the Chapter Data Editor in Nightmare. Go to the correct chapter and alter the Tileset and Tile Palette to get the map looking like it should and your chapter is completely done.

And now, load up your ROM and enjoy the hard work that went into making your custom chapter. You've earned it. Congratulations for completing this tutorial! Now you know how to do anything you could ever possibly want to in a custom chapter so get out there and start making your hacks and showing off your skills! Feedback on this tutorial is greatly appreciated. Were there things that I wasn't clear on? Are there chapters which could be been improved? And if so how? Feedback helps me make the tutorial better for future readers so they won't have to go through the confusion you did and less confusion = more learning. Please PM/IM (my addresses are on my profile page) me your feedback as this topic will be locked.

Conclusion

Congratulations, reader, for completing this tutorial. You now know how to do most anything you could ever want in a custom chapter. So get out there and start making your hacks and showing off your skills! Feedback on this tutorial is greatly appreciated. Were there things that I wasn't clear on? Are there chapters which could be been improved? And if so, how? Feedback helps me make the tutorial better for future readers so they won't have to go through the confusion you did, less confusion = more learning. Please post your feedback here.

Edited by General Archibald
Link to comment
Share on other sites

  • 4 years later...

This was SUPER helpful. I looked at other event tutorials, but frankly they all made me feel like my brain was melting '^^ This one was really easy to understand and has really motivated me and made me believe in my hack.

Link to comment
Share on other sites

am i really going to be the one who points out that this is over 5 years old (this was not originally posted here), and that there's a fourth edition that's already going out of date (for reference, this is the second)

Oh... thank you. This was just the one attached to the Ultimate Tutorial.

Link to comment
Share on other sites

One problem with one of your links: FEUniverse is showing up as some ad listing site. Post the .us version, .net is the issue

am i really going to be the one who points out that this is over 5 years old (this was not originally posted here), and that there's a fourth edition that's already going out of date (for reference, this is the second)

Link to comment
Share on other sites

  • 2 years later...

There is no Xeld editor, link is domain. I download text editor suite, but when I open Suite folder, it is only bunch of app that if you run, it close soon and show only black screen. what to do?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...