Modding

To get started, download our sample containing all the necessary files required:

Unpack the file on your computer and select the bundle.config file when you are creating a new map. The template ZIP contains the default imagery and sound FX that are used when creating a new map.

The template ZIP file contains the following for your convenience:

  • bundle.config: that's the main file needed to create new bundles & wires up all the basic stuff.
  • extras_*.config: additional imagery with Roman, Carthage, etc. themes.

The template also contains an misc. other resources for your convenience.

Instructions

Please use the in-game editor provided to create new maps. Visit the modding forums for help:

Below the more detailed instructions to modding.

Template

That's the part, that's common to all scenarios, i.e. defines the look of the map. It also defines all the nations that can be used for the scenarios. Before a nation can be used it needs to be defined in the template.

Scenarios

To add/edit use the buttons to the left:

NW+: new scenario
CP+: copy selected scenario
:UP: move scenario up
:DN: move scenario down
DEL: remove a scenario

Scenario modding shouldn't be too hard to figure out? To add nations/teams, they need to be defined beforehand in the template (see above). Then simply add what you need to each scenario.

Image Formats: PNG, JPG, GIF

The editor supports the following image format:

  • PNG: lossless image format that does supports full alpha-transparency.
  • GIF: lossy image format that supports on/off transparency & a maximum of 256 colors only. Animated GIFs are not supported. Your image is currently important as a static image only (animated images are currently not implemented).
  • JPG/JPEG: lossy image format that does not support transparency.

Please only use PNG for flags & icons as it is the only format that supports full alpha-transparency. You can use the other formats however if you prefer. Feel free to use any of the other image formats for the map image. Please note however that GIF & JPG store images in a lossy format, i.e. details are lost. This is not a limitation of the Age of Conquest Editor but a limitation of those image formats themselves. The Age of Conquest Editor converts all images to an internal format in the end, so it does not matter what images you provide.

For details regarding the various image formats see "How-To Geek"'s article What’s the Difference Between JPG, PNG, and GIF?.

Sound & Music

The following sound and music formats are supported:

  • MP3: for background music.
  • WAV: for short sound effects (max. 5 seconds in length).

Mouse & Keyboard

Generally, right-mouse button clicks cancel e.g. province drawing. Use the mouse-wheel to zoom-in. There are no keyboard shortcuts to remember; maybe 'P' is nice to reset the map zoom level.

Map Upload

Once your map is ready, feel free to upload it to the server for others to play. Maps that have been uploaded to the server & are LIVE for other players to play can be updated at any time. However note, due to backwards compatibility, the following map changes are not possible anymore:

  • Provinces cannot be removed (but they can be moved/changed)
  • Links cannot be removed (they can still be updated though)
  • Nations/Coalitions cannot be removed (but they can be changed including their images).

Copyrights

All assets provided by us, including but not limited to images, text, sound effects, music, etc. are property of Noble Master Games unless noted otherwise. We give you full permission to create mods for any of our games. You are also free to use imagery and texts provided for blog articles, video blogs and such.

If you are using 3rd party assets, make sure you have permission to use those. If you upload bundles that contain copyrighted content without permission to use, we will reject your submission.

If in doubt, feel free to post on the modding forums or contact us for clarification.

Balancing

Please consider the following suggestions for balancing maps.

General

Those general rules should be followed when placing structures and troops:

  • Settlements: generally 50'000 population for neutral cities and 200'000 for starting cities. Starting cities are general fortified. Cities are also preferably placed slightly inland and not directly at the beach to make them safer from immediate attack. Also give each city appropriate city structures so nations can build e.g. swordsmen or archers right away.
  • Harbors: add as needed (probably not too many on every corner of the map).
  • Commando Unit: each nation needs to have a commando unit defined. Preferably a unit that is fast and good at conquering settlements.
  • Transport Ships: for nations that are island nations and need ships. For other nations as needed. Please note that island nations need to have ship building research available by default to be able to build ships.
  • Support Troops: preferably 2 supporting troops for each nation in a game.

Please apply relevant research items to nations, so they do not have to start from scratch.

Ancient Maps

