Modding 101

Modding Drox Operative is relatively straightforward and can be done by anyone with access to a text editor. Here we will introduce the essential elements that all mods are built on.

What Is a Mod?
A mod in any video game refers to a modification. In the case of Drox Operative, this could be a modification to the game mechanics, the graphic or audio assets, or the user interface.

Where to Start
As all mods are really modifying information laid out in the asset files, it is important to have easy access to these. Inside the directory where Drox Operative is installed on your machine, there is a directory called assets. Inside this directory are, by default, 3 .zip files. When creating a mod, it is very helpful to extract the contents of these files to a location where you can reference them. NOTE: Do not extract these files to the assets folder. This can affect how Drox Operative treats your mods in unexpected ways. While it is possible to directly edit these default files, Drox Operative patches overwrite these files and will erase any changes. Using a separate file to add or override functionality is always best practice.

Understanding Asset Files
Below is a brief description of the different kinds of files you'll encounter.
 * GDB
 * These are database files. They contain the information about all of the parts of the game. Open with: any text editor


 * DBL
 * The only DBL file should always be database.dbl. This controls the way the default asset files are loaded, and you will typically never have a reason to modify this file. Open with: any text editor


 * EFF
 * These files contain instructions for creating visual effects in the game. Open with: any text editor


 * FNT
 * These are font files used to generate text in the game.


 * LSB
 * These files contain information used for associating various assets with the generated environments. Typically this information is limited to audio files. Open with: any text editor


 * MAP
 * These remap key inputs to allow players with different keyboard layouts to enjoy a relatively universal experience. Open with: any text editor


 * TRN
 * These are translation files. They contain text replacements that are used in the game. When adding text that you expect the player to see, it is recommended to use these files whenever possible to allow for localization efforts to translate as completely as possible. Open with: any text editor


 * LOC
 * These are general localization files. They contain information about how the translation is processed as well as how local keyboards are mapped. Open with: any text editor


 * TXT
 * These are standard text files. In Drox Operative, these files typically contain longer form text entries. In almost all cases, .txt files are called as a single block and displayed inside the game. Open with: any text editor


 * MDL
 * These are model reference files. They contain pointers to the various 3D models and visual effects. Open with: any text editor


 * MDS
 * These are skeleton files. They contain the 3D wireframe for models. Open with: 3DS Max, Maya, or similar 3D editing software


 * MDM
 * Mesh files for models in the game. Open with: 3DS Max, Maya, or similar 3D editing software


 * TAG : Contain tag information for manipulating models. In particular, these are often used in game for attaching effects to correct positions. Open with: 3DS Max, Maya, or similar 3D editing software
 * CTX : These are image files. They are a special conversion of .tga files. Read more about converting TGA to CTX.
 * SDR : These are shader files. They are instructions for how to apply textures and colors to game objects. Open with: any text editor
 * MNU : These are menu files. They control the display and function of menus and other UI elements in the game. Open with: any text editor

How Drox Operative Handles Mods
In order to run your mod in Drox Operative, you need to place it in the Assets directory in the game's installed directory. Drox Operative will parse all files there in a particular order. It parses the files in the following order, with the files parsed last having priority over those parsed first. For example, the default asset files are loaded in the following order: This means that any files that exist in assets002 will automatically override files of the same name in assets001. Files in assets003 will override identically named files in both assets001 and assets002. As a matter of best practices, you should always make sure any mod you're using is named something that comes alphabetically after assets003. This ensures that all of the necessary default game information is loaded correctly prior to your mod and that your mod isn't overridden by the default asset files.
 * 1) ZIP archives, alphabetical from first to last
 * 2) Loose files (e.g., systems.gdb)
 * 1) assets001.zip
 * 2) assets002.zip
 * 3) assets003.zip

Object-Parm Syntax
In many files that you can modify in Drox Operative, a particular syntax is used. ObjectName { 	ParmName1	ParmValue ParmName2	ParmValue ParmName3	ParmValue // Comments following double forward slashes } The ObjectName is the name of the object that has all of the properties described between the braces ({}). This name is unique throughout all files loaded into the game. If the game encounters a duplicate object name, it will use the most recent object loaded. This is typically not a best practice when modifying the game. Object names should not contain spaces. The ParmName is the name of a particular parameter (parm) of the object. Which parms are available depend on what type of object is being described. Note that anything following // will be considered a comment and not parsed by the game. Parameter names should not contain spaces. White space and blank lines are ignored by the game parser, though it may be useful to make the file more human readable.

Overriding Objects
The preferred method for modifying existing objects in the game is as follows. ModObjectName overrides ObjectName { 	ParmName1	NewParmValue ParmName2	NewParmValue } In this way, you create a new object name (e.g., ModObjectName) and declare the existing object that is being modified (e.g., ObjectName). This allows you to change only the parms you want. In the above example, ParmName3</tt> is not declared in ModObjectName</tt>, so the game would use the value from ObjectName</tt> for that parm.