Chapter 1x: Utilizing Engine Hacks
Just knowing that something exists doesn’t tell you how to use it. This section is dedicated to tutorials on each hack, where its use is more than just installing.
Anima Triangle
Anima Triangle will create a weapon triangle between Fire, Thunder, and Wind magic. To designate an item as one of these types, there are 3 lists in Engine Hacks/ExternalHacks/AnimaTriangle/AnimaTriangle.event
under FireList
, ThunderList
, and WindList
respectively. Add the IDs of the weapons you want to add to each list in the respective place, and make sure it ends with a 0
byte.
Biorhythm
Biorhythm implements the Tellius mechanic of the same name. To designate a unit’s Biorhythm, you use the table at Tables/FE8 Nightmare modules/Biorhythm/Biorhythm Editor.csv
. Here, you get 2 values to set per-character; Starting Position and Amplitude. Starting Position is the biorhythm stage to initialize to at the start of a chapter. Amplitude is the number of stages to advance per-turn multiplied by 4. There are 12 stages, indexed 0-11. In Engine Hacks/ExternalHacks/Biorhythm/Biorhythm.event
, you can see the order visually near the top of the file or at the end of the file via text definitions. These two areas can also be used to alter the modifier at each stage and the text shown at each stage, respectively.
Cannot Crit
Cannot Crit makes it so setting a weapon’s crit value to 0xFF will make it unable to crit.
Dragon Veins
Dragon Veins are map objects that, when used, will run an event. The structure of this event is anything you can imagine, and this comes with a definition VeinActivation
, which plays a standardized dragon vein activation effect when placed at the start of your dragon vein event. To set a dragon vein event to an ID, use VeinEffect(id, event)
with the ID you want and the label of the event. To place a vein on a map, use Vein(x, y, id)
or Vein(x, y, id, textID)
in trap data.
Heal Tiles
Heal Tiles are also installed with Dragon Veins, as they are mechanically intertwined. Heal Tiles are map objects that, when waited upon, will heal the unit on the same tile at the start of their phase. To set a heal tile, use HealTile(x, y, HealPercent)
or HealTile(x, y, HealPercent, flagID)
in trap data.
Escape-Arrive
Escape-Arrive adds the mechanisms for 2 new map objectives, namely Escape and Arrive. To designate an Arrive point, put Arrive(x, y)
in location-based events. When any unit reaches the set tile, they will be able to Arrive and end the chapter. To designate an Escape point, put Escape(x, y)
in location-based events. When any unit reaches the set tile, they will play an escape quote and leave the map. You can set escape quotes in Tables/FE8 Nightmare modules/Misc/Escape Quote Editor.csv
. By default, if they are a lord and use Escape, they will also end the chapter. You can further customize the behavior of these by using flags defined as LordMustEscapeLastFlag
and AllUnitsMustEscapeFlag
. Setting one of these will give you one of two effects; the lord unit will not be allowed to escape until they are the only unit on the map, or the lord unit escaping does not end the map and it only does so when all units have escaped, respectively. You can change which flag IDs these definitions are tied to in Engine Hacks/ExternalHacks/EscapeArrive/EscapeArrive.event
. You can also use Thracia-style escape, assuming neither of these flags are set; in your chapter end event, put an instance of EscapeCapturedCheck(charID,flagID)
for each unit who you want to be able to be captured if they have not escaped at the end of the map. If they are still on the map, they will be hidden and the given flag will be set. Otherwise, they are left as-is and the flag is not set. You can then later use this flag to check whether or not they have been captured.
Freeze
Freeze adds a status effect of the same name that makes a unit unable to move. It includes an ASMC to freeze all enemy units on the map, which can be called with ASMC FreezeAllASMC
. The unused Sick status effect is overwritten and replaced with Freeze.
Leadership Stars
Leadership Stars mimic the Jugdral mechanic of the same name. The number of leadership stars a faction shares collectively will give every unit of that faction a boost multiplied by the number of stars. By default, opposing factions’ stars will cancel one another out. You can change the value of stars on each unit, as well as the hit and avoid bonuses for each faction, in Engine Hacks/ExternalHacks/LeadershipStars/LeadershipStars.event
. The Status menu will also show the total number of stars each faction has in place of the total number of units.
Modular EXP
Modular EXP allows you to set modifiers on experience gain for specific characters based on chapter and/or flag, or classes based on weapon type used. You can edit its effects on classes in Tables/FE8 Nightmare modules/Misc/Modular EXP Class Table.csv
and its effects on characters in Engine Hacks/ExternalHacks/ModularEXP/ModularEXP.event
. You can set a multiplier and divisor for each case.
Narrow Font
Narrow Font adds additional characters to the font that are thinner than the standard ones. See here for which bytes correspond to which characters.
Portrait Selection
Portrait Selection allows for setting text commands that conditionally load mugs based on flags. For each entry, set a True and False Portrait ID for if the flag is set to True or False, set the flag to use, and set the control code to use to reference the entry. Set entries on the portrait selection table in Engine Hacks/ExternalHacks/PortraitSelectASM/PortraitSelectionASM.event
.
Raid
Raid adds a menu command that triggers an event. Note that it does not also trigger a tile change. To set a raid point, use Raid(flagID, event, x, y)
under location-based events. This also comes with definitions TileChange(x, y)
, which triggers a tile change at the given coordinates, and Coords(x, y)
, which formats the given coordinates for how the game expects them when reading from sB and is used by the previous macro.
Reaver Split
Reaver Split separates Reverse Weapon Triangle and Double Weapon Triangle Effects into separate item bitflags. The Reverse effect is kept to bit 0x00000100
, while the double effect flag is moved to bit 0x00400000
.
Stairs
Stairs will create a pair of points on the map that can be travelled between using the unit menu. To designate a pair of stairs, use Stairs(stairID, x1, y1, x2, y2)
under location-based events, where stairID
is the identifier of the stair pairing, (x1, y1) is the coordinates of the first stair, and (x2, y2) is the coordinates of the second stair. Note that using this hack will force the usage of EMS regardless of your settings, as to save remaining movement through suspend.
Stat Screen Palette by Allegiance
Stat Screen Palette by Allegiance allows for the status screen background for each allegiance to be a different color. However, most stat screen backgrounds won’t work like this by default; the image needs 1 palette per allegiance.
Status Weapons
Status Weapons will inflict a status on the opponent if they land a hit in battle. They are designated using weapon effect 0xD
and apply the status whose ID is in (item data + 0x22).
Weapon Lock Array
Weapon Lock Array allows for an extension of weapon locks. In the 4th byte of the item ability bitfield, set an ID for a weapon lock; this should be anything other than 0. Then, in Tables/FE8 Nightmare modules/AdvWeaponLocks/WeaponLockArray.csv
, set a pointer to a weapon lock array for the ID you’ve chosen. Next, in Engine Hacks/ExternalHacks/WeaponLockArray/AdvWeaponLocks.event
, make a label of the name you set to the ID prior; there is an example array in this file as well. The first byte at this label should be one of SoftCharLock
, HardCharLock
, SoftClassLock
, or HardClassLock
. Soft locks mean if the requirements are met the weapon can be used as if weapon rank requirements are E; otherwise, it can be used if the weapon rank requirements are met. Hard locks mean if the requirements are met the weapon can be wielded, but if not it cannot be. Following one of these, put a string of bytes for character or class IDs, based on which you designated prior. At the end, put EndLockArray
to denote the end of the list.
Casual Mode
Casual Mode will be enabled if flag 0xB0 is set. To set it only in easy mode, at the start of your first chapter you can do:
CHECK_TUTORIAL
BEQ 0 0 0xC
ENUT 0xB0
LABEL 0
Add Traps, Rescue, and Send to Convoy ASMCs
These 3 hacks add ASMCs for you to utilize in your events. AddTraps(pointer)
will add a trap to memory mirroring the contents of the location pointed to in this macro. Rescue(frontx,fronty,backx,backy)
will make the unit at (frontx, fronty) rescue the unit at (backx, backy). ASMC SendToConvoy|1
will send the item in s1 to the convoy.
Strength/Magic Split
Strength/Magic Split separates the singular stat used by GBAFE to represent strength and magic based on the class into 2 separate stats, allowing for them both to be set on the same unit. To set a character or class’s bases and growths for magic, use Tables/FE8 Nightmare modules/Magic
which contains 2 tables, Mag Char Editor.csv
for characters and Mag Class Editor.csv
for classes. These function the same as the values on the character and class tables respectively for other stats. As it changes a lot with the fundamentals of various game systems to implement the split, there are many incidental changes and opportunities to implement other features. A stat booster for Magic is set up automatically, as well as an icon installed for it. As a result of its nature, it also uses a separate instance of the Modular Stat Screen, which we’ll touch on in a bit; just know that if you’re using this, it uses the version in Engine Hacks/ExternalHacks/StrMagSplit/ModularStatScreen
instead. One feature added by this is Magic Sword Rework, incidental to making magic swords use magic in their calculations. Using this, you can designate new weapons as magic swords. The list of these is in Engine Hacks/ExternalHacks/StrMagSplit/StrMagSplit/MagicSwordRework/MagicSwordRework.event
. Here, you can set whether a weapon hits on defense, resistance, the lower defensive value, or the higher defensive value separately for in melee and at range. You can also set the weapon type to use when it is attacking using magic, as well as if it should use magic in melee or not. Note that using this hack will force the usage of EMS regardless of your settings, as to save the magic stat.
Additionally, separate from any individual engine hack, setting weapon effect to 0xC
will make that weapon unable to double.