Conquer Club

[Official] XML Guide

How to make a map. Official Handbook, Guides, Tutorials and more...

Moderator: Cartographers

Forum rules
Please read the Community Guidelines before posting.

3.9 -<territories>

Postby thenobodies80 on Mon Jan 07, 2013 4:30 pm

3.9-<territories>

This tag defines the regions on your map; their names, borders, and position on the images. You need one for each region on your map. A region is a point on a map at which troops are placed. Some optional subtags provide additional control.

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border>AdjName</border>
_________...
____</borders>
____<coordinates>
______<smallx>SXCoord</smallx>
______<smally>SYCoord</smally>
______<largex>LXCoord</largex>
______<largey>LYCoord</largey>
____</coordinates>
</territory>


For each territory you'll also need to specify <name>, <borders> and <coordinates>. Borders is a list of <border> tags containing exact names of other territories that can be assaulted from this one (and consequently, can be reinforced once conquered). Coordinates is a list of the X and Y coordinates (in pixels) where the armies should be printed on the small and large maps. At its most basic version, this tag contains only the <name> of the region, the list of <borders>, and where the <coordinates> where the troop count should be printed.

TerName: The name given to this territory.
AdjName: The name of an adjacent territory (TerName can assault AdjName)
SXCoord: The value of the X Coordinate, in pixels, for the small map.
SYCoord: The value of the Y Coordinate, in pixels, for the small map.
LXCoord: The value of the X Coordinate, in pixels, for the large map.
LYCoord: The value of the Y Coordinate, in pixels, for the large map.

Notes:
The tag can be expanded with optional subtags, If you are looking for a more extensive use of the <territories> tag, you can find some info here (Autodeploy and Decay), here (Starting Neutrals and Killer Neutrals), here (One Way and Ranged Attacks), here (Bombardaments) and here (Conditional Borders).

Location:
It goes after the <continents> tag and before the closing </map> tag.

Examples:
Berlin region on the Germany map. It borders with Schwerin and Potsdam.
The code for this region looks this way:
Code: Select all
<territory>
   <name>Berlin</name>
   <borders>
   <border>Schwerin</border>
   <border>Potsdam</border>
   </borders>
   <coordinates>
      <smallx>514</smallx>
      <smally>180</smally>
      <largex>601</largex>
      <largey>221</largey>
   </coordinates>
</territory>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

4.1 -Reinforcement Adjustment

Postby thenobodies80 on Mon Jan 07, 2013 4:30 pm

4.1 -Reinforcement Adjustment

We have defined here the very basic use of <minreinforcement> and <reinforcements> tags.

Now we are going to see the whole set of tricks that we can use, but first, a few rules:

Rules:
  • The minimum reinforcement must be a number greater than zero.
  • If you create 2 or more <reinforcement> tag, ensure that they don't overlap.
  • Where not specified, applies the standard reinforcement +1 every 3 regions.

You should keep in mind the above rules while playing with your reinforcements, or your map won't work in the proper way or at all.

Standard Reinforcement:
This code implements the default rate of 1 army for each 3 territories in the Classic Map.
Code: Select all
<reinforcements>
   <reinforcement>
      <lower>1</lower>
      <upper>42</upper>
      <divisor>3</divisor>
   </reinforcement>
</reinforcements>

With this case the number of regions we hold is divided by 3. So we will receive 4 armies instead of 3 when we hold the 12th regions at the start of a turn.Then 5 armies with 15 regions, etc.

Change the divisor:
In First Nations of the Americas, the reinforcement rate was lowered to 1 army per each 4 territories. Here you can see how that was made:
Code: Select all
<minreinforcement>4</minreinforcement>
<reinforcements>
   <reinforcement>
      <lower>1</lower>
      <upper>127</upper>
      <divisor>4</divisor>
   </reinforcement>
</reinforcements>


Set 2+ <reinforcement> tags:
The map Conquer Man adjusts territories applying the Diminishing Returns Law meaning that the more territories a player has, the more he needs to add to get the next reinforcement, following the table:

  • 1-30 occupied territories: One army for every 3 territories.
  • 31-60 occupied territories: One army for every 4 territories.
  • 61-100 occupied territories: One army for every 5 territories.
  • 101-151 occupied territories: One army for every 6 territories.

This table is coded with those lines:
Code: Select all
<reinforcements>
   <reinforcement>
      <lower>1</lower>
      <upper>30</upper>
      <divisor>3</divisor>
      <lower>31</lower>
      <upper>60</upper>
      <divisor>4</divisor>
      <lower>61</lower>
      <upper>100</upper>
      <divisor>5</divisor>
      <lower>101</lower>
      <upper>151</upper>
      <divisor>6</divisor>
   </reinforcement>
</reinforcements>


Capped Reinforcements:
The Hive map sets a maximum for territories reinforcement. After the 36th territory, players do not get additional reinforcements on this basis. It is achieved by setting a divisor number higher than the number of territories in the last segment.
Code: Select all
   <minreinforcement>3</minreinforcement>
   <reinforcements>
      <reinforcement>
         <lower>1</lower>
         <upper>36</upper>
         <divisor>3</divisor>
      </reinforcement>
      <reinforcement>
         <lower>37</lower>
         <upper>352</upper>
         <divisor>400</divisor>
      </reinforcement>
   </reinforcements>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

4.2 -Starting Positions

Postby thenobodies80 on Mon Jan 07, 2013 4:31 pm

4.2 -Starting Positions: Underlying Neutrals and Advanced Usage

