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:
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
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.
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.
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.
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
Give Eirika a D lance rank:
SVAL 1 Eirika
SVAL 2 1
SVAL 3 31
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):
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.
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.
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.
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.
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.
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.
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.
Dancer Ring Refresh
Fairly self-explanatory, lets dancer rings refresh like Dance in addition to applying their effect.
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.
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.
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).
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.
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).
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.
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.
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.
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!
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.
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.
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:
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.
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
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.
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.
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.
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.
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.
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.
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.
The least useful thing in this thread, probably
In the Unit menu (that I don’t think anyone I’ve met actually uses let alone knows that there’s a sorting feature in), sorting units by Name will sort by the order determined by the “Unit Sort Order” byte on the character table and not the actual name of the unit. So, I took it upon myself to fix this grievous error that greatly impacts the gameplay experience. Now, sorting by Name will actually sort names alphabetically, both forward and in reverse.
To install, just
#include AlphabeticalSort.event. This won’t conflict with anything else, unless you too have written and are already using a different custom name sort function for some reason.
This is an addon for Split Promo Items that displays information about the class you are promoting to when hovering over the item in the menu. Made it a few months ago for a project that’s now pretty dead, so here’s a standalone release.
Displays class name, usable weapon types, class skill if applicable, and movement type if applicable.
To install, just
#include PromoPreview.event and define the following text entries:
This shouldn’t conflict with anything else, but it won’t work without the Split Promo Items lists defined. With very minor modifications this could be made to work with character-based promos instead, but this is left as an exercise for the interested user.
An obscure bugfix
There’s an obscure bug with the
CLEN event opcode brought to my attention by this skill system bug report: namely, if a player unit is rescuing a green unit and
CLEN is used to clear all green units, it won’t remove the reference to the green unit from the player unit and viewing their stat screen will subsequently crash the game trying to load the name of their rescuee.
This is a very minor hack that adds an extra check when clearing unit structs that will remove the reference to the cleared unit from their rescue partner.
To install, just
This hack completely replaces the function
ClearUnit 080177F4, so anything else that affects this function directly will conflict.
RN By Flag
Based on this hack by Pikmin1211 and rewritten from the ground up, this allows you to enable/disable various hit RNG modes by setting flags. Included modes are as follows:
- Display Hit - Hitrate is as displayed. Also known as 1RN.
Fates Hit - Lower hitrates are as displayed, but higher hit rates land more often. The actual Fates hitrate formula when hit >= 50 is complex enough to potentially cause performance issues, so this is using the
- False Hit - Higher hitrates land less often, while lower hitrates land more often. Also known as EvilRN.
- Perfect Hit - Hits always land if hitrate is >0.
Nice Hit - True Hit, but hit rates of 69 always land.
previously had a standalone release from someone else but now i can’t find it
- Coin Toss - Every hit has a 50% chance to hit and 50% chance to miss.
In the installer, you’ll find 6 definitions for the IDs of the flags for each hit RNG mode. There’s a hierarchy to what will work if multiple are enabled, where entries higher on this list overwrite entries lower:
I’d generally not recommend enabling multiple at the same time.
This hack entirely replaces the function
08000CB8 Roll2RN, so isn’t compatible with anything that also touches this function.
More Growths Options
This allows setting 2 growths modes via flags: 100% growths and 0% growths. In 100% growths mode, every growth rate is rounded up to the nearest multiple of 100. In 0% growths mode, every growth rate is set to 0.
This gets appended to the skill system’s GrowthGetters growth bonus calc loop by adding
GrowthModifierModes to the
POIN for the loop’s contents. Modes are enabled via flags configurable from the installer.
Starting Options Menu
Architecture heavily borrowed from the menu in Circles’ self-randomizing rom, and fair warning that this is a bit haphazard and not too configurable. This adds a menu just after difficulty selection where you can configure 3 settings that a hack may want to offer on starting a new playthrough: Casual Mode, Growths Mode, and Hit RNG Mode:
Casual Mode uses Circles’ version where it’s a flag, like every other setting here. Growths Mode uses the skill system’s inbuilt fixed growths system as well as the 100% and 0% growths modes from the previous hack. Hit RNG Mode uses all of the RN By Flag settings. Displayed on the screen is a brief description of the currently-selected menu option.
In order to carry the information selected here over into a new save file, it needs to be placed somewhere in memory such that it gets written to the initial save file but doesn’t get overwritten by 0s when initializing that save file. As such, we slightly alter the function responsible for clearing out global flag memory so it doesn’t clear the last 4 bytes of it. This then gets saved to a new file, and no save file layout-related shenanigans are necessary. A consequence of this is that the last 32 global flags are unusable, but only until the data is initialized. The data stored in this area is meant to be used by another function called in the opening event of the first chapter,
SetOptionFlagsASMC. Calling this with an ASMC, as the name alludes to, sets the flag for each selected setting, and consequently, the last 32 global flags become free to use again.
The only changes this entails are changing the pointer for one function called by the difficulty select proc and the aforementioned change to global flag clearing behavior. As such, it doesn’t conflict with anything that doesn’t touch one of these two things. However, it does have a number of dependencies to work correctly. Circles’ casual mode hack for the casual mode option as a flag, the skill system’s growth getters for the fixed growths option, and the above 2 hacks for the other growths options and all the hit RNG options are all necessary for this to work as intended. The only reference to these other hacks is via definitions of flag IDs referenced by this one, so by setting these references to
0 you can effectively remove the option’s functionality. However, the menu is structured in such a way that removing options from it will require editing the C source file and recompiling. The build script I used is included with the download to make this somewhat easier. Additionally, there is a non-negotiable requirement for the spin proc from FE7; a copy of this is included with the download. I understand if this menu is a bit too specific in function to be generally useful, which is why the relevant modifiers as flag-based toggles are standalone releases.
New Promo Screen
This hack replaces the class description display on the split promo screen with a display for stat bonuses upon promotion, as well as using icons to show usable weapon types, class type, and class skill.
Weapon type icons are drawn dynamically and spaced so that all 8 can fit without overlapping anything, as shown with Great Knight in this example.
#include "NewPromoScreen.event". The only hard requirement for this to work with how it’s written is Icon Rework for the separate icon sheets for weapon types & class types, but if you really wanted to you could slightly alter it to remove this dependency and it should work entirely standalone.
Soft requirements are the skill system for skill icons and str/mag split for separate str and mag promo bonus display, but for both of these, there are settings to remove them. Str/Mag split compat is automatically controlled by the
USE_STRMAG_SPLIT definition: when installed str and mag will be split promo bonuses, when not installed, if the unit has any magic ranks their pow bonus will be under Mag and otherwise under Str. If you manually define
NO_SKILL_SYSTEM, the installer will define labels for the mag class table & class skill table pointing to a blank table, so that the references to these labels won’t error from them not existing but the information at them won’t result in anything being drawn from them.
This hack works by replacing the
OnHover function for each menu option on the split promotion menu, and shouldn’t conflict with any other hacks that I’m aware of. Note that this will not work correctly for trainee autopromotions, for a series of contrived reasons relating to the spaghetti of that entire system. It will, however, work for normal prep screen item use promotions, and 3-branch promotions not initiated as a trainee auto-promotion.
Advance Wars Fog
This hack adds 2 fog of war mechanics from Advance Wars: terrain that boosts your vision range, and terrain that’s obscured unless you’re adjacent to it.
To install, just
#include AW_Fog.event. Within that file are 2 lists of terrain IDs that function as high terrain and obscured terrain respectively, use these to define what terrain operates as each. This hack overwrites the function
GetUnitFogViewRange, which means it’s incompatible with anything else that touches that function, notably including changes to the thief vision range bonus. Incidentally, it also nerfs thief vision range bonus to +2 from +5, but it stacks with high ground for a total of +7.
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.
New EA GUI
A new GUI for Event Assembler for use with ColorzCore.
To use just place it in the same folder as ColorzCore and run it. Note you can’t disassemble using this, as ColorzCore does not currently support disassembly. As always, please let me know if you find any issues with this.
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.
Boss Music Editor
Couldn’t find this one anywhere so I did it myself