### How-To: Custom Starting Resources

#### Basics

In this tutorial you will learn how to set custom starting resources for your map. To do this, you will need a basic text editor. Microsoft Notepad is suitable for this job and you already have it. In case you'd like to consider getting a bit better tool for this, I would recommend using notepad++, which you can download from notepad-plus-plus.org

#### The Script File

All maps can be shipped with a custom script file. This file is always named as

**<mapname>.scar**, where <mapname> is same as the name of your map's .sgb file. You can create this file by opening notepad or notepad++, and by saving a new blank document as

**<mapname>.scar**to your map folder.

#### Adding code to override default starting resources

Open

**<mapname>.scar**in notepad / notepad++ if you have closed it.

Copy and paste in the following code:

Alternatively you can also download this .zip archive, which contains a pre-made scar file with the following code. Extract it and move the .scar file to your map's folder and rename the .scar file to match your .sbg file name!

Code

function CustomStartingResources_Init()

--[[

CustomStartingResource System created by Janne252. Visit COH2.ORG for more. Please do not remove this note.

Some information about income_modifier table and how to use it:

- All resource income modifiers affect the # per minute value.

- By default all resource income modifiers are set to 1 (value = 1, math_type = MUT_Multiplication). As you know, anything * 1 is the same value.

- MUT_Multiplication multiplies the income rate and MUT_Addition adds to it. Here are some examples of that:

- Let's say manpower income is 294 manpower per minute. With value = 10, math_type = MUT_Multiplication we will get 2940 manpower per minute,

since 294 * 10 = 2940.

Let's say manpower income is still 294 manpower per minute. With value = 10, math_type = MUT_Addition, we will get 304 manpower per minute,

since 294 + 10 = 304.

- How to add 50 extra munition income?

{type = RT_Munition, value = 50, math_type = MUT_Addition}

- How to remove 100 from manpower income?

{type = RT_Manpower, value = -100, math_type = MUT_Addition}

- How to double manpower income?

{type = RT_Manpower, value = 2, math_type = MUT_Multiplication}

]]

local ResourceSets = {

standard = {

--german:

[0] = {

manpower = 490,

fuel = 20,

munition = 0,

action = 0,

command = 1,

},

--soviet:

[1] = {

manpower = 490,

fuel = 50,

munition = 0,

action = 0,

command = 1,

},

--Obercommando west:

[2] = {

manpower = 240,

fuel = 40,

munition = 0,

action = 0,

command = 1,

},

--us forces:

[3] = {

manpower = 400,

fuel = 15,

munition = 0,

action = 0,

command = 1,

},

income_modifier = {

{type = RT_Manpower, value = 1, math_type = MUT_Multiplication}, -- manpower. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Munition, value = 1, math_type = MUT_Multiplication}, -- munition. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Fuel, value = 1, math_type = MUT_Multiplication}, -- fuel. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Action, value = 1, math_type = MUT_Multiplication}, -- action/xp. math_type = MUT_Multiplication OR MUT_Addition

},

},

highResources = {

--german:

[0] = {

manpower = 1390,

fuel = 50,

munition = 50,

action = 0,

command = 2,

},

--soviet:

[1] = {

manpower = 1390,

fuel = 80,

munition = 50,

action = 0,

command = 2,

},

--Obercommando west:

[2] = {

manpower = 1140,

fuel = 70,

munition = 50,

action = 0,

command = 2,

},

--us forces:

[3] = {

manpower = 1300,

fuel = 45,

munition = 50,

action = 0,

command = 2,

},

income_modifier = {

{type = RT_Manpower, value = 1, math_type = MUT_Multiplication}, -- manpower. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Munition, value = 1, math_type = MUT_Multiplication}, -- munition. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Fuel, value = 1, math_type = MUT_Multiplication}, -- fuel. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Action, value = 1, math_type = MUT_Multiplication}, -- action/xp. math_type = MUT_Multiplication OR MUT_Addition

},

},

customSet_01 = {

--german:

[0] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

--soviet:

[1] = {

manpower = 2000,

fuel = 100,

munition = 100,

action = 0,

command = 2,

},

--Obercommando west:

[2] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

--us forces:

[3] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

income_modifier = {

{type = RT_Manpower, value = 1, math_type = MUT_Multiplication}, -- manpower. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Munition, value = 1, math_type = MUT_Multiplication}, -- munition. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Fuel, value = 1, math_type = MUT_Multiplication}, -- fuel. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Action, value = 1, math_type = MUT_Multiplication}, -- action/xp. math_type = MUT_Multiplication OR MUT_Addition

},

},