We have defined here the very basic use of <positions> tag.
Now we are going to learn how to use the Starting Positions more in depth, but first, a few rules:

Rules:
  • Starting Positions are always divided evenly among the players.
  • If you have more players than positions, then starting positions are ignored.
  • When not assigned, a position is handed out as a standard region, so an eventual underlying neutral will apply.
  • Only territories can be used as starting positions <components>
  • There's no limit with the number of starting positions on a map.
  • Starting Positions can contain different number of <components>

You should keep in mind the above rules when you use the starting positions or the map will work in a different way than how expected.

This chapter is for the comprehension of an advanced usage of Starting Positions, if you're looking instead for the basic use of this feature, please take a look here.


Define the starting amount of troops with positions:
We know that the default number of troops given on a territory is 3. There could be a case in which we want to give more than 3 troops on a territory that is coded as starting position.
To achieve this we need to use the start="" identifier within the <territory> tag placed into a <position>

Look at this example:
City Mogul is a map that tries to minimize the luck factor by creating inflation in the number of armies. Bonuses and neutrals are much higher than is usual on an average map. This in turn required the mapmaker to also increase the number of starting armies per player by using the <positions> tag. This map also has starting positions with more than one territory.
Code: Select all
<!-- Starts -->
<positions>
   <position>
      <territory start="20">P4</territory>
      <territory start="30">P2</territory>
   </position>
   <position>
      <territory start="20">Y4</territory>
      <territory start="30">Y2</territory>
   </position>
   <position>
      <territory start="20">R4</territory>
      <territory start="30">R6</territory>
   </position>
   <position>
      <territory start="20">C1</territory>
      <territory start="30">C4</territory>
   </position>
   <position>
      <territory start="20">G5</territory>
      <territory start="30">G4</territory>
   </position>
   <position>
      <territory start="20">O6</territory>
      <territory start="30">O7</territory>
   </position>
   <position>
      <territory start="20">B5</territory>
      <territory start="30">B3</territory>
   </position>
   <position>
      <territory start="20">S4</territory>
      <territory start="30">S2</territory>
   </position>
</positions>


Limit the number of positions for each player:
We said that starting positions are always divided evenly between players. But there's a way to have more control on the number of starting positions that are given out at the start.
If we want to control the maximum number of positions (NOTE: not the number of components) that is given to each player, we can use the max="" options into the <positions> tag.
But look at this example for better understanding:
Kings Court map has 8 starting positions. And although games on this map will start with two positions for each player for 3- and 4-player games, the XML prevents 1v1 games from starting with 4 positions (8 divided by 2) by setting the maximum number of positions to 2.
Code: Select all
<positions max="2">
   <position>
      <territory start="2">Castle A</territory>
      <territory start="1">Noble A</territory>
   </position>
   <position>
      <territory start="2">Castle B</territory>
      <territory start="1">Noble B</territory>
   </position>
   <position>
      <territory start="2">Castle C</territory>
      <territory start="1">Noble C</territory>
   </position>
   <position>
      <territory start="2">Castle D</territory>
      <territory start="1">Noble D</territory>
   </position>
   <position>
      <territory start="2">Castle E</territory>
      <territory start="1">Noble E</territory>
   </position>
   <position>
      <territory start="2">Castle F</territory>
      <territory start="1">Noble F</territory>
   </position>
   <position>
      <territory start="2">Castle G</territory>
      <territory start="1">Noble G</territory>
   </position>
   <position>
      <territory start="2">Castle H</territory>
      <territory start="1">Noble H</territory>
   </position>
</positions>


Underlying Neutrals:
After the starting positions have been divided among the players as evenly as possible, the components of the remaining positions are treated like standard regions and given out using the standard formula: (NumRegions / NumPlayers, where, in the case of a 1v1 game, NumPlayers is set to three, setting up the "neutral player" with at least as many territories as the actual players).
But if we do not want to put the remaindered territories into the starting drop we're able to do that using the underlying neutrals

An underlying neutral is nothing more than a territory coded to start as a neutral one. If you don't know how to code a territory as neutral please read here.
Instead, if you already know how to use neutrals, just let me explain the trick:

When the game starts, starting Positions are evaluated before the territory tags. So the game engine divides the number of starting positions evenly between the players.
For this example let us consider the case where there is a remainder. We said that remaindered territories are given out using the standard formula, so such territories are no longer seen as part of a starting position but rather just like normal <territories> tags.
So before dividing them among the players, the game engine will check if some of them are coded as neutrals. If this is the case, the game will give the territories a neutral value instead of putting them into the starting pot. In fact neutrals have a priority on normal territories.

Confused? Let's use some code to show you that is not so hard to do!
The map New World provides a good example of how to use the <positions> tag to create a Conquest map (a map in which all the territories start as neutral except for the starting players positions):
Code: Select all
<!-- Start Positions -->
<positions>
   <position>
      <territory>Britain</territory>
   </position>
   <position>
      <territory>France</territory>
   </position>
   <position>
      <territory>Holland</territory>
   </position>
   <position>
      <territory>Spain</territory>
   </position>
   <position>
      <territory>Portugal</territory>
   </position>
   <position>
      <territory>Inuit Homeland</territory>
   </position>
   <position>
      <territory>Comanche Homeland</territory>
   </position>
   <position>
      <territory>Aztec Homeland</territory>
   </position>
   <position>
      <territory>Mapuche Homeland</territory>
   </position>
</positions>


Let's make it so that France is not assigned with starting positions and we don't want it to be given out as a normal territory due to the autodeploy bonus (+4)
We need just to add the <neutral> tag into the territory:

Code: Select all
<!-- France -->
<territory>
  <name>France</name>
  <borders>
    <border>French Landing Point</border>
  </borders>
  <bombardments>
    <bombardment>French 1</bombardment>
   <bombardment>French 2</bombardment>
   <bombardment>French 3</bombardment>
  </bombardments>
  <coordinates>
    <smallx>545</smallx>
   <smally>167</smally>
   <largex>637</largex>
   <largey>191</largey>
  </coordinates>
  <neutral>10</neutral>
  <bonus>4</bonus>
</territory>


Positions only for particular numbers of players:

If we have a map in which numbers are perfect for, let say, 8 players but not for 3 players, we can decide to work on numbers using starting positions.
Obviously we need to use a system that has influence only on a specific number of player and not on the whole cases.

Do this is simple, we need just to code less positions than players. For games in which players are more than positions, those positions will be ignored.
But look at the example:


Thyseneal
has starting positions, but only for games with 5 players or less. This is to prevent a player from unfairly getting a bonus right from the start.

Code: Select all
<positions>
   <position>
      <territory>Dalmus</territory> <!-- position A-1 -->
      <territory>Arleus</territory> <!-- position A-2 -->
      <territory>Illania</territory> <!-- position A-3 -->
      <territory>Tuskaroja</territory> <!-- position A-4 -->
   </position>
   <position>
      <territory>Caspiar</territory> <!-- position B-1 -->
      <territory>Chunjaris</territory> <!-- position B-2 -->
      <territory>Azuran</territory> <!-- position B-3 -->
      <territory>Alus</territory> <!-- position B-4 -->
   </position>
   <position>
      <territory>Tyross</territory> <!-- position C-1 -->
      <territory>Theraland</territory> <!-- position C-2 -->
      <territory>Chancella</territory> <!-- position C-3 -->
      <territory>Cancallus Desert</territory> <!-- position C-4 -->
   </position>
   <position>
      <territory>Cratica</territory> <!-- position D-1 -->
      <territory>Sarle</territory> <!-- position D-2 -->
      <territory>Jenua</territory> <!-- position D-3 -->
      <territory>Iskul</territory> <!-- position D-4 -->
   </position>
   <position>
      <territory>Solaria</territory> <!-- position E-1 -->
      <territory>Itheria</territory> <!-- position E-2 -->
      <territory>Morovia</territory> <!-- position E-3 -->
      <territory>Narula</territory> <!-- position E-4 -->
   </position>
</positions>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

4.3 -Continents Options

Postby thenobodies80 on Mon Jan 07, 2013 4:31 pm

4.3.1 -Nested Continents and Overrides

We have described here the <continents> tag.
Now we are going to learn how to mix some continents together to create more variety in your maps.

Nested Continents:
We know that a continent is a group of regions. Usally the structure of bonuses based on zones (continents) is pretty simple and clear. But in some cases we need to create a series of continents where the components of one is a subset of (or even identical to) the components of another. Confused? Ok, look at this example:

This is a continent taken from the Cyprus map. With this bonus you need to hold at least 5 turkish territories to receive +1 troop.
Code: Select all
<continent>
<name>5 Turkish Territories</name>
   <bonus>1</bonus>
   <components>
        <territory>Rizokarpaso</territory>
        <territory>Yalousa</territory>
        <territory>Akanthou</territory>
        <territory>Lefkoniko</territory>
        <territory>Famagusta</territory>
        <territory>Kyrenia</territory>
        <territory>Karavas</territory>
        <territory>Laphitos</territory>
        <territory>Morphou</territory>
        <territory>Kythrea</territory>
        <territory>Nicosia</territory>
   </components>
   <required>5</required>
</continent>


It looks exactly like a standard bonus with the exception of the <required> tag. If you add this tag, your bonus will not given only when a player holds the whole list of territories, but instead when he holds at least the number of territories equal to the number written into the <required> tag, obviously, among those territories listed in the continent.

Now, we are going to add a second continent, this time +2 for 10 turkish territories:

Code: Select all
<continent>
<name>5 Turkish Territories</name>
   <bonus>1</bonus>
   <components>
        <territory>Rizokarpaso</territory>
        <territory>Yalousa</territory>
        <territory>Akanthou</territory>
        <territory>Lefkoniko</territory>
        <territory>Famagusta</territory>
        <territory>Kyrenia</territory>
        <territory>Karavas</territory>
        <territory>Laphitos</territory>
        <territory>Morphou</territory>
        <territory>Kythrea</territory>
        <territory>Nicosia</territory>
   </components>
   <required>5</required>
</continent>
<continent>
   <name>10 Turkish Territories</name>
   <bonus>2</bonus>
   <components>
      <territory>Rizokarpaso</territory>
      <territory>Yalousa</territory>
      <territory>Akanthou</territory>
      <territory>Lefkoniko</territory>
      <territory>Famagusta</territory>
      <territory>Kyrenia</territory>
      <territory>Karavas</territory>
      <territory>Laphitos</territory>
      <territory>Morphou</territory>
      <territory>Kythrea</territory>
      <territory>Nicosia</territory>
   </components>
   <required>10</required>
</continent>


With the above code when a player holds 10 regions, he will receive +1 troops for holding 5 turkish territories and +2 for holding 10 turkish territories, for a total of +3 troops.
But we want to give 5 territories bonus only if the player doesn't hold 10 territories. How to make this possible?
Look at the final code:

Code: Select all
<continent>
<name>5 Turkish Territories</name>
   <bonus>1</bonus>
   <components>
        <territory>Rizokarpaso</territory>
        <territory>Yalousa</territory>
        <territory>Akanthou</territory>
        <territory>Lefkoniko</territory>
        <territory>Famagusta</territory>
        <territory>Kyrenia</territory>
        <territory>Karavas</territory>
        <territory>Laphitos</territory>
        <territory>Morphou</territory>
        <territory>Kythrea</territory>
        <territory>Nicosia</territory>
   </components>
   <required>5</required>
</continent>
<continent>
   <name>10 Turkish Territories</name>
   <bonus>2</bonus>
   <components>
      <territory>Rizokarpaso</territory>
      <territory>Yalousa</territory>
      <territory>Akanthou</territory>
      <territory>Lefkoniko</territory>
      <territory>Famagusta</territory>
      <territory>Kyrenia</territory>
      <territory>Karavas</territory>
      <territory>Laphitos</territory>
      <territory>Morphou</territory>
      <territory>Kythrea</territory>
      <territory>Nicosia</territory>
   </components>
   <required>10</required>
   <overrides>
      <override>5 Turkish Territories</override>
   </overrides>
</continent>


We added the <overrides> tag. The bonus listed within this tag, as <override>, is not given when the player hold this continent. So, using our example, when a player holds 10 Turkish Territories, the +2 bonus overrides the +1 bonus for 5 Turkish Territories, and the total amount of bonus troops given is +2 (and not +3 like with the previous code).
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Bonus Collections

Postby thenobodies80 on Mon Jan 07, 2013 4:32 pm

4.3.2 -Collections, a new way to code Continents

If you have ever used nested continents for one of your map, you certainly have experienced how long that continents list can be and how many overrides you had to use to give out bonuses correctly.
This issue can be circumvented using a different way to code your bonuses: Collections.
Essentially, it's a more flexible way to write a continent or a series of continents without having to create a long chain.

Syntax
<continent>
__<name>ConName</name>
__<bonuses>
____<bonus required="#">BonusVal</bonus>
____...
__</bonuses>
__<components>
____<territory>TerrName</territory>
____...
__</components>
<required>#</required>
</continent>


With this method we introduce the <bonuses> tag.
Into this tag we can list all the bonuses, a <bonus> tag for each bonus.
It can sound confusing but look at the code:

Code: Select all
<continent>
<name>ConName</name>
<bonuses>
<bonus required="2">1</bonus>
<bonus required="3">2</bonus>
<bonus required="4">3</bonus>
</bonuses>
<components>
<territory>TerrName1</territory>
<territory>TerrName2</territory>
<territory>TerrName3</territory>
<territory>TerrName4</territory>
</components>
<required>2</required>
</continent>


With the above code a player will receive 1 additional armies if he holds at least 2 components, 3 additional armies if he holds 3 components and 6 armies if he holds 4 components.
So with collections you can specify multiple bonuses along with the number of components required to achieve each bonus.

There some important aspects to consider while using Bonus Collections:
  • Add the <required> tag after having listed all the components is mandatory, otherwise the collection feature won't work properly. The value of the required tag must be the lower bonus of the collection.
  • If you achieve several bonuses they get added together;
  • Components can be a <territory> as well a <continent>;
  • They are NOT mandatory. The standard way to code continents still works.
  • Only <territory> components can have additional options. Refer to the dedicated section of this guide for details;
  • Even if Collections are a series of bonuses, you can specify only a single name for a Bonus Collection. The <name> tag must be unique.
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Other Options

Postby thenobodies80 on Mon Jan 07, 2013 4:32 pm

4.3.3 - <mandatory>, <blocker> and <multiplier>

To perform some nice tricks we need to introduce 3 options that we can specify for the <territory> tags listed within the <components>.
The 3 options that can be used to specify a particular type of component, are:
  • mandatory
  • blocker
  • multiplier

Mandatory

Syntax
<continent>
__<name>ConName</name>
__<bonuses>
____<bonus required="#">BonusVal</bonus>
____...
__</bonuses>
__<components>
____<territory type="mandatory">TerrName</territory>
____...
__</components>
</continent>


The mandatory type can be used to give a bonus to a player only if the mandatory component is held.
To specify that a territory is a mandatory component, you need to add type="mandatory" into the opening territory tag: <territory type="mandatory">

For example
Code: Select all
<continent>
<bonuses>
<bonus required="5">2</bonus>
<bonus required="8">3</bonus>
<bonus required="10">5</bonus>
</bonuses>
<components>
<territory type="mandatory">country 1</territory>
<territory>country 2</territory>
<territory>country 3</territory>
<territory>country 4</territory>
<territory>country 5</territory>
<territory>country 6</territory>
<territory>country 7/territory>
<territory>country 8</territory>
<territory>country 9</territory>
</components>
</continent>


Let me explain the above code. In the first part we can see that you will receive 2 troops if you hold at least 5 territories within those listed as components, 5 if you hold 8 and 10 if you hold 10. But these additional troops are given to you only if you hold the mandatory one (country 1 in the example). In fact if you hold 9 countries (from country 2 to country 9) but you don't hold the mandatory one (country 1) you will NOT qualify for the bonus and you will receive nothing. It's simple, If you don't hold the mandatory territory you don't hold the continent. The mandatory type need not be unique, so you can have more than a single mandatory territory for a bonus.

IMPORTANT
The mandatory type can be used ONLY with <territory> components. Do NOT use it with <continent>


Blocker

Syntax
<continent>
__<name>ConName</name>
__<bonuses>
____<bonus required="#">BonusVal</bonus>
____...
__</bonuses>
__<components>
____<territory type="blocker">TerrName</territory>
____...
__</components>
</continent>


The blocker type identify a particular type of component. If you hold a blocker component you do NOT hold the continent.
To specify the blocker type for a territory you need to add type="blocker" into the opening territory tag: <territory type="blocker">

For example
Code: Select all
<continent>
    <bonuses>
    <bonus required="1">1</bonus>
    <bonus required="2">3</bonus>
    <bonus required="3">5</bonus>
    </bonuses>
    <components>
    <territory type="blocker">country 1</territory>
    <territory>country 2</territory>
    <territory>country 3</territory>
    <territory>country 4</territory>
    </components>
    </continent>


With the above code, if the player holds country 1 (it doesn't matter how many other territories he has) he doesn't hold the continent at all and that means if it was a subcontinent he doesn't hold that either, like in the example into the following spoiler:
show


IMPORTANT
The blocker type can be used ONLY with <territory> components. Do NOT use it with <continent>


Multiplier

Syntax
<continent>
__<name>ConName</name>
__<bonuses>
____<bonus required="#">BonusVal</bonus>
____...
__</bonuses>
__<components>
____<territory type="multiplier" factor="#.#">TerrName</territory>
____...
__</components>
</continent>


The multiplier type identifies another particular type of component. To set a component as multiplier, first we need to add type="multiplier" to the opening <territory> tag and immediately after the type we need to specify a factor, which must be a number.

For example
Code: Select all
<continent>
    <bonus>5</bonus>
    <components>
    <component type="multiplier" factor="1.5">multiplier country</component>
    <component>country 1</component>
    <component>country 2</component>
    <component>country 3</component>
    </components>
    </continent>


In the above example, when the player holds the multiplier country the bonus is multiplied by the factor specified, in this case, 1.5.

There are a few things to keep in mind:
  • The factor value can have decimals
  • When the multiplier is applied, the final bonus value is always rounded to the nearest integer.
  • The factor value can be 0

IMPORTANT
The multiplier type can be used ONLY with <territory> components. Do NOT use it with <continent>



Now that we've looked at all component options, we can notice that there are two ways to define a territory that you don't want to hold - either make it a blocker or make it a multiplier with factor of zero. What's the difference? Like we said before, if you have a blocker, then you don't hold the continent at all and that means if it is a subcontinent you don't hold that either. Instead, if you have a multiplier with factor=0, then even though you don't get any bonus, you technically hold the continent, so if it is a subcontinent you still hold it as a component.
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

4.4 - Territories Options

Postby thenobodies80 on Mon Jan 07, 2013 4:33 pm

We have described here the <territory> tag. Now we're going to explore more in depth which other tricks you can perform with territories.

4.4.1 -Autodeploy and Decay

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border>AdjName</border>
_________...
____</borders>
____<coordinates>
______<smallx>SXCoord</smallx>
______<smally>SYCoord</smally>
______<largex>LXCoord</largex>
______<largey>LYCoord</largey>
____</coordinates>
____<bonus>#</bonus>
</territory>


Autodeploy and Decay are two different systems to use the same tag. If we want to apply a specific bonus to a single territory, we can use the <bonus> tag. It goes always after the <coordinates> tag and it must be a number. When the number is positive we will have an autodeploy, instead if the number is negative we have a decay. It's important to remember that in both cases the bonus value is added, or subtracted, to the amount of troops held by that specific territory.
In any case, a territory can NOT have less than 1 troop on it. Therefore, once there is only one troop on a territory, a decay has no effect.

A couple of examples:

In the Feudal War map, each castle is an autodepoly. Five additional troops are deployed automatically on a castle each turn, if you hold it.

Code: Select all
<territory>
   <name>Feudal Empire Castle</name>
   <borders>
      <border>Feudal Empire 1</border>
      <border>Feudal Empire 2</border>
      <border>Feudal Empire 3</border>
   </borders>
   <bombardments>
      <bombardment>Feudal Empire 4</bombardment>
      <bombardment>Feudal Empire 5</bombardment>
      <bombardment>Feudal Empire 6</bombardment>
      <bombardment>Feudal Empire 7</bombardment>
   </bombardments>
   <coordinates>
         <smallx>21</smallx>
         <smally>164</smally>
         <largex>28</largex>
         <largey>202</largey>
   </coordinates>
   <bonus>5</bonus>
</territory>


Instead, the Dust Bowl map has several decay territories in the central part to simulate drought. If you hold on of these regions you will receive a negative bonus directly on the region. For example, if you hold Sterling, you will lose 1 troop each turn you have on that region until you find yourself with just 1 army.

Code: Select all
<territory>
   <name>Sterling</name>
   <borders>
      <border>Imperial</border>
      <border>Colby</border>
      <border>Lamar</border>
      <border>Denver</border>
   </borders>
   <coordinates>
      <smallx>331</smallx>
      <smally>121</smally>
      <largex>423</largex>
      <largey>159</largey>
   </coordinates>
   <bonus>-1</bonus>
</territory>


So, you can simply change a number to make one region (or more) a powerful source of additional troops or a deadly spot on which to start your turn.
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Neutral Territories

Postby thenobodies80 on Mon Jan 07, 2013 4:33 pm

4.4.2 -Starting Neutrals and Killer Neutrals

Starting Neutral

There are some cases in which we want to have more control of the starting drop in a game. One of these cases is when we don't want to have someone who starts with a specific territory. The best system to achieve this result is to code that territory to start always as neutral.

For example the Luxemburg map has Luxemburg City coded as neutral, that region will start with 3 neutral troops on it in any game.

Code: Select all
   <territory>
      <name>Luxembourg City</name>
      <borders>
         <border>Capellen</border>
         <border>Bourglinster</border>
         <border>Remich</border>
         <border>Esch</border>
         <border>Bous</border>
         <border>Dudelange</border>
         <border>Frisange</border>
      </borders>
      <coordinates>
         <smallx>177</smallx>
         <smally>474</smally>
         <largex>207</largex>
         <largey>550</largey>
      </coordinates>
      <neutral>3</neutral>
   </territory>


So, to code a neutral territory as starting neutral, you need only to add the <neutral> tag before the closing </territory one. The number of starting troops for that territory is specified within the tag.

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border>AdjName</border>
_________...
____</borders>
____<coordinates>
______<smallx>SXCoord</smallx>
______<smally>SYCoord</smally>
______<largex>LXCoord</largex>
______<largey>LYCoord</largey>
____</coordinates>
____<neutral>#</neutral>
</territory>


Killer Neutrals

There's an additional behaviour that we can assign to a neutral territory. We can make it a Killer Neutral.
Killer neutral works exactly like a normal neutral territory, but with an important difference:
If you take a neutral territory during a game, it will be yours until someone else conquers it. However, a killer neutral region, if you hold it, will revert back to a predefined number of neutral troops at the start of the next turn!

For example in the Arms Race! Map, the player that will take a missile launch, will lose it to 15 neutral armies, at the start of the next turn.

Code: Select all
<territory>
  <name>Titan II MISSLE LAUNCH</name>
  <borders>
  </borders>
  <bombardments>
  <bombardment>SS-18 Launch Platform</bombardment>
  <bombardment>SS-18 Stage 1</bombardment>
  <bombardment>SS-18 Stage 2</bombardment>
  <bombardment>SS-18 Stage 3</bombardment>
  <bombardment>SS-18 Stage 4</bombardment>
  <bombardment>SS-18 Stage 5</bombardment>
  <bombardment>SS-18 Warhead</bombardment>
  <bombardment>USSR Spy 1</bombardment>
  <bombardment>Leningrad</bombardment>
  <bombardment>USSR Premier</bombardment>
  <bombardment>Mendeleyev</bombardment>
  <bombardment>Moscow</bombardment>
  <bombardment>Samara</bombardment>
  <bombardment>USSR Uranium 1</bombardment>
  <bombardment>USSR Bunker 1</bombardment>
  <bombardment>Yekaterinburg</bombardment>
  <bombardment>Novosibirsk</bombardment>
  <bombardment>Noril'sk</bombardment>
  <bombardment>USSR Uranium 2</bombardment>
  <bombardment>USSR Bunker 2</bombardment>
  <bombardment>Frenkel</bombardment>
  <bombardment>Chitba</bombardment>
  <bombardment>USSR Uranium 3</bombardment>
  <bombardment>Magadan</bombardment>
  <bombardment>USSR Launch Code</bombardment>
  <bombardment>USSR Spy 2</bombardment>
  <bombardment>Sakharov</bombardment>
  <bombardment>Yakutsk</bombardment>
  <bombardment>USSR Silo 1</bombardment>
  <bombardment>USSR Silo 2</bombardment>
  </bombardments>
 <coordinates>
         <smallx>37</smallx>
         <smally>180</smally>
         <largex>51</largex>
         <largey>232</largey>
 </coordinates>
   <neutral killer="yes">15</neutral>
</territory>


To switch a neutral territory to a killer neutral, you have to add the killer="yes" option to the <neutral> tag. The territory will revert back always to the number of troops specified within the neutral tag.

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border>AdjName</border>
_________...
____</borders>
____<coordinates>
______<smallx>SXCoord</smallx>
______<smally>SYCoord</smally>
______<largex>LXCoord</largex>
______<largey>LYCoord</largey>
____</coordinates>
____<neutral killer="yes">#</neutral>
</territory>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

One Way borders and Ranged Attacks

Postby thenobodies80 on Mon Jan 07, 2013 4:34 pm

4.4.3 -One Way and Ranged Attacks

Optional tags for territories are great, but there are a few features that we can use without adding a single line of code.

One Way Borders

A standard territory has a list of borders. Usually Territory A borders with Territory B and vice versa. But if we want to make it possible to attack only from Territory A to Territory B and not the reverse?
It's simple! The solution is to list only the territory that can be attacked as a border of the territory that cannot be attacked.

An example is the British Isles Map, in which we can see that Northumberland can one way attack Lothian & Borders.

This is the code:
Code: Select all
   <territory>
      <name>Northumberland</name>
      <borders>
         <border>Lothian &amp; Borders</border>
         <border>Cumberland</border>
         <border>Durham</border>
      </borders>
      <coordinates>
         <smallx>355</smallx>
         <smally>269</smally>
         <largex>457</largex>
         <largey>351</largey>
      </coordinates>
   </territory>
...
<territory>
      <name>Lothian &amp; Borders</name>
      <borders>
         <border>Dumfries &amp; Galloway</border>
         <border>Strathclyde</border>
         <border>Tayside</border>
      </borders>
      <coordinates>
         <smallx>342</smallx>
         <smally>224</smally>
         <largex>444</largex>
         <largey>286</largey>
      </coordinates>
   </territory>


If a player decides to move troops from the attacking region to the other (advancing after conquering), he won't be able to reinforce them back, the connection being one-way, unless he has another route and the reinforcement option for the game is something other than Adjacent.

Using the same technique, we can allow a territory to attack another even if on the map the two do not border, for example a distant territory. It's the Ranged Attack feature. Remember, the map image does not determine how the game is played -- the XML does.
Ranged attacks and one way borders can be mixed together without problems. In most cases, the ranged attacks are visually supported on the map and there's no additional code required. Tt is mentioned in this guide just because it's considered by the community as a distinct map feature.

An example of ranged attacks (and also one way in this case) are the plane-parachute in the D-Day:Omaha Beach! Map
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Bombardments

Postby thenobodies80 on Mon Jan 07, 2013 4:34 pm

4.4.4 -Bombardments

Attack is not the only way to take away a territory from your opponent(s). With the additional <bombardments> tag we can list a territory (or a series) that can be "bombarded" to become neutral. When all opponent's troops are defeated, the troop count of a bombarded territory reverts to one neutral, and the attacker isn't able to advance his troops into that region or reinforce into or through it after ending the attack phase of a turn.

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border>AdjName</border>
_________...
____</borders>
____<bombardments>
______<bombardment>BombName</bombardment>
_________...
____</bombardments>
____<coordinates>
______<smallx>SXCoord</smallx>
______<smally>SYCoord</smally>
______<largex>LXCoord</largex>
______<largey>LYCoord</largey>
____</coordinates>
</territory>


A classic example of bombardments can be found on the Berlin 1961 map, where Hohenschonhausen (the tank) can bombard the 3 western checkpoints:

Code: Select all
<territory>
      <name>Hohensch&#x00F6;nhausen</name>
      <borders>
         <border>Marzahn</border>
         <border>Lichtenberg</border>
         <border>Prenzlauer Berg</border>
         <border>Wei&#x00DF;ensee</border>
      </borders>
      <bombardments>
         <bombardment>Wedding</bombardment>
         <bombardment>Moabit</bombardment>
         <bombardment>Kreuzberg</bombardment>
      </bombardments>
      <coordinates>
         <smallx>380</smallx>
         <smally>196</smally>
         <largex>476</largex>
         <largey>240</largey>
     </coordinates>
     <neutral>3</neutral>
   </territory>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Conditional Borders

Postby thenobodies80 on Mon Jan 07, 2013 4:35 pm

4.4.5 -Conditional Borders

We all know that standard territories have fixed borders. This means that Territory A always borders with Territory B.
But now we're going to learn how to make the border conditional.
Conditional Borders allow a more flexible usage of borders and this feature makes it possible to have borders which change over the course of a game, based on the possession of territories.
Using again the same example, with conditional borders, we can have that Territory A borders with Territory B only if the player holds a Territory C. The third territory will be a sort of key: holding it satisfies the condition and so activates that border.

Syntax
<territory>
__<name>TerName</name>
____<borders>
______<border condition="CondName">Ter2Name</border>
_________...
____</borders>
_________...
</territory>


So to define a conditional border you need to add the condition=" " option to the <border> tag.

There are few additional notes:
  • You can specify either a territory or a continent as condition
  • You must hold the territory/continent to activate the border
  • If there is a territory and a continent that both match the condition's name, the territory will be used as the condition
  • The conditional border is activated/disactivated immediately when you conquer or lose the condition

Here below an imaginary example of how the code looks like:
Code: Select all
    <territory>
    <name>Sao Paulo</name>
    <borders>
    <border>Bogota</border>
    <border>Lima</border>
    <border condition="New York">Buenos Aires</border>
    <border condition="Oceania">Dakar</border>
    </borders>
    <coordinates>
    ...
    </coordinates>
    </territory>


Sao Paulo can attack Buenos Aires only if the same player holds New York. In addition, Sao Paulo can assault Dakar if the player holds the whole Oceania continent.
Obviously this is just a stupid example and I'm sure you can find plenty of better ways to use it. ;)
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

4.5 - Transformation

Postby thenobodies80 on Sun Jan 19, 2014 4:30 pm

The concept of Transformation includes the general ability to apply rules that transform any territory in different ways.
Transformation rules, called Transforms, can be applied:

  • to individual territories, or to every territory.
  • at the start of every turn, every round, or at the start of specific rounds
  • to neutral armies, player armies, opponents armies, or some combinations of these
  • to set armies to fixed amounts, change by fixed increments, change by fixed percentages, or make random changes within a range


XML Specification
In the XML, Tranforms are specified either globally or as children to a <territory> object, as follows:

<map>
...
___<transforms>
_____<transform>
_______<type></type>
_______<applyto></applyto>
_______<inc></inc>
_______<perc></perc>
_______<amount></amount>
_______<lower></lower>
_______<upper></upper>
_______<conditions>
_______<formula></formula>
_______<condition>
_______<variable></variable>
_______<type></type>
_______<id></id>
_______<operator></operator>
_______<value></value>
_______</condition>
....
_______</conditions>
_____</transform>
_____<transform>
...
_____<transform>
___</transforms>
...
...
___<territory>
...
_____<transforms>
...
_____</transforms>
...
___</territory>
</map>


show: CODE


In the following we use "Quantity" as representing the army count of a terit count before transformation.

TYPE <type>:

Controls when the transform will execute, as follows:

turn=Each Turn
round=Each Round (when first player starts)

APPLYTO <applyto>:

Controls whether a transform will be applied based on the type of occupying armies, as follows:

all=All
self = Self (the playing Player only)
neutral = Neutral only
players = Players only (not neutral)
opponents = Other Players only (not neutral or the playing Player)
others = Others (all others, including neutral, except the playing player)
team = anyone in your team (so includes you and your teammates, also applies to poly where it would be all of your different players. Works in single player as well and acts like self)
nonteam = non-neutral players not in your team (same as team but players that are not in your team, works for poly for the other teams. Also works in single player where it will act like the opponents label)
teammates = anyone in your team, except for you (is like others but just for your team. Will not do anything in single player)

INC <inc>: [Optional]
+ or - Adds/Subtracts Amount to/from Quantity,
If this is not set then the Quantity will be set to a calculated Amount independent of its current value

AMOUNT <amount>:

Fixed amount to set Quantity to.

UPPER/LOWER <upper>/<lower>:
A upper and lower range given so that the system chooses an Amount randomly with equal probability across the range. May be fractional.

PERC <perc>: [Optional]

If set to any non-zero value, use Amount as a % of the current value, instead of as a fixed value.

CONDITIONS <conditions>:[Optional]
Each Conditions tag contains a set of Condition tags and optionally a Formula tag to tie them together. Currently conditions apply to territories only.

FORMULA <formula>:[Optional]
formula allows construction of boolean logic rules. conditions prefixed with COND_ (see example below). Default is to use logical AND for each condition.

<element name="conditions">
<optional>
<element name="formula">
<data type="normalizedString"/>
</element>
</optional>
<oneOrMore>
<element name="condition">
<optional>
<element name="variable">
<data type="normalizedString"/>
</element>
</optional>
<element name="type">
<data type="normalizedString"/>
</element>
<optional>
<element name="id">
<data type="unsignedShort"/>
</element>
</optional>
<optional>
<element name="operator">
<data type="normalizedString"/>
</element>
</optional>
<optional>
<element name="value">
<data type="normalizedString"/>
</element>
</optional>

</element>
</oneOrMore>
</element>

CONDITION <condition>:
Each condition tag may contain VARIABLE, TYPE, ID, OPERATOR and VALUE tags

ID <id>:
Territory id

VARIABLE <variable>: [Optional]
Variable name if you are using a formula

TYPE <type>:
The type of test, which controls what the condition will be applied to:

round: the round of the game
player: a specific player
territory: a specific territory
armycount: the size of the army

ID <id>:[Optional]
Used when type = player or type=armycount to represent the territory id of the corresponding player or army. For example to set a condition that territory 8 must be neutral, we can use type=player, id = 8, and value=0.

OPERATOR <operator>:[Optional
Logical operator to apply to the test, can be and of the standard logical operators: = (default),!=,>,>=,<,<= (< needs to be written as &lt; for both < and <=) as well as "in" or "not in" when a set of values is used in the value tag

VALUE <value>:[Optional
A value to test against (or a comma separated set of values when using "in" or "not in" operator)
(if using player can also use the same labels as the applyto tag: self, neutral, players, opponents, others, team, nonteam and teammates)

Transformation Process

Transformation is the very first thing to execute on a Begin Turn action.

Go through each territory:

- Set Quantity = Initial value of armies on this territory

For the territory, execute the following process for each applicable Transform in turn:
- Apply filters. If Transform does not apply do nothing and skip to next transform for this terit.
- Calculate Amount by choosing random number if range or setting as fixed amount
- if % is set, multiply Amount by Quantity/100
- If INC = "-" negate Amount
- If INC is set add Quantity to Amount
- set Quantity to Amount

After all Transforms have executed for a territory:
- Quantity is rounded to the closest integer and set to a minimum of 1
- If Quantity has changed, set new army count and send log to game log.

Go to next Territory

Examples

The original suggestion of neutrals that increase (or decrease by changing <inc> to "-") by 1 each turn would be specified as:

<transform>
<type>turn</type>
<applyto>neutral</applyto>
<inc>+</inc>
<amount>1</amount>
</transform>

To modify this to make the neutrals change randomly by between -1 and 1, we would do

<transform>
<type>turn</type>
<applyto>neutral</applyto>
<inc>+</inc>
<lower>-1.5</lower>
<upper>1.5</upper>
</transform>

Note that the range is specified as -1.5 to 1.5 to give each option -1,0,1 equal chance, since the number is rounded at the end.

The following transform makes a territory get thrown up in the air at the start of Round 20 - it will change by between -100% and 100% (note: a minimum of 1 army is always applied).

<transform>
<type>round</type>
<applyto>all</applyto>
<perc>1</perc>
<amount></amount>
<lower>-100</lower>
<upper>100</upper>
<conditions>
<condition>
<type>round</type>
<operator>=</operator>
<value>20</value>
</condition>
</conditions>
</transform>

Conditions Example. The following Transform will only be applied if Territory 11 OR Territory 32 has an army size of 5 or more.

<transform>
....
<conditions>
<formula>COND_A OR COND_B</formula>
<condition>
<variable>A</variable>
<type>territory</type>
<id>11</id>
<operator>>=</operator>
<value>5</value>
</condition>
<condition>
<variable>B</variable>
<type>territory</type>
<id>32</id>
<operator>>=</operator>
<value>5</value>
</condition>
</conditions>
...
</transform>
User avatar
Sergeant 1st Class thenobodies80
 
Posts: 5400
Joined: Wed Sep 05, 2007 4:30 am
Location: Milan

Next

Return to Tools & Guides

Who is online

Users browsing this forum: No registered users