Section: Supported data beats live patching.
Lesson 10.4 replaced an Urban Terror skybox image while keeping the required file shape. A game may also load editable definitions that control behavior. Flare’s unit files let us change one enemy without finding a live pointer or rewriting executable code.
Flare defines many items, enemies, powers, and maps in text files. That makes it an excellent modding target.

Find the unit definition by searching for a visible name or asset path. Copy the definition into a separate mod folder instead of editing the base game.
In the standard Windows install, start here:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
mods.txt normally lists fantasycore followed by empyrean_campaign. Lower entries override higher entries.
Section: Learn the override order.
Flare loads mods in order; later entries can override earlier data. Keep your mod small so it is obvious which file wins.
In brief: Load order decides which overlapping definition wins; keep the override small enough to identify that winner.
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
Do not copy an entire base data folder into the mod. You would accidentally freeze and override unrelated files.
Narration: Copying unchanged base files into a mod can hide later game updates. Override only the definitions and assets that your change actually needs.
Section: Loose files and archives.
Some engines prefer a loose file over the same path inside an archive. Others require rebuilding the archive.
If extracting:
keep the directory structure;
reject absolute and parent-traversal paths;
preserve the original archive;
change one entry only;
use the engine’s official packer when available.
Section: Clone before inventing.
ExampleA small enemy to copy
Start with a known working unit:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
Change the id and one visible field. Load the game and confirm. Then change the next field.
For the real Rotting Zombie, follow the two-layer definition:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
The base file points to shared animation data. The campaign file supplies the visible name and combat statistics. In a copied mod, override lvl1_zombie_rotting.txt, give the enemy a new name, lower its HP, and raise its movement speed. Load the first area containing a Rotting Zombie: it should display the new name, die quickly, and move faster.
Alternative: Follow the unit as a chain of references: statistics lead to animation data, which selects rectangles from the sprite sheet.
The original lesson’s exact visible data hack is:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
Put this at gha_rotting_zombie\enemies\lvl1_zombie_rotting.txt and list gha_rotting_zombie after empyrean_campaign in mods.txt. Because later mods override earlier ones at the same relative path, Flare uses this record while still following the INCLUDE to the shared zombie behavior and animation. The three mods then sit side by side:
Directorymods/ mods.txt the load order: fantasycore, empyrean_campaign, then gha_rotting_zombieDirectoryfantasycore/ Directoryenemies/ Directorybase/ zombie.txt the shared animation data, reached by INCLUDEDirectoryempyrean_campaign/ Directoryenemies/ lvl1_zombie_rotting.txt the original name and combat statisticsDirectorygha_rotting_zombie/ your mod Directoryenemies/ lvl1_zombie_rotting.txt wins, because this mod is listed last
Additional detail: Directorymods/.
mods.txt the load order: fantasycore, empyrean_campaign, then gha_rotting_zombie
Directoryfantasycore/ Directoryenemies/ Directorybase/ zombie.txt the shared animation data, reached by INCLUDE
Additional detail: Directoryfantasycore/.
Directoryenemies/ Directorybase/ zombie.txt the shared animation data, reached by INCLUDE
Additional detail: Directoryenemies/.
Directorybase/ zombie.txt the shared animation data, reached by INCLUDE
Additional detail: Directorybase/.
zombie.txt the shared animation data, reached by INCLUDE
Directoryempyrean_campaign/ Directoryenemies/ lvl1_zombie_rotting.txt the original name and combat statistics
Additional detail: Directoryempyrean_campaign/.
Directoryenemies/ lvl1_zombie_rotting.txt the original name and combat statistics
Additional detail: Directoryenemies/.
lvl1_zombie_rotting.txt the original name and combat statistics
Directorygha_rotting_zombie/ your mod Directoryenemies/ lvl1_zombie_rotting.txt wins, because this mod is listed last
Additional detail: Directorygha_rotting_zombie/ your mod.
Directoryenemies/ lvl1_zombie_rotting.txt wins, because this mod is listed last
Additional detail: Directoryenemies/.
lvl1_zombie_rotting.txt wins, because this mod is listed last
Section: Parse and validate the definition.
A small linter catches easy mistakes:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
The typed struct above teaches validation. For the real repeatable stat= lines, preserve the key and parse the first comma-separated item as the stat name and the second as its numeric value. Do not collect them into a map keyed only by stat, because that would discard all but one line.
Section: Follow asset references.
A unit definition may point to:
an animation set;
a sprite sheet;
sound effects;
powers;
loot tables;
A I, artificial intelligence, behavior.

Copy or create only assets your mod changes. Keep paths relative and verify case sensitivity—Windows may accept a path that Linux rejects.
Follow the animation reference from zombie.txt to its animation file, then follow that file to the zombie sprite sheet (zombie.png). Make a copy inside your mod with the same relative path and paint a blue background behind every animation frame. Do not resize the sheet or move frames: the animation file selects fixed rectangles from it.
Section: Add the unit to a test map.
Use a disposable map or developer spawn command. Place one unit in an empty area.

Test:
spawn and idle animation;
movement and collision;
damage and death;
save and reload;
missing-asset behavior;
uninstall by removing the mod.
When the modified Rotting Zombie runs onto the screen with the changed name, statistics, and blue sprite background, you have changed the actual unit’s data and artwork—not a stand-in format.
Section: Keep a manifest.
A working unit on one machine is not yet an installable mod. The manifest names this package, states its version, and pins the Flare build whose data layout and asset paths we tested. Those fields give a player or installer a quick compatibility check before copying the new unit files:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
The file list, any dependencies, and load order belong in the same package record. Without them, removing or updating the mod becomes guesswork even when the unit definition itself is valid.
A mod that replaces an existing asset also records the original’s path and hash, so the change can be checked and removed. The marked texture from Lesson 10.4 needs only this:
Code example. The surrounding prose explains this example; the full lesson contains the exact code.
Do not redistribute original copyrighted assets when a small patch, generated replacement, or installation script is enough.
Section: Prefer supported data files when they meet the goal.
The course began by changing one number in live memory. It ends with a supported, versioned, removable mod.
Both approaches teach how games represent behavior, but the file-based mod has strong advantages:
the diff is readable;
the game can validate it;
users can install and remove it;
updates are easier to track;
no raw process memory is involved.
When a supported extension point exists, choose it.