Items should be placed as follows:

  • Wood: placed in pine forests in general, rarely in palm areas. Each nation should get ~0.90 lumberyard building spot. Additionally some other lumberyards spaced on the map.
  • Iron: placed on mountains. Each nation should get ~0.90 iron mine building spots.
  • Gold: placed on mountains. About 2-3 gold mine building spots total on the map in areas that can be easily reached by other nations.
  • Stone: placed on hills. About ~0.25 quarry building spots per city. Stone is "rarely" used and not every nation does need it.
  • Horses, Camels & Elephants: placed at locations so each nation that produces troops with those animals have them in their vicinity. E.g. place elephants close to Carthage.
  • Fish (eye candy): evenly spaced in water as desired.

Modern Maps

Items should be placed as follows:

  • Construction/Steel & Oil: placed on plains (desert areas preferred for oil). It's maybe best to pre-create factories and refineries for each nation and also for the rest of the map. Each nation should either get a refinery or a factory (but not both). Some larger nations could have 2+ factories/refineries.
  • Horses, Camels & Elephants (eye candy): evenly spaced in water as desired.
  • Fish (eye candy): evenly spaced in water as desired.

Advanced Modding

Advanced instructions on how to edit bundle.config and module.config files. If you dare to edit, please be aware that the config files are very sensitive when it comes to spaces. Do NOT add any extra spaces between variables and such:

  • Lists separated by comma ',' do NOT have a space after the comma. Correct: “1,1”. Wrong: “1, 1” (has space).
  • Elements separated by colon ':' do NOT have a space after the colon. Correct: “20:31”. Wrong: “20: 31” (has space).
  • Variables are spaced by single spaces ' ' only. Do NOT use double-spaces.
  • For names and texts that have spaces ' ', use an underscore '_' instead. The underscore will be replaced by a space internally. Correct: “The_Roman_Empire_is_large.”. Wrong: “The Roman Empire is large.”.

bundle.config

The bundle.config (or extra_*.config) file is the entry point that links to corresponding module configuration information that defines the parameters and assets.

module.config

The module.config file is the main entry point to describe bundle content.

Comments in the module.config file have to start on a new line using a hash '#' character to denote a comment. Elements such as sound effects, nations, unit schemas and such can be referenced by their ID-number. The first element has ID-number 1, the second element ID-number 2 and so on. For names or texts that contain spaces ' ' use underscore '_' instead. Instead of “Roman Empire” write “Roman_Empire”. The underscore will be translated to a space internally.

module.config - effect

Lists the sound effects (i.e. unit movement sound, attack sound etc.) to be used in the game.

effect: [name]
    type: [type]
    tune: [file]
effect-end!

Parameters:

  • [name]: The name for the effect (not displayed within the game).
  • [type]: The type of the effect.
  • [file]: The file containing the sound effect (WAV is preferred for short sounds).

module.config - melody

Lists the background music to be played during the game. Several files can be defined which will be played after each other.

melody: [name]
    tune: [file]
melody-end!

Parameters:

  • [name]: The name for the music (not displayed within the game).
  • [file]: The file containing the background music (MP3 is preferred for background music).

module.config - matter

Defines the items available in the game such as Gold, Wood, Iron, Stone and Food. Everything besides “cash” (in most cases named “Gold”) is optional. “cash” is required!

matter: [name] [color]
    type: [type]
    icon: [icon]
matter-end!

Parameters:

  • [name]: The name for the matter, e.g. “Gold” or “Wood”.
  • [color]: The HEX-color in RGB for the item (mostly used for texts)
  • [type]: Parameters for the matter:
    • decay=[0,99] The decay per turn in percent. Defaults to 0.
    • food=[y|n] If this is the matter for food. There can only be 1 food-matter!
    • foodPer1000000=[0,1000000] How much food 1 Million people eat for 1 turn.
  • [icon]: The icon for the item.

module.config - combat

The different combat modalities employed for the various troop types. Examples include “Melee”, “Archer” etc.

combat: [name]
    icon: [icon]
    view: [view]
combat -end!

Parameters:

  • [name]: The name for the combat-modality.
  • [icon]: The 16x16px icon to be used.
  • [view]: If the combat modality is type projectile, an optional projectile file can be supplied. E.g. arrows for archers.

module.config - nature

Defines the nature tile such as Stone, Soil (for Farmland), Fishgrounds, Construction Ground etc.

