Small arc update (by rftr):

- 2 new directives
- 3 new admin actions
- arc website dropdown fix
- one admin action per region can now be changed

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9161 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2021-09-01 16:48:13 +00:00
parent 67c04dd44b
commit b7adaf802a
14 changed files with 742 additions and 75 deletions
+16
View File
@@ -3901,6 +3901,16 @@ void LoadRebelCommandSettings()
FillArrayValues(iniReader, "Rebel Command Settings", "RAID_MINES_COSTS", gRebelCommandSettings.iRaidMinesCosts); FillArrayValues(iniReader, "Rebel Command Settings", "RAID_MINES_COSTS", gRebelCommandSettings.iRaidMinesCosts);
FillArrayValues(iniReader, "Rebel Command Settings", "RAID_MINES_PERCENTAGE", gRebelCommandSettings.fRaidMinesPercentage); FillArrayValues(iniReader, "Rebel Command Settings", "RAID_MINES_PERCENTAGE", gRebelCommandSettings.fRaidMinesPercentage);
gRebelCommandSettings.uCreateTurncoatsProgressRequirement = iniReader.ReadUINT8("Rebel Command Settings", "CREATE_TURNCOATS_PROGRESS_REQUIREMENT", 33, 0, 100);
gRebelCommandSettings.fCreateTurncoatsIntelCost = iniReader.ReadFloat("Rebel Command Settings", "CREATE_TURNCOATS_INTEL_COST", 20.f, 0.f, 1000.f);
FillArrayValues(iniReader, "Rebel Command Settings", "CREATE_TURNCOATS_COSTS", gRebelCommandSettings.iCreateTurncoatsCosts);
FillArrayValues(iniReader, "Rebel Command Settings", "CREATE_TURNCOATS_PER_DAY", gRebelCommandSettings.iCreateTurncoatsPerDay);
gRebelCommandSettings.uDraftProgressRequirement = iniReader.ReadUINT8("Rebel Command Settings", "DRAFT_PROGRESS_REQUIREMENT", 25, 0, 100);
FillArrayValues(iniReader, "Rebel Command Settings", "DRAFT_COSTS", gRebelCommandSettings.iDraftCosts);
FillArrayValues(iniReader, "Rebel Command Settings", "DRAFT_PER_DAY_MODIFIER", gRebelCommandSettings.iDraftPerDayModifier);
FillArrayValues(iniReader, "Rebel Command Settings", "DRAFT_LOYALTY_LOSS_PER_DAY", gRebelCommandSettings.iDraftLoyaltyLossPerDay);
// admin actions // admin actions
gRebelCommandSettings.iSupplyLineMaxLoyaltyIncrease = iniReader.ReadInteger("Rebel Command Settings", "SUPPLY_LINE_MAX_LOYALTY_INCREASE", 10, 1, 100); gRebelCommandSettings.iSupplyLineMaxLoyaltyIncrease = iniReader.ReadInteger("Rebel Command Settings", "SUPPLY_LINE_MAX_LOYALTY_INCREASE", 10, 1, 100);
@@ -3931,6 +3941,12 @@ void LoadRebelCommandSettings()
gRebelCommandSettings.iMiningPolicyBonus = iniReader.ReadInteger("Rebel Command Settings", "MINING_POLICY_BONUS", 10, 0, 100); gRebelCommandSettings.iMiningPolicyBonus = iniReader.ReadInteger("Rebel Command Settings", "MINING_POLICY_BONUS", 10, 0, 100);
gRebelCommandSettings.uPathfindersSpeedBonus = iniReader.ReadUINT8("Rebel Command Settings", "PATHFINDERS_SPEED_BONUS", 20, 0, 100);
gRebelCommandSettings.uHarriersSpeedPenalty = iniReader.ReadUINT8("Rebel Command Settings", "HARRIERS_SPEED_PENALTY", 50, 0, 100);
gRebelCommandSettings.iFortificationsBonus = iniReader.ReadInteger("Rebel Command Settings", "FORTIFICATIONS_BONUS", 10, 0, 100);
} }
void FreeGameExternalOptions() void FreeGameExternalOptions()
+16
View File
@@ -1740,6 +1740,16 @@ typedef struct
std::vector<INT32> iRaidMinesCosts; std::vector<INT32> iRaidMinesCosts;
std::vector<FLOAT> fRaidMinesPercentage; std::vector<FLOAT> fRaidMinesPercentage;
UINT8 uCreateTurncoatsProgressRequirement;
FLOAT fCreateTurncoatsIntelCost;
std::vector<INT32> iCreateTurncoatsCosts;
std::vector<INT32> iCreateTurncoatsPerDay;
UINT8 uDraftProgressRequirement;
std::vector<INT32> iDraftCosts;
std::vector<INT32> iDraftPerDayModifier;
std::vector<INT32> iDraftLoyaltyLossPerDay;
// admin actions // admin actions
INT32 iSupplyLineMaxLoyaltyIncrease; INT32 iSupplyLineMaxLoyaltyIncrease;
@@ -1770,6 +1780,12 @@ typedef struct
INT32 iMiningPolicyBonus; INT32 iMiningPolicyBonus;
UINT8 uPathfindersSpeedBonus;
UINT8 uHarriersSpeedPenalty;
INT16 iFortificationsBonus;
} REBELCOMMAND_SETTINGS; } REBELCOMMAND_SETTINGS;
typedef struct typedef struct
+10
View File
@@ -4472,6 +4472,16 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
usAttack -= (usAttack * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200); usAttack -= (usAttack * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200);
} }
// check fortifications bonus
if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA
|| pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA
|| pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA
|| (pTarget->uiFlags & CELL_MERC))
{
usDefence += (usDefence * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
usAttack -= (usAttack * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
}
// reapair values // reapair values
usAttack = max(0, min(1000, usAttack )); usAttack = max(0, min(1000, usAttack ));
usDefence = max(0, min(1000, usDefence )); usDefence = max(0, min(1000, usDefence ));
+519 -75
View File
@@ -22,8 +22,10 @@ How to add a new directive:
- add strings to text files (szRebelCommandDirectivesText) - add strings to text files (szRebelCommandDirectivesText)
- add to GameSettings (gRebelCommandSettings) and RebelCommand_Settings.ini - add to GameSettings (gRebelCommandSettings) and RebelCommand_Settings.ini
- add to SetupInfo to read from game settings - add to SetupInfo to read from game settings
- add to dropdown list in EnterWebsite
- add to switch in DailyUpdate (for completeness) - add to switch in DailyUpdate (for completeness)
- add to switch in GetDirectiveEffect for website description - add to switch in GetDirectiveEffect for website description
- add directive-specific effect
How to add a new admin action: How to add a new admin action:
- add to the RebelCommandAdminActions enum in the header - add to the RebelCommandAdminActions enum in the header
@@ -32,6 +34,7 @@ How to add a new admin action:
- add to GameSettings (gRebelCommandSettings) and RebelCommand_Settings.ini - add to GameSettings (gRebelCommandSettings) and RebelCommand_Settings.ini
- add to SetupInfo to read from game settings - add to SetupInfo to read from game settings
- add to Init to add to pool of valid actions on game start - add to Init to add to pool of valid actions on game start
- add admin-action-specific effect
Points of interest: Points of interest:
- Init() - set up rebel command for the first time - Init() - set up rebel command for the first time
@@ -82,6 +85,8 @@ Points of interest:
#define DIRECTIVE_TEXT(id) RCDT_##id##, RCDT_##id##_EFFECT, RCDT_##id##_DESC, RCDT_##id##_IMPROVE, #define DIRECTIVE_TEXT(id) RCDT_##id##, RCDT_##id##_EFFECT, RCDT_##id##_DESC, RCDT_##id##_IMPROVE,
#define ADMIN_ACTION_CHANGE_COST 15000
#define REBEL_COMMAND_DROPDOWN DropDownTemplate<DROPDOWN_REBEL_COMMAND_DIRECTIVE>::getInstance() #define REBEL_COMMAND_DROPDOWN DropDownTemplate<DROPDOWN_REBEL_COMMAND_DIRECTIVE>::getInstance()
#define WEBSITE_LEFT LAPTOP_SCREEN_UL_X #define WEBSITE_LEFT LAPTOP_SCREEN_UL_X
@@ -92,6 +97,7 @@ Points of interest:
extern UINT32 gCoolnessBySector[256]; extern UINT32 gCoolnessBySector[256];
extern UINT32 guiInsuranceBackGround; extern UINT32 guiInsuranceBackGround;
extern BOOLEAN gfTownUsesLoyalty[MAX_TOWNS]; extern BOOLEAN gfTownUsesLoyalty[MAX_TOWNS];
extern GROUP *gpGroupList;
namespace RebelCommand namespace RebelCommand
{ {
@@ -162,6 +168,13 @@ enum RebelCommandText // keep this synced with szRebelCommandText in the text fi
RCT_WEBSITE_AVAILABLE, RCT_WEBSITE_AVAILABLE,
RCT_NOT_SAFE_TO_REACTIVATE_ADMIN_TEAM, RCT_NOT_SAFE_TO_REACTIVATE_ADMIN_TEAM,
RCT_MINE_RAID_SUCCESSFUL, RCT_MINE_RAID_SUCCESSFUL,
RCT_INSUFFICIENT_INTEL_TO_CREATE_TURNCOATS,
RCT_CHANGE_ADMIN_ACTION,
RCT_CANCEL,
RCT_CONFIRM,
RCT_PREV_ARROW,
RCT_NEXT_ARROW,
RCT_CONFIRM_CHANGE_ADMIN_ACTION_PROMPT,
}; };
enum RebelCommandHelpText // keep this synced with szRebelCommandHelpText in the text files enum RebelCommandHelpText // keep this synced with szRebelCommandHelpText in the text files
@@ -185,6 +198,14 @@ enum RebelCommandDirectivesText // keep this synced with szRebelCommandDirective
DIRECTIVE_TEXT(HVT_STRIKES) DIRECTIVE_TEXT(HVT_STRIKES)
DIRECTIVE_TEXT(SPOTTERS) DIRECTIVE_TEXT(SPOTTERS)
DIRECTIVE_TEXT(RAID_MINES) DIRECTIVE_TEXT(RAID_MINES)
DIRECTIVE_TEXT(CREATE_TURNCOATS)
DIRECTIVE_TEXT(DRAFT)
};
enum ChangeAdminActionState
{
CAAS_INIT,
CAAS_CHANGING,
}; };
// website functions // website functions
@@ -206,8 +227,8 @@ void SetDirectiveDescriptionHelpText(INT32 reason, MOUSE_REGION& region, RebelCo
void SetRegionHelpText(INT32 reason, MOUSE_REGION& helpTextRegion, RebelCommandHelpText text); void SetRegionHelpText(INT32 reason, MOUSE_REGION& helpTextRegion, RebelCommandHelpText text);
void SetupAdminActionBox(const UINT8 actionIndex, const UINT16 descriptionText, const UINT16 buttonText); void SetupAdminActionBox(const UINT8 actionIndex, const UINT16 descriptionText, const UINT16 buttonText);
void ToggleWebsiteView(); void ToggleWebsiteView();
void UpdateAdminActionChangeList(INT16 regionId);
void EvaluateDirectives();
INT32 GetAdminActionCostForRegion(INT16 regionId); INT32 GetAdminActionCostForRegion(INT16 regionId);
INT16 GetAdminActionInRegion(INT16 regionId, RebelCommandAdminActions adminAction); INT16 GetAdminActionInRegion(INT16 regionId, RebelCommandAdminActions adminAction);
void HandleScouting(); void HandleScouting();
@@ -218,12 +239,14 @@ void UpgradeMilitiaStats();
INT32 dbgAdvanceDayBtnId = -1; INT32 dbgAdvanceDayBtnId = -1;
INT32 dbgPrintBtnId = -1; INT32 dbgPrintBtnId = -1;
std::vector<INT32> adminActionBtnIds; std::vector<INT32> adminActionBtnIds;
std::vector<INT32> adminActionChangeBtnIds;
ChangeAdminActionState adminActionChangeState;
INT32 adminTeamBtnId = -1; INT32 adminTeamBtnId = -1;
INT32 improveDirectiveBtnId = -1; INT32 improveDirectiveBtnId = -1;
INT32 regionNextBtnId = -1; INT32 regionNextBtnId = -1;
INT32 regionPrevBtnId = -1; INT32 regionPrevBtnId = -1;
INT32 viewSwapBtnId = -1;
INT32 upgradeMilitiaStatsBtnId = -1; INT32 upgradeMilitiaStatsBtnId = -1;
INT32 viewSwapBtnId = -1;
// help text regions // help text regions
MOUSE_REGION adminTeamHelpTextRegion; MOUSE_REGION adminTeamHelpTextRegion;
@@ -233,6 +256,8 @@ MOUSE_REGION suppliesHelpTextRegion;
MOUSE_REGION suppliesIncomeHelpTextRegion; MOUSE_REGION suppliesIncomeHelpTextRegion;
BOOLEAN redraw = FALSE; BOOLEAN redraw = FALSE;
std::vector<RebelCommandAdminActions> adminActionChangeList;
INT8 adminActionChangeIndex = 0;
Info info; Info info;
INT16 iCurrentRegionId = 1; INT16 iCurrentRegionId = 1;
INT32 iIncomingSuppliesPerDay = 0; INT32 iIncomingSuppliesPerDay = 0;
@@ -265,6 +290,12 @@ void ClearAllButtons()
} }
adminActionBtnIds.clear(); adminActionBtnIds.clear();
for (const auto btnId : adminActionChangeBtnIds)
{
RemoveButton(btnId);
}
adminActionChangeBtnIds.clear();
if (adminTeamBtnId != -1) if (adminTeamBtnId != -1)
{ {
RemoveButton(adminTeamBtnId); RemoveButton(adminTeamBtnId);
@@ -362,13 +393,6 @@ void DeployOrReactivateAdminTeam(INT16 regionId)
} }
void EvaluateDirectives()
{
const INT16 newDirective = REBEL_COMMAND_DROPDOWN.GetSelectedEntryKey();
rebelCommandSaveInfo.iSelectedDirective = newDirective;
iIncomingSuppliesPerDay = CurrentPlayerProgressPercentage() * gRebelCommandSettings.fIncomeModifier + static_cast<INT32>((newDirective == RCD_GATHER_SUPPLIES ? rebelCommandSaveInfo.directives[RCD_GATHER_SUPPLIES].GetValue1() : 0));
}
INT32 GetAdminActionCostForRegion(INT16 regionId) INT32 GetAdminActionCostForRegion(INT16 regionId)
{ {
INT16 totalLocalActions = 0; INT16 totalLocalActions = 0;
@@ -423,6 +447,14 @@ void GetDirectiveEffect(const RebelCommandDirectives directive, STR16 text)
swprintf(text, szRebelCommandDirectivesText[directive * 4 + 1], rebelCommandSaveInfo.directives[directive].GetValue1(), (100.f + rebelCommandSaveInfo.directives[directive].GetValue2()) / 100.f); swprintf(text, szRebelCommandDirectivesText[directive * 4 + 1], rebelCommandSaveInfo.directives[directive].GetValue1(), (100.f + rebelCommandSaveInfo.directives[directive].GetValue2()) / 100.f);
break; break;
case RCD_CREATE_TURNCOATS:
swprintf(text, szRebelCommandDirectivesText[directive * 4 + 1], rebelCommandSaveInfo.directives[directive].GetValue1(), gRebelCommandSettings.fCreateTurncoatsIntelCost);
break;
case RCD_DRAFT:
swprintf(text, szRebelCommandDirectivesText[directive * 4 + 1], (rebelCommandSaveInfo.directives[directive].GetValue1() * CurrentPlayerProgressPercentage()));
break;
default: default:
swprintf(text, L"Unrecognised directive id: %d. Do you need to add it to GetDirectiveEffect?", directive); swprintf(text, L"Unrecognised directive id: %d. Do you need to add it to GetDirectiveEffect?", directive);
break; break;
@@ -453,6 +485,8 @@ void ImproveDirective(const RebelCommandDirectives directive)
rebelCommandSaveInfo.directives[directive].Improve(); rebelCommandSaveInfo.directives[directive].Improve();
LaptopSaveInfo.iCurrentBalance -= cost; LaptopSaveInfo.iCurrentBalance -= cost;
RenderWebsite();
} }
}); });
} }
@@ -489,6 +523,8 @@ void RegionNavNext()
if (iCurrentRegionId >= NUM_TOWNS) if (iCurrentRegionId >= NUM_TOWNS)
iCurrentRegionId = 1; iCurrentRegionId = 1;
} while (gfTownUsesLoyalty[iCurrentRegionId] == FALSE); } while (gfTownUsesLoyalty[iCurrentRegionId] == FALSE);
UpdateAdminActionChangeList(iCurrentRegionId);
} }
} }
@@ -503,6 +539,8 @@ void RegionNavPrev()
if (iCurrentRegionId <= 0) if (iCurrentRegionId <= 0)
iCurrentRegionId = NUM_TOWNS - 1; iCurrentRegionId = NUM_TOWNS - 1;
} while (gfTownUsesLoyalty[iCurrentRegionId] == FALSE); } while (gfTownUsesLoyalty[iCurrentRegionId] == FALSE);
UpdateAdminActionChangeList(iCurrentRegionId);
} }
} }
@@ -519,36 +557,109 @@ void SetupAdminActionBox(const UINT8 actionIndex, const UINT16 descriptionText,
case 2: x = WEBSITE_LEFT + 350; break; case 2: x = WEBSITE_LEFT + 350; break;
} }
y = WEBSITE_TOP + 140 + 110 * (actionIndex / 3); y = WEBSITE_TOP + 125 + 110 * (actionIndex / 3);
// show label if maxed out if (actionIndex < 5 || adminActionChangeState == CAAS_INIT)
if ((actionIndex == RCAA_SUPPLY_LINE && rebelCommandSaveInfo.regions[iCurrentRegionId].ubMaxLoyalty >= MAX_LOYALTY_VALUE)
|| (actionIndex != RCAA_SUPPLY_LINE && rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex] >= 2))
{ {
DrawTextToScreen(szRebelCommandAdminActionsText[buttonText], x, y + 7, 0, FONT10ARIALBOLD, FONT_MCOLOR_BLACK, FONT_MCOLOR_BLACK, FALSE, 0); // show label if maxed out
if ((actionIndex == RCAA_SUPPLY_LINE && rebelCommandSaveInfo.regions[iCurrentRegionId].ubMaxLoyalty >= MAX_LOYALTY_VALUE)
|| (actionIndex != RCAA_SUPPLY_LINE && rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex] >= 2))
{
DrawTextToScreen(szRebelCommandAdminActionsText[buttonText], x, y + 7, 0, FONT10ARIALBOLD, FONT_MCOLOR_BLACK, FONT_MCOLOR_BLACK, FALSE, 0);
}
else // show button
{
const UINT8 level = rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex];
swprintf(text, szRebelCommandText[level == 0 ? RCT_ADMIN_ACTION_ESTABLISH : RCT_ADMIN_ACTION_IMPROVE], szRebelCommandAdminActionsText[buttonText]);
const INT32 btnId = CreateTextButton(text, FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x, y, 140, 20, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
{
ButtonHelper(btn, reason, [btn]() { PurchaseAdminAction(btn->UserData[0], btn->UserData[1]); });
});
Assert(ButtonList[btnId]);
ButtonList[btnId]->UserData[0] = iCurrentRegionId;
ButtonList[btnId]->UserData[1] = actionIndex;
adminActionBtnIds.push_back(btnId);
}
y += 22;
swprintf(text, szRebelCommandText[RCT_ADMIN_ACTION_TIER], rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex]);
DrawTextToScreen(text, x, y, 0, FONT10ARIAL, FONT_MCOLOR_BLACK, FONT_MCOLOR_BLACK, FALSE, 0);
y += 13;
DisplayWrappedString(x, y, 140, 2, FONT10ARIAL, FONT_MCOLOR_BLACK, szRebelCommandAdminActionsText[descriptionText], FONT_MCOLOR_BLACK, FALSE, 0);
// special case for index 5: show state change button
if (actionIndex == 5)
{
y += 68;
const INT32 btnId = CreateTextButton(szRebelCommandText[RCT_CHANGE_ADMIN_ACTION], FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x, y, 140, 18, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
{
ButtonHelper(btn, reason, [btn]() { adminActionChangeState = CAAS_CHANGING; });
});
adminActionChangeBtnIds.push_back(btnId);
}
} }
else // show button else if (actionIndex == 5 && adminActionChangeState == CAAS_CHANGING)
{ {
const UINT8 level = rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex]; // let player change last action
swprintf(text, szRebelCommandText[level == 0? RCT_ADMIN_ACTION_ESTABLISH : RCT_ADMIN_ACTION_IMPROVE], szRebelCommandAdminActionsText[buttonText]); RebelCommandAdminActions newAction = adminActionChangeList[adminActionChangeIndex];
const INT32 btnId = CreateTextButton(text, FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x, y, 140, 20, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
DrawTextToScreen(szRebelCommandAdminActionsText[newAction*2], x, y + 7, 0, FONT10ARIALBOLD, FONT_MCOLOR_BLACK, FONT_MCOLOR_BLACK, FALSE, 0);
y += 22;
DisplayWrappedString(x, y, 140, 2, FONT10ARIAL, FONT_MCOLOR_BLACK, szRebelCommandAdminActionsText[newAction*2+1], FONT_MCOLOR_BLACK, FALSE, 0);
y += 81;
INT32 btnId = CreateTextButton(szRebelCommandText[RCT_CANCEL], FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x, y, 140, 18, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
{ {
ButtonHelper(btn, reason, [btn]() { PurchaseAdminAction(btn->UserData[0], btn->UserData[1]); }); ButtonHelper(btn, reason, [btn]() { adminActionChangeState = CAAS_INIT; });
}); });
adminActionChangeBtnIds.push_back(btnId);
Assert(ButtonList[btnId]); y += 18;
ButtonList[btnId]->UserData[0] = iCurrentRegionId; btnId = CreateTextButton(szRebelCommandText[RCT_PREV_ARROW], FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x, y, 35, 18, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
ButtonList[btnId]->UserData[1] = actionIndex; {
ButtonHelper(btn, reason, [btn]() { adminActionChangeIndex--; if (adminActionChangeIndex < 0) adminActionChangeIndex = adminActionChangeList.size() - 1; });
});
adminActionChangeBtnIds.push_back(btnId);
adminActionBtnIds.push_back(btnId); btnId = CreateTextButton(szRebelCommandText[RCT_NEXT_ARROW], FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x+35, y, 35, 18, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
{
ButtonHelper(btn, reason, [btn]() { adminActionChangeIndex++; if (adminActionChangeIndex >= adminActionChangeList.size()) adminActionChangeIndex = 0; });
});
adminActionChangeBtnIds.push_back(btnId);
btnId = CreateTextButton(szRebelCommandText[RCT_CONFIRM], FONT10ARIAL, FONT_MCOLOR_LTYELLOW, FONT_BLACK, BUTTON_USE_DEFAULT, x+70, y, 70, 18, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, [](GUI_BUTTON* btn, INT32 reason)
{
ButtonHelper(btn, reason, [btn]()
{
if (LaptopSaveInfo.iCurrentBalance < ADMIN_ACTION_CHANGE_COST)
{
DoLapTopMessageBox(MSG_BOX_LAPTOP_DEFAULT, szRebelCommandText[RCT_INSUFFICIENT_FUNDS], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return;
}
CHAR16 text[200];
swprintf(text, szRebelCommandText[RCT_CONFIRM_CHANGE_ADMIN_ACTION_PROMPT], ADMIN_ACTION_CHANGE_COST);
DoLapTopMessageBox(MSG_BOX_LAPTOP_DEFAULT, text, LAPTOP_SCREEN, MSG_BOX_FLAG_YESNO, [](UINT8 exitValue) {
if (exitValue == MSG_BOX_RETURN_YES)
{
rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[5] = 0;
rebelCommandSaveInfo.regions[iCurrentRegionId].actions[5] = static_cast<RebelCommandAdminActions>(adminActionChangeList[adminActionChangeIndex]);
UpdateAdminActionChangeList(iCurrentRegionId);
LaptopSaveInfo.iCurrentBalance -= ADMIN_ACTION_CHANGE_COST;
RenderWebsite();
}
});
});
});
adminActionChangeBtnIds.push_back(btnId);
} }
y += 22;
swprintf(text, szRebelCommandText[RCT_ADMIN_ACTION_TIER], rebelCommandSaveInfo.regions[iCurrentRegionId].actionLevels[actionIndex] );
DrawTextToScreen(text, x, y, 0, FONT10ARIAL, FONT_MCOLOR_BLACK, FONT_MCOLOR_BLACK, FALSE, 0);
y += 13;
DisplayWrappedString(x, y, 140, 2, FONT10ARIAL, FONT_MCOLOR_BLACK, szRebelCommandAdminActionsText[descriptionText], FONT_MCOLOR_BLACK, FALSE, 0);
} }
void SetDirectiveDescriptionHelpText(INT32 reason, MOUSE_REGION& region, RebelCommandDirectives text) void SetDirectiveDescriptionHelpText(INT32 reason, MOUSE_REGION& region, RebelCommandDirectives text)
@@ -575,8 +686,36 @@ void ToggleWebsiteView()
websiteState = RCS_REGIONAL_OVERVIEW; websiteState = RCS_REGIONAL_OVERVIEW;
} }
void UpdateAdminActionChangeList(INT16 regionId)
{
adminActionChangeIndex = 0;
adminActionChangeList.clear();
adminActionChangeState = CAAS_INIT;
for (int aa = RCAA_SUPPLY_LINE; aa < RCAA_NUM_ACTIONS; ++aa)
{
BOOLEAN found = FALSE;
for (int actionId = 0; actionId < REBEL_COMMAND_MAX_ACTIONS_PER_REGION; ++actionId)
{
if (rebelCommandSaveInfo.regions[regionId].actions[actionId] == aa)
{
found = TRUE;
break;
}
}
if (found == FALSE)
{
adminActionChangeList.push_back(static_cast<RebelCommandAdminActions>(aa));
}
}
}
BOOLEAN EnterWebsite() BOOLEAN EnterWebsite()
{ {
UpdateAdminActionChangeList(iCurrentRegionId);
// make sure we have a valid directive // make sure we have a valid directive
if (rebelCommandSaveInfo.iActiveDirective < RCD_GATHER_SUPPLIES || rebelCommandSaveInfo.iActiveDirective >= RCD_NUM_DIRECTIVES) if (rebelCommandSaveInfo.iActiveDirective < RCD_GATHER_SUPPLIES || rebelCommandSaveInfo.iActiveDirective >= RCD_NUM_DIRECTIVES)
{ {
@@ -612,10 +751,15 @@ BOOLEAN EnterWebsite()
directivesList.push_back(std::make_pair(RCD_SPOTTERS, szRebelCommandDirectivesText[RCDT_SPOTTERS])); directivesList.push_back(std::make_pair(RCD_SPOTTERS, szRebelCommandDirectivesText[RCDT_SPOTTERS]));
if (HighestPlayerProgressPercentage() >= gRebelCommandSettings.uRaidMinesProgressRequirement) if (HighestPlayerProgressPercentage() >= gRebelCommandSettings.uRaidMinesProgressRequirement)
directivesList.push_back(std::make_pair(RCD_RAID_MINES, szRebelCommandDirectivesText[RCDT_RAID_MINES])); directivesList.push_back(std::make_pair(RCD_RAID_MINES, szRebelCommandDirectivesText[RCDT_RAID_MINES]));
if (HighestPlayerProgressPercentage() >= gRebelCommandSettings.uCreateTurncoatsProgressRequirement)
directivesList.push_back(std::make_pair(RCD_CREATE_TURNCOATS, szRebelCommandDirectivesText[RCDT_CREATE_TURNCOATS]));
if (HighestPlayerProgressPercentage() >= gRebelCommandSettings.uDraftProgressRequirement)
directivesList.push_back(std::make_pair(RCD_DRAFT, szRebelCommandDirectivesText[RCDT_DRAFT]));
REBEL_COMMAND_DROPDOWN.SetEntries(directivesList); REBEL_COMMAND_DROPDOWN.SetEntries(directivesList);
REBEL_COMMAND_DROPDOWN.SetHelpText(szRebelCommandHelpText[RCHT_DIRECTIVES]); REBEL_COMMAND_DROPDOWN.SetHelpText(szRebelCommandHelpText[RCHT_DIRECTIVES]);
REBEL_COMMAND_DROPDOWN.SetSelectedEntryKey(rebelCommandSaveInfo.iSelectedDirective); REBEL_COMMAND_DROPDOWN.SetSelectedEntryKey(rebelCommandSaveInfo.iSelectedDirective);
REBEL_COMMAND_DROPDOWN.Create(WEBSITE_LEFT + 5, WEBSITE_TOP + 98);
RenderWebsite(); RenderWebsite();
@@ -643,19 +787,19 @@ void HandleWebsite()
case TAB: case TAB:
case SPACE: case SPACE:
ToggleWebsiteView(); ToggleWebsiteView();
redraw = TRUE; RenderWebsite();
break; break;
case 'a': case 'a':
case LEFTARROW: case LEFTARROW:
RegionNavPrev(); RegionNavPrev();
redraw = TRUE; RenderWebsite();
break; break;
case 'd': case 'd':
case RIGHTARROW: case RIGHTARROW:
RegionNavNext(); RegionNavNext();
redraw = TRUE; RenderWebsite();
break; break;
default: default:
@@ -666,9 +810,11 @@ void HandleWebsite()
} }
if (redraw) if (redraw)
{
RenderWebsite(); RenderWebsite();
REBEL_COMMAND_DROPDOWN.Display();
redraw = FALSE; redraw = FALSE;
}
} }
@@ -676,7 +822,6 @@ void RenderWebsite()
{ {
ClearAllButtons(); ClearAllButtons();
ClearAllHelpTextRegions(); ClearAllHelpTextRegions();
REBEL_COMMAND_DROPDOWN.Destroy();
// background // background
WebPageTileBackground(4, 4, 125, 100, guiInsuranceBackGround); WebPageTileBackground(4, 4, 125, 100, guiInsuranceBackGround);
@@ -1057,7 +1202,6 @@ void RenderNationalOverview()
} }
// dropdown - has to be last, or else things after this will be drawn twice // dropdown - has to be last, or else things after this will be drawn twice
REBEL_COMMAND_DROPDOWN.Create(dropdownX, dropdownY);
REBEL_COMMAND_DROPDOWN.Display(); REBEL_COMMAND_DROPDOWN.Display();
} }
@@ -1110,7 +1254,7 @@ void RenderRegionalOverview()
// line between region info and admin info // line between region info and admin info
usPosX = WEBSITE_LEFT - 1; usPosX = WEBSITE_LEFT - 1;
usPosY += 30; usPosY += 20;
DisplaySmallColouredLineWithShadow(usPosX, usPosY, usPosX + 500, usPosY, FROMRGB(240, 240, 240)); DisplaySmallColouredLineWithShadow(usPosX, usPosY, usPosX + 500, usPosY, FROMRGB(240, 240, 240));
// admin team // admin team
@@ -1553,6 +1697,102 @@ void GetBonusMilitia(INT16 sx, INT16 sy, UINT8& green, UINT8& regular, UINT8& el
createBonusMilitia(1); createBonusMilitia(1);
} }
INT16 GetFortificationsBonus(UINT8 sector)
{
if (!gGameExternalOptions.fRebelCommandEnabled)
return 0;
const UINT8 x = SECTORX(sector);
const UINT8 y = SECTORY(sector);
const UINT8 townId = GetTownIdForSector(x, y);
// not a town
if (townId < FIRST_TOWN || townId >= NUM_TOWNS)
return 0;
// no admin team
if (rebelCommandSaveInfo.regions[townId].adminStatus != RAS_ACTIVE)
return 0;
const INT16 index = GetAdminActionInRegion(townId, RCAA_FORTIFICATIONS);
// action doesn't exist in region
if (index == -1)
return 0;
// no levels in region
const UINT8 level = rebelCommandSaveInfo.regions[townId].actionLevels[index];
if (level == 0)
return 0;
return static_cast<INT16>(info.adminActions[RCAA_FORTIFICATIONS].fValue1 * level);
}
FLOAT GetHarriersSpeedPenalty(UINT8 sector)
{
if (!gGameExternalOptions.fRebelCommandEnabled)
return 0.f;
const UINT8 x = SECTORX(sector);
const UINT8 y = SECTORY(sector);
// get towns that have harriers
std::vector<std::tuple<INT16, INT16, INT16>> townSectors;
for (INT16 x = MINIMUM_VALID_X_COORDINATE; x <= MAXIMUM_VALID_X_COORDINATE; ++x)
{
for (INT16 y = MINIMUM_VALID_Y_COORDINATE; y < MAXIMUM_VALID_Y_COORDINATE; ++y)
{
const UINT8 townId = GetTownIdForSector(x, y);
// not a town
if (townId < FIRST_TOWN || townId >= NUM_TOWNS)
continue;
// no admin team
if (rebelCommandSaveInfo.regions[townId].adminStatus != RAS_ACTIVE)
continue;
const INT16 index = GetAdminActionInRegion(townId, RCAA_HARRIERS);
// action doesn't exist in region
if (index == -1)
continue;
// no levels in region
const UINT8 level = rebelCommandSaveInfo.regions[townId].actionLevels[index];
if (level == 0)
continue;
townSectors.push_back(std::tuple<INT16, INT16, INT16>(x, y, level));
}
}
// run through townSectors to find the biggest harriers penalty
BOOLEAN found = FALSE;
for (const auto trio : townSectors)
{
const INT16 sx = std::get<0>(trio);
const INT16 sy = std::get<1>(trio);
const INT16 range = std::get<2>(trio);
if (abs(sx - x) + abs(sy - y) <= range)
{
// level 2 penalty
if (range == 2)
return range * info.adminActions[RCAA_HARRIERS].fValue1;
// keep searching to see if we're in range of a better penalty
found = TRUE;
}
}
// level 1 penalty
if (found == TRUE)
return info.adminActions[RCAA_HARRIERS].fValue1;
// nothing found, no penalty
return 0.f;
}
FLOAT GetLoyaltyGainModifier() FLOAT GetLoyaltyGainModifier()
{ {
if (gGameExternalOptions.fRebelCommandEnabled) if (gGameExternalOptions.fRebelCommandEnabled)
@@ -1654,6 +1894,71 @@ void HandleScouting()
} }
} }
FLOAT GetPathfindersSpeedBonus(UINT8 sector)
{
if (!gGameExternalOptions.fRebelCommandEnabled)
return 0.f;
const UINT8 x = SECTORX(sector);
const UINT8 y = SECTORY(sector);
// get towns that have pathfinders
std::vector<std::tuple<INT16, INT16, INT16>> townSectors;
for (INT16 x = MINIMUM_VALID_X_COORDINATE; x <= MAXIMUM_VALID_X_COORDINATE; ++x)
{
for (INT16 y = MINIMUM_VALID_Y_COORDINATE; y < MAXIMUM_VALID_Y_COORDINATE; ++y)
{
const UINT8 townId = GetTownIdForSector(x, y);
// not a town
if (townId < FIRST_TOWN || townId >= NUM_TOWNS)
continue;
// no admin team
if (rebelCommandSaveInfo.regions[townId].adminStatus != RAS_ACTIVE)
continue;
const INT16 index = GetAdminActionInRegion(townId, RCAA_PATHFINDERS);
// action doesn't exist in region
if (index == -1)
continue;
// no levels in region
const UINT8 level = rebelCommandSaveInfo.regions[townId].actionLevels[index];
if (level == 0)
continue;
townSectors.push_back(std::tuple<INT16, INT16, INT16>(x, y, level));
}
}
// run through townSectors to find the biggest pathfinders bonus
BOOLEAN found = FALSE;
for (const auto trio : townSectors)
{
const INT16 sx = std::get<0>(trio);
const INT16 sy = std::get<1>(trio);
const INT16 range = std::get<2>(trio);
if (abs(sx - x) + abs(sy - y) <= range)
{
// level 2 bonus
if (range == 2)
return range * info.adminActions[RCAA_PATHFINDERS].fValue1;
// keep searching to see if we're in range of a better bonus
found = TRUE;
}
}
// level 1 bonus
if (found == TRUE)
return info.adminActions[RCAA_PATHFINDERS].fValue1;
// nothing found, no bonus
return 0.f;
}
BOOLEAN NeutraliseRole(const SOLDIERTYPE* pSoldier) BOOLEAN NeutraliseRole(const SOLDIERTYPE* pSoldier)
{ {
if (!gGameExternalOptions.fRebelCommandEnabled || !gGameExternalOptions.fEnemyRoles || !gGameExternalOptions.fAssignTraitsToEnemy) if (!gGameExternalOptions.fRebelCommandEnabled || !gGameExternalOptions.fEnemyRoles || !gGameExternalOptions.fAssignTraitsToEnemy)
@@ -1714,7 +2019,6 @@ void DailyUpdate()
{ {
if (!gGameExternalOptions.fRebelCommandEnabled) if (!gGameExternalOptions.fRebelCommandEnabled)
return; return;
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"DEBUG: ARC selected/active directive: %d/%d", rebelCommandSaveInfo.iSelectedDirective, rebelCommandSaveInfo.iActiveDirective );
// make sure we have a valid directive // make sure we have a valid directive
if (rebelCommandSaveInfo.iActiveDirective < RCD_GATHER_SUPPLIES || rebelCommandSaveInfo.iActiveDirective >= RCD_NUM_DIRECTIVES) if (rebelCommandSaveInfo.iActiveDirective < RCD_GATHER_SUPPLIES || rebelCommandSaveInfo.iActiveDirective >= RCD_NUM_DIRECTIVES)
@@ -1737,29 +2041,142 @@ void DailyUpdate()
break; break;
case RCD_ELITE_MILITIA: case RCD_ELITE_MILITIA:
const UINT8 elites = static_cast<UINT8>(rebelCommandSaveInfo.directives[RCD_ELITE_MILITIA].GetValue1());
// get the top-right most omerta tile
INT16 sx = 1, sy = 1;
for (sx = MAXIMUM_VALID_X_COORDINATE; sx >= MINIMUM_VALID_X_COORDINATE; --sx)
{ {
for (sy = MINIMUM_VALID_Y_COORDINATE; sy <= MAXIMUM_VALID_Y_COORDINATE; ++sy) const UINT8 elites = static_cast<UINT8>(rebelCommandSaveInfo.directives[RCD_ELITE_MILITIA].GetValue1());
// get the top-right most omerta tile
INT16 sx = 1, sy = 1;
for (sx = MAXIMUM_VALID_X_COORDINATE; sx >= MINIMUM_VALID_X_COORDINATE; --sx)
{ {
if (GetTownIdForSector(sx, sy) == OMERTA) for (sy = MINIMUM_VALID_Y_COORDINATE; sy <= MAXIMUM_VALID_Y_COORDINATE; ++sy)
{ {
goto foundOmerta; if (GetTownIdForSector(sx, sy) == OMERTA)
{
goto foundOmerta;
}
} }
} }
}
foundOmerta: foundOmerta:
StrategicAddMilitiaToSector(sx, sy, ELITE_MILITIA, elites); StrategicAddMilitiaToSector(sx, sy, ELITE_MILITIA, elites);
for (int i = 0 ; i < elites ; ++i) for (int i = 0 ; i < elites ; ++i)
{ {
CreateNewIndividualMilitia( ELITE_MILITIA, MO_ARULCO, SECTOR(sx, sy) ); CreateNewIndividualMilitia( ELITE_MILITIA, MO_ARULCO, SECTOR(sx, sy) );
}
} }
break; break;
case RCD_CREATE_TURNCOATS:
{
if (LaptopSaveInfo.dIntelPool >= gRebelCommandSettings.fCreateTurncoatsIntelCost)
{
UINT32 groupNum = 1;
GROUP* groupPtr = gpGroupList;
GROUP* selectedGroupPtr = nullptr;
// pick a random group
while (groupPtr != nullptr)
{
if (groupPtr->usGroupTeam != ENEMY_TEAM)
{
groupPtr = groupPtr->next;
continue;
}
if (Random(groupNum) == 0)
{
selectedGroupPtr = groupPtr;
}
groupNum++;
groupPtr = groupPtr->next;
}
if (selectedGroupPtr == nullptr)
break; // couldn't find a group...
// determine which enemies become turncoats
UINT8 turncoatsToCreate = static_cast<UINT8>(rebelCommandSaveInfo.directives[RCD_CREATE_TURNCOATS].GetValue1());
UINT8 netEnemyCount = selectedGroupPtr->pEnemyGroup->ubNumAdmins + selectedGroupPtr->pEnemyGroup->ubNumTroops + selectedGroupPtr->pEnemyGroup->ubNumElites;
netEnemyCount -= selectedGroupPtr->pEnemyGroup->ubNumAdmins_Turncoat - selectedGroupPtr->pEnemyGroup->ubNumTroops_Turncoat - selectedGroupPtr->pEnemyGroup->ubNumElites_Turncoat;
Assert(netEnemyCount >= 0);
turncoatsToCreate = min(turncoatsToCreate, netEnemyCount);
const UINT8 maxAdmins = selectedGroupPtr->pEnemyGroup->ubNumAdmins - selectedGroupPtr->pEnemyGroup->ubNumAdmins_Turncoat;
const UINT8 maxTroops = selectedGroupPtr->pEnemyGroup->ubNumTroops - selectedGroupPtr->pEnemyGroup->ubNumTroops_Turncoat;
const UINT8 maxElites = selectedGroupPtr->pEnemyGroup->ubNumElites - selectedGroupPtr->pEnemyGroup->ubNumElites_Turncoat;
UINT8 admins = 0;
UINT8 troops = 0;
UINT8 elites = 0;
while (turncoatsToCreate > 0)
{
std::vector<int> vec;
// weighted odds
if (admins < maxAdmins)
{
vec.push_back(0);
vec.push_back(0);
vec.push_back(0);
}
if (troops < maxTroops)
{
vec.push_back(1);
vec.push_back(1);
}
if (elites < maxElites)
{
vec.push_back(2);
}
Assert(vec.size() > 0);
const int choice = vec[Random(vec.size())];
switch (choice)
{
case 0:
admins++;
break;
case 1:
troops++;
break;
case 2:
elites++;
break;
}
turncoatsToCreate--;
}
// add the turncoats
selectedGroupPtr->pEnemyGroup->ubNumAdmins_Turncoat += admins;
selectedGroupPtr->pEnemyGroup->ubNumTroops_Turncoat += troops;
selectedGroupPtr->pEnemyGroup->ubNumElites_Turncoat += elites;
LaptopSaveInfo.dIntelPool -= gRebelCommandSettings.fCreateTurncoatsIntelCost;
}
else
{
ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szRebelCommandText[RCT_INSUFFICIENT_INTEL_TO_CREATE_TURNCOATS]);
}
}
break;
case RCD_DRAFT:
{
AddVolunteers(static_cast<FLOAT>(rebelCommandSaveInfo.directives[RCD_DRAFT].GetValue1() * CurrentPlayerProgressPercentage()));
for (int a = FIRST_TOWN; a < NUM_TOWNS; ++a)
{
DecrementTownLoyalty(a, static_cast<UINT32>(rebelCommandSaveInfo.directives[RCD_DRAFT].GetValue2()));
}
}
break;
} }
@@ -1808,6 +2225,14 @@ void DailyUpdate()
switch (static_cast<RebelCommandAdminActions>(rebelCommandSaveInfo.regions[a].actions[b])) switch (static_cast<RebelCommandAdminActions>(rebelCommandSaveInfo.regions[a].actions[b]))
{ {
case RCAA_SUPPLY_LINE: case RCAA_SUPPLY_LINE:
case RCAA_SAFEHOUSES:
case RCAA_SUPPLY_DISRUPTION:
case RCAA_SCOUTS:
case RCAA_MERC_SUPPORT:
case RCAA_MINING_POLICY:
case RCAA_PATHFINDERS:
case RCAA_HARRIERS:
case RCAA_FORTIFICATIONS:
// no daily bonuses // no daily bonuses
break; break;
@@ -1815,18 +2240,6 @@ void DailyUpdate()
IncrementTownLoyalty(a, static_cast<UINT32>(info.adminActions[RCAA_REBEL_RADIO].fValue1 * level)); IncrementTownLoyalty(a, static_cast<UINT32>(info.adminActions[RCAA_REBEL_RADIO].fValue1 * level));
break; break;
case RCAA_SAFEHOUSES:
// no daily bonuses
break;
case RCAA_SUPPLY_DISRUPTION:
// no daily bonuses
break;
case RCAA_SCOUTS:
// no daily bonuses
break;
case RCAA_DEAD_DROPS: case RCAA_DEAD_DROPS:
intelGain += (Random(static_cast<UINT32>(info.adminActions[RCAA_DEAD_DROPS].fValue1)) * level); intelGain += (Random(static_cast<UINT32>(info.adminActions[RCAA_DEAD_DROPS].fValue1)) * level);
break; break;
@@ -1851,13 +2264,6 @@ void DailyUpdate()
AddVolunteers(static_cast<FLOAT>(info.adminActions[RCAA_ASSIST_CIVILIANS].fValue1 * level * Random(100) / 100.f)); AddVolunteers(static_cast<FLOAT>(info.adminActions[RCAA_ASSIST_CIVILIANS].fValue1 * level * Random(100) / 100.f));
break; break;
case RCAA_MERC_SUPPORT:
// no daily bonuses
break;
case RCAA_MINING_POLICY:
// no daily bonuses
break;
default: default:
AssertMsg(false, "Unknown Admin Action"); AssertMsg(false, "Unknown Admin Action");
@@ -1951,6 +2357,9 @@ void Init()
if (gGameExternalOptions.fMilitiaVolunteerPool == TRUE) if (gGameExternalOptions.fMilitiaVolunteerPool == TRUE)
actions.push_back(RCAA_ASSIST_CIVILIANS); actions.push_back(RCAA_ASSIST_CIVILIANS);
// RCAA_MINING_POLICY is added below in the region init // RCAA_MINING_POLICY is added below in the region init
actions.push_back(RCAA_PATHFINDERS);
actions.push_back(RCAA_HARRIERS);
actions.push_back(RCAA_FORTIFICATIONS);
SetupInfo(); SetupInfo();
@@ -1972,13 +2381,12 @@ void Init()
} }
else else
{ {
// init admins
rebelCommandSaveInfo.regions[a].adminStatus = RAS_NONE;
rebelCommandSaveInfo.regions[a].ubMaxLoyalty = startingMaxLoyalty; rebelCommandSaveInfo.regions[a].ubMaxLoyalty = startingMaxLoyalty;
gTownLoyalty[a].ubRating = min(gTownLoyalty[a].ubRating, startingMaxLoyalty); gTownLoyalty[a].ubRating = min(gTownLoyalty[a].ubRating, startingMaxLoyalty);
} }
// init admins
rebelCommandSaveInfo.regions[a].adminStatus = RAS_NONE;
// init admin actions per region. each region has supply line + 5 random actions // init admin actions per region. each region has supply line + 5 random actions
std::vector<RebelCommandAdminActions> vec(actions); std::vector<RebelCommandAdminActions> vec(actions);
@@ -2089,6 +2497,16 @@ void SetupInfo()
d.fValue2.clear(); d.fValue2.clear();
info.directives.insert(info.directives.begin() + RCD_RAID_MINES, d); info.directives.insert(info.directives.begin() + RCD_RAID_MINES, d);
d.iCostToImprove = gRebelCommandSettings.iCreateTurncoatsCosts;
toFloatVec(gRebelCommandSettings.iCreateTurncoatsPerDay, d.fValue1);
d.fValue2.clear();
info.directives.insert(info.directives.begin() + RCD_CREATE_TURNCOATS, d);
d.iCostToImprove = gRebelCommandSettings.iDraftCosts;
toFloatVec(gRebelCommandSettings.iDraftPerDayModifier, d.fValue1);
toFloatVec(gRebelCommandSettings.iDraftLoyaltyLossPerDay, d.fValue2);
info.directives.insert(info.directives.begin() + RCD_DRAFT, d);
// init admin actions // init admin actions
AdminAction aa; AdminAction aa;
info.adminActions.clear(); info.adminActions.clear();
@@ -2152,6 +2570,22 @@ void SetupInfo()
aa.fValue2 = 0.f; aa.fValue2 = 0.f;
aa.fValue3 = 0.f; aa.fValue3 = 0.f;
info.adminActions.insert(info.adminActions.begin() + RCAA_MINING_POLICY, aa); info.adminActions.insert(info.adminActions.begin() + RCAA_MINING_POLICY, aa);
aa.fValue1 = static_cast<FLOAT>(gRebelCommandSettings.uPathfindersSpeedBonus);
aa.fValue2 = 0.f;
aa.fValue3 = 0.f;
info.adminActions.insert(info.adminActions.begin() + RCAA_PATHFINDERS, aa);
aa.fValue1 = static_cast<FLOAT>(gRebelCommandSettings.uHarriersSpeedPenalty);
aa.fValue2 = 0.f;
aa.fValue3 = 0.f;
info.adminActions.insert(info.adminActions.begin() + RCAA_HARRIERS, aa);
aa.fValue1 = static_cast<FLOAT>(gRebelCommandSettings.iFortificationsBonus);
aa.fValue2 = 0.f;
aa.fValue3 = 0.f;
info.adminActions.insert(info.adminActions.begin() + RCAA_FORTIFICATIONS, aa);
} }
void UpgradeMilitiaStats() void UpgradeMilitiaStats()
@@ -2171,6 +2605,8 @@ void UpgradeMilitiaStats()
const INT32 cost = gRebelCommandSettings.iMilitiaUpgradeCosts[rebelCommandSaveInfo.iMilitiaStatsLevel++]; const INT32 cost = gRebelCommandSettings.iMilitiaUpgradeCosts[rebelCommandSaveInfo.iMilitiaStatsLevel++];
LaptopSaveInfo.iCurrentBalance -= cost; LaptopSaveInfo.iCurrentBalance -= cost;
RenderWebsite();
} }
}); });
} }
@@ -2194,6 +2630,14 @@ void DEBUG_PRINT()
} }
template<> void DropDownTemplate<DROPDOWN_REBEL_COMMAND_DIRECTIVE>::SetRefresh() { RebelCommand::EvaluateDirectives(); RebelCommand::redraw = TRUE; } template<> void DropDownTemplate<DROPDOWN_REBEL_COMMAND_DIRECTIVE>::SetRefresh()
{
using namespace RebelCommand;
const INT16 newDirective = REBEL_COMMAND_DROPDOWN.GetSelectedEntryKey();
rebelCommandSaveInfo.iSelectedDirective = newDirective;
iIncomingSuppliesPerDay = CurrentPlayerProgressPercentage() * gRebelCommandSettings.fIncomeModifier + static_cast<INT32>((newDirective == RCD_GATHER_SUPPLIES ? rebelCommandSaveInfo.directives[RCD_GATHER_SUPPLIES].GetValue1() : 0));
redraw = TRUE;
}
+8
View File
@@ -21,6 +21,8 @@ enum RebelCommandDirectives
RCD_HVT_STRIKES, RCD_HVT_STRIKES,
RCD_SPOTTERS, RCD_SPOTTERS,
RCD_RAID_MINES, RCD_RAID_MINES,
RCD_CREATE_TURNCOATS,
RCD_DRAFT,
RCD_NUM_DIRECTIVES RCD_NUM_DIRECTIVES
}; };
@@ -40,6 +42,9 @@ enum RebelCommandAdminActions
RCAA_ASSIST_CIVILIANS, RCAA_ASSIST_CIVILIANS,
RCAA_MERC_SUPPORT, RCAA_MERC_SUPPORT,
RCAA_MINING_POLICY, RCAA_MINING_POLICY,
RCAA_PATHFINDERS,
RCAA_HARRIERS,
RCAA_FORTIFICATIONS,
RCAA_NUM_ACTIONS RCAA_NUM_ACTIONS
}; };
@@ -122,11 +127,14 @@ UINT8 GetApproximateEnemyLocationResolutionIndex();
FLOAT GetAssignmentBonus(INT16 x, INT16 y); FLOAT GetAssignmentBonus(INT16 x, INT16 y);
INT32 GetMiningPolicyBonus(INT16 townId); INT32 GetMiningPolicyBonus(INT16 townId);
void GetBonusMilitia(INT16 x, INT16 y, UINT8& green, UINT8& regular, UINT8& elite, BOOLEAN createGroup); void GetBonusMilitia(INT16 x, INT16 y, UINT8& green, UINT8& regular, UINT8& elite, BOOLEAN createGroup);
INT16 GetFortificationsBonus(UINT8 sector);
FLOAT GetHarriersSpeedPenalty(UINT8 sector);
FLOAT GetLoyaltyGainModifier(); FLOAT GetLoyaltyGainModifier();
UINT8 GetMaxTownLoyalty(INT8 townId); UINT8 GetMaxTownLoyalty(INT8 townId);
INT16 GetMilitiaTrainingSpeedBonus(); INT16 GetMilitiaTrainingSpeedBonus();
FLOAT GetMilitiaTrainingCostModifier(); FLOAT GetMilitiaTrainingCostModifier();
FLOAT GetMilitiaUpkeepCostModifier(); FLOAT GetMilitiaUpkeepCostModifier();
FLOAT GetPathfindersSpeedBonus(UINT8 sector);
BOOLEAN NeutraliseRole(const SOLDIERTYPE* pSoldier); BOOLEAN NeutraliseRole(const SOLDIERTYPE* pSoldier);
void RaidMines(INT32 &playerIncome, INT32 &enemyIncome); void RaidMines(INT32 &playerIncome, INT32 &enemyIncome);
BOOLEAN ShowApproximateEnemyLocations(); BOOLEAN ShowApproximateEnemyLocations();
+5
View File
@@ -52,6 +52,7 @@
#include "Militia Control.h" // added by Flugente for ResetMilitia() #include "Militia Control.h" // added by Flugente for ResetMilitia()
#include "Creature Spreading.h" // added by Flugente #include "Creature Spreading.h" // added by Flugente
#include "MilitiaIndividual.h" // added by Flugente #include "MilitiaIndividual.h" // added by Flugente
#include "Rebel Command.h"
#endif #endif
#include "MilitiaSquads.h" #include "MilitiaSquads.h"
@@ -3611,6 +3612,8 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (fSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot)) / 100) ); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (fSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot)) / 100) );
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - stravelbackground_foot) / 100)); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - stravelbackground_foot) / 100));
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - RebelCommand::GetPathfindersSpeedBonus(ubSector)) / 100));
} }
// all other types (except air) // all other types (except air)
else if ( fAir ) else if ( fAir )
@@ -3641,6 +3644,8 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
} }
iBestTraverseTime = dEnemyGeneralsSpeedupFactor * iBestTraverseTime; iBestTraverseTime = dEnemyGeneralsSpeedupFactor * iBestTraverseTime;
iBestTraverseTime = iBestTraverseTime * (100 + RebelCommand::GetHarriersSpeedPenalty(ubSector)) / 100;
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
+21
View File
@@ -11733,6 +11733,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11773,6 +11780,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11814,6 +11827,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
// WANNE: Some Chinese specific strings that needs to be in unicode! // WANNE: Some Chinese specific strings that needs to be in unicode!
+21
View File
@@ -11735,6 +11735,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11775,6 +11782,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11816,6 +11829,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //DUTCH #endif //DUTCH
+21
View File
@@ -11739,6 +11739,13 @@ STR16 szRebelCommandText[] =
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = STR16 szRebelCommandHelpText[] =
@@ -11779,6 +11786,12 @@ STR16 szRebelCommandAdminActionsText[] =
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11820,6 +11833,14 @@ STR16 szRebelCommandDirectivesText[] =
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //ENGLISH #endif //ENGLISH
+21
View File
@@ -11717,6 +11717,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11757,6 +11764,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11798,6 +11811,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //FRENCH #endif //FRENCH
+21
View File
@@ -11639,6 +11639,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11679,6 +11686,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11720,6 +11733,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //GERMAN #endif //GERMAN
+21
View File
@@ -11726,6 +11726,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11766,6 +11773,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11807,6 +11820,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //ITALIAN #endif //ITALIAN
+21
View File
@@ -11739,6 +11739,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11779,6 +11786,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11820,6 +11833,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //POLISH #endif //POLISH
+21
View File
@@ -11733,6 +11733,13 @@ STR16 szRebelCommandText[] = // TODO.Translate
L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.", L"[A.R.C. WEBSITE AVAILABLE] With the delivery of food and basic supplies to Omerta, you have convinced the rebels that you're here to make an impact. You have been granted access to the command system they've been working on, which is now available through your laptop.",
L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.", L"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
L"Mine raid successful. Stole $%d.", L"Mine raid successful. Stole $%d.",
L"Insufficient Intel to create turncoats!",
L"Change Admin Action",
L"Cancel",
L"Confirm",
L"<",
L">",
L"Changing this Admin Action will cost $%d and reset its tier. Confirm expenditure?",
}; };
STR16 szRebelCommandHelpText[] = // TODO.Translate STR16 szRebelCommandHelpText[] = // TODO.Translate
@@ -11773,6 +11780,12 @@ STR16 szRebelCommandAdminActionsText[] = // TODO.Translate
L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).", L"Set up facilities to directly support your mercs assigned in the town. Increases the effectiveness of merc assignments (doctoring, repairing, militia training, etc).",
L"Mining Policy", L"Mining Policy",
L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.", L"Import better equipment and work with the town's miners to create more balanced and efficient shift schedules. Increases the town's mine income.",
L"Pathfinders",
L"The locals guide your teams through shortcuts in the area. Reduces on-foot travel time in the region.",
L"Harriers",
L"The rebels harass nearby enemy groups, significantly increasing their travel time in the region.",
L"Fortifications",
L"Set up killzones and defensive positions. Friendly forces are more effective when fighting in this town. Autoresolve only.",
}; };
// follows a specific format: // follows a specific format:
@@ -11814,6 +11827,14 @@ STR16 szRebelCommandDirectivesText[] = // TODO.Translate
L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.", L"Steal some income from mines not under your control. This directive becomes less useful as you claim mines.",
L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.", L"Conduct smash-and-grab raids on hostile mines. While not always\nsuccessful, the raids that do succeed should provide a\nsmall income bump.",
L"Improving this directive will increase the maximum value of stolen income.", L"Improving this directive will increase the maximum value of stolen income.",
L"Create Turncoats",
L"Create %.0f turncoats in a random enemy group per day. Consumes %.1f Intel per day.",
L"Convince enemy soldiers to betray their army and work for you\nthrough a combination of bribery, threats, and blackmail.",
L"Improving this directive will increase the number of soldiers turned daily.",
L"Draft Civilians",
L"Gain %.0f volunteers each day. All towns lose some loyalty each day.",
L"Draft civilians as recruits for militia. The general population\nprobably won't be too happy about it, though. Effectiveness\nincreases as you capture more towns.",
L"Improving this directive will increase the number of volunteers gained per day.",
}; };
#endif //RUSSIAN #endif //RUSSIAN