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:

Flare

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:

Flare

Inside this folder are several folders and a single file, mods.txt:

Flare

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:

Flare

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:

Flare

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:

Flare

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:

Flare

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:

Flare

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

Flare

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:

Flare

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:

Flare

After saving this file, start Flare and navigate to a screen with a Rotting Zombie to verify our changes work:

Flare

 

results matching ""

    No results matching ""