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
- CAMP*_01.HXC, CAMP*_02.HXC e.t.c... - Scenario map files, where * = Campaign ID + 1
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
- 3 frames in X_CMPEXT.ICN - Scenario icons in scenario select menu
Frame IDs start from Campaign ID * 3 + 3
Example: Campaign ID = 4 -> new frames should be 0015.bmp, 0016.bmp, 0017.bmp
- 1 frame in X_CMPHDR.ICN - Campaign name header image in scenario select menu
Frame ID = Campaign ID
Example: Campaign ID = 4 -> new frame 0004.bmp
- X_TRACK*.ICN where * = Campaign ID - Scenario schema image in scenario select menu
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:
- Primary/secondary skills
- Spells learned
- Experience
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
Comments (0)
You don't have permission to comment on this page.