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 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
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
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 makes it so setting a weapon’s crit value to 0xFF will make it unable to crit.
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 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 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
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 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 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 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 adds additional characters to the font that are thinner than the standard ones. See here for which bytes correspond to which characters.
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
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 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
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 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
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 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:
BEQ 0 0 0xC
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 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.