gamemanual:gm_unions
Table of Contents
Unions And Strikes Game Mechanics
The Game Mechanics section of the manual details the internal formula used in the game's calculations. This section of the manual uses pseudo-code and may not be 100% the same as the code in the game.
The Game Mechanics part of the manual is mainly designed to be a reference for the frequently asked question, “Why do I get this rating when I do X, Y, Z?!” Usually, this answer involves many different variables, which this section of the manual demonstrates.
The game mechanics section of the manual shows how the sausage gets made. So you really may want to avoid this portion of the manual if you enjoy the game.
Variables
Name | Description | Name | Description | |
---|---|---|---|---|
factoryWageDifficultyAddition | This variable adjusts the wages demanded by factory employees. | City_Average_Wage | This is the average pay in the city for all jobs. The game generates the value from the city's per capita income. | |
Factory_Wage | The amount you're paying factory employees | Branch_Wage | The amount you're paying branch employees | |
Engineering_Wage | The amount you're paying engineering employees | Marketing_Wage | The amount you're paying marketing employees | |
Admin_Wage | The amount you're paying administration employees | total_furloughed | This is the number of employees you have removed from work. This normally occurs when you adjust factory lines. Some furloughed workers will quit on their own. The rest are laid off automatically after 6 months unless you need them again. | |
total_employees | This is the total number of employees you have | Department_Direct_Benefits | Current Direct Benefits Slider position for the selected department | |
Department_Defined_Benefits | Current Defined Benefits Slider position for the selected department | Department_Pension_Fees | Current Defined Benefits Fee Slider position for the selected department | |
Employee_Moral | This is the morale value of the employee. | StockMarket_GrowthRate | This is the static growth value of the stock market as defined in the turnevents.xml file. | |
valueBP | The current value of the Direct Benefits Slider | valuePA | The current value of the Defined Benefits Slider | |
Last_5_Years_Income | Total revenues over the last 5 years | Last_5_Years_Expenses | Total expenses over the last 5 years | |
AdministrationSkill | Administrative Skills | DCWant | This is the Direct Benefits slider position that the Unions want. | |
DBWant | This is the Defined Benefits slider position that the Unions want. | DBFeeSlider | This is the Defined Benefits Fee slider position that the Unions want. | |
DCSlider | This is the current Direct Benefits slider position. | DBSlider | This is the Defined Benefits slider position. | |
CurrentWages | This is the current wages for the department. | RequestedWage | These are the wages the department requests. |
Employee Morale
From Wages
Factory
if( Factory_Wage < City_Average_Wage * (0.5211 + factoryWageDifficultyAddition) ) Morale = Morale - (5 * (1-(Factory_Wage/(City_Average_Wage * (0.5211 + factoryWageDifficultyAddition )))) else Morale = Morale + (3 * (1-(1+((City_Average_Wage * (0.5211 + factoryWageDifficultyAddition ))/Factory_Wage)))
Branches
if( Branch_Wage < City_Average_Wage * 1.25 ) Morale = Morale - (5 * (1-(Branch_Wage/(City_Average_Wage * 1.25 )))) else Morale = Morale + (3 * (1-(1+((City_Average_Wage * 1.25 )/Branch_Wage))))
Engineering
if( Engineering_Wage < City_Average_Wage * 2 ) Morale = Morale - (5 * (1-(Engineering_Wage/(City_Average_Wage * 2)))) else Morale = Morale + (3 * (1-(1+((City_Average_Wage * 2)/Engineering_Wage))))
Marketing
if( Marketing_Wage < City_Average_Wage * 1.3 ) Morale = Morale - (5 * (1-(Marketing_Wage/(City_Average_Wage * 1.3)))) else Morale = Morale + (3 * (1-(1+((City_Average_Wage * 1.3)/Marketing_Wage))))
Administration
if( Admin_Wage < City_Average_Wage * 2.5 ) Morale = Morale - (5 * (1-(Admin_Wage/(City_Average_Wage * 2.5)))) else Morale = Morale + (3 * (1-(1+((City_Average_Wage * 2.5)/Admin_Wage))))
From Furloughed
Factory morale only.
furloughRatio = total_furloughed/total_employees laidOffRatio = (furloughed * 0.1)/total_employees if(furloughRatio>1) furloughRatio = 1 if(laidOffRatio>1) laidOffRatio = 1 Morale = Morale - ((0.075 * furloughRatio ) + ( 0.1 * laidOffRatio) )
Benefits
From Fees
AvgDepartmentDirectBenefits = Average Department Direct Benefits Percentage At All Companies AvgDepartmentDefinedBenefits = Average Department Defined Benefits Percentage At All Companies AvgDepartmentDirectBenefits = AvgDepartmentDirectBenefits * 0.9 + 0.0001 AvgDepartmentDefinedBenefits = AvgDepartmentDefinedBenefits * 0.9 + 0.0001 Department_Morale_Change = Department_Direct_Benefits/AvgDepartmentDirectBenefits + Department_Defined_Benefits/AvgDepartmentDefinedBenefits - Department_Pension_Fees * 1.5 if(Department_Morale_Change > 2) Department_Morale_Change = 2 else if(Department_Morale_Change < 2) Department_Morale_Change = -2 Department_Morale = Department_Morale - Department_Morale_Change
Underpaying Agreement
If(Department_Direct_Benefits < Agreed_Direct_Benefits OR Department_Defined_Benefits < Agreed_Defined_Benefits) { Department_Morale = Department_Morale - 2 }
New Agreement
Department_Morale = Department_Morale = 100
From Events
Fire Strikers
Department_Morale = Department_Morale * 0.8
Major Strike
Department_Morale = Department_Morale * 0.5
Striking
To Strike
if(Random Number Between (0.0 AND 1.0) > (1-(0.5-(Employee_Moral/100.0))) Strike = true else if(StockMarket_GrowthRate > 1.02 AND Random Number Between (0 and 120) < 2) Strike = true
Wage Demand
//Branches ModValue = 1.25 //Factories ModValue = 0.5211 + factoryWageDifficultyAddition; //Marketing ModValue = 1.3; //Engineering ModValue = 2 //Admin ModValue = 2.5 if(stockmarketRates > 1.02 ) RequestedWage = (City_Average_Wage * ModValue * 1.2) * (Random Number Between (0 AND 0.13) + 1.05) + 10; else RequestedWage = (City_Average_Wage * ModValue) * (Random Number Between ( 0 AND 0.13)+1.05)+10; if(CurrentWages > RequestedWage) { RequestedWage = CurrentWages * 1.05 + 5; }
Strike Type
if(Benefits_Enabled AND Random Number Between (0 to 10) = 0) { //Generate Benefits Demand Here... See next segments } else if (Random Number Between (0 to 1) = 0) { No strike } else { Continue With Wage Strike }
Benefits Demand
The game may also generate benefit demands outside of the strike system.
Direct Benefits
if(Year < 2021) { yearAdj = 0.0095*((year-1899)/5); minimumRequest = 0.009*((year-1900)); } else { yearAdj = 0.0095*((121)/5); minimumRequest = 0.009*((120)); } if((year < 1975 AND Random Number Between (0 AND 99) < 6) OR (year > 1974 AND year < 1995 AND Random Number Between (0 AND 99) < 20) OR (year > 1994 AND Random Number Between (0 AND 99) < 30)) { requestAmount = valueBP + Random Number Between (0 AND 0.03) + yearAdj if(requestAmount > 2) requestAmount = 2; if(requestAmount < minimumRequest) requestAmount = minimumRequest; }
Defined Benefits
if( (year > 1918 AND year < 1995 AND Random Number Between (0 AND 99) < 60) OR (year > 1994 AND Random Number Between (0 AND 99) < 16)) { requestAmount = valuePA + Random Number Between (0 AND 0.03) + yearAdj if(requestAmount > 2) requestAmount = 2; if(requestAmount < minimumRequest) requestAmount = minimumRequest; }
Union Negotiations
negotiations = Last_5_Years_Income / (Last_5_Years_Expenses * 1.1) if(negotiations < 0.85) { negotiations = 0.85 } else if(negotiations > 1) negotiations = 1; if(AdministrationSkill > 0) { negotiations = negotiations - (0.2 * (AdministrationSkill/100.0)) } if(negotiations < 1) { if(negotiations < 0.65) { negotiations = 0.65; } DCWant = DCWant * negotiations; DBWant = DBWant * negotiations; } DBWant = DBWant + (DBFeeSlider*(1.0-(0.2 * (AdministrationSkill/100.0)))); if(DCSlider >= DCWant AND DBSlider >= DBWant) { The Union Approves! }
When To Stop Striking
if(CurrentWages > RequestedWage) Stop Striking if Successful Benefits Negotiation Stop Striking
gamemanual/gm_unions.txt · Last modified: 2022/08/09 15:52 by admin