mirror of
https://github.com/1dot13/source.git
synced 2026-09-02 14:36:06 +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_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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -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!
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user