mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
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:
@@ -3901,6 +3901,16 @@ void LoadRebelCommandSettings()
|
||||
FillArrayValues(iniReader, "Rebel Command Settings", "RAID_MINES_COSTS", gRebelCommandSettings.iRaidMinesCosts);
|
||||
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
|
||||
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.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()
|
||||
|
||||
@@ -1740,6 +1740,16 @@ typedef struct
|
||||
std::vector<INT32> iRaidMinesCosts;
|
||||
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
|
||||
INT32 iSupplyLineMaxLoyaltyIncrease;
|
||||
|
||||
@@ -1770,6 +1780,12 @@ typedef struct
|
||||
|
||||
INT32 iMiningPolicyBonus;
|
||||
|
||||
UINT8 uPathfindersSpeedBonus;
|
||||
|
||||
UINT8 uHarriersSpeedPenalty;
|
||||
|
||||
INT16 iFortificationsBonus;
|
||||
|
||||
} REBELCOMMAND_SETTINGS;
|
||||
|
||||
typedef struct
|
||||
|
||||
@@ -4472,6 +4472,16 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
||||
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
|
||||
usAttack = max(0, min(1000, usAttack ));
|
||||
usDefence = max(0, min(1000, usDefence ));
|
||||
|
||||
+519
-75
@@ -22,8 +22,10 @@ How to add a new directive:
|
||||
- add strings to text files (szRebelCommandDirectivesText)
|
||||
- add to GameSettings (gRebelCommandSettings) and RebelCommand_Settings.ini
|
||||
- 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 GetDirectiveEffect for website description
|
||||
- add directive-specific effect
|
||||
|
||||
How to add a new admin action:
|
||||
- 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 SetupInfo to read from game settings
|
||||
- add to Init to add to pool of valid actions on game start
|
||||
- add admin-action-specific effect
|
||||
|
||||
Points of interest:
|
||||
- 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 ADMIN_ACTION_CHANGE_COST 15000
|
||||
|
||||
#define REBEL_COMMAND_DROPDOWN DropDownTemplate<DROPDOWN_REBEL_COMMAND_DIRECTIVE>::getInstance()
|
||||
|
||||
#define WEBSITE_LEFT LAPTOP_SCREEN_UL_X
|
||||
@@ -92,6 +97,7 @@ Points of interest:
|
||||
extern UINT32 gCoolnessBySector[256];
|
||||
extern UINT32 guiInsuranceBackGround;
|
||||
extern BOOLEAN gfTownUsesLoyalty[MAX_TOWNS];
|
||||
extern GROUP *gpGroupList;
|
||||
|
||||
namespace RebelCommand
|
||||
{
|
||||
@@ -162,6 +168,13 @@ enum RebelCommandText // keep this synced with szRebelCommandText in the text fi
|
||||
RCT_WEBSITE_AVAILABLE,
|
||||
RCT_NOT_SAFE_TO_REACTIVATE_ADMIN_TEAM,
|
||||
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
|
||||
@@ -185,6 +198,14 @@ enum RebelCommandDirectivesText // keep this synced with szRebelCommandDirective
|
||||
DIRECTIVE_TEXT(HVT_STRIKES)
|
||||
DIRECTIVE_TEXT(SPOTTERS)
|
||||
DIRECTIVE_TEXT(RAID_MINES)
|
||||
DIRECTIVE_TEXT(CREATE_TURNCOATS)
|
||||
DIRECTIVE_TEXT(DRAFT)
|
||||
};
|
||||
|
||||
enum ChangeAdminActionState
|
||||
{
|
||||
CAAS_INIT,
|
||||
CAAS_CHANGING,
|
||||
};
|
||||
|
||||
// website functions
|
||||
@@ -206,8 +227,8 @@ void SetDirectiveDescriptionHelpText(INT32 reason, MOUSE_REGION& region, RebelCo
|
||||
void SetRegionHelpText(INT32 reason, MOUSE_REGION& helpTextRegion, RebelCommandHelpText text);
|
||||
void SetupAdminActionBox(const UINT8 actionIndex, const UINT16 descriptionText, const UINT16 buttonText);
|
||||
void ToggleWebsiteView();
|
||||
void UpdateAdminActionChangeList(INT16 regionId);
|
||||
|
||||
void EvaluateDirectives();
|
||||
INT32 GetAdminActionCostForRegion(INT16 regionId);
|
||||
INT16 GetAdminActionInRegion(INT16 regionId, RebelCommandAdminActions adminAction);
|
||||
void HandleScouting();
|
||||
@@ -218,12 +239,14 @@ void UpgradeMilitiaStats();
|
||||
INT32 dbgAdvanceDayBtnId = -1;
|
||||
INT32 dbgPrintBtnId = -1;
|
||||
std::vector<INT32> adminActionBtnIds;
|
||||
std::vector<INT32> adminActionChangeBtnIds;
|
||||
ChangeAdminActionState adminActionChangeState;
|
||||
INT32 adminTeamBtnId = -1;
|
||||
INT32 improveDirectiveBtnId = -1;
|
||||
INT32 regionNextBtnId = -1;
|
||||
INT32 regionPrevBtnId = -1;
|
||||
INT32 viewSwapBtnId = -1;
|
||||
INT32 upgradeMilitiaStatsBtnId = -1;
|
||||
INT32 viewSwapBtnId = -1;
|
||||
|
||||
// help text regions
|
||||
MOUSE_REGION adminTeamHelpTextRegion;
|
||||
@@ -233,6 +256,8 @@ MOUSE_REGION suppliesHelpTextRegion;
|
||||
MOUSE_REGION suppliesIncomeHelpTextRegion;
|
||||
|
||||
BOOLEAN redraw = FALSE;
|
||||
std::vector<RebelCommandAdminActions> adminActionChangeList;
|
||||
INT8 adminActionChangeIndex = 0;
|
||||
Info info;
|
||||
INT16 iCurrentRegionId = 1;
|
||||
INT32 iIncomingSuppliesPerDay = 0;
|
||||
@@ -265,6 +290,12 @@ void ClearAllButtons()
|
||||
}
|
||||
adminActionBtnIds.clear();
|
||||
|
||||
for (const auto btnId : adminActionChangeBtnIds)
|
||||
{
|
||||
RemoveButton(btnId);
|
||||
}
|
||||
adminActionChangeBtnIds.clear();
|
||||
|
||||
if (adminTeamBtnId != -1)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
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:
|
||||
swprintf(text, L"Unrecognised directive id: %d. Do you need to add it to GetDirectiveEffect?", directive);
|
||||
break;
|
||||
@@ -453,6 +485,8 @@ void ImproveDirective(const RebelCommandDirectives directive)
|
||||
rebelCommandSaveInfo.directives[directive].Improve();
|
||||
|
||||
LaptopSaveInfo.iCurrentBalance -= cost;
|
||||
|
||||
RenderWebsite();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -489,6 +523,8 @@ void RegionNavNext()
|
||||
if (iCurrentRegionId >= NUM_TOWNS)
|
||||
iCurrentRegionId = 1;
|
||||
} while (gfTownUsesLoyalty[iCurrentRegionId] == FALSE);
|
||||
|
||||
UpdateAdminActionChangeList(iCurrentRegionId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,6 +539,8 @@ void RegionNavPrev()
|
||||
if (iCurrentRegionId <= 0)
|
||||
iCurrentRegionId = NUM_TOWNS - 1;
|
||||
} 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;
|
||||
}
|
||||
|
||||
y = WEBSITE_TOP + 140 + 110 * (actionIndex / 3);
|
||||
y = WEBSITE_TOP + 125 + 110 * (actionIndex / 3);
|
||||
|
||||
// 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))
|
||||
if (actionIndex < 5 || adminActionChangeState == CAAS_INIT)
|
||||
{
|
||||
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];
|
||||
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)
|
||||
// let player change last action
|
||||
RebelCommandAdminActions newAction = adminActionChangeList[adminActionChangeIndex];
|
||||
|
||||
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]);
|
||||
ButtonList[btnId]->UserData[0] = iCurrentRegionId;
|
||||
ButtonList[btnId]->UserData[1] = actionIndex;
|
||||
y += 18;
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@@ -575,8 +686,36 @@ void ToggleWebsiteView()
|
||||
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()
|
||||
{
|
||||
UpdateAdminActionChangeList(iCurrentRegionId);
|
||||
|
||||
// make sure we have a valid directive
|
||||
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]));
|
||||
if (HighestPlayerProgressPercentage() >= gRebelCommandSettings.uRaidMinesProgressRequirement)
|
||||
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.SetHelpText(szRebelCommandHelpText[RCHT_DIRECTIVES]);
|
||||
REBEL_COMMAND_DROPDOWN.SetSelectedEntryKey(rebelCommandSaveInfo.iSelectedDirective);
|
||||
REBEL_COMMAND_DROPDOWN.Create(WEBSITE_LEFT + 5, WEBSITE_TOP + 98);
|
||||
|
||||
RenderWebsite();
|
||||
|
||||
@@ -643,19 +787,19 @@ void HandleWebsite()
|
||||
case TAB:
|
||||
case SPACE:
|
||||
ToggleWebsiteView();
|
||||
redraw = TRUE;
|
||||
RenderWebsite();
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
case LEFTARROW:
|
||||
RegionNavPrev();
|
||||
redraw = TRUE;
|
||||
RenderWebsite();
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
case RIGHTARROW:
|
||||
RegionNavNext();
|
||||
redraw = TRUE;
|
||||
RenderWebsite();
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -666,9 +810,11 @@ void HandleWebsite()
|
||||
}
|
||||
|
||||
if (redraw)
|
||||
{
|
||||
RenderWebsite();
|
||||
|
||||
redraw = FALSE;
|
||||
REBEL_COMMAND_DROPDOWN.Display();
|
||||
redraw = FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -676,7 +822,6 @@ void RenderWebsite()
|
||||
{
|
||||
ClearAllButtons();
|
||||
ClearAllHelpTextRegions();
|
||||
REBEL_COMMAND_DROPDOWN.Destroy();
|
||||
|
||||
// background
|
||||
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
|
||||
REBEL_COMMAND_DROPDOWN.Create(dropdownX, dropdownY);
|
||||
REBEL_COMMAND_DROPDOWN.Display();
|
||||
}
|
||||
|
||||
@@ -1110,7 +1254,7 @@ void RenderRegionalOverview()
|
||||
|
||||
// line between region info and admin info
|
||||
usPosX = WEBSITE_LEFT - 1;
|
||||
usPosY += 30;
|
||||
usPosY += 20;
|
||||
DisplaySmallColouredLineWithShadow(usPosX, usPosY, usPosX + 500, usPosY, FROMRGB(240, 240, 240));
|
||||
|
||||
// admin team
|
||||
@@ -1553,6 +1697,102 @@ void GetBonusMilitia(INT16 sx, INT16 sy, UINT8& green, UINT8& regular, UINT8& el
|
||||
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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (!gGameExternalOptions.fRebelCommandEnabled || !gGameExternalOptions.fEnemyRoles || !gGameExternalOptions.fAssignTraitsToEnemy)
|
||||
@@ -1714,7 +2019,6 @@ void DailyUpdate()
|
||||
{
|
||||
if (!gGameExternalOptions.fRebelCommandEnabled)
|
||||
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
|
||||
if (rebelCommandSaveInfo.iActiveDirective < RCD_GATHER_SUPPLIES || rebelCommandSaveInfo.iActiveDirective >= RCD_NUM_DIRECTIVES)
|
||||
@@ -1737,29 +2041,142 @@ void DailyUpdate()
|
||||
break;
|
||||
|
||||
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);
|
||||
for (int i = 0 ; i < elites ; ++i)
|
||||
{
|
||||
CreateNewIndividualMilitia( ELITE_MILITIA, MO_ARULCO, SECTOR(sx, sy) );
|
||||
StrategicAddMilitiaToSector(sx, sy, ELITE_MILITIA, elites);
|
||||
for (int i = 0 ; i < elites ; ++i)
|
||||
{
|
||||
CreateNewIndividualMilitia( ELITE_MILITIA, MO_ARULCO, SECTOR(sx, sy) );
|
||||
}
|
||||
}
|
||||
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]))
|
||||
{
|
||||
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
|
||||
break;
|
||||
|
||||
@@ -1815,18 +2240,6 @@ void DailyUpdate()
|
||||
IncrementTownLoyalty(a, static_cast<UINT32>(info.adminActions[RCAA_REBEL_RADIO].fValue1 * level));
|
||||
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:
|
||||
intelGain += (Random(static_cast<UINT32>(info.adminActions[RCAA_DEAD_DROPS].fValue1)) * level);
|
||||
break;
|
||||
@@ -1851,13 +2264,6 @@ void DailyUpdate()
|
||||
AddVolunteers(static_cast<FLOAT>(info.adminActions[RCAA_ASSIST_CIVILIANS].fValue1 * level * Random(100) / 100.f));
|
||||
break;
|
||||
|
||||
case RCAA_MERC_SUPPORT:
|
||||
// no daily bonuses
|
||||
break;
|
||||
|
||||
case RCAA_MINING_POLICY:
|
||||
// no daily bonuses
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertMsg(false, "Unknown Admin Action");
|
||||
@@ -1951,6 +2357,9 @@ void Init()
|
||||
if (gGameExternalOptions.fMilitiaVolunteerPool == TRUE)
|
||||
actions.push_back(RCAA_ASSIST_CIVILIANS);
|
||||
// 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();
|
||||
|
||||
@@ -1972,13 +2381,12 @@ void Init()
|
||||
}
|
||||
else
|
||||
{
|
||||
// init admins
|
||||
rebelCommandSaveInfo.regions[a].adminStatus = RAS_NONE;
|
||||
rebelCommandSaveInfo.regions[a].ubMaxLoyalty = 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
|
||||
std::vector<RebelCommandAdminActions> vec(actions);
|
||||
|
||||
@@ -2089,6 +2497,16 @@ void SetupInfo()
|
||||
d.fValue2.clear();
|
||||
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
|
||||
AdminAction aa;
|
||||
info.adminActions.clear();
|
||||
@@ -2152,6 +2570,22 @@ void SetupInfo()
|
||||
aa.fValue2 = 0.f;
|
||||
aa.fValue3 = 0.f;
|
||||
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()
|
||||
@@ -2171,6 +2605,8 @@ void UpgradeMilitiaStats()
|
||||
const INT32 cost = gRebelCommandSettings.iMilitiaUpgradeCosts[rebelCommandSaveInfo.iMilitiaStatsLevel++];
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ enum RebelCommandDirectives
|
||||
RCD_HVT_STRIKES,
|
||||
RCD_SPOTTERS,
|
||||
RCD_RAID_MINES,
|
||||
RCD_CREATE_TURNCOATS,
|
||||
RCD_DRAFT,
|
||||
|
||||
RCD_NUM_DIRECTIVES
|
||||
};
|
||||
@@ -40,6 +42,9 @@ enum RebelCommandAdminActions
|
||||
RCAA_ASSIST_CIVILIANS,
|
||||
RCAA_MERC_SUPPORT,
|
||||
RCAA_MINING_POLICY,
|
||||
RCAA_PATHFINDERS,
|
||||
RCAA_HARRIERS,
|
||||
RCAA_FORTIFICATIONS,
|
||||
|
||||
RCAA_NUM_ACTIONS
|
||||
};
|
||||
@@ -122,11 +127,14 @@ UINT8 GetApproximateEnemyLocationResolutionIndex();
|
||||
FLOAT GetAssignmentBonus(INT16 x, INT16 y);
|
||||
INT32 GetMiningPolicyBonus(INT16 townId);
|
||||
void GetBonusMilitia(INT16 x, INT16 y, UINT8& green, UINT8& regular, UINT8& elite, BOOLEAN createGroup);
|
||||
INT16 GetFortificationsBonus(UINT8 sector);
|
||||
FLOAT GetHarriersSpeedPenalty(UINT8 sector);
|
||||
FLOAT GetLoyaltyGainModifier();
|
||||
UINT8 GetMaxTownLoyalty(INT8 townId);
|
||||
INT16 GetMilitiaTrainingSpeedBonus();
|
||||
FLOAT GetMilitiaTrainingCostModifier();
|
||||
FLOAT GetMilitiaUpkeepCostModifier();
|
||||
FLOAT GetPathfindersSpeedBonus(UINT8 sector);
|
||||
BOOLEAN NeutraliseRole(const SOLDIERTYPE* pSoldier);
|
||||
void RaidMines(INT32 &playerIncome, INT32 &enemyIncome);
|
||||
BOOLEAN ShowApproximateEnemyLocations();
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "Militia Control.h" // added by Flugente for ResetMilitia()
|
||||
#include "Creature Spreading.h" // added by Flugente
|
||||
#include "MilitiaIndividual.h" // added by Flugente
|
||||
#include "Rebel Command.h"
|
||||
#endif
|
||||
|
||||
#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 - stravelbackground_foot) / 100));
|
||||
|
||||
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - RebelCommand::GetPathfindersSpeedBonus(ubSector)) / 100));
|
||||
}
|
||||
// all other types (except air)
|
||||
else if ( fAir )
|
||||
@@ -3641,6 +3644,8 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
|
||||
}
|
||||
|
||||
iBestTraverseTime = dEnemyGeneralsSpeedupFactor * iBestTraverseTime;
|
||||
|
||||
iBestTraverseTime = iBestTraverseTime * (100 + RebelCommand::GetHarriersSpeedPenalty(ubSector)) / 100;
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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!
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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[] =
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
@@ -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"It is currently not safe to reactivate the administration team here. Recapture a town sector first.",
|
||||
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
|
||||
@@ -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"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"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:
|
||||
@@ -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"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"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
|
||||
|
||||
Reference in New Issue
Block a user