User Tools

Site Tools


gamemanual:gm_unions

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