User Tools

Site Tools


gamemanual:gm_unions

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
gamemanual:gm_unions [2022/07/12 12:53] – [Variables] admingamemanual:gm_unions [2022/08/09 15:52] (current) – [Variables] admin
Line 1: Line 1:
 +======= 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 [[https://idioms.thefreedictionary.com/seeing+how+the+sausage+gets+made|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 ====
 +
 +<code cpp>
 +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)))
 +        
 +</code>
 +
 +==== Branches ====
 +
 +<code cpp>
 +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))))
 +</code>
 +
 +==== Engineering ====
 +
 +<code cpp>
 +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))))
 +</code>
 +
 +==== Marketing ====
 +
 +<code cpp>
 +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))))
 +</code>
 +
 +
 +==== Administration ====
 +
 +<code cpp>
 +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))))
 +</code>
 +
 +
 +
 +===== From Furloughed =====
 +
 +Factory morale only.
 +
 +<code cpp>
 +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) )
 +</code>
 +
 +
 +
 +
 +===== Benefits  =====
 +
 +==== From Fees ====
 +
 +<code cpp>
 +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
 +</code>
 +
 +==== Underpaying Agreement ====
 +
 +<code cpp>
 +If(Department_Direct_Benefits < Agreed_Direct_Benefits OR 
 +   Department_Defined_Benefits < Agreed_Defined_Benefits)
 +{
 +  Department_Morale = Department_Morale - 2
 +
 +</code>
 +
 +
 +==== New Agreement ====
 +
 +<code cpp>
 +Department_Morale = Department_Morale = 100
 +</code>
 +
 +===== From Events =====
 +
 +
 +==== Fire Strikers ====
 +
 +<code cpp>
 +Department_Morale = Department_Morale * 0.8
 +</code>
 +
 +
 +==== Major Strike ====
 +
 +<code cpp>
 +Department_Morale = Department_Morale * 0.5
 +</code>
 +====== Striking ======
 +
 +
 +===== To Strike =====
 +
 +<code cpp>
 +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
 +</code>
 +
 +===== Wage Demand =====
 +
 +<code cpp>
 +
 +//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;
 +}
 +</code>
 +
 +
 +===== Strike Type =====
 +
 +
 +<code cpp>
 +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
 +}
 +</code>
 +
 +===== Benefits Demand =====
 +
 +The game may also generate benefit demands outside of the strike system.
 +
 +==== Direct Benefits ====
 +
 +<code cpp>
 +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;
 +
 +        
 +}
 +
 +</code>
 +
 +
 +
 +==== Defined Benefits ====
 +
 +<code cpp>
 +
 +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;
 +
 +}
 +</code>
 +
 +
 +====== Union Negotiations ======
 +
 +<code cpp>
 +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!
 +}
 +
 +</code>
 +====== When To Stop Striking ======
 +
 +<code cpp>
 +if(CurrentWages > RequestedWage)
 +  Stop Striking
 +
 +if Successful Benefits Negotiation
 +  Stop Striking
 +  
 +</code>
gamemanual/gm_unions.txt · Last modified: 2022/08/09 15:52 by admin