Starting to collect a few creations I’d like to make easily accessible and thought to make individual threads for all of them might get a little bit ludicrous so this thread is for whatever I cook up. For now, starting off with this:
[ASM] Escape / Arrive (FE8)
This hack offers two new map objectives, Escape and Arrive, modeled after their Tellius implementation. With Arrive, when any unit reaches the point and uses the command the chapter will end. With Escape, when any non-lord unit reaches the point and uses the command they will leave the map (this uses REMU, you’ll have to use standard event implementations to reveal them again for later chapters). When the lord unit reaches the point and uses the command the chapter will end.
Creating Arrive and Escape points is simple; they use Seize points, but when event ID flag 0x21 is set Seize becomes Arrive and when event ID flag 0x22 is set Seize becomes Escape. NOTE: Event ID flag 0x23 is also used in the process of escaping units, if you set this the next time a unit ends its turn it will vanish. Avoid using these three IDs (there are 24 before this point that you can use + 5 after, there should be plenty still).
Know that this hack is highly integrated with the Skill System and will not work without it. No longer requires Skill System, works standalone, Skill System portion still present if you wish to use it.
Everything in the
Post Combat Skills folder needs to go in
Skill System/Post Combat Skills; this piggybacks off of existing post combat things from the skill system to properly let units escape (+ this edits skill system’s canto routines so you can’t canto after escaping)
Everything in the
Escape/Arrive folder should probably go in its own folder in
Engine Hacks; you’ll want to
Escape Installer.event, probably in your Master Hack Installer, which will handle installing everything. Additionally, at the bottom of the skill system’s Master Hack Installer is the unit menu command list; you’ll want to replace the line
UM_Seize with the following four lines:
MenuCommand(0x67A, 0x6CC, BlueText, NewSeizeCheck|IsPointer, $8023021) MenuCommand(ArriveName, ArriveDesc, BlueText, ArriveCheck|IsPointer, $8023021) MenuCommand(EscapeName, EscapeDesc, BlueText, EscapeLordUsability|IsPointer, $8023021) MenuCommand(EscapeName, EscapeDesc, BlueText, EscapeGeneralUsability|IsPointer, EscapeGeneralEffect|IsPointer)
These will make Escape and Arrive show up in the menu and make Seize play nice with them; you can change the menu command colors here if you so desire (the color defines are in
[ASM] Magic Sword Rework (FE8)
Magic Sword Rework
Lets you define as many weapons as you’d like as magic swords, so they’ll use Str/2 and hit Res when attacking at 2+ range but act as normal swords in melee. You can set the weapon type the sword uses at 2+ range (Anima/Light/Dark, or something else if you’re feeling crazy) as well as whether or not to use magic damage in melee, like with the Runesword (won’t use magic animations in melee though, but @circleseverywhere did a hack a while ago that takes care of that part: [FE8] Always display ranged animation for some weapons ).
To install, just put
MagicSwordRework.dmp in the same directory and #include the event file. Within the event file, you can define what items are magic swords. Each entry in the magic sword list is 3 bytes long; first is item ID, the second is weapon type (there are definitions for it as well), and third is whether or not to use magic damage in melee (True to use, False to not). Make sure you set bit 0x40 in the item ability 1 byte for your new magic swords as well, that’s what lets it hit res at range.
[ASM] Super Arena (FE8)
Unused in all 3 GBA Fire Emblem games is a setting for the arena that makes the enemies more difficult across the board. With this hack, after winning 2 arena fights Super Arena is turned on for that unit.
The vanilla text will not properly display due to going 3 lines before clearing the text and text scrolling doesn’t work properly in the arena. Here’s a fixed version:
Welcome to the arena.[A][NL] Oh! It's you again.[A][2NL] I've lost a lot of gold[NL] thanks to you...[A][2NL] If you want to continue,[A][2NL] we're going to have to[NL] do things differently.[A][2NL] I'm going to prepare some[NL] more challenging foes.[A][X]
Install to text ID
0x8D1 to replace the existing broken version.
[ASM] Save Globals Through Suspend (FE8)
Globals Through Suspend
This hack will write global event flags to the save file whenever the game writes suspend data, which it does after every action a unit takes, as well as when you select Suspend from the menu. It lets you do cool things like this:
Note that you’ll need to unset the flag set that tells the game to go to the world map, or you’ll just immediately go to the world map upon reloading:
Once again to install just #include the .event file.
[ASM] Change Weapon Ranks ASMC (FE8)
Weapon Ranks ASMC
A way to change any unit’s weapon ranks through events, intended to allow giving characters access to weapon types they normally wouldn’t get through story events or likewise, as well as removing weapon ranks so a character can have their access to a weapon type their class would normally get revoked without affecting all units with that class.
Install it to anywhere in free space then call it with ASMC. It takes 3 arguments; character ID in memory slot 1, weapon type in memory slot 2, and weapon rank in slot 3.
A few examples of how it could be used:
Revoke Moulder’s Staff rank:
SVAL 1 Moulder SVAL 2 4 SVAL 3 0 ASMC ChangeWeaponRankASMC|1
Give Eirika a D lance rank:
SVAL 1 Eirika SVAL 2 1 SVAL 3 31 ASMC ChangeWeaponRankASMC|1
[ASM] ASMC Check Suite (FE8)
A set of 23 ASMC checks to supplement the existing event commands. The following checks are made available through these macros (thanks to @P33RL355 for writing the macros):
CheckLevel(Character) CheckExperience(Character) CheckMaxHP(Character) CheckCurrentHP(Character) CheckStrength(Character) CheckSkill(Character) CheckSpeed(Character) CheckDefense(Character) CheckResistance(Character) CheckConstitution(Character) CheckMovement(Character) CheckInventory(Character,Item) CheckSwordRank(Character) CheckLanceRank(Character) CheckAxeRank(Character) CheckBowRank(Character) CheckStaffRank(Character) CheckAnimaRank(Character) CheckLightRank(Character) CheckDarkRank(Character) CheckStatusEffect(Character) CheckStatusDuration(Character) CheckMagic(Character) //needs strmag split
No check for luck, since CHECK_LUCK is a vanilla event command. Note that CheckMagic is commented out by default, you’ll have to uncomment it if you want to use it. All of these can take either a direct character ID or 0xFFFF to use the active character; vanilla commands can also be told to use the character ID in memory slot 0xB, however these checks cannot.
To install just #include the .event file, then you can use the macros in your events.
[ASM] Modular Changing Battle BGM (FE8)
Changing Battle BGM
This hack will let you specify an arbitrary number of character ID + song ID pairs for music to change after fighting the unit once, like the Demon King does in vanilla. Note the song ID you’re specifying is the version without an intro, you should set the version with an intro on the Boss Music List. Additionally, every one of these uses the same global event flag and as such using multiple in the same chapter may be difficult.
[ASM] Arbitrary List of Classes With Dancer Music (FE8)
This hack allows you to define an arbitrary list of classes for whom the dancer music will play when dancing.
Here you can see the various scenarios without this hack vs with this hack.
[ASM] Biorhythm (FE8)
This hack puts the Biorhythm mechanic from FE9/FE10 into FE8.
There are 7 biorhythm effect states:
Best. All of these save for
Best can be approached from either direction, making a total of 12 actual states. States begin from
Worst, ascending at
0 and progress through to
Bad, descending at
11 before looping back to
0. This makes
Neutral, ascending be
Neutral, descending be
9. The Hit/Avo bonus/buff you get from each can be defined in
Biorhythm.event, as can the text ID of the name for each state. Note that whether the effect is positive, negative, or neutral cannot be edited from the .event file and are hardcoded to each state.
The Biorhythm Table is where you set each character’s biorhythm initial position and rate of progression. This table is indexed by character ID and has two values per entry: initial position and amplitude. The initial position uses the values as laid out above and the rate of progression, or “amplitude” of their biorhythm wave, is
number of states to advance per turn / 4. This means an amplitude of 4 will advance 1 state per turn, an amplitude of 1 will advance 1 state every 4 turns, and an amplitude of 12 will advance one full cycle forward to the current position every turn. Using an amplitude of 12 and a neutral starting position will effectively act as if there is no biorhythm for the character you set it on.
This does require Skill System by virtue of using its pre-battle calc loop to apply Biorhythm effects, as well as needing Modular Stat Screen to be on the menu. Included in the download is a readme with install instructions, the above usage explanation, and everything you’ll need to implement biorhythm yourself.
[ASM] Character-Based Animation Forcer (FE8)
This uses the vanilla check for the Demon King class to force animations on against the final boss and expands it to an arbitrary user-defined list and also to characters instead of classes, as I figured having to make a unique class for everyone you want to force animations on for would get annoying and space-consuming very quickly.
[ASM] Deny Stat Screen Access (FE8)
Deny Stat Screen
In vanilla, you cannot view the stat screen of gorgon eggs with the R button, nor can you scroll to them from another stat screen of the same allegiance. This hack takes that functionality and expands it to an arbitrary list of classes. Unlike the hack below, this one is harder to change the requirements off of anything class-based, as various functions here are only passed the class data and not the character struct.
[ASM] Deny Counterattacks (FE8)
The way gorgon eggs work is they always have the weapon they’ll have once hatched in their inventory. To prevent them from counterattacking when you attack them as an egg, there is a hardcoded check that disables their ability to counterattack. This hack extends that to an arbitrary list of classes. Additionally, this hack may be used as a jumping off point for applying this status in other circumstances.
[ASM] Dancer Ring Refresh (FE8)
Dancer Ring Refresh
Fairly self-explanatory, lets dancer rings refresh like Dance in addition to applying their effect.
[ASM] Refuge (FE8U)
Something I saw done in the FE8J hack “The Nameless Heroes”, and here it is functionally recreated in FE8U. Refuge allows you to “rescue” yourself into another unit that is capable of rescuing you (if your con is less than their aid, you can Refuge into them).
Big thanks to @StanH, whose Heroes Movement Skills and general doc were an invaluable resource for seeing how target selection and unit actions work.
This hack requires Skill System for its post-action loop and Stan’s Unit Action Rework for implementing the refuge action itself (Unit Action Rework is included with Skill System).
Installation instructions are included in the download package.
[ASM] Holy Blood (FE8)
Akin to FE4/FE5 and FE16’s systems comes holy blood. For each blood type, you can define:
- Growth boosts for each stat
- Whether or not it allows access to dragon veins
- Holy Blood locks per weapon
You can give units major or minor blood, major blood causing an icon to appear on their status screen, doubling growth bonuses, and granting access to weapons locked to that blood type.
As an example, Iron Sword is set to be locked to Donate blood.
Requires skill system’s weapon usability calc loop (this hack is the reason I made that calc loop in the first place), MSS, and dragon veins (which all come with skill system) to be fully featured.
[ASM] Status-Inflicting Weapons (FE8U)
Hacks for these have existed for a long time, but there is currently no version compatible with the skill system. This uses the proc skills loop to integrate with the skill system, so it is fully compatible.
To install, just
#include StatusWeapons.event and add
Proc_StatusWeapons to the proc skills loop.
To make a weapon a status weapon, just give it weapon effect 0xD and put the ID of the status you wish to inflict at item data +0x22 (the second unused byte at the end of each table entry, the same one used by Item Effect Revamp). Statuses applied during battles are hardcoded to always last 5 turns; if you want to change this amount, the byte at 0x178EA is the duration shifted 4 bits left (the default value is 0x50 which equates to 5 turns, 0x30 would equate to 3 turns, etc).
[ASM] Item-Specific WTA (FE8)
Off the Community ASM Bounty List. It allows you to set WTA effects on specific weapons vs. specific other weapons.
#include ItemSpecificWTA.event and add
ItemSpecificWTA to the skill system WTA calc loop to install.
[ASM] Fatigue (FE8)
Per request of a few, an FE5-style fatigue system in FE8.
Fatigue will increment by 1 after every Combat, Staff, Dance, Steal, or Summon action you take, and for staves will increase by an additional 1 per weapon level above E the used staff requires (D gives 2, C gives 3, etc.). If your fatigue exceeds your maximum HP, you will be unable to be deployed at the next preparations screen. Sitting out for a chapter, no matter your fatigue level, will reset it to 0 at the next prep screen. Optionally, you can set stat debuffs to occur if a unit becomes fatigued mid-chapter. S Drinks can be used to restore your fatigue to 0 no matter where it’s at, and you can also create items that restore an amount of fatigue equal to their might value.
Fatigue changes a few things with how much the game saves by slightly extending the amount of data it saves per unit, so it may cut the total number of player units that can be saved ever so slightly. To do this, it requires Expanded Modular Save. To actually increment fatigue, it requires the skill system post-battle calc loop. For items to be usable on the prep screen, it requires Teraspark’s Item Effect Revamp. It also integrates with Modular Stat Screen for displaying fatigue.
#include “Fatigue/Fatigue.event” to install the meat of the system. This will also install Teraspark’s Item Effect Revamp v0.8 by default as it is necessary to make items usable at the prep screen properly; make sure to manually uninclude this if you are already using it. If you have custom item use routines and are not using Item Effect Revamp, you may need to move the pointers to their routines to the IE Revamp table, as it moves four separate vanilla item use routine pointer tables to its own singular table. See the IE Revamp thread for more information on the function of Item Effect Revamp.
Item Effect Revamp requires a set of tables, some of which replace vanilla tables. These are in the
Tablessubfolder and should be placed with the rest of your CSV tables. By default, S Drinks are set to effect ID 0x38 and general fatigue restore items to 0x39.
Fatigue stat screen layout is in the
ModularStatScreensubfolder. Note that this is a strmag split layout, although the Fatigue section of it may be relocated to any MSS file you desire.
The ExpandedModularSave module for saving fatigue is in the
EMSsubfolder. Note that as this is built with compatibility in mind, it saves Snakey’s Stairs byte through suspend as well as str/mag split Magic stat through suspend and saving in addition to fatigue. If you are not using one or both of these it will still function, but it is compatible with them. Further note that as this extends the length of the saved unit data very slightly, it may reduce the maximum number of player units that can be saved by a small amount.
Necessary text is in the
In the Skill System Post-Battle Calc Loop (
POIN PostCombatIncrementFatigue PostCombatStaffIncrementFatigue. This is the part that actually gives you fatigue after taking actions.
To create S Drinks, give the item you want to be an S Drink the use effect of 0x38. To create any other fatigue-restoring item, set the might of the item to the amount of fatigue you want it to restore and give it use effect 0x39. The effect IDs can be changed if necessary by fiddling with IE Revamp tables.
You can cause stat debuffs for becoming fatigued mid-chapter by adding
FatiguedStatPenaltyto the stat getter loops for the stats you wish to debuff (halves stats by default).
[ASM] Split Promotion Items (FE8)
Split Promo Items
Allows the usage of different promo items to result in different classes when used, similar to the Elysian Whip in DSFE.
It also retains the function of vanilla FE8 split promotions, so you can have items like the Master Seal give a choice and separate promotion items to force one or the other pick.
This hack is completely standalone and does not require or integrate with anything else. Afaik it doesn’t conflict with anything else either. To install, just #include “SplitPromoItems.event”. The lists for associating used promo item with list to reference, list of master seal items, and lists of class-promotion pairs for each class are included in that installer.
The default class settings are only present so things don’t get funky when a class can use a promo item and there is no associated promotion option on the table, it’s in no way balanced or even thoroughly thought through and you are free to change it as you see fit.
[ASM] Fixed Damage Weapons (FE8)
A la crossbows. Configurable list of weapons that ignore user’s atk in mt calc and just use the weapon’s mt directly.
To install, just
#include "FixedDamageWeapons.event" and add
POIN FixedDamageWeapons to the end of the skill system pre-battle calc loop.
[ASM] Conditional Nos/Resire Palette (FE8)
Fancy Life Steal Colors
Some time ago, someone wanted to recolor Nosferatu to be a light spell. And so, Tequila produced a way to replace the Nosferatu palette with a new, light-themed palette. However, there have since been fairly regular questions as to using both palettes at once. And thus, this came to be.
If a weapon has the Nosferatu spell anim and has Light or Staff as its weapon type, it will use the lighter palette. Otherwise, it will use the standard Nosferatu palette.
#include NosResire.event to install. Shouldn’t conflict with anything other than repointing/replacing the Nosferatu palette.
[ASM] More Shop Types (FE8)
Normally, there are only 3 kinds of shops: armories, vendors, and secret shops. The way each works behind the scenes is a table for which portrait to use based on the shop type ID and a table containing the number to add to the armory text ID for each case that it needs to get the text ID to display. This is horribly inconvenient when wanting to make more shop types, and as such, this rewrites this system into 20(!) text ID tables indexed by shop type. It also repoints the portrait table for you, into its installer.
#include MoreShops.event and you should be good to go. This shouldn’t conflict with anything that I’m aware of.
As-is, it’s set up to mimic vanilla behavior for the first 3 shop types (0-2), and as an example sets shop type 3 to use armory text in every case and use the arena man portrait. Note this does not touch music, as not to conflict with other hacks that touch shop music. However, without rewriting a shop music hack to account for more than 3 shop types you’ll find vendor music on every new shop type.
Calling a new type of shop isn’t the easiest thing to do without assembly, so you’ll likely need to use this in conjunction with other hacks for implementations of new shops. However, setting this up really isn’t that difficult:
How to call a shop
Calling a shop is very simple, as all you need to do is call the function
MakeShop 0x80b4240. This takes 4 arguments:
- r0 is the char struct of the unit visiting the shop
- r1 is a pointer to the shop list for the shop
- r2 is the shop type
- r3 is an unknown value; the function saves the value passed in r3, but I can’t find a time it ever uses it and giving it various values appears to have no effect. I’d recommend keeping this as 0, just to be safe.
Call the function with this information, and it’ll handle the rest. Very simple!
[ASM] Shop Unit (FE8)
Buy Somethin' Will Ya!
By utilizing the above shop type expansion, this turns a unit into a shop that can be visited by any other unit adjacent to them. This uses shop type 3, as you can see by the default case for this shop type described above.
#include ShopUnit.event, and add a menu command for accessing the shop with functions
ShopUnitCommandEffect. As it does not hook into anything, it cannot conflict with anything.
Note this does not check allegiance, so you can make enemy/NPC units be shops as well. For the specific use case that this was made for, any unit on a list brings up the same shop. However, rewriting the command effect piece slightly would allow for unit-specific shops.
[ASM] Aum/Valkyrie/Bifröst (FE8)
The staff that revives an ally that doesn't have a consistent name
Comes with staff usability & effect functions,
AumEffect; set them to the appropriate tables for the item you want to be Aum and you’re good to go.
Note that this won’t let you pick which unit you want to revive. When you use this staff, it looks for the first dead unit in recruitment order and revives them. If no units are dead, it cannot be used. It does not track the order units die in.
[ASM] More Shop Music (FE8)
An extension of my previous Unique Shop Music hack to coincide with shop type expansion. This allows you to set shop music per-shop type, per-chapter. Using this, you can have individual songs for 256 shop types for 256 chapters.
#include "MoreShopMusic.event". Within this file are the chapter pointer table and an example shop song table, as well as macros to write to each. Use the macro
SetSongChapterPointer(chapterID,songTable) with the desired chapter and label for shop song table to set a table to a chapter. To make a new shop song table, make a label and follow it with
InitializeShopSongTable. Then, use the
SetShopSong(songTable,shopType,songID) macro to set the song to the given shop type (definitions are included for the 3 vanilla types).
Old, deprecated version for no shop type expansion:
[ASM] Separate Shop Music (FE8)
Ever wanted your secret shops to have unique music? Well, now they can! This hack changes the vanilla check of
if armory play armory, else play vendor with a case for all 3 shop types. The song each has is changable from the EA installer as well.
[ASM] Laguz Bars (FE8)
The Tellius mechanic, though it works slightly differently than it does in either FE9 or FE10
The transformation bar runs from 0-30, like in FE10. Unlike in FE10 and like in FE9, you can set a starting position for the bar per-unit on a table. The bar will be initialized to this value at the start of each chapter.
A unit’s bar fills by a set amount every turn and a separate set amount every battle the unit participates in. This amount can be set on a table per-class for increase in either scenario, as well as decrease in the same scenarios when transformed. Note that the transformed class’s decrease values and the untransformed class’s increase values will be used in their respective scenarios; this is set up such that you can have a class that is the transformed version of another, but itself an untransformed class in another class pair.
When the bar is full, you gain the option to Transform; doing so does not consume your action, but you cannot untransform manually. While you are transformed, you get stat boosts; these are configurable per-class, per-stat, based on the transformed class.
Your bar depletes in the same scenarios as it increased in when untransformed. Once the bar hits 0, you automatically untransform back into your previous class.
But, this is not just limited to player units. Enemy and NPC units that are laguz classes will gain bar at the start of their phases, and if this is enough to transform them (or if they already have enough to transform) they will automatically do so. Their bar mechanics are otherwise identical to player units, including automatically untransforming when the bar reaches 0.
Included is a file containing the MSS code for getting the bar to display as seen in the above gifs, as well as installation instructions.
To designate a laguz untransformed/transformed class pair, in
LaguzBars.event there is a list for this purpose. Each entry is
BYTE UntransformedClassID TransformedClassID, and the end of the list is designated with
BYTE 0 0.
There is nothing included with this hack for laguz weapons, as they can be accomplished by disallowing trading/removal of the weapon and giving it a class lock to the transformed class (as was done in the above gifs).
you can also use it to do things like this
ADDON - Laguz Skills
Halfshifting and More
This is a bit different from the way I normally do things, but this is an addon to Laguz Bars that implements the skills Wildheart and Formshift from Radiant Dawn. Wildheart has a laguz unit halfshifted; they are always transformed, but only gain half the stat boosts. Formshift has a laguz unit always transformed with full stat boosts.
To install, overwrite the files in the base package with the respective files in this package. You’ll also need to define Wildheart and Formshift as skills.
[ASM] Trap Rework & Tellius Torches (FE8)
insert trap joke here
Trap Rework makes a modular system for adding new traps and letting them display map sprites. The intention is to be user-friendly without needing to touch assembly to define new traps, and as such comes shipped with a number of general-use functions that themselves can be used as a basis for more complex trap cases.
Shipped alongside Trap Rework are conversions of Dragon Veins by Crazycolorz5 and circleseverywhere and Heal Tiles by Snakey1 to use this system, as it is otherwise incompatible with previous versions of these. This also separates the two from one another, as so they don’t have to both be present. It also ships with a new hack, Tellius Torches, for which this system was created. Note that with default settings you will create errors by removing Heal Tiles or Tellius Torches due to the presence of more complex map sprite display checks for each, but Dragon Veins should be entirely removable.
Tellius Torches provide a configurable amount of fog vision and can be toggled on or off by an adjacent unit. They display a map sprite depending on their state (IDs are configurable) and cannot be stood upon. To designate a torch in events, use
TelliusTorchOff(x,y,visionRange) for a torch that starts in the off position or
TelliusTorchOn(x,y,visionRange) for a torch that starts in the on position. The vision range is retained per-torch when toggled on and off. You can canto out of using a torch, but you cannot use a torch while cantoing. Note that placing torches horizontally, vertically, or diagonally adjacent or along the outside edge of the map is liable to issues. Included torch graphics were made by L95.
Using just EA, you can set up new map sprite traps for purposes such as map indicators, or anything else you so desire. To do so, you just need to use these 3 macros:
SetTrapEventInit(trapID,TrapRework_GenericInitializer) will set a generic function for initialization of the trap from events to memory, allowing you to define your new traps in your events.
SetTrapMapSprite(trapID,mapSpriteID) will set the map sprite to display for your trap at its position on the map. Note that 32x32 map sprites tend not to work well with traps.
SetTrapMapSpritePalette(trapID,paletteWord) will set the palette for the map sprite to use. Don’t worry about the palette word, as you also have the following definitions for each palette:
LightRuneTrapPaletteWordwill use the Light Rune palette.
PlayerTrapPaletteWordwill use the player unit palette.
EnemyTrapPaletteWordwill use the enemy unit palette.
NPCTrapPaletteWordwill use the NPC unit palette.
GrayTrapPaletteWordwill use the greyed out unit palette.
To place a trap on your map, you can use the macro
MapSpriteTrap(trapID,x,y) in event trap data to define a trap of the given ID at the given coordinates. Note that trap IDs in use in vanilla run through 0xD, and with default settings here through 0xF
Trap Rework also contains a small library of ASMCs that may be used to manipulate traps mid-chapter. Note that when adding traps through this method, the total limit is 64 at a time, including map changes & breakable walls/snags towards this total. Exceeding this amount is a bad idea, so be wary with how many traps you create. In all cases these macros use memory slot 1 for trap ID, memory slot B for coordinates, and memory slot C for returning values. If you use a macro with these parameters, the previous value in the relevant memory slots WILL be overwritten.
AddTrap(trapID,x,y) will create a new trap of the given ID at the given coordinates.
RemoveTrapAtCoords(x,y) will remove the first trap found at the given coordinates.
GetTrapIDAt(x,y) will return the ID of the trap at the given coordinates.
GetTrapExt1At(x,y) will return the first value of the trap at the given coordinates. What this value is depends on the type of trap, and map sprite traps do not use it at all.
[ASM] Breakable Doors (FE8)
continuing my tellius bs
Currently, this is entirely standalone and should not conflict with anything, though I do have plans to integrate it into Trap Rework to allow for easy, modular additions of breakable terrain at a later date.
[ASM] Status Expansion (FE8)
Status ID and Status Duration values are both stored in the same byte. Normally, these are given equal space for storage; 4 bits for ID, and 4 bits for duration. Both can therefore store a value from 0-15. Status durations never exceed 5, but status IDs use 13 of the 15 available values and prevent using any higher status IDs, which is inconvenient for adding new statuses. There is exactly 1 unused status ID which is historically what has been replaced when new status effects are implemented. This then means you cannot have more than 1 of these non-vanilla statuses at once.
By changing how the game reads and writes status IDs and durations, this hack makes it so there are twice as many status IDs available to work with without needing to save any more data. Given the vanilla statuses, this leaves room for 18 new status effects. By default, this doubles the number of available statues from 15 to 31 by cutting the maximum status duration from 15 to 7, as it never goes above 5 anyhow.
If you wanted to, you could very easily make this cut it further to a maximum of 3 turns and have 63 total valid status IDs; this is not done by default to preserve vanilla status effect lengths.
This adds the ability to define new status effects by setting their name, their description, and what icon to show on the unit’s map sprite when the status is applied. The best part is, this system is entirely modular! You can add and remove statuses at will, and set their status IDs to whatever you want (though note redefining vanilla status IDs will not change their effects, only their display).
Additionally, this comes with integrations of the Freeze status by Colorz and the Hexing Rod status by Datagne integrated with this new system, as well as a handful of brand-new status effects:
When a unit is Feeble, their (non-HP) stats are all cut in half.
When a unit has the Regen effect, they will recover 25% of their max HP each turn that the status lasts.
When a unit has the Haste effect, they can take 2 actions per turn.
When a unit has the Slow effect, enemies will always double attack them.
Nothing within this system inherently gives you a way to apply status effects, but there’s a few ways with other hacks you can apply statuses. You can use Status-Inflicting Weapons to inflict upon a weapon you set landing a hit, or you can use Item Effect Revamp to very easily create brand-new status staves and dancer rings.
Due to the wide breadth of the status system, it’s entirely possible I missed something somewhere. Please let me know if you run into status-related issues when using this.
[ASM] Status Immunities (FE8)
In vanilla, the Demon King is immune to status effects inflicted via a weapon by just not getting statused if hit and via status staves by just setting their hitrate to 0. This takes both of these immunity cases and applies them to a list of classes instead of just the one. This way, you can set as many classes as you’d like that are immune to status effects applied in each of these ways.
#include StatusImmunities.event, this file contains the class list as well.
[ASM] Free Movement (FE8)
because so many people asked for its release lol
This allows you to freely control a character on a map in lieu of traditional cursor-based gameplay.
Of course, if the only thing you could do is move around it would be pretty useless. You can also interact with the map using the A button.
This means you can do shops as well.
Shops aren’t the only thing you can interact with. Interacting with a door or chest will open it.
You can also have events that run when you enter a certain area or every time you take a step.
You can also interact with other units on the map.
Lastly, you have a menu, which you can do anything you want with content-wise. By default, it contains some map menu commands
specifically the ones that I tested and didn’t crash the game.
Movement collision is based upon whether or not the tile is passable by the unit you’re controlling, or if there is a unit in the space you’re attempting to move onto. You are always in control of the first player unit (to let the player choose who this is, make a prep screen with 1 deploy slot; otherwise, this will usually be your lord if they are force-deployed on every map). Move around with the D-pad as you would expect, and press A to interact with the tile you’re standing on. If you hold a direction and press A, you interact with the tile next to you in that direction; standing next to a unit, holding towards them, and pressing A will interact with them. The L button opens the menu.
Events for this are set up largely the same way that you would normally do events for a chapter. AFEVs and AREAs will run the step after the condition to run them is met, largely analogous to them running after each unit’s action in normal gameplay. Chests and doors are defined the same way as they are normally, but you don’t need a key/lockpick/etc to open them in free movement mode. You can place chest events anywhere, but note that if there is not a tile change at that position the chest won’t work properly (the tile change can be a single tile of the tile that denotes “don’t change this tile”). Talk events are defined in the same place as normal, but note that the only thing read is the second character and the event pointer, so you can’t have multiple talk events with one unit from different initiators set up in the normal way. You can do checks within the event called by talking to determine character-specific interactions, however. There’s an input for char ID that lets you use the first player unit, but the unit you’re controlling is set to the active unit as well for ease of use. Shops do not work as normal, but instead require the use of an ASMC to call the shop, included with Free Movement (but not installed in its installer). To use it, put a pointer to the shop list in s2 and the shop type ID in s3, then
To enable Free Movement mode, call the
EnableFreeMovementASMC. This comes with the definition
EnableFreeMovement for ease of use. As this works by hijacking the phase controller, this will only go into effect at the next phase change. As such, the ideal place for this is in a chapter start event. There’s no way to normally end phase while already in Free Movement mode, and enabling it mid-chapter can lead to some weirdness. There’s also a
DisableFreeMovementASMC, but as before there’s no way to normally end phase while in free movement mode and disabling it mid-chapter will break things, so I would not recommend using this. Note that the game does not suspend automatically while in Free Movement mode. You can call the make suspend save ASMC
ASMC 0xB5D5D to make one at points within your events that you want to save the player’s progress. Of course, manual suspend saves from the menu do function as well.
Installing is just
FreeMovement.event. To save the state of being in Free Movement mode through suspend, you’ll need Expanded Modular Save (its default configuration should be fine). The command list for the menu is near the bottom of
FreeMovement.event. This will conflict with anything that affects the phase controller function, as it rewrites it. For the shop ASMC,
Map used for demonstration here was made by @ZoramineFae with minor edits for the purpose of showing off doors and chests.
[ASM] Character-Based Promotions (FE8)
Makes the class a character promotes to be based on their current class and set per-character, rather than per-class. With this, you can make individual units of the same class more interesting by controlling what class they can each promote to.
To install, just
#include CharBasedPromos.event. Uses a list in the installer for character, base class, and promoted class combinations, if one isn’t found it will attempt to show the split promo screen instead. Note that this specific behavior adds the caveat that any class that would normally only promote to a single class needs to have an entry on the character-based promo list or the game will hang (in vanilla, this is just the two lord classes and the default settings give the needed entries to make them work). This is built from split promo items, and as such is not compatible with that hack.
[EA] Debug String Setters (FE8U)
finally circling back to the "miscellany" part of the thread title
This is a pair of EA tools for setting the debug date/time string and the debug project name string automatically to data relevant to a buildfile (separated into two different programs because date/time is potentially useful outside of a buildfile and project name has very specific buildfile use cases). These serve no non-cosmetic purposes but are neat.
In vanilla, the debug menu looks something like this:
In the top left, you can see the project name
_2003 and the date & time at which the game was built.
Date Time Setter will update the date & time information to the system date & time when it was invoked:
Project Name Setter will update the project name information:
The project name is changed to the first 7 letters of the name of the directory that the file passed into EA is located in. This is generally the root folder of a buildfile, but not particularly useful in any other environment.
And of course, you can use both at once:
This information is only displayed on this one screen, so again, a largely pointless thing to change.
[NMM] FE6/7/8 Sound Room Nightmare Modules
Sound Room Modules
Saw this didn’t exist and needed to edit Sound Room for a project, so I wrote nightmare modules for FE7 and FE8’s sound rooms.
[NMM] FE8 Boss Music Editor
Boss Music Editor
Couldn’t find this one anywhere so I did it myself