Please note that pines, trees, rivers etc. cannot be configured via modules/bundles but are fixed. They all use a fixed color-ID (see LEGEND) when creating maps.

nature: [name]
    type: [type]
    view: [view]
    tune: [tune]
nature-end!

Parameters:

  • [name]: The name for the nature.
  • [type]: Parameters for the nature-object.
    • abilityWater=[y|n] If it can be placed on water (excludes beach-areas).
    • abilityEarth=[y|n] If it can be placed on dirt-tiles (i.e. non-water).
    • abilityBeach=[y|n] If it can be placed on beach-tiles (the water-part).
    • randomizable=[0,100] How likely the tile is to switch to a new place if the “randomize resource” option is selected (in percent!)
    • genPer1000000=[1,100000] For the random map generator: how many of the nature should be generated.
    • genPlacingType={Earth|Water|Grass} For the random map generator: where to place the nature.
    • genPlacingBloc={Rock|Hill|River|Palms|Pines} For the random map generator: where to place the nature.
    • genSpacing=[1,1000] For the random map generator: minimum spacing in tiles to other nature of the same type.
  • [view]: The graphics to be used.
  • [tune]: The file containing the sound effect (WAV is preferred for short sounds).

module.config - invent

Lists the research items & traits (i.e. Woodworking, Farming III, Trait Barbarian) to be used in the game.

invent: [name]
    desc: [desc]
    type: [para]
    view: [view]
invent-end!

Parameters:

  • [name]: The name of the invention/trait, e.g. “Mercantilism_III”.
  • [desc]: A short 1-3 sentence text describing the item.
  • [para]: Parameters for the invention such as:
    • advance=… The advance provided, e.g. 0,10,0,0,0
    • builable={y, n} If this item can be researched. If 'n' this item needs to be assigned to the nations. Usually a trait such as “Barbarians” which can not be researched.
    • buildExpenses=… The cost to research, e.g. 0:100 (where 0:[gold-amount])
    • needsInvents=… Other research items required before this can be build, e.g. 1,2,3
  • [view]: Icon to be used.

module.config - estate

Lists the available city/harbor-structures.

estate: [name]
    desc: [desc]
    type: [type]
    view: [view]
estate-end!

Parameters:

  • [name]: The name of the building.
  • [desc]: A short 1-2 sentence description for the building.
  • [type]: The parameters for the building.
    • output={matter-ID}:{amount}: Output provided if any.
    • advance=…: Advancement provided.
    • buildExpenses=…: Expenses needed to build the estate.
    • fieldExpenses=…: Costs that have to be paid every turn.
    • needsPlacementLand={y,n}: If 'y', then this structure can only be built in a city (non-harbor!).
    • needsPlacementAqua={y,n}: If 'y', then this structure can only be built in a harbor.
    • needsInvents={invent-ID},…: The inventions required to build the building.
    • needsEstates={estate-ID},…: Other estates that need to be present before this one can be build (please note other required estates need to be defined before this estate for the bundle-maker to work)
    • clearPossible={y,n}: If this building can be removed 'y', or cannot be remove 'n'.
    • clearOutcomes=…: Costs (negative) and gains (positive) if this building is removed.
  • [view]: Images to be used (non-snowy & snowy) and placement (x,y).

module.config - decree

Lists decrees that can be made available in a city/harbor (“civ”).

nation: [name]
    desc: [desc]
    type: [type]
    icon: [icon]
nation-end!

Parameters:

  • [name]: The name of the nation, e.g. “Roman_Empire”.
  • [desc]: A short 1-2 sentence description for the decree.
  • [type]: Describes the decree parameters as:
    • expenses=…: the cost to use the decree.
    • expensesPer1000000={y, n}: if the cost to use the decree is relative to 1'000'000 residents in the village harbor 'y' or absolute 'n'.
    • restrictionInit=…: Until which turn you can issue the decree. Turn refers to turns you have taken over the city. If this is 1, then the decree can only be issued at the turn right after you took the city/village.
    • restrictionNext=…: How many turns you have to wait until you can issue the decree again (after you used it the first time around).
    • needsInvents={invent-ID},…: The list of inventions you need to be able to issue the decree.
    • needsEstates={estate-ID},…: The list of city-buildings that are required to issue the decree.
    • outputHappiness=…: The change in happiness-% when issuing the decree.
    • outputResidents=…: The change in population size (in percent) when issuing the decree.
  • [icon]: Icon to be used (currently not used/ignore!).

