Game Mod Guide
You can also view this page in the following Languages
A game mod or game modification changes or adds new capabilities to games at Voobly.
Voobly's mod support makes it much easier to play mods on line.
Support for mods is divided into three high level categories:
- Game Play Changes - This type of mod changes around the game rules and because of this all users in the game room need to have these types of mods installed when it's played (or the game would go out of sync). This type of mod is also known as a data mod.
- New Visuals or Content - This type of mod changes around the graphics files or adds new maps and doesn't require everyone in the game room to have it installed. This type of mod is also known as a local mod.
- Client Themes - Read more about these in the Custom Theme Guide
If you have any questions on this guide please post them at the Game Mod Forum
![]() |
Contents:
|
How to find mods
Go to the game mod page for your game:
- Age of Empires
- Age of Empires II: Age of Kings
- Age of Empires II: The Conquerors
- Age of Mythology: The Titans
- AoE III: The Asian Dynasties
Using a Game Play or Data Mod
Once you have installed the mod, you simply select it in game room settings:
![ins_datamods.png](http://www.voobly.com/files/view/42595531/hyybhp03r3q0hcc0dhoywsw04hvbspcz/ins_datamods.png)
After you have selected the game mod, it will show up in your settings:
![ins_setmods.png](http://www.voobly.com/files/view/42595720/vn2yop5z737ugj3niifhxbvs453p4p0x/ins_setmods.png)
Underlined texts are clickable.
It will open your browser and directs to the mod's or patch's page.
If a player don't have yet the data mod
you will see a blue arrow icon where normally the ping showed:
![ins_dlmods.png](http://www.voobly.com/files/view/42595688/eojbgs4myzqgbh30oeyefb8wqq35d25h/ins_dlmods.png)
If you have the "unzip failed" error it is suggested to try download the mod with different browser, or enable UAC
Using a Visual or Local Mod
Visual mods are automatically enabled once installed.
You can disable them with the "Game->Visual or Conent Mods" menu (uncheck them), or uninstall through the mod's webpage to permanently remove.
![ins_visualmods.png](http://www.voobly.com/files/view/42595161/da9wutfvpniq04bbfg80q2mr7h8ygepk/ins_visualmods.png)
Some Visual mod may interfere with an other when changing the same game element.
(using multiple terrain or taunt mods)
If you have the "unzip failed" error it is suggested to try download the mod with different browser, or enable UAC
Mods in Single Player
To use a Voobly mod in single player you can use the launch from single player feature at http://www.voobly.com/pages/view/310
![Zq3fCE.jpg](http://www.voobly.com/files/view/17398983/upzp8a4b8s3m683qepghg8tg0ucjzo2s/Zq3fCE.jpg)
Creating your own mods
Are you already a modder or ready to become one? On Voobly it's easy! We have also have some tools we've written and released to make your life even easier. The easiest way to start is to install some existing mods and look at how they work and start from here. Once you're done upload the mod to Voobly, for more information read the Step-by-step guide for uploading a mod.
Mod Installation Path
For mods to be detected by Voobly they should be placed in the proper game subdirectory. The subdirectory is Voobly Mods\Voobly-Game-ID-Here\Voobly-Mod-Type-here\Mod-Name-Here.
Two examples:
- game id = AOC
mod type = local mod
mod name = Small trees
C:\Program Files (x86)\Microsoft Games\Age of Empires II\Voobly Mods\AOC\Local Mods\Small Trees - game id = AOC
mod type = data mod
mod name = Jurassic
C:\Program Files (x86)\Microsoft Games\Age of Empires II\Voobly Mods\AOC\Data Mods\Jurassic
Mod Files Structure
For most mods you put the files you want to change at the same relative path in your mod directory as they are in the game directory.
The easiest way to see how this works is to install an existing mod.
As an example, let's take a hypothetical game with these files and directories:
Code:
c:\MyGame\Data\datafile.bin
c:\MyGame\Maps\
Lets say you were creating a mod called "MyFirstMod", you wanted to change datafile.bin, and add a new map:
Code:
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\Data\datafile.dat (your edited dat file)
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\Maps\MyNewMap.map
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\version.ini (all mods must have a version.ini)
Mod Versioning
All mods must have version specified in the root mod directory. The server ensures that all users in a room have the same version of the mod before the game is launched.
Simply create a text file called version.ini with the version text, e.g.:
Code:
1.1
Distributing your mods before they are submitted to Voobly
You are free to exchange files w/ zips or create your own installer. The users you are testing with should place the files in the same path as you.
Once you're done send
![](https://voobly.com/res/flags/eu.png)
![](https://voobly.com/res/flags/gr.png)
![](https://voobly.com/res/flags/hu.png)
AoE, RoR, AoK, and AoC specific modding
These sections describe AoE - AoC series games modding specifics.
File and directory structure
Files and paths:
- language.ini - text strings goes in base mod directory.
- drs\ directory, put .slp, .wav, and .bin files here.
- For everything else, use the same subdirectory as in the original game, e.g.: Scenario\ is used for maps and data\ for .dat and .drs files.
Example below for a mod called MyTestMod:
Code:
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\language.ini
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\drs\231.slp
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\drs\5001.wav
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\Scenario\=V= CBAv8.scx
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\data\empires2_x1_p1.dat
DRS Modifications
There are two methods supported for changing SLP and other types of DRS resources:
- You can put the edited DRS file in the data subdirectory of your mod. E.g.: aoc\localmods\MyGraphicsMod\gamedata_x1_p1.drs . This approach isn't recommended.
- The recommended approach is to extract only the SLP, WAV, and BIN resources that have changed and put it in the drs subdirectory, E.g.: aoc\localmods\MyFirstMod\drs\1250.slp and aoc\localmods\MyFirstMod\drs\50300.wav.
The second approach is recommended because:
- Voobly supports multiple mods being loaded at the same time. E.g.: a mod could change trees while another mod adds a new units. If every mod changed the DRS files you could only have one mod loaded at any given time.
- The resulting mod is much smaller, a mod might end up less a few kb instead of > 50 megabytes.
- Significantly easier to create mods
DRS to SLP conversion
To help convert mods to this improved format we've created a drsdiff tool, you can download at here. This tool will compare a modified drs file against an original then output the changed SLPs.
Usage: drsdiff.exe modified.drs original.drs . This will compare the two drs and any new or change SLP/wav/bin file will be created in put in a drsdiff-output\ subdirectory the tool will create.
Code:
>drsdiff.exe graphics_smalltrees.drs graphics.drs
Opening graphics_smalltrees.drs
Found 1 tables and 1768 items
Opening graphics.drs
Found 1 tables and 1768 items
Starting compare (could take a few minutes)...
Diff at 5! Wrote 'drsdiff-output\5.slp'
Diff at 435! Wrote 'drsdiff-output\435.slp'
Diff at 1250! Wrote 'drsdiff-output\1250.slp'
Diff at 1251! Wrote 'drsdiff-output\1251.slp'
Diff at 1252! Wrote 'drsdiff-output\1252.slp'
Diff at 1253! Wrote 'drsdiff-output\1253.slp'
Diff at 1254! Wrote 'drsdiff-output\1254.slp'
Diff at 1255! Wrote 'drsdiff-output\1255.slp'
Diff at 1256! Wrote 'drsdiff-output\1256.slp'
Diff at 1257! Wrote 'drsdiff-output\1257.slp'
...etc...
Text String Modifications
The recommended way to change text strings for Voobly mods is through the use of a robust new language.ini file format. Existing mods have put all the text strings in a language dll files, this has several limitations we've addressed through the use of an .ini file:
- With .dll files you're replacing all or almost all the text strings, with Voobly we support multiple mods being loaded at the same time. E.g.: a mod that changes the default hotkeys, and another mod that adds new units. With the dll approach this couldn't be supported.
- With the .ini format you only need to specify the strings that you've changed, making it much easier to create (sometimes only a 1 line text file!)
- The resulting mod is much smaller, a hotkey mod might end up less than a 1kb instead of > 400kb of language.dll mods.
Language INI Specification
The file name is 'language.ini' located in base mod directory (e.g.: aoc\localmods\MyHotKeyMod\language.ini). Only one language .ini is supported per-mod (all the strings can live in a single ini file).
Format:
Code:
String#=Text String
Example below. First block shows the unmodified strings for the multiple game title and the I'm ready button. With two lines in a text file you can switch these strings.
Code:
9678=Multiplayer Game
9663=I'm Ready!
Code:
9678=My Awesome Mod Is Loaded!
9663=Click Me!
Language DLL to INI Conversion Tool
To help convert mods to this improved format we've created a conversion tool called langconv.exe, you can download here.
There are two primary operations the tool supports: the first being to dump an existing language dll to an ini file, and the second to compare two ini files and produce a trimmed list of strings.
To dump an existing language dll, you use the -d option with the following parameters: langconv.exe -d output.ini source.dll
The example below, shows how you would use langconv to dump all the strings from existing language dll files to language.ini. The tool will smartly merge new strings into language.ini after each run.
Code:
langconv.exe -d game_default_language.ini language.dll
langconv.exe -d game_default_language.ini language_x1.dll
langconv.exe -d game_default_language.ini language_x1_p1.dll
(At this point game_default_language.ini will contain the combined strings from all
language DLL files, order matters because _x1 replaces strings in language.dll)
Use the tool again to dump strings from your existing mod:
Code:
langconv.exe -d mymod.ini language_x1_p1_mymod.dll
To find the minimal set of strings you need in your mod's ini, you use the -t option with the following parameters: langconv.exe -t output.ini yourmods.ini reference.ini
Example:
Code:
langconv.exe -t mymod_min.ini mymod_from_dll.ini game_default_language.ini
If you did it correctly, mymod_min.ini will only have the strings that have changed between mymod_from_dll.ini and game_default_language.ini. You would rename mymod_min.ini as language.ini and put it in your mod directory.
AoC language switcher
You can [You must login to view link] aok and aoc language .dll files from the [You must login to view link] website or the [You must login to view link] from aok.heaven. For aoeHD just follow the recommended installation guide.
UserPatch Extensions
It is possible to create a game mod that enables UserPatch extensions such as the civ support. All you need to do is add a age2_x1.xml to your game mod directory.
Example below for a mod called MyTestMod based on Forgotten Empires...
Code:
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\version.ini
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\age2_x1.xml
c:\MyGame\Voobly Mods\GameID?\Data Mods\MyFirstMod\Data\empires2_x1_p1.dat
etc
You would get 'age2_x1.xml' from C:\Program Files (x86)\Microsoft Games\Age of Empires II\Games\age2_x2.xml . Also copy files from C:\Program Files (x86)\Microsoft Games\Age of Empires II\Games\Forgotten Empires to your new mod directory.
A sample mod is at http://www.voobly.com/gamemods/mod/113/Sample-FE-Mod
Custom Scenario Extensions
Advanced Statistics
(Supported for both Age of Kings and The Conquerors)
Custom Scenario authors may activate advanced statistics, revealing the local players kills and razing information in the F11 text overlay. This makes access to this information much easier than custom kill counters w/ triggers and they also allow custom scenarios to be created with less triggers increasing stability.
The statistic text is shown below:
![advancedstats1.png](http://www.voobly.com/files/view/14348753/cwhjwk29jfgdsmso5axe79zosnrk3veo/advancedstats1.png)
To activate these features, simply create a trigger "Display Instruction" trigger that has the following text:
Code:
<Voobly.com:Advanced-Statistics=1>
![advancedstats2.png](http://www.voobly.com/files/view/14348754/r02oss9mk0yxv6hze0o5hfi8q4chxxjx/advancedstats2.png)
You can download a sample map that implements this:
- AoC: download here.
- AoK: download here.
Take activate advanced statistics in data mod, create a mod.ini file with the following contents:
Code:
[Advanced Statistics]
Enabled=1
Hiding Age information in Score Area
(Supported for The Conquerors)
Custom Scenario authors may disable the extended age information shown in the f4 score area.
The age text is shown below:
![showage.png](http://www.voobly.com/files/view/19327735/vsj30p4oa5e5znxrk8ogkuzhkx87bnkx/showage.png)
To disable the feature, simply create a trigger "Display Instruction" trigger that has the following text:
Code:
<Voobly.com:Show-Age-Info=0>
Note: this is only tested in multiplayer, it might not work in single player.
Random CS Map Support
To create a "random CS maplist", you name all the maps you want in the list using the format: COLLECTIONNAME-rnd-MAPNUM-MAPTOTAL.scx
For example, a collection of three maps called "CS Random" would be named as:
Code:
CS Random-rnd-1-3.scx
CS Random-rnd-2-3.scx
CS Random-rnd-3-3.scx
To host a map using a collection the host must have all the maps. Therefore, it's recommended to package the maps in a game mod.
Any number of map count is supported, that is 2 maps to over 100.
  |
2 User(s) are reading this document (in the past 30 minutes)
0 members, 2 guests
0 members, 2 guests
What's popular right now:
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
CBA PathBlood 1.8.0 (74 users)
![](/res/images/forums/thread/hot_unread.png)
AoKTS updates (71 users)
![](/res/images/forums/thread/hot_unread.png)
1.6 reward campaing (64 users)
![](/res/images/forums/thread/hot_unread.png)
Word Association (44 users)
![](/res/images/forums/thread/hot_unread.png)
TIW 2020 Map votes (35 users)
![](/res/images/forums/thread/hot_unread.png)
New Voobly Client 2.7 (28 users)
![](/res/images/forums/thread/hot_unread.png)
New CBA Hero now supports HD / D... (27 users)
Most active threads in past week:
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
![](/res/images/forums/thread/hot_unread.png)
Torneo 1v1 HUMAITA / HUMAITA 1... (15 posts)
![](/res/images/forums/thread/hot_unread.png)
🌟 Let's Restart Custom Scenar... (11 posts)
![](/res/images/forums/thread/hot_unread.png)
Error al lanzar la partida (4 posts)
![](/res/images/forums/thread/hot_unread.png)
Takım oluşturamıyorum. (3 posts)
![](/res/images/forums/thread/hot_unread.png)
no record games anymore in voobl... (2 posts)
![](/res/images/forums/thread/hot_unread.png)
how can i download the game? (2 posts)
![](/res/images/forums/thread/hot_unread.png)
AOM - VOOBLY (2 posts)