Adding new campaigns


Custom Campaigns

Ironfist supports adding custom campaigns.

In short you need to make an xml-syntax file specifying some metadata information, map files named correctly and a bunch of graphics added to ICN files and 1 new ICN file

 

Requirements:

Should be placed in %game dir%/CAMPAIGNS folder. If the folder doesn't exist, create it!

Check info below for details

Should be placed in  %game dir%/MAPS folder

These have the same format as other maps, just renamed from .MX2 or .MP2 to .HXC

Example: Campaign ID = 4, Amount of scenarios = 3 -> CAMP5_01.HXC, CAMP5_02.HXC, CAMP5_03.HXC

Frame IDs start from Campaign ID * 3 + 3

Example: Campaign ID = 4 -> new frames should be 0015.bmp, 0016.bmp, 0017.bmp

Frame ID = Campaign ID

Example: Campaign ID = 4 -> new frame 0004.bmp

It has only one frame 0000.bmp

Example: Campaign ID = 4 -> new ICN X_TRACK4.ICN with one frame 0000.bmp

 

Campaign file format (*.cmp)

 

Example:

Contents of example.cmp

 

<campaign>

<id>4</id>

<name>Example Campaign</name>

<shortName>EXC</shortName>

<numMaps>2</numMaps>

<scenarioName index="0">Scenario 1 name</scenarioName>

<scenarioName index="1">Scenario 2 name</scenarioName>

<scenarioDescription index="0">Scenario 1 description</scenarioDescription>

<scenarioDescription index="1">Scenario 2 description</scenarioDescription>

<scenarioIcon scenarioID="0" x="111" y="331"/>

<scenarioIcon scenarioID="1" x="185" y="331"/>

<scenarioDifficulty index="0" value="0"/>

<scenarioDifficulty index="1" value="1"/>

<choice scenarioID="0" id="0" type="0" field="6" amount="1000"/>

<choice scenarioID="0" id="1" type="0" field="0" amount="50"/>

<choice scenarioID="0" id="2" type="0" field="4" amount="10"/>

<choice scenarioID="1" id="0" type="9" field="0" amount="1"/>

<choice scenarioID="1" id="1" type="9" field="1" amount="1"/>

<choice scenarioID="1" id="2" type="0" field="6" amount="1000"/>

<replaySMK index="0" value="-1"/>

<replaySMK index="1" value="-1"/>

<victorySMK index="0" value="-1"/>

<victorySMK index="1" value="48"/>

<mapToComplete index="0" value="0"/>

<mapToComplete index="1" value="1"/>

<award index="0" value="6"/>

<saveHero scenarioID="0" playerID="0" ownedHeroID="0"/>

<loadHero scenarioID="1" playerID="0" ownedHeroID="0"/>

</campaign>

 

id - Campaign ID: Should be unique and higher than 3 (first 3 are original game expansion campaigns) 

name, scenarioName, scenarioDescription - self-explanatory

shortName - string: Used for autosaved games after winning campaign scenarios

numMaps - number: Defines the number of scenarios in the campaign

scenarioIcon - icon data (scenario ID and x, y positions of icons): Defines icon placement in scenario schema in scenario selection menu

scenarioDifficulty - number: Defines difficulty of each scenario map, where index = Scenario ID and value = number from 0 (Easy) to 4 (Impossible)

choice - Bonuses that can be chosen before starting a Scenario: where id = number from 0 to 2 (you can choose maximum one out of 3 bonuses); Type, field and amount are described in a separate section below

replaySMK - Video data: Defines a smacker format video to be played when starting the scenario, where index = Scenario ID and value = video ID from 0 to 72. Can be set to -1 to skip video

victorySMK - Video data: Defines a smacker format video to be played when winning a scenario where index = Scenario ID and value = video ID from 0 to 72. Can be set to -1 to skip video

mapToComplete - Defines which scenarios can be chosen from "index" campaign. This can be used for branching scenario schemas. You can have multiple mapToComplete items with the same index and different value to allow choosing multiple maps in scenario select screen

award - number: integer from 0 to 10: Award given to a player after completing a certain scenario. Check details in a separate section below

saveHero/loadHero -

It's possible control which hero data transfers to the next scenario
Data transfered:

Examples:
<saveHero scenarioID="0" playerID="0" ownedHeroID="0"/>
This will save the first owned hero from player 0 to memory on the first campaign scenario

<loadHero scenarioID="1" playerID="0" ownedHeroID="0"/>
This will load the first saved hero in memory to the first hero owned by player 0

It's possible to transfer multiple heroes between scenarios but you must follow the same order for saving and loading, e.g.:
<saveHero scenarioID="0" playerID="0" ownedHeroID="0"/>
<saveHero scenarioID="0" playerID="0" ownedHeroID="1"/>
<loadHero scenarioID="1" playerID="0" ownedHeroID="0"/>
<loadHero scenarioID="1" playerID="0" ownedHeroID="1"/>

 

Campaign Choice

Type can be one of these:

enum CAMPAIGN_CHOICE_TYPES {

  CAMPAIGN_CHOICE_RESOURCE = 0,

  CAMPAIGN_CHOICE_ARTIFACT = 1,

  CAMPAIGN_CHOICE_SPELL = 2,

  CAMPAIGN_CHOICE_SECONDARY_SKILL = 3,

  CAMPAIGN_CHOICE_ARMY = 4,

  CAMPAIGN_CHOICE_PUZZLE_PIECES = 5,

  CAMPAIGN_CHOICE_EXPERIENCE = 6,

  CAMPAIGN_CHOICE_NOT_AVAILABLE = 7, <- Unused

  CAMPAIGN_CHOICE_ALIGNMENT = 8, <- Used in original campaigns (not expansion ones)

  CAMPAIGN_CHOICE_PRIMARY_SKILL = 9,

  CAMPAIGN_CHOICE_SPELL_SCROLL = 10

};

Field and Amount define different data for different types:

CAMPAIGN_CHOICE_RESOURCE: Field = Resource ID (see Resources), Amount - Quantity of resources to give

CAMPAIGN_CHOICE_SPELL: Field = Spell ID (see Spells), Amount - unused

CAMPAIGN_CHOICE_SECONDARY_SKILL: Field = Secondary Skill ID (see Secondary Skills), Amount - Level of skill from 0 (Basic) to 3 (Expert)

CAMPAIGN_CHOICE_ARMY: Field = Creature ID (see Creatures), Amount - Quantity of creatures

CAMPAIGN_CHOICE_PUZZLE_PIECES: Field = number of puzzle pieces given, Amount - unused

CAMPAIGN_CHOICE_EXPERIENCE: Field = Points of experience, Amount - unused

CAMPAIGN_CHOICE_PRIMARY_SKILL: Field = Primary Skill ID (see Primary Skills), Amount - Points to add to chosen Primary Skill

CAMPAIGN_CHOICE_SPELL_SCROLL: Field = Spell ID (see Spells), Amount - unused

 

Awards

Value can be one of these: 

1 - "Breastplate",

3 - "Helmet",

5 -"Battle Garb",

8 - "Legendary Sceptre",

9 - "Guardian Spell",

10 - "Sphere of Negation"

 

Adding new Campaign Choices, Awards

Campaign Choices

You will need to update CAMPAIGN_CHOICE_TYPES enum in campaign.h with a new choice type

You will need to modify ExpCampaign::UpdateInfo to add readable names for new choice types in the scenario select menu

The actual functionality can be coded either through scripting (see Scripting Documentation) or in ExpCampaign::InitMap

 

Awards

You can't add new awards atm