module.config - league

Lists the groups for team-play (i.e. “Roman Alliance”).

nation: [name] [name-plural] [color]
    icon: [icon]
    flag: [flag]
nation-end!

Parameters:

  • [name]: The name of the group, e.g. “Unaffiliated”.
  • [name-plural]: The name of the group, e.g. “Unaffiliated_Nations”.
  • [color]: A 6-character color-value for the nation to be used for coloring units, overview map etc. For example ff0000 describes 'red'.
  • [icon]: Icon to be used.
  • [flag]: Flag to be used.

module.config - schema

Lists the available elements (i.e. swordsmen, villages, farms, bridges, etc.) to be used in the game.

schema: [name]
    spec:
        [schema-spec]
    spec-end!
    view:
        [schema-view]
    view-end!
    hear:
        [schema-hear]
    hear-end!
    area:
        [schema-area]
    area-end!
schema-end!

Parameters:

  • [name]: The name of the schema, e.g. “War_Elephant”.
  • [schema-spec]: Technical specifications for a unit.
  • [schema-view]: Visuals to be used.
  • [schema-hear]: Sound effects to be used.
  • [schema-area]: This part is only used for settlements to define the layout of the city view. Leave out (including surrounding tags) if the unit is neither a harbor nor a village.

module.config - schema-spec

Describes the components available for a unit. Use a hash '#' to disable components not used.

spec:
    pos: [pos]
    own: [own]
    mov: [mov]
    arm: [arm]
    gen: [gen]
    bin: [bin]
    civ: [civ]
    out: [out]
spec-end!

