======= 組合とストライキのゲームメカニズム ======= 組合とストライキのゲームメカニズム マニュアルのゲームメカニクスセクションは、ゲームの計算で使用される内部式の詳細を説明します。マニュアルのこのセクションは疑似コードを使用しており、ゲーム内のコードと100%同じとは限りません。 マニュアルのゲームメカニクスパートは、主に "なぜX、Y、Zをするとこの評価になるのか?"というよくある質問に対するリファレンスとして設計されています。通常、この答えには多くの異なる変数が含まれており、マニュアルのこのセクションではそれを実証しています。 **マニュアルのゲームメカニクスセクションは、[[https://idioms.thefreedictionary.com/seeing+how+the+sausage+gets+made|ソーセージがどのように作られるか]]を示しています。ですから、ゲームを楽しむなら、このマニュアルの部分は避けた方がいいかもしれません。** ====== 変数 ====== ^ 名称 ^ 説明 ^ ^ 名称 ^ 説明 ^ | **factoryWageDifficultyAddition** | この変数は、工場の従業員が要求する賃金を調整するものです。 | | **City_Average_Wage** | これは、その都市における全職種の平均賃金です。ゲームは、都市の一人当たりの所得からこの値を生成します。 | | **Factory_Wage** | 工場の従業員に支払っている金額です | | **Branch_Wage** | 支店の従業員に支払っている金額です | | **Engineering_Wage** | エンジニアに支払っている金額です | | **Marketing_Wage** | マーケティングの従業員に支払っている金額です | | **Admin_Wage** | 管理の従業員に支払っている金額です | | **total_furloughed** | これは、仕事から外した従業員の数です。通常、工場のラインを調整するときに発生します。一時解雇した従業員の中には、自分から辞めていく人もいます。残りの従業員は、6ヵ月後、再び必要にならない限り、自動的に解雇されます。 | | **total_employees** | これは、あなたが擁している従業員の総数です | | **Department_Direct_Benefits** | 選択した部門の現在の直接給付スライダーの位置です | | **Department_Defined_Benefits** | 選択した部門の現在の年金スライダーの位置です | | **Department_Pension_Fees** | 選択した部門の現在の年金の料金スライダーの位置です | | **Employee_Moral** | これは従業員の士気です。 | | **StockMarket_GrowthRate** | turnevents.xmlファイルで定義されている、株式市場の静的成長値です。 | | **valueBP** | 直接給付スライダーの現在値です | | **valuePA** | 年金スライダーの現在値です | | **Last_5_Years_Income** | 過去5年間の総収益です | | **Last_5_Years_Expenses** | 過去5年間の総費用です | | **AdministrationSkill** | 管理スキルです | | **DCWant** | これは、組合が望む直接給付のスライダー位置です。 | | **DBWant** | これは、組合が望む年金のスライダーの位置です。 | | **DBFeeSlider** | これは、組合が望む年金の料金スライダーの位置です。 | | **DCSlider** | これが現在の直接給付のスライダーの位置です | | **DBSlider** | これは、年金のスライダーの位置です。 | | **CurrentWages** | これは、部門の現在の賃金です。 | | **RequestedWage** | これは、部門が要求する賃金です。 | ====== 従業員の士気 ====== ===== 賃金から ===== ==== 工場 ==== 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))) ==== 支店 ==== 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)))) ==== エンジニアリング ==== 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)))) ==== マーケティング ==== 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)))) ==== 管理 ==== 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)))) ===== 休暇から ===== 工場の士気のみ。 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) ) ===== 年金 ===== ==== 料金から ==== 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 ==== 給料不足の契約 ==== If(Department_Direct_Benefits < Agreed_Direct_Benefits OR Department_Defined_Benefits < Agreed_Defined_Benefits) { Department_Morale = Department_Morale - 2 } ==== 新規契約 ==== Department_Morale = Department_Morale = 100 ===== イベントから ===== ==== 着火 ==== Department_Morale = Department_Morale * 0.8 ==== 大打撃 ==== Department_Morale = Department_Morale * 0.5 ====== ストライキ ====== ===== ストライキへ ===== 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 ===== 賃上げ要求 ===== //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; } ===== ストライキの種類 ===== 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 } ===== 福利厚生の要求 ===== また、ゲームではストライキシステム以外の福利厚生の要求が発生することもあります。 ==== 直接給付 ==== 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; } ==== 年金 ==== 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; } ====== 組合との交渉 ====== 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! } ====== ストライキを止めるタイミング ====== if(CurrentWages > RequestedWage) Stop Striking if Successful Benefits Negotiation Stop Striking