Target
Our target in this lesson will be Flare 1.12.
Identify
Our goal in this lesson is to change the Rotting Zombie enemy in Flare. This will consist of giving it a new name, new statistics, and new artwork.
Understand
Entities in games typically have several resources associated with them:
- Images
- Models (for 3D games)
- Animations
- Sounds
- Functional Data (such as the name, the movement rate, etc.)
The game’s code implements the logic to load and manage all these resources. For example, take the following scene from Flare where a Zombie is walking toward our player:
In this scene, the game has already loaded the base image for the enemy when our player entered the screen, along with loading its name and base health into the game’s memory. When the game’s AI code executes and determines that the enemy should walk toward our player, an animation is applied that cycles through several still images to give the illusion of a moving image. Any walking sounds are then played by the game through the audio logic set up.
By identifying and modifying all these resources, we can completely change the enemy.
Disclaimer
The process to modify game resources is going to be unique for each game. Flare stores its resources unpacked and in an editable format. Other games will require different methods to locate and modify the resources. However, the overall goal will still be the same.
Locating and Changing Data
First, we will locate where Flare stores the resources. If we look at Flare’s install directory (C:\Program Files (x86)\Flare), we can see that outside the executables and DLL’s, the largest folder appears to be the mods folder, indicating that this may be where the game stores resources:
Inside this folder are several folders and a single file, mods.txt:
If we open mods.txt, we see that it contains the following information:
# Mods lower on the list will overwrite data in the entries higher on the list
fantasycore
empyrean_campaign
These names match the folders we also see in the directory, indicating that these folders contained the resources loaded by the game. First, we will look at the fantasycore folder:
This contains several of the folders we know are associated with game resources. If we look inside /enemies/base/, we see a zombie.txt file that contains the following data:
While we see important information here, such as the animation file for the zombie enemy, we do not see information we would expect, such as health, attack damage, or the name of the enemy. Instead, this file looks like it contains common data that other files build off of. If we look in the empyrean_campaign/enemies/ folder, we see that this guess is correct. In this folder, we see the file lvl1_zombie_rotting.txt which contains the rest of the data we would expect:
For this lesson, we will change a few sections of data, including the enemy’s name, HP, and speed. This will produce a weak enemy that runs quickly across the screen:
Changing Graphics
Next, we will edit the graphics for the enemy. We identified the location of the animations file in the previous section. If we open this file, we see that it looks like:
This initially looks overwhelming, but will make more sense when we examine the zombie.png image that is specified in the file. This is just a.png file and can be opened up with a program like Paint.NET. This can be installed via:
cinst paint.net
In this image, we can see a variety of poses that the zombie enemy can be displayed in. The game’s logic is responsible for reading the animation file and displaying a subset of the image. For example, when turning from left to right, the game will display the highlighted images in quick succession:
For a proper mod, we would want to replace all these images with new graphics. For this lesson, we will simply give everything a blue background:
After saving this file, start Flare and navigate to a screen with a Rotting Zombie to verify our changes work: