outpost_2:concepts:population_and_morale

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
outpost_2:concepts:population_and_morale [2023/10/31 07:59] – [Strategy] blackbox222outpost_2:concepts:population_and_morale [2023/11/11 22:31] (current) – [Strategy] arklon
Line 6: Line 6:
   * Workers: Workers are required for operation of most structures, and can be trained into up to 10 Scientists at a time at any active University.   * Workers: Workers are required for operation of most structures, and can be trained into up to 10 Scientists at a time at any active University.
   * Scientists: Scientists are also required to operate certain structures, and can also do [[Outpost 2:Outpost 2 Manual:Research]] at any active Labs.  They can also be assigned as Workers when there's a colonist shortage (though with a corresponding Morale hit as seen below).   * Scientists: Scientists are also required to operate certain structures, and can also do [[Outpost 2:Outpost 2 Manual:Research]] at any active Labs.  They can also be assigned as Workers when there's a colonist shortage (though with a corresponding Morale hit as seen below).
 +
 +Morale is a "colony happiness" value that is computed from various colony conditions, as well as events that occur during gameplay.  This value ranges from 0-99, but this range is segmented into various morale levels which apply various modifiers to other mechanics in the game:
 +
 +^ Morale Level ^ Min Morale ^ Research Modifier ^ Production Modifier ^ Food Modifier ^ Fertility Modifier ^ Death Modifier ^
 +^ Excellent    | 90         | 15                | -25                 | 20            | 35                 | 620            |
 +^ Good         | 70         | 8                 | -10                 | 8             | 46                 | 500            |
 +^ Fair         | 45         | 0                 | 0                   | 0             | 64                 | 390            |
 +^ Poor         | 25         | -8                | 10                  | -5            | 82                 | 280            |
 +^ Terrible     | 0          | -15               | 20                  | -10           | 107                | 180            |
 +
 +These levels are defined in morale.txt.  The game also implements a power modifier that can give a bonus or penalty to power production, but this is set to 0 for all morale levels. (The table in morale.txt also defines a "defect rate" which is 0 for all levels except Poor (5) and Terrible (10), but this is unused by the game as far as anyone is aware).
 +
 +In "morale steady" games this is typically forced to Good, but the mission designer can force morale to any of these levels.
 +
 +==== Strategy ====
 +
 +  * Despite there being a "demand %" shown for Med Centers, having excess medical center capacity strictly lowers the death rate (at the cost of Scientists and power to run the medical centers).  While maintaining < 100% Med Center demand is necessary for morale by itself, further reducing demand % can have enormous benefits even in Morale Steady games.
 +    * Veteran OP2 players strive for 30-40% demand to give a decent reduction to death rate.
 +  * There is limited value in having more than 1 nursery and university:
 +    * Multiple nurseries do not increase birth rate, only decreasing kid death rate by providing 40 capacity for kids, but this is quickly obsoleted when Med Centers become available as they have a base capacity of 50, upgradeable to 75 (and apply to all colonists).
 +    * Mutliple universities do not increase worker training rate (though later in the game multiple universities would allow you to train more than 10 scientists at a time).
 +  * Birth rate and death rate are affected favorably by high morale, so it's in your best interest to keep morale reasonably high.
 +
 +==== Morale Model ====
 +
 +There are two kinds of morale, Base Conditions, and Events. These are handled separately.  Every 256 ticks, these values are computed and used to determine a player's overall morale.  This calculation is only performed for human players.  For AI players, the morale level is forced to Fair.
 +
 +Base conditions are derived from colony conditions such as unemployed workers, disabled buildings, food production, etc.  Events are temporary morale adjustments that happen which are computed into a single value that decays over time such as kid births, disasters, structures destroyed, etc.
 +
 +While many of the values in morale.txt are stored as a percentage out of 100, internally the game scales these values to be a fraction out of 256.  The calculations described below use the game's scaled value as such, e.g.:
 +
 +<code>
 +Internal Value = ((Percent * 256) + 50) / 100
 +</code>
 +
 +The game also stores various ratios described below in terms of hundredths of a percent (i.e. 100% = 10000) to avoid floating point rounding errors in calculation.  These get scaled accordingly when shown on the UI.
 +
 +=== Event Morale Decay ===
 +
 +First, event morale decays according to the following formulas:
 +<code>
 +Event Morale = (Event Morale * EVENT_DEC_RATE + (255 if Event Morale is negative)) / 256
 +</code>
 +
 +Adding 255 in the case that event morale is negative ensures that it will get back to 0 given enough time.  EVENT_DEC_RATE is a value from morale.txt used to adjust the decay rate.
 +
 +=== Base Conditions ===
 +
 +Next, base conditions are calculated, determining how current colony conditions affect morale.  This gives a base number from which to start morale calculations from.  In the absence of events, this will become your current morale.  This value can swing wildly if base conditions change significantly during the period between successive morale updates.
 +
 +** Residence Demand **
 +
 +First, if residence capacity is nonzero, residence demand is computed using the following formula:
 +
 +<code>
 +Residence Demand = ((Kids + Workers + Scientists)) * 100 / Total Residence Capacity
 +</code>
 +
 +Total residence capacity is the sum of Production_Capacity (as defined in building.txt and upgradeable by techs) for all residences the player has (by default, Residence = 25, Advanced Residence = 50, Reinforced Residence = 40.  Residence can be upgraded to 75 via the Environmental Psychology tech).
 +
 +As mentioned before, this (and all ratios in this section) is essentially a percentage stored in terms of hundredths of a percent, to avoid rounding errors (in other words, 100% = 10000).
 +
 +If residence capacity is 0, this gets set to 100%.
 +
 +** Food Supply **
 +
 +A food supply level is calculated based on the following logic:
 +
 +  * Surplus if Food Production > Food Consumption
 +  * Starving if there is a food deficit
 +  * Deficit (Big Supply) if (Scientists + Workers + Kids) * 15 < Food Stored otherwise Deficit
 +
 +** Disabled Building Ratio **
 +
 +This ratio is computed based on:
 +
 +<code>
 +Disabled Building Ratio = (Num Buildings - Num Idle Buildings - Num Active Buildings) * 100 / Num Buildings
 +</code>
 +
 +In the cases of no buildings (or all buildings idle), or all buildings disabled, the ratio gets set to 0 or 100% respectively.
 +
 +** Rec Center / Forum Demand **
 +
 +This defaults to 100% if rec center and forum capacity are both 0, otherwise:
 +
 +<code>
 +Rec and Forum Demand = (Total Population * 100) / (Total Forum Capacity + Total Rec Center Capacity)
 +</code>
 +
 +** Operational Building Checks **
 +
 +The game records whether there are any active Nursery, University, and GORF (storing this as a boolean separately for each building type).
 +
 +** DIRT Average Damage Prevention **
 +
 +** TODO: ** This part needs some more analysis to determine how the game figures out DIRT damage prevention
 +
 +** Unoccupied Colonists **
 +
 +Unless the population solely consists of Kids (in which case this value defaults to 0), unoccupied colonist percentage is determined:
 +
 +<code>
 +Unoccupied Colonist Ratio = ((Available Workers + Available Scientists) * 100) / (Workers + Scientists)
 +</code>
 +
 +** Scientists as Workers **
 + 
 +This is set to 0 if the player has no scientists, otherwise:
 +
 +<code>
 +Scientists as Workers Ratio = ((Scientists As Workers * 100) / Scientists
 +</code>
 +
 +** Overcrowding Multiplier **
 +
 +An overcrowding multiplier is determined from residence demand, based on values in morale.txt.  Note that these stack as follows:
 +
 +^ Residence Demand ^ Modifier ^ Total ^
 +| <= 100% (None)    | 2        | 2     |
 +| <= 133% (Low)     | -1       | -1    |
 +| <= 166% (Med)     | -1       | -2    |
 +| <= 200% (High)    | -2       | -4    |
 +| > 200% (Max)      | -2       | -6    |
 +
 +** Food Modifier **
 +
 +This also comes from morale.txt and is based on the food supply level computed earlier, stacking as follows:
 +
 +^ Food Supply          ^ Modifier ^ Total ^
 +| Surplus              | 2        | 2     |
 +| Deficit (Big Supply) | 1        | 3     |
 +| Deficit              | -2       | 0     |
 +| Starving             | -2       | 0     |
 +
 +** Disabled Building Modifier **
 +
 +Also from morale.txt, this corresponds to the disabled building ratio, stacking as follows:
 +
 +^ Ratio           ^ Modifier ^ Total ^
 +| 0% (Low)        | 2        | 2     |
 +| <33% (Med)      | -1       | 1     |
 +| <66% (High)     | -1       | 0     |
 +| 66%+ (Max)      | -2       | -2    |
 +| 10000 (default) | Same as Low     ||
 +
 +** Rec/Forum Demand Modifier **
 +
 +This stacks similarly to the previous modifiers, defined as 1 in morale.txt:
 +
 +^ Demand         ^ Modifier ^ Total ^
 +| <= 100% (Low)  | 1        | 1     |
 +| <= 150% (Med)  | 1        | 2     |
 +| <= 200% (High) | 1        | 3     |
 +| > 200% (Max)   | 1        | 3     |
 +
 +** Med Center Demand Modifier **
 +
 +^ Demand         ^ Modifier ^ Total ^
 +| <= 100% (Low)   | 1        | 1     |
 +| <= 150% (Med)   | 1        | 2     |
 +| <= 200% (High)  | 1        | 3     |
 +| > 200% (Max)    | 1        | 3     |
 +| 10000 (default) | 0        |       |
 +
 +** Operational Modifiers **
 +
 +  * >= 1 active Nursery: 2
 +  * >= 1 active University: 2
 +
 +** Disaster Warning Systems **
 +
 +This checks the required tech of the quake, lightning, tornado, volcano, or meteor unit, the tech ID comes from weapons.txt.
 +
 +  * Seismology (03201) researched: 2 (DIS_QUAKE_ON)
 +  * Meteorology (05302) researched: 2 (DIS_ELEC_ON)
 +  * Severe Atmospheric Disturbances (05303) researched: 2 (DIS_SAND_ON)
 +  * Vulcanology (03202) researched: 2 (DIS_VOL_ON)
 +  * Meteor detection (08317 -> 08316) researched: 2 (DIS_MET_ON)
 +
 +All of these are additive (i.e. add 2 if the tech is researched, 0 otherwise)
 +
 +** DIRT Damage Prevention Modifiers **
 +
 +These are cumulative as before.
 +
 +^ Avg Damage Prevention ^ Modifier ^ Total ^
 +| < 625 (Low)           | 1        | 1     |
 +| >= 625 (Med)          | 1        | 2     |
 +| >= 1250 (High)        | 1        | 3     |
 +| >= 1775 (Max)         | 1        | 4     |
 +
 +** Unoccupied Colonists Modifiers **
 +
 +^ Unoccupied Colonist % ^ Modifier ^ Total ^
 +| >= 10% (Low)          | -1       | -1    |
 +| >= 30% (Med)          | -2       | -3    |
 +| >= 50% (High)         | -3       | -6    |
 +
 +** Scientists as Workers Modifiers **
 +
 +^ Scientists as Workers % ^ Modifier ^ Total ^
 +| >= 5% (Low)             | -1       | -1    |
 +| >= 20% (Med)            | -1       | -2    |
 +| >= 40% (High)           | -2       | -4    |
 +| >= 65% (Max)            | -3       | -7    |
  
 ==== Population Model ==== ==== Population Model ====
Line 11: Line 217:
 The colony population is updated every 32nd processing tick (256 ticks) for each human player.  AI players are forced to 4096 workers, 4096 scientists, and 256 kids. The colony population is updated every 32nd processing tick (256 ticks) for each human player.  AI players are forced to 4096 workers, 4096 scientists, and 256 kids.
  
-The following discussion makes use of M_FERT_RATE and M_DIE_RATE from morale.txt. M_FERT_RATE determines the rate at which new kids are born. A higher value means a higher birth rate. M_DIE_RATE determines the rate at which people (kids, workers, and scientists) die. HIGHER value means a LOWER death rate.+The following discussion makes use of M_FERT_RATE and M_DIE_RATE from morale.txt. M_FERT_RATE determines the rate at which new kids are born. The values are unintuitive: a lower value means a higher birth rate. M_DIE_RATE determines the rate at which people (kids, workers, and scientists) die. As uninituitively as before, a HIGHER value means a LOWER death rate.
  
 === Medical Center Capacity === === Medical Center Capacity ===
Line 52: Line 258:
  
 Scientist training is not handled here, because that is something that is manually initiated at the University by the player. Scientist training is not handled here, because that is something that is manually initiated at the University by the player.
- 
-==== Strategy ==== 
- 
-  * Despite there being a "demand %" shown for Med Centers, having excess medical center capacity strictly lowers the death rate (at the cost of Scientists and power to run the medical centers).  Veteran OP2 players strive for 30-40% demand to give a decent reduction to death rate. 
-  * There is limited value in having more than 1 nursery and university: 
-    * Multiple nurseries do not increase birth rate, only decreasing kid death rate by providing 40 capacity for kids, but this is quickly obsoleted when Med Centers become available as they have a base capacity of 50, upgradeable to 75 (and apply to all colonists). 
-    * Mutliple universities do not increase worker training rate (though later in the game multiple universities would allow you to train more than 10 workers at a time). 
-  * Birth rate and death rate are affected favorably by high morale, so it's in your best interest to keep morale reasonably high. 
  • outpost_2/concepts/population_and_morale.1698739170.txt.gz
  • Last modified: 2023/10/31 07:59
  • by blackbox222