customSet_02 = {

--german:

[0] = {

manpower = 0,

fuel = 0,

munition = 0,

action = 0,

command = 0,

},

--soviet:

[1] = {

manpower = 0,

fuel = 0,

munition = 0,

action = 0,

command = 0,

},

--Obercommando west:

[2] = {

manpower = 0,

fuel = 0,

munition = 0,

action = 0,

command = 0,

},

--us forces:

[3] = {

manpower = 0,

fuel = 0,

munition = 0,

action = 0,

command = 0,

},

income_modifier = {

{type = RT_Manpower, value = 1, math_type = MUT_Multiplication}, -- manpower. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Munition, value = 1, math_type = MUT_Multiplication}, -- munition. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Fuel, value = 1, math_type = MUT_Multiplication}, -- fuel. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Action, value = 1, math_type = MUT_Multiplication}, -- action/xp. math_type = MUT_Multiplication OR MUT_Addition

},

},

}

--This will set the resource set to use in-game

local g_ResourceSet = ResourceSets.customSet_01

local Player_ApplyResourceSet = function(player, resourceSet)

Player_SetResource(player, RT_Manpower, resourceSet.manpower)

Player_SetResource(player, RT_Fuel, resourceSet.fuel)

Player_SetResource(player, RT_Munition, resourceSet.munition)

Player_SetResource(player, RT_Action, resourceSet.action)

Player_SetResource(player, RT_Command, resourceSet.command)

end

--Population cap override value

g_popCapOverride = 200

for i = 1, World_GetPlayerCount() do

local player = World_GetPlayerAt(i)

local resource_set = g_ResourceSet[Player_GetRaceIndex(player)]

Player_ApplyResourceSet(player, resource_set)

Player_SetPopCapOverride(player, g_popCapOverride)

for key, resource in ipairs(g_ResourceSet.income_modifier) do

local _value = resource.value

if resource.math_type == MUT_Addition then

_value = _value / (60 * 8)

end

Modify_PlayerResourceRate(player, resource.type, _value, resource.math_type)

end

end

end

function Player_GetRaceIndex(player)

local racename = Player_GetRaceName(player)

if racename == "german" then

return 0

elseif racename == "soviet" then

return 1

elseif racename == "west_german" then

return 2

elseif racename == "aef" then

return 3

else

return -1

end

end

Scar_AddInit(CustomStartingResources_Init)

#### Testing the results

Save the

**<mapname>.scar**and close the file. Goto WorldBuilder and do

**File -> Export Package**, run the game, start a match with your map. You should now be able to see custom starting resources. This example uses a pre-made set called

**ResourceSets.customSet_01**, which sets the following:

Code

customSet_01 = {

--german:

[0] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

--soviet:

[1] = {

manpower = 2000,

fuel = 100,

munition = 100,

action = 0,

command = 2,

},

--Obercommando west:

[2] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

--us forces:

[3] = {

manpower = 2000,

fuel = 80,

munition = 100,

action = 0,

command = 2,

},

income_modifier = {

{type = RT_Manpower, value = 1, math_type = MUT_Multiplication}, -- manpower. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Munition, value = 1, math_type = MUT_Multiplication}, -- munition. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Fuel, value = 1, math_type = MUT_Multiplication}, -- fuel. math_type = MUT_Multiplication OR MUT_Addition

{type = RT_Action, value = 1, math_type = MUT_Multiplication}, -- action/xp. math_type = MUT_Multiplication OR MUT_Addition

},

#### Configuring the code to match your needs

This example comes with four pre-made resource sets, which are called

**standard**,

**highResources**,

**customSet_01**, and

**customSet_02**. First 2 are just copies of the already existing ones and the two customSets are there for customization.

To change which set to use, simply change

**g_ResourceSet**to match the desired resource set, e.g.

Code

local g_ResourceSet = ResourceSets.customSet_02

You can edit any of the resource pre-sets by editing the values. They should be quite self-explanatory, but here they are:

**manpower**= Manpower resource value

**fuel**= Fuel resource value

**munition**= Munition resource value

**action**= xp amount. e.g. ~1024 action = ~1 command point

**command**= number of command points

**income_modifier**= table of income modifiers. By default all income modifiers are * 1 (no effect)

See the information in the top of the script file for configuring income modifiers.

After doing the necessary changes Hit save, Export package, run your map and voilà!

#### Conclusions

In this tutorial you learned how to set custom starting resources for your map. I tried to spend some time to explain stuff a bit more briefly instead of making this tutorial as humanly short as possible. Hopefully this will give you a better understanding of what you did instead of just adding the code to a file and getting results without knowing why. If you have any additional questions, feed back, or suggestions for future tutorials, please let me know in this thread!