Parameters:

  • [pos]: How a unit can be place on the map.
    • altitude=Base: Do NOT change.
    • abilityEarth={y, n}: Set to 'y' for land units.
    • abilityWater={y, n}: Set to 'y' for water units such as ships.
    • abilityBeach={y, n}: Set to 'y' for units, i.e. harbors that are placed on the beach (water-side).
  • [own]: A unit that can be owned by a player.
    • rangeDetection=[1, ∞): How far the unit can view (used for fog of war).
  • [mov]: A unit that can move around on the map.
    • actionPointsMax=[1, ∞): How far a unit can move. 10 action points correspond to about 1 tile. Forests/other will require more action points to traverse.
    • consumeCash=[1, ∞): Upkeep cost in cash/gold for the unit (used every turn).
    • consumeFood=[1, ∞): Food consumption per turn.
    • capturer={y, n}: Defines if a unit can take over/capture structures. Defaults to 'n' (e.g. ships).
    • distanceMax=[1, ∞): How far the unit can travel until it has to return to a host. Will be destroyed otherwise. Mainly used to limit ship movements. Leave out this variable if not used.
  • [arm]: The armaments/combat type of a unit, e.g. swordsman. Please have a look at Combat Math for details on combat functionality.
    • strengthMax=[1, ∞): The default maximum strength.
    • combat={combat-ID}: The combat modality (references the combat ID-number from above).
    • combatBonuses={combat-ID}:[-99, ∞),{combat-ID}:[-99, ∞), …: List all the combat bonuses of the unit against other units. Defaults to 0 if a combat modality is not listed.
    • rangeAttack=[1, 2]: The attack range of a unit. '1' is the neighbor tile (1 tile away). '2' for 2 tiles away.
    • weatherEffect=[-99, ∞): Combat-bonus/penalty when it is raining/snowing (in %).
    • frostedEffect=[-99, ∞): Combat-bonus/penalty when over snow (in %).
    • terrainEffect=[-99, ∞): Combat-bonus/penalty when in forest areas (in %).
    • concealEffect=[-99, ∞): Combat-bonus/penalty when hidden, e.g. in forests (in %).
    • campingEffect=[-99, ∞): Combat-bonus/penalty when encamped (in %).
    • offense={offense+}|{cost}|{action-points}|{invent-ID}: Equip with offense-capabilities.
    • offense+: % increase in combat-power while attacking.
    • cost: cost to equip with.
    • action-points: the action points required to equip with (for [mov]-able units only)
    • invent-ID: the invent-ID of the research required to enable equipment of capability.
    • defense={defense+}|{cost}|{action-points}|{invent-ID}: Equip with defense-capabilities.
    • defense+: % increase in combat-power while defending.
    • cost: cost to equip with.
    • action-points: the action points required to equip with (for [mov]-able units only)
    • invent-ID: the invent-ID of the research required to enable equipment of capability.
    • restore={strength+}|{cost}|{action-points}|{hosted}|{auto-repair}: Repair-parameters.
    • strength+: increase in strength when repaired
    • cost: cost to repair
    • action-points: the action points required to repair (for [mov]-able units only)
    • hosted: If repair is only possible when hosted 'y' or anywhere 'n'
    • auto-repair: How much a unit (e.g. city) will auto-repair itself (defines the strength-increase). Use 0 for no auto-repair.
  • [gen]: If enabled, a unit can be built by the player.
    • buildExpenses=[0, ∞): The cost in gold to build the unit.
    • buildResidents=[0, ∞): The population size required to build the unit.
    • buildPoints=[0, ∞): The number of action points that will be deducted from a unit after it has been built (only applies to moveable units such as a swordsman). Setting this number equal or higher than the maximum action points possible for a moveable unit will prevent this unit from being moved on the same turn.
    • needsNature={nature-ID}: The naturerequired. E.g. elephants to build a war elephant unit.
    • needsNatureRange=[1,∞): The amount of tiles away the nature must be. Leave out if nature must be on the same tile, like a mine/quarry.
    • needsInvents={invent-ID},{invent-ID}, …: The inventions required to build the unit.
    • needsEstates={estate-ID},{estate-ID}, …: The city structures required to build the unit.
  • [bin]: A settlement, bridge or farmland that allows to “host” other units.
    • hostableMax=[1, 8]: How many other units can be maximum hosted. This shall be '1' for bridges and farms but can be higher for transport ships, villages or harbors.
  • [civ]: A harbor or village.
    • decrees={decree-ID},…: The decree items that are available in the city/harbor.
    • placementLand={y, n}: This refers to “estate”-structures that can be built in the city. If 'y', then only structures with “needsPlacementLand” can be built.
    • placementAqua={y, n}: This refers to “estate”-structures that can be built in the city. If 'y', then only structures with “needsPlacementAqua” can be built.
    • largenessMax=…: The maximum population size that can live in the city/harbor (please use '8' for now).
    • pillage={%-income},{pillage-turns},{happiness-change}: Describes if a city/harbor can be pillaged. The %-income will gives the amount of commerce you receive (based on 1-turn == 100%). Pillage-turns refers to how many turns the city/harbor will be inaccessible to actions. Pillaging will also result in a happiness-change as listed.
  • [out]: A farm/mine/fishing boat/etc. producing output.
    • output={matter-ID}:{amount}: How much output is produced.
    • placing={nature-ID}: Which nature it has to be placed on to produce output.
    • temperatureMin=[-80, 70]: The minimum temperature for which output is produced.
    • temperatureMax=[-80, 70]: The maximum temperature for which output is produced.
    • groundwaterMin=[0, 100]: The minimum groundwater level for which optimal output is produced.
    • groundwaterMax=[0, 100]: The maximum groundwater level for which optimal output is produced.
    • droughtEffect=[0, 100]: How much output is produced in percent during a drought (e.g. 25 means 25% of optimal output during a drought).
    • enlarges={+%}|{cost}|{invent-ID}→…: If and how it can be upgraded.

module.config - schema-view

The schema-view lists all the imagery to be used for troops, settlements, bridges etc. The first parameter right after “view: …” describes what imagery will be provided:

  • animation: will provide images for IDLE ('0'), MOVEMENT('1') and BATTLE('2')
  • direction: will provide directional images: 0° ('0'), 60° ('1'), 120° ('2'), 180° ('3'), 240° ('4'), 300° ('5').
  • snowy: will provide snowy & non-snowy images: non-snowy ('0') and snowy ('1').

Once the type of imagery is selected, ALL the combinations need to be provided below. If “view: animation direction” was chosen for example, the following items are required. Please note the numbers related to the display-aspect chosen, i.e. the first number relates to “animation” and the second to “direction”.

0-0: IDLE at 0°
0-1: IDLE at 60°
0-2: IDLE at 120°
0-3: IDLE at 180°
0-4: IDLE at 240°
0-5: IDLE at 300°
1-0: MOVEMENT at 0°
1-1: MOVEMENT at 60°
1-2: MOVEMENT at 120°
1-3: MOVEMENT at 180°
1-4: MOVEMENT at 240°
1-5: MOVEMENT at 300°
2-0: BATTLE at 0°
2-1: BATTLE at 60°
2-2: BATTLE at 120°
2-3: BATTLE at 180°
2-4: BATTLE at 240°
2-5: BATTLE at 300°

For each combination the following has been specified:

[image][|[imageCC]] ([dx],[dy],[dB],[dF]) hud([hudL],[hudR],[hudX],[hudY]) bin([binS],[binP],[binY]) [| [anim]]

Key:

  • [image]: the regular troop/etc. image.
  • [imageCC]: optional image providing color-coding for the unit.
  • [dx]: x-offset of the unit on the tile.
  • [dy]: y-offset of the unit on the tile.
  • [dB]: if blocky-items (e.g. mountains) shall be shown underneath the unit.
  • [dF]: if nature-items (e.g. trees) shall be shown underneath the unit.
  • [hudL]: where the unit HUD shall be displayed: 0=back, 1=behind hosted units, 2=in front hosted units, 3=in front
  • [hudR]: orientation of unit HUD: n=north, w=west, e=east.
  • [hudX]: x-offset for unit HUD.
  • [hudY]: y-offset for unit HUD.
  • [binS]: ONLY for transports/cities/etc. where units are hosted within: scale-factor in percent for showing a hosted unit.
  • [binP]: ONLY for transports/cities/etc. where units are hosted within: directional-offset while showing the hosted unit.
  • [binY]: ONLY for transports/cities/etc. where units are hosted within: y-offset while showing the hosted unit.
  • [anim]: optional animation: see Asset Specifications for details.

Animated Images

To make an animated image, supply a .PNG file will all the animation frames inside that .PNG file. Ditto for static images, you list the image to use, e.g. “nature_wood.png” and then append the animation specifications. Use a “|” as divider as applicable.

The animation is defined as follows. Please insert spaces ' ' exactly as given below. Not adding the spaces as listed below will break the parser. Basically for animations, you list a number of frames to be displayed on the screen. For each frame you can specify how long & where it shall be displayed.

anime-{w}x{h}-forever : {t0}-{t1} ({xs},{ys})=>({xt},{yt}) {dw}x{dh} {blend} : ...

Meaning:

  • {w}: The width of the full animation scene (use AUTO to let the system determine automatically).
  • {h}: The height of the full animation scene (use AUTO to let the system determine automatically).
  • {t0}: The start time of the frame (milliseconds)
  • {t1}: The end time of the frame, exclusive (milliseconds).
  • {xs}: The x source coordinate of the frame in the .PNG image supplied.
  • {ys}: The y source coordinate of the frame in the .PNG image supplied.
  • {xt}: The x target coordinate in the animation scene.
  • {yt}: The y target coordinate in the animation scene.
  • {dw}: The width of the animation frame.
  • {dh}: The height of the animation frame.
  • {blend}: An optional blending color to apply to the frame in 8-char ARGB HEX (defaults to ffffffff). Using e.g. ffff0000 will make the frame appear red. : …: other frames always starting with : {t0}-{t1}… (important: always add the colon ':' in front of each new frame).

How to restrict troops, e.g. "War Elephants" to only Carthage?

1. module.config: create a new research item. Set the option “buildable” to 'n' to prevent anyone for being able to acquire that trait.

invent(57): Trait_Carthage
  desc: Carthaginian cultural trait.
  type: ... buildable=n ...
  view: ...
invent-end!

2. module.config: assign that trait to Carthage only:

nation(2): Carthage ...
  type: invents=57 ...
  ...
nation-end!

3. module.config: last but not least, restrict the war elephants to be buildable only if that trait is present:

schema(20): War_Elephants ...
  spec:
    ...
    gen: ... needsInvents=57 ...
    ...
  spec-end!
  ...
schema-end!