Politics and War Wiki
Tag: Visual edit
(Add PHP code for infra cost)
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
Formulas relation to cities.
+
Formulas relation to cities.
   
 
== '''New City Cost Formula''' ==
 
== '''New City Cost Formula''' ==
 
[[File:Exponential.png|thumb|220x220px]]
 
[[File:Exponential.png|thumb|220x220px]]
This formula is cubic.
+
This formula is cubic.
 
'''Next City Cost = 50000*(X-1)^3 + 150000*X + 75000'''
 
'''Next City Cost = 50000*(X-1)^3 + 150000*X + 75000'''
 
* Where '''X''' is the current number of cities.
 
* Where '''X''' is the current number of cities.
Line 12: Line 12:
 
The formula for infrastructure cost is:
 
The formula for infrastructure cost is:
 
'''Infra Unit Cost = [((Current Infra-10)^2.2) / 710] + 300'''
 
'''Infra Unit Cost = [((Current Infra-10)^2.2) / 710] + 300'''
Using the above formula to plug in the cost per unit results in the formula for infra cost.
+
Using the above formula to plug in the cost per unit results in the formula for infra cost.
 
'''Cost = Infra Unit Cost * Infra to buy'''
 
'''Cost = Infra Unit Cost * Infra to buy'''
  +
The following PHP function calculates the infra price:
  +
<?php
  +
 
  +
function infraPrice($amount) {
  +
    //old return (pow(abs($amount-10),1.95)*0.01) + 300;
  +
    return (pow(abs($amount - 10), 2.2) / 710) + 300;
  +
}
  +
 
  +
function calcInfraValue($starting_amount = 0, $ending_amount = 100) {
  +
 
  +
    //set some vars
  +
    $value = 0;
  +
    $cost_of_chunk = 0;
  +
 
  +
    //round values to nearest 2 decimals
  +
    $starting_amount = round($starting_amount, 2);
  +
    $ending_amount = round($ending_amount, 2);
  +
 
  +
    //check difference between amounts
  +
    $difference = $ending_amount - $starting_amount;
  +
 
  +
    //cap out at 10,000 to prevent script running forever
  +
    if ($difference > 10000) {
  +
        return "Error";
  +
    }
  +
 
  +
    //if values are the same, no need to continue
  +
    if ($difference == 0) {
  +
        $value = 0;
  +
        return $value;
  +
    }
  +
 
  +
    //if values are not the same, we need to make sure that the starting amount is smaller than the ending amount
  +
    if ($difference < 0) {
  +
        $infraPrice = 150;
  +
        $value = $infraPrice * $difference;
  +
        return $value;
  +
    }
  +
 
  +
    //break into chunks of 100, and get the price
  +
    if ($difference > 100 AND ( $difference % 100 == 0)) {
  +
 
  +
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * 100;
  +
        //recursively get value of next chunk
  +
        $value += ($cost_of_chunk + calcInfraValue(($starting_amount + 100), $ending_amount));
  +
        return $value;
  +
    }
  +
 
  +
    //see if the amount left is not divisible by 100 but greater than 100
  +
    if ($difference > 100 AND ( $difference % 100 != 0)) {
  +
 
  +
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * ($difference % 100);
  +
        //recursively get value of next chunk
  +
        $value += ($cost_of_chunk + calcInfraValue(($starting_amount + ($difference % 100)), $ending_amount));
  +
        return $value;
  +
    }
  +
 
  +
    //if there's less or equal to 100 left, just add that. No need for recursion
  +
    if ($difference <= 100) {
  +
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * $difference;
  +
        $value += $cost_of_chunk;
  +
        return $value;
  +
    }
  +
}
  +
 
  +
?>
 
=='''Land Cost Formula'''==
 
=='''Land Cost Formula'''==
This formula is exponential.
+
This formula is exponential.
   
 
The formula for the cost of one unit of land is the following:
 
The formula for the cost of one unit of land is the following:
 
'''Land Unit Cost  = 0.002*(Current Land-20)^2 + 50'''
 
'''Land Unit Cost  = 0.002*(Current Land-20)^2 + 50'''
Using the above formula to plug in the cost per unit results in the formula for land cost.
+
Using the above formula to plug in the cost per unit results in the formula for land cost.
 
'''Cost = Land Unit Cost * Land to buy'''
 
'''Cost = Land Unit Cost * Land to buy'''
   
Line 26: Line 92:
 
'''Base Population = Infrastructure * 100'''
 
'''Base Population = Infrastructure * 100'''
 
The formula after all everything's been factored in is:
 
The formula after all everything's been factored in is:
'''Population = (Base pop - disease death rate - crime rate deaths) * city age bonus'''
+
'''Population = (Base Pop - ((Disease Rate * 100 * Infra)/10) - MAX((Crime Rate / 10) * (100*Infra) - 25, 0)) * (1 + '''ln(CityAgeInDays)/15''')'''
 
Or simplified
 
Or simplified
 
'''Population = (Base Pop - Disease Deaths - Crime Deaths) * Age Bonus'''
 
'''Population = (Base Pop - Disease Deaths - Crime Deaths) * Age Bonus'''
Line 65: Line 131:
 
'''Disease Deaths = Disease Rate * Base Population'''
 
'''Disease Deaths = Disease Rate * Base Population'''
 
<nowiki/>'''''<nowiki/>'''''
 
<nowiki/>'''''<nowiki/>'''''
[[Category:Formulas]]
 
   
 
== '''Food Production Formula''' ==
 
== '''Food Production Formula''' ==
Line 81: Line 146:
   
 
== '''Misc''' ==
 
== '''Misc''' ==
NOTE: '''These are things to be moved out but I wanna use somewhere else and need somewhere to store it temporarily.'''
+
NOTE: '''These are things to be moved out but I wanna use somewhere else and need somewhere to store it temporarily.'''
   
 
=== '''Land''' ===
 
=== '''Land''' ===
Line 88: Line 153:
 
However, there is one limitation: the game identifies several levels of land, meaning that they are bought in steps. The levels are 500, 1k, 1.5k, 2k land, etc. and each step is 500 Land (except for the first step which is 250, since your city gets 250 land when it is first built). This means that, if you decide to get for example from 250 to 1k land and buy that much land, the game will automatically calculate two transactions instead of one: one from 250 Land to 500 and one from 500 to 1,000. The game calculates the optimized cost for the land you decide to purchase.
 
However, there is one limitation: the game identifies several levels of land, meaning that they are bought in steps. The levels are 500, 1k, 1.5k, 2k land, etc. and each step is 500 Land (except for the first step which is 250, since your city gets 250 land when it is first built). This means that, if you decide to get for example from 250 to 1k land and buy that much land, the game will automatically calculate two transactions instead of one: one from 250 Land to 500 and one from 500 to 1,000. The game calculates the optimized cost for the land you decide to purchase.
   
Note that the Tutorial will make you buy 500 Land at your first city and as such, your first city will have 750 Land at some point. Going to the next step and buying 250 Land to reach 1,000 will set you back to course of the optimized land purchases.[[Category:City Mechanics]]
+
Note that the Tutorial will make you buy 500 Land at your first city and as such, your first city will have 750 Land at some point. Going to the next step and buying 250 Land to reach 1,000 will set you back to course of the optimized land purchases.
 
[[Category:Formulas]]
  +
[[Category:City Mechanics]]

Revision as of 23:48, 19 February 2020

Formulas relation to cities.

New City Cost Formula

Exponential

This formula is cubic.

Next City Cost = 50000*(X-1)^3 + 150000*X + 75000
  • Where X is the current number of cities.

Infrastructure Cost Formula

This formula is exponential.

The formula for infrastructure cost is:

Infra Unit Cost = [((Current Infra-10)^2.2) / 710] + 300

Using the above formula to plug in the cost per unit results in the formula for infra cost.

Cost = Infra Unit Cost * Infra to buy

The following PHP function calculates the infra price:

<?php
 
function infraPrice($amount) {
    //old return (pow(abs($amount-10),1.95)*0.01) + 300;
    return (pow(abs($amount - 10), 2.2) / 710) + 300;
}
 
function calcInfraValue($starting_amount = 0, $ending_amount = 100) {
 
    //set some vars
    $value = 0;
    $cost_of_chunk = 0;
 
    //round values to nearest 2 decimals
    $starting_amount = round($starting_amount, 2);
    $ending_amount = round($ending_amount, 2);
 
    //check difference between amounts
    $difference = $ending_amount - $starting_amount;
 
    //cap out at 10,000 to prevent script running forever
    if ($difference > 10000) {
        return "Error";
    }
 
    //if values are the same, no need to continue
    if ($difference == 0) {
        $value = 0;
        return $value;
    }
 
    //if values are not the same, we need to make sure that the starting amount is smaller than the ending amount
    if ($difference < 0) {
        $infraPrice = 150;
        $value = $infraPrice * $difference;
        return $value;
    }
 
    //break into chunks of 100, and get the price
    if ($difference > 100 AND ( $difference % 100 == 0)) {
 
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * 100;
        //recursively get value of next chunk
        $value += ($cost_of_chunk + calcInfraValue(($starting_amount + 100), $ending_amount));
        return $value;
    }
 
    //see if the amount left is not divisible by 100 but greater than 100
    if ($difference > 100 AND ( $difference % 100 != 0)) {
 
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * ($difference % 100);
        //recursively get value of next chunk
        $value += ($cost_of_chunk + calcInfraValue(($starting_amount + ($difference % 100)), $ending_amount));
        return $value;
    }
 
    //if there's less or equal to 100 left, just add that. No need for recursion
    if ($difference <= 100) {
        $cost_of_chunk = round(infraPrice($starting_amount), 2) * $difference;
        $value += $cost_of_chunk;
        return $value;
    }
}
 
?>

Land Cost Formula

This formula is exponential.

The formula for the cost of one unit of land is the following:

Land Unit Cost  = 0.002*(Current Land-20)^2 + 50

Using the above formula to plug in the cost per unit results in the formula for land cost.

Cost = Land Unit Cost * Land to buy

Population Formulas

Before other factors are applied, the formula for population by infrastructure is:

Base Population = Infrastructure * 100

The formula after all everything's been factored in is:

Population = (Base Pop - ((Disease Rate * 100 * Infra)/10) - MAX((Crime Rate / 10) * (100*Infra) - 25, 0)) * (1 + ln(CityAgeInDays)/15)

Or simplified

Population = (Base Pop - Disease Deaths - Crime Deaths) * Age Bonus

The age bonus is a function of decreasing returns to city age. The formula is:

Age Bonus = 1 + ln(CityAgeInDays)/15

Population Density Formula

  • The formula used for population density when factoring Disease is different than the actual population density. The reason for this, is that Disease (based on Population Density) will kill a percentage of the Base Population, lowering the displayed Population Density. If there was no difference, the formula would feed back on each other.

Equation Specific Formula

Population Density = Base Population / Land Area

Displayed Population Formula

Population Density = Actual Population / Land Area

Crime and Disease Rate Formulas

Note: Both formulas are returned as a percent for use in the population lost formulas.

Crime

Note: 0≤ Crime Rate ≤100

Crime (%) = ((103 - Commerce)^2 + ( Infrastructure * 100))/(11111111) - Police Modifier

Where Police Modifier is:

Police Modifier = (# of Police Stations)*(2.5)

Disease

Disease Rate = ((((Population Density^2) * 0.01) - 25)/100) + (Base Population/100000) + Pollution Modifier - Hospital Modifier
  • Pop density is based on base population not on displayed population

Pollution Modifier is the increase to disease, from increasing Pollution.

Pollution Modifier = Pollution Index * 0.05

Hospital Modifier is the amount of disease reduced by buying Hospitals.

Hospital Modifier = Hospital Count * 2.5

Population Lost Formulas

Crime

Crime Deaths = (Crime Rate/10)*(Infrastructure*100)-25

Disease

Disease Deaths = Disease Rate * Base Population

Food Production Formula

The basic formula for food production per turn in a city is:

Food Production = Farm Count * (Land Area / 500)

Modifiers to this basic formula include:

  • If the Mass Irrigation Nation Project is built the formula is changed to Farms * (Land Area / 400)
  • If the season is Summer the production is changed to Food * 1.2
  • If the season is Winter the production is changed to Food * .8

Radiation Formula Effect

Final Food Prod = Food Production * (nation+continent+global rad index)/1000

Misc

NOTE: These are things to be moved out but I wanna use somewhere else and need somewhere to store it temporarily.

Land

From the two above formulas, it is made evident that, since the price of new land depends on the level of your current land, it is more profitable to buy land in bulks. In other words, it is more profitable to get land from 500 to 1,000 than from 500 to 750 and then to 1,000.

However, there is one limitation: the game identifies several levels of land, meaning that they are bought in steps. The levels are 500, 1k, 1.5k, 2k land, etc. and each step is 500 Land (except for the first step which is 250, since your city gets 250 land when it is first built). This means that, if you decide to get for example from 250 to 1k land and buy that much land, the game will automatically calculate two transactions instead of one: one from 250 Land to 500 and one from 500 to 1,000. The game calculates the optimized cost for the land you decide to purchase.

Note that the Tutorial will make you buy 500 Land at your first city and as such, your first city will have 750 Land at some point. Going to the next step and buying 250 Land to reach 1,000 will set you back to course of the optimized land purchases.