mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New feature: transport groups (#172)
https://thepit.ja-galaxy-forum.com/index.php?t=msg&goto=365395
This commit is contained in:
@@ -248,6 +248,7 @@ void UpdateFeatureFlags()
|
|||||||
gGameExternalOptions.gfAllowSnow = gGameSettings.fFeatures[FF_ALLOW_SNOW];
|
gGameExternalOptions.gfAllowSnow = gGameSettings.fFeatures[FF_ALLOW_SNOW];
|
||||||
gGameExternalOptions.fMiniEventsEnabled = gGameSettings.fFeatures[FF_MINI_EVENTS];
|
gGameExternalOptions.fMiniEventsEnabled = gGameSettings.fFeatures[FF_MINI_EVENTS];
|
||||||
gGameExternalOptions.fRebelCommandEnabled = gGameSettings.fFeatures[FF_REBEL_COMMAND];
|
gGameExternalOptions.fRebelCommandEnabled = gGameSettings.fFeatures[FF_REBEL_COMMAND];
|
||||||
|
gGameExternalOptions.fStrategicTransportGroupsEnabled = gGameSettings.fFeatures[FF_STRATEGIC_TRANSPORT_GROUPS];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -497,6 +498,7 @@ BOOLEAN LoadFeatureFlags()
|
|||||||
gGameSettings.fFeatures[FF_ALLOW_SNOW] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_ALLOW_SNOW", TRUE, FALSE);
|
gGameSettings.fFeatures[FF_ALLOW_SNOW] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_ALLOW_SNOW", TRUE, FALSE);
|
||||||
gGameSettings.fFeatures[FF_MINI_EVENTS] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_MINI_EVENTS", FALSE, FALSE);
|
gGameSettings.fFeatures[FF_MINI_EVENTS] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_MINI_EVENTS", FALSE, FALSE);
|
||||||
gGameSettings.fFeatures[FF_REBEL_COMMAND] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_REBEL_COMMAND", FALSE, FALSE);
|
gGameSettings.fFeatures[FF_REBEL_COMMAND] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_REBEL_COMMAND", FALSE, FALSE);
|
||||||
|
gGameSettings.fFeatures[FF_STRATEGIC_TRANSPORT_GROUPS] = iniReader.ReadBoolean("JA2 Feature Flags", "FF_STRATEGIC_TRANSPORT_GROUPS", FALSE, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(vfs::Exception)
|
catch(vfs::Exception)
|
||||||
@@ -725,6 +727,7 @@ BOOLEAN SaveFeatureFlags()
|
|||||||
settings << "FF_ALLOW_SNOW = " << (gGameSettings.fFeatures[FF_ALLOW_SNOW] ? "TRUE" : "FALSE") << endl;
|
settings << "FF_ALLOW_SNOW = " << (gGameSettings.fFeatures[FF_ALLOW_SNOW] ? "TRUE" : "FALSE") << endl;
|
||||||
settings << "FF_MINI_EVENTS = " << (gGameSettings.fFeatures[FF_MINI_EVENTS] ? "TRUE" : "FALSE") << endl;
|
settings << "FF_MINI_EVENTS = " << (gGameSettings.fFeatures[FF_MINI_EVENTS] ? "TRUE" : "FALSE") << endl;
|
||||||
settings << "FF_REBEL_COMMAND = " << (gGameSettings.fFeatures[FF_REBEL_COMMAND] ? "TRUE" : "FALSE") << endl;
|
settings << "FF_REBEL_COMMAND = " << (gGameSettings.fFeatures[FF_REBEL_COMMAND] ? "TRUE" : "FALSE") << endl;
|
||||||
|
settings << "FF_STRATEGIC_TRANSPORT_GROUPS = " << (gGameSettings.fFeatures[FF_STRATEGIC_TRANSPORT_GROUPS] ? "TRUE" : "FALSE") << endl;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -2161,6 +2164,10 @@ void LoadGameExternalOptions()
|
|||||||
gGameExternalOptions.fAlternativeHelicopterFuelSystem = iniReader.ReadBoolean("Strategic Gameplay Settings","ALTERNATIVE_HELICOPTER_FUEL_SYSTEM", TRUE);
|
gGameExternalOptions.fAlternativeHelicopterFuelSystem = iniReader.ReadBoolean("Strategic Gameplay Settings","ALTERNATIVE_HELICOPTER_FUEL_SYSTEM", TRUE);
|
||||||
gGameExternalOptions.fHelicopterPassengersCanGetHit = iniReader.ReadBoolean("Strategic Gameplay Settings","HELICOPTER_PASSENGERS_CAN_GET_HIT", TRUE);
|
gGameExternalOptions.fHelicopterPassengersCanGetHit = iniReader.ReadBoolean("Strategic Gameplay Settings","HELICOPTER_PASSENGERS_CAN_GET_HIT", TRUE);
|
||||||
|
|
||||||
|
gGameExternalOptions.fStrategicTransportGroupsDebug = iniReader.ReadBoolean("Strategic Gameplay Settings", "STRATEGIC_TRANSPORT_GROUPS_DEBUG", FALSE, FALSE);
|
||||||
|
gGameExternalOptions.fStrategicTransportGroupsEnabled = iniReader.ReadBoolean("Strategic Gameplay Settings", "STRATEGIC_TRANSPORT_GROUPS_ENABLED", FALSE);
|
||||||
|
gGameExternalOptions.iMaxSimultaneousTransportGroups = iniReader.ReadInteger("Strategic Gameplay Settings", "MAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS", 5, 1, 10);
|
||||||
|
|
||||||
//################# Morale Settings ##################
|
//################# Morale Settings ##################
|
||||||
gGameExternalOptions.sMoraleModAppearance = iniReader.ReadInteger("Morale Settings","MORALE_MOD_APPEARANCE", 1, 0, 5);
|
gGameExternalOptions.sMoraleModAppearance = iniReader.ReadInteger("Morale Settings","MORALE_MOD_APPEARANCE", 1, 0, 5);
|
||||||
gGameExternalOptions.sMoraleModRefinement = iniReader.ReadInteger("Morale Settings","MORALE_MOD_REFINEMENT", 2, 0, 5);
|
gGameExternalOptions.sMoraleModRefinement = iniReader.ReadInteger("Morale Settings","MORALE_MOD_REFINEMENT", 2, 0, 5);
|
||||||
@@ -4187,6 +4194,8 @@ void LoadRebelCommandSettings()
|
|||||||
gRebelCommandSettings.iDisruptAsdDuration_Bonus_Nightops = iniReader.ReadInteger("Rebel Command Settings", "DISRUPT_ASD_DURATION_BONUS_NIGHTOPS", 48, 0, 255);
|
gRebelCommandSettings.iDisruptAsdDuration_Bonus_Nightops = iniReader.ReadInteger("Rebel Command Settings", "DISRUPT_ASD_DURATION_BONUS_NIGHTOPS", 48, 0, 255);
|
||||||
gRebelCommandSettings.iDisruptAsdDuration_Bonus_Technician = iniReader.ReadInteger("Rebel Command Settings", "DISRUPT_ASD_DURATION_BONUS_TECHNICIAN", 48, 0, 255);
|
gRebelCommandSettings.iDisruptAsdDuration_Bonus_Technician = iniReader.ReadInteger("Rebel Command Settings", "DISRUPT_ASD_DURATION_BONUS_TECHNICIAN", 48, 0, 255);
|
||||||
|
|
||||||
|
gRebelCommandSettings.iForgeTransportOrdersSuccessChance = iniReader.ReadInteger("Rebel Command Settings", "FORGE_TRANSPORT_ORDERS_SUCCESS_CHANCE", 50, 0, 100);
|
||||||
|
|
||||||
gRebelCommandSettings.iGetEnemyMovementTargetsSuccessChance = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_SUCCESS_CHANCE", 50, 0, 100);
|
gRebelCommandSettings.iGetEnemyMovementTargetsSuccessChance = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_SUCCESS_CHANCE", 50, 0, 100);
|
||||||
gRebelCommandSettings.iGetEnemyMovementTargetsDuration = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_DURATION", 72, 0, 255);
|
gRebelCommandSettings.iGetEnemyMovementTargetsDuration = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_DURATION", 72, 0, 255);
|
||||||
gRebelCommandSettings.iGetEnemyMovementTargetsDuration_Bonus_Covert = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_DURATION_BONUS_COVERT", 48, 0, 255);
|
gRebelCommandSettings.iGetEnemyMovementTargetsDuration_Bonus_Covert = iniReader.ReadInteger("Rebel Command Settings", "STRATEGIC_INTEL_DURATION_BONUS_COVERT", 48, 0, 255);
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ enum
|
|||||||
FF_ALLOW_SNOW,
|
FF_ALLOW_SNOW,
|
||||||
FF_MINI_EVENTS,
|
FF_MINI_EVENTS,
|
||||||
FF_REBEL_COMMAND,
|
FF_REBEL_COMMAND,
|
||||||
|
FF_STRATEGIC_TRANSPORT_GROUPS,
|
||||||
|
|
||||||
NUM_FEATURE_FLAGS,
|
NUM_FEATURE_FLAGS,
|
||||||
};
|
};
|
||||||
@@ -1602,6 +1603,10 @@ typedef struct
|
|||||||
BOOLEAN fAlternativeHelicopterFuelSystem;
|
BOOLEAN fAlternativeHelicopterFuelSystem;
|
||||||
BOOLEAN fHelicopterPassengersCanGetHit;
|
BOOLEAN fHelicopterPassengersCanGetHit;
|
||||||
|
|
||||||
|
BOOLEAN fStrategicTransportGroupsDebug;
|
||||||
|
BOOLEAN fStrategicTransportGroupsEnabled;
|
||||||
|
INT8 iMaxSimultaneousTransportGroups;
|
||||||
|
|
||||||
UINT16 usHelicopterHoverCostOnGreenTile;
|
UINT16 usHelicopterHoverCostOnGreenTile;
|
||||||
UINT16 usHelicopterHoverCostOnRedTile;
|
UINT16 usHelicopterHoverCostOnRedTile;
|
||||||
|
|
||||||
@@ -1878,6 +1883,8 @@ typedef struct
|
|||||||
UINT8 iDisruptAsdDuration_Bonus_Nightops;
|
UINT8 iDisruptAsdDuration_Bonus_Nightops;
|
||||||
UINT8 iDisruptAsdDuration_Bonus_Technician;
|
UINT8 iDisruptAsdDuration_Bonus_Technician;
|
||||||
|
|
||||||
|
INT8 iForgeTransportOrdersSuccessChance;
|
||||||
|
|
||||||
INT8 iGetEnemyMovementTargetsSuccessChance;
|
INT8 iGetEnemyMovementTargetsSuccessChance;
|
||||||
UINT8 iGetEnemyMovementTargetsDuration;
|
UINT8 iGetEnemyMovementTargetsDuration;
|
||||||
UINT8 iGetEnemyMovementTargetsDuration_Bonus_Covert;
|
UINT8 iGetEnemyMovementTargetsDuration_Bonus_Covert;
|
||||||
|
|||||||
@@ -1259,6 +1259,7 @@ void ProcessHistoryTransactionString(STR16 pString, HistoryUnitPtr pHistory)
|
|||||||
case HISTORY_SLAY_MYSTERIOUSLY_LEFT:
|
case HISTORY_SLAY_MYSTERIOUSLY_LEFT:
|
||||||
case HISTORY_WALDO:
|
case HISTORY_WALDO:
|
||||||
case HISTORY_HELICOPTER_REPAIR_STARTED:
|
case HISTORY_HELICOPTER_REPAIR_STARTED:
|
||||||
|
case HISTORY_INTERCEPTED_TRANSPORT_GROUP:
|
||||||
//swprintf( pString, pHistoryStrings[ pHistory->ubCode ], pHistory->ubSecondCode );
|
//swprintf( pString, pHistoryStrings[ pHistory->ubCode ], pHistory->ubSecondCode );
|
||||||
swprintf( pString, HistoryName[ pHistory->ubCode ].sHistory, pHistory->ubSecondCode );
|
swprintf( pString, HistoryName[ pHistory->ubCode ].sHistory, pHistory->ubSecondCode );
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ enum{
|
|||||||
HISTORY_MERC_KILLED_CHARACTER,
|
HISTORY_MERC_KILLED_CHARACTER,
|
||||||
HISTORY_WALDO,
|
HISTORY_WALDO,
|
||||||
HISTORY_HELICOPTER_REPAIR_STARTED,
|
HISTORY_HELICOPTER_REPAIR_STARTED,
|
||||||
|
HISTORY_INTERCEPTED_TRANSPORT_GROUP,
|
||||||
TEXT_NUM_HISTORY
|
TEXT_NUM_HISTORY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -633,6 +633,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve1");
|
|||||||
switch( GetEnemyEncounterCode() )
|
switch( GetEnemyEncounterCode() )
|
||||||
{
|
{
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
gpAR->ubPlayerDefenceAdvantage = 21; //Skewed to the player's advantage for convenience purposes.
|
gpAR->ubPlayerDefenceAdvantage = 21; //Skewed to the player's advantage for convenience purposes.
|
||||||
break;
|
break;
|
||||||
case ENEMY_INVASION_CODE:
|
case ENEMY_INVASION_CODE:
|
||||||
@@ -1745,6 +1746,7 @@ void RenderAutoResolve()
|
|||||||
swprintf( str, gpStrategicString[STR_AR_ATTACK_HEADER] );
|
swprintf( str, gpStrategicString[STR_AR_ATTACK_HEADER] );
|
||||||
break;
|
break;
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
swprintf( str, gpStrategicString[STR_AR_ENCOUNTER_HEADER] );
|
swprintf( str, gpStrategicString[STR_AR_ENCOUNTER_HEADER] );
|
||||||
break;
|
break;
|
||||||
case ENEMY_INVASION_CODE:
|
case ENEMY_INVASION_CODE:
|
||||||
@@ -6058,6 +6060,5 @@ BOOLEAN IndividualMilitiaInUse_AutoResolve( UINT32 aMilitiaId )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ set(StrategicSrc
|
|||||||
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Status.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Status.cpp"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Town Loyalty.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Town Loyalty.cpp"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/strategic town reputation.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/strategic town reputation.cpp"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Transport Groups.cpp"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Turns.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/Strategic Turns.cpp"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/strategic.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/strategic.cpp"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/strategicmap.cpp"
|
"${CMAKE_CURRENT_SOURCE_DIR}/strategicmap.cpp"
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
#include "LuaInitNPCs.h" // added by Flugente
|
#include "LuaInitNPCs.h" // added by Flugente
|
||||||
#include "MiniEvents.h"
|
#include "MiniEvents.h"
|
||||||
#include "Rebel Command.h"
|
#include "Rebel Command.h"
|
||||||
|
#include "interface Dialogue.h"
|
||||||
|
|
||||||
#include "connect.h"
|
#include "connect.h"
|
||||||
|
|
||||||
@@ -668,6 +669,11 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
|||||||
case EVENT_REBELCOMMAND:
|
case EVENT_REBELCOMMAND:
|
||||||
RebelCommand::HandleStrategicEvent(pEvent->uiParam);
|
RebelCommand::HandleStrategicEvent(pEvent->uiParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_RETURN_TRANSPORT_GROUP:
|
||||||
|
// for this action, we only care about the groupid, which is in the event param
|
||||||
|
ExecuteStrategicAIAction(NPC_ACTION_RETURN_TRANSPORT_GROUP, 0, 0, pEvent->uiParam);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
gfPreventDeletionOfAnyEvent = fOrigPreventFlag;
|
gfPreventDeletionOfAnyEvent = fOrigPreventFlag;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
@@ -154,6 +154,9 @@ enum
|
|||||||
|
|
||||||
EVENT_REBELCOMMAND,
|
EVENT_REBELCOMMAND,
|
||||||
|
|
||||||
|
EVENT_RETURN_TRANSPORT_GROUP,
|
||||||
|
EVENT_TRANSPORT_GROUP_DEFEATED,
|
||||||
|
|
||||||
NUMBER_OF_EVENT_TYPES_PLUS_ONE,
|
NUMBER_OF_EVENT_TYPES_PLUS_ONE,
|
||||||
NUMBER_OF_EVENT_TYPES = NUMBER_OF_EVENT_TYPES_PLUS_ONE - 1
|
NUMBER_OF_EVENT_TYPES = NUMBER_OF_EVENT_TYPES_PLUS_ONE - 1
|
||||||
};
|
};
|
||||||
@@ -217,4 +220,4 @@ void DeleteAllStrategicEvents();
|
|||||||
// Flugente: return vector of all events of type ubCallbackID with time and param
|
// Flugente: return vector of all events of type ubCallbackID with time and param
|
||||||
std::vector< std::pair<UINT32, UINT32> > GetAllStrategicEventsOfType( UINT8 ubCallbackID );
|
std::vector< std::pair<UINT32, UINT32> > GetAllStrategicEventsOfType( UINT8 ubCallbackID );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ CHAR16 gEventName[NUMBER_OF_EVENT_TYPES_PLUS_ONE][40]={
|
|||||||
L"ArmyFinishTraining",
|
L"ArmyFinishTraining",
|
||||||
L"MiniEvent",
|
L"MiniEvent",
|
||||||
L"ARC_Event",
|
L"ARC_Event",
|
||||||
|
L"ReturnTransportGroup",
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#include "LuaInitNPCs.h" // added by Flugente
|
#include "LuaInitNPCs.h" // added by Flugente
|
||||||
#include "Game Event Hook.h" // added by Flugente
|
#include "Game Event Hook.h" // added by Flugente
|
||||||
#include "Rebel Command.h"
|
#include "Rebel Command.h"
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
|
|
||||||
#include "Quests.h"
|
#include "Quests.h"
|
||||||
#include "connect.h"
|
#include "connect.h"
|
||||||
@@ -841,6 +842,8 @@ void fillMapColoursForVisitedSectors(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINAT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FillMapColoursForTransportGroups(colorMap);
|
||||||
|
|
||||||
if (RebelCommand::ShowEnemyMovementTargets())
|
if (RebelCommand::ShowEnemyMovementTargets())
|
||||||
{
|
{
|
||||||
const auto targetColor = MAP_SHADE_LT_RED;
|
const auto targetColor = MAP_SHADE_LT_RED;
|
||||||
@@ -8584,6 +8587,25 @@ void DetermineMapIntelData( INT32 asSectorZ )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// transport groups
|
||||||
|
std::map<UINT8, TransportGroupSectorInfo> map = GetTransportGroupSectorInfo();
|
||||||
|
for (const auto iter : map)
|
||||||
|
{
|
||||||
|
CHAR16 str[128];
|
||||||
|
|
||||||
|
switch (iter.second)
|
||||||
|
{
|
||||||
|
case TransportGroupSectorInfo::TransportGroupSectorInfo_LocatedGroup:
|
||||||
|
swprintf( str, gpStrategicString[STR_PB_TRANSPORT_GROUP]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TransportGroupSectorInfo::TransportGroupSectorInfo_LocatedDestination:
|
||||||
|
swprintf( str, gpStrategicString[STR_PB_TRANSPORT_GROUP_EN_ROUTE]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
AddIntelAndQuestMapDataForSector( SECTORX(iter.first), SECTORY(iter.first), MAP_SHADE_LT_YELLOW, -1, str, L"" );
|
||||||
|
}
|
||||||
|
|
||||||
// uncovered terrorists we know of
|
// uncovered terrorists we know of
|
||||||
for ( int cnt = 0; cnt < 6; ++cnt )
|
for ( int cnt = 0; cnt < 6; ++cnt )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include "CampaignStats.h" // added by Flugente
|
#include "CampaignStats.h" // added by Flugente
|
||||||
#include "militiasquads.h" // added by Flugente
|
#include "militiasquads.h" // added by Flugente
|
||||||
#include "SkillCheck.h" // added by Flugente
|
#include "SkillCheck.h" // added by Flugente
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
|
|
||||||
#ifdef JA2UB
|
#ifdef JA2UB
|
||||||
#include "ub_config.h"
|
#include "ub_config.h"
|
||||||
@@ -438,7 +439,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
}
|
}
|
||||||
else if ( pBattleGroup && pBattleGroup->usGroupTeam != OUR_TEAM && NumNonPlayerTeamMembersInSector( pBattleGroup->ubSectorX, pBattleGroup->ubSectorY, MILITIA_TEAM ) > 0 )
|
else if ( pBattleGroup && pBattleGroup->usGroupTeam != OUR_TEAM && NumNonPlayerTeamMembersInSector( pBattleGroup->ubSectorX, pBattleGroup->ubSectorY, MILITIA_TEAM ) > 0 )
|
||||||
{
|
{
|
||||||
SetEnemyEncounterCode( ENEMY_ENCOUNTER_CODE );
|
SetEnemyEncounterCode( pBattleGroup->usGroupTeam == ENEMY_TEAM && pBattleGroup->pEnemyGroup->ubIntention == TRANSPORT ? TRANSPORT_INTERCEPT_CODE : ENEMY_ENCOUNTER_CODE );
|
||||||
}
|
}
|
||||||
else if( GetEnemyEncounterCode() == ENTERING_ENEMY_SECTOR_CODE ||
|
else if( GetEnemyEncounterCode() == ENTERING_ENEMY_SECTOR_CODE ||
|
||||||
GetEnemyEncounterCode() == ENEMY_ENCOUNTER_CODE ||
|
GetEnemyEncounterCode() == ENEMY_ENCOUNTER_CODE ||
|
||||||
@@ -452,7 +453,8 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
GetEnemyEncounterCode() == CONCEALINSERTION_CODE ||
|
GetEnemyEncounterCode() == CONCEALINSERTION_CODE ||
|
||||||
GetEnemyEncounterCode() == BLOODCAT_ATTACK_CODE ||
|
GetEnemyEncounterCode() == BLOODCAT_ATTACK_CODE ||
|
||||||
GetEnemyEncounterCode() == ZOMBIE_ATTACK_CODE ||
|
GetEnemyEncounterCode() == ZOMBIE_ATTACK_CODE ||
|
||||||
GetEnemyEncounterCode() == BANDIT_ATTACK_CODE )
|
GetEnemyEncounterCode() == BANDIT_ATTACK_CODE ||
|
||||||
|
GetEnemyEncounterCode() == TRANSPORT_INTERCEPT_CODE )
|
||||||
{
|
{
|
||||||
//use same code
|
//use same code
|
||||||
SetExplicitEnemyEncounterCode( GetEnemyEncounterCode() );
|
SetExplicitEnemyEncounterCode( GetEnemyEncounterCode() );
|
||||||
@@ -679,8 +681,24 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
{
|
{
|
||||||
SetEnemyEncounterCode( ENEMY_ENCOUNTER_CODE );
|
SetEnemyEncounterCode( ENEMY_ENCOUNTER_CODE );
|
||||||
|
|
||||||
|
GROUP* pGroup = gpGroupList;
|
||||||
|
BOOLEAN encounteredTransportGroup = FALSE;
|
||||||
|
while (pGroup)
|
||||||
|
{
|
||||||
|
if (pGroup->usGroupTeam == ENEMY_TEAM && pGroup->pEnemyGroup->ubIntention == TRANSPORT && pGroup->ubSectorX == gpBattleGroup->ubSectorX && pGroup->ubSectorY == gpBattleGroup->ubSectorY && pGroup->ubSectorZ == gpBattleGroup->ubSectorZ)
|
||||||
|
{
|
||||||
|
encounteredTransportGroup = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pGroup = pGroup->next;
|
||||||
|
}
|
||||||
|
if (encounteredTransportGroup)
|
||||||
|
{
|
||||||
|
SetEnemyEncounterCode( TRANSPORT_INTERCEPT_CODE );
|
||||||
|
}
|
||||||
// Flugente: no ambushes on an airdrop
|
// Flugente: no ambushes on an airdrop
|
||||||
if ( !fAirDrop )
|
else if ( !fAirDrop )
|
||||||
{
|
{
|
||||||
//Don't consider ambushes until the player has reached 25% (normal) progress
|
//Don't consider ambushes until the player has reached 25% (normal) progress
|
||||||
if( gfHighPotentialForAmbush )
|
if( gfHighPotentialForAmbush )
|
||||||
@@ -798,7 +816,9 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //Are enemies invading a town, or just encountered the player.
|
{ //Are enemies invading a town, or just encountered the player.
|
||||||
if( GetTownIdForSector( gubPBSectorX, gubPBSectorY ) )
|
if (pBattleGroup && pBattleGroup->usGroupTeam == ENEMY_TEAM && pBattleGroup->pEnemyGroup->ubIntention == TRANSPORT)
|
||||||
|
SetEnemyEncounterCode( TRANSPORT_INTERCEPT_CODE );
|
||||||
|
else if( GetTownIdForSector( gubPBSectorX, gubPBSectorY ) )
|
||||||
SetEnemyEncounterCode( ENEMY_INVASION_CODE );
|
SetEnemyEncounterCode( ENEMY_INVASION_CODE );
|
||||||
//SAM sites not in towns will also be considered to be important
|
//SAM sites not in towns will also be considered to be important
|
||||||
else if( pSector->uiFlags & SF_SAM_SITE )
|
else if( pSector->uiFlags & SF_SAM_SITE )
|
||||||
@@ -866,7 +886,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
}
|
}
|
||||||
HideButton( giMapContractButton );
|
HideButton( giMapContractButton );
|
||||||
|
|
||||||
if( GetEnemyEncounterCode() == ENEMY_ENCOUNTER_CODE )
|
if( GetEnemyEncounterCode() == ENEMY_ENCOUNTER_CODE || GetEnemyEncounterCode() == TRANSPORT_INTERCEPT_CODE )
|
||||||
{ //we know how many enemies are here, so until we leave the sector, we will continue to display the value.
|
{ //we know how many enemies are here, so until we leave the sector, we will continue to display the value.
|
||||||
//the flag will get cleared when time advances after the fEnemyInSector flag is clear.
|
//the flag will get cleared when time advances after the fEnemyInSector flag is clear.
|
||||||
|
|
||||||
@@ -955,6 +975,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
|||||||
{
|
{
|
||||||
case CREATURE_ATTACK_CODE:
|
case CREATURE_ATTACK_CODE:
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
case ENEMY_INVASION_CODE:
|
case ENEMY_INVASION_CODE:
|
||||||
case ENEMY_INVASION_AIRDROP_CODE:
|
case ENEMY_INVASION_AIRDROP_CODE:
|
||||||
case BLOODCAT_ATTACK_CODE:
|
case BLOODCAT_ATTACK_CODE:
|
||||||
@@ -1213,6 +1234,7 @@ void RenderPBHeader( INT32 *piX, INT32 *piWidth)
|
|||||||
swprintf( str, gpStrategicString[ STR_PB_ENEMYINVASION_HEADER ] );
|
swprintf( str, gpStrategicString[ STR_PB_ENEMYINVASION_HEADER ] );
|
||||||
break;
|
break;
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
swprintf( str, gpStrategicString[ STR_PB_ENEMYENCOUNTER_HEADER ] );
|
swprintf( str, gpStrategicString[ STR_PB_ENEMYENCOUNTER_HEADER ] );
|
||||||
break;
|
break;
|
||||||
case ENEMY_AMBUSH_CODE:
|
case ENEMY_AMBUSH_CODE:
|
||||||
@@ -2520,6 +2542,10 @@ void LogBattleResults( UINT8 ubVictoryCode)
|
|||||||
break;
|
break;
|
||||||
case CONCEALINSERTION_CODE:
|
case CONCEALINSERTION_CODE:
|
||||||
break;
|
break;
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
|
AddHistoryToPlayersLog( HISTORY_INTERCEPTED_TRANSPORT_GROUP, 0, GetWorldTotalMin(), sSectorX, sSectorY );
|
||||||
|
NotifyTransportGroupDefeated();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: campaign stats
|
// Flugente: campaign stats
|
||||||
@@ -2534,6 +2560,7 @@ void LogBattleResults( UINT8 ubVictoryCode)
|
|||||||
AddHistoryToPlayersLog( HISTORY_LOSTTOWNSECTOR, 0, GetWorldTotalMin(), sSectorX, sSectorY );
|
AddHistoryToPlayersLog( HISTORY_LOSTTOWNSECTOR, 0, GetWorldTotalMin(), sSectorX, sSectorY );
|
||||||
break;
|
break;
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
AddHistoryToPlayersLog( HISTORY_LOSTBATTLE, 0, GetWorldTotalMin(), sSectorX, sSectorY );
|
AddHistoryToPlayersLog( HISTORY_LOSTBATTLE, 0, GetWorldTotalMin(), sSectorX, sSectorY );
|
||||||
break;
|
break;
|
||||||
case ENEMY_AMBUSH_CODE:
|
case ENEMY_AMBUSH_CODE:
|
||||||
@@ -2567,6 +2594,7 @@ void LogBattleResults( UINT8 ubVictoryCode)
|
|||||||
gCurrentIncident.usIncidentFlags |= INCIDENT_ATTACK_ENEMY;
|
gCurrentIncident.usIncidentFlags |= INCIDENT_ATTACK_ENEMY;
|
||||||
break;
|
break;
|
||||||
case ENEMY_ENCOUNTER_CODE:
|
case ENEMY_ENCOUNTER_CODE:
|
||||||
|
case TRANSPORT_INTERCEPT_CODE:
|
||||||
case ENTERING_ENEMY_SECTOR_CODE:
|
case ENTERING_ENEMY_SECTOR_CODE:
|
||||||
case CREATURE_ATTACK_CODE:
|
case CREATURE_ATTACK_CODE:
|
||||||
case ENTERING_BLOODCAT_LAIR_CODE:
|
case ENTERING_BLOODCAT_LAIR_CODE:
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ enum
|
|||||||
BLOODCAT_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with cats
|
BLOODCAT_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with cats
|
||||||
ZOMBIE_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with zombies
|
ZOMBIE_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with zombies
|
||||||
BANDIT_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with bandits
|
BANDIT_ATTACK_CODE, // Flugente: like CREATURE_ATTACK_CODE, but with bandits
|
||||||
|
|
||||||
|
TRANSPORT_INTERCEPT_CODE, // rftr: like ENEMY_ENCOUNTER_CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
extern BOOLEAN gfAutoAmbush;
|
extern BOOLEAN gfAutoAmbush;
|
||||||
@@ -112,4 +114,4 @@ enum
|
|||||||
};
|
};
|
||||||
void LogBattleResults( UINT8 ubVictoryCode);
|
void LogBattleResults( UINT8 ubVictoryCode);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
#include "CampaignStats.h" // added by Flugente
|
#include "CampaignStats.h" // added by Flugente
|
||||||
#include "ASD.h" // added by Flugente
|
#include "ASD.h" // added by Flugente
|
||||||
#include "Interface Panels.h"
|
#include "Interface Panels.h"
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
|
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
extern BOOLEAN gfClearCreatureQuest;
|
extern BOOLEAN gfClearCreatureQuest;
|
||||||
@@ -98,7 +99,6 @@ void HandleBloodCatDeaths( SECTORINFO *pSector );
|
|||||||
|
|
||||||
extern void Ensure_RepairedGarrisonGroup( GARRISON_GROUP **ppGarrison, INT32 *pGarraySize );
|
extern void Ensure_RepairedGarrisonGroup( GARRISON_GROUP **ppGarrison, INT32 *pGarraySize );
|
||||||
|
|
||||||
|
|
||||||
void ValidateEnemiesHaveWeapons()
|
void ValidateEnemiesHaveWeapons()
|
||||||
{
|
{
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
@@ -613,6 +613,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
|
|
||||||
gfPendingNonPlayerTeam[ENEMY_TEAM] = FALSE;
|
gfPendingNonPlayerTeam[ENEMY_TEAM] = FALSE;
|
||||||
|
|
||||||
|
// rftr: clear cached transport groups
|
||||||
|
ClearTransportGroupMap();
|
||||||
|
|
||||||
if( gbWorldSectorZ > 0 )
|
if( gbWorldSectorZ > 0 )
|
||||||
return PrepareEnemyForUndergroundBattle();
|
return PrepareEnemyForUndergroundBattle();
|
||||||
|
|
||||||
@@ -640,9 +643,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
|
|
||||||
for( unsigned ubIndex = 0; ubIndex < ubDirNumber; ++ubIndex )
|
for( unsigned ubIndex = 0; ubIndex < ubDirNumber; ++ubIndex )
|
||||||
{
|
{
|
||||||
while ( NumMobileEnemiesInSector( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ) ) && GetNonPlayerGroupInSector( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), ENEMY_TEAM ) )
|
while ( NumMobileEnemiesInSector( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ) ) && GetNonPlayerGroupInSectorForReinforcement( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), ENEMY_TEAM ) )
|
||||||
{
|
{
|
||||||
pGroup = GetNonPlayerGroupInSector( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), ENEMY_TEAM );
|
pGroup = GetNonPlayerGroupInSectorForReinforcement( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), ENEMY_TEAM );
|
||||||
|
|
||||||
pGroup->ubPrevX = pGroup->ubSectorX;
|
pGroup->ubPrevX = pGroup->ubSectorX;
|
||||||
pGroup->ubPrevY = pGroup->ubSectorY;
|
pGroup->ubPrevY = pGroup->ubSectorY;
|
||||||
@@ -669,10 +672,23 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
HandleArrivalOfReinforcements( pGroup );
|
HandleArrivalOfReinforcements( pGroup );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for transport groups, track how many enemies of each type we're adding so we can update drops for them
|
||||||
|
if (pGroup->usGroupTeam == ENEMY_TEAM && pGroup->pEnemyGroup->ubIntention == TRANSPORT && pGroup->ubSectorX == gWorldSectorX && pGroup->ubSectorY == gWorldSectorY && !gbWorldSectorZ)
|
||||||
|
{
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ADMINISTRATOR, pGroup->pEnemyGroup->ubNumAdmins);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ARMY, pGroup->pEnemyGroup->ubNumTroops);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ELITE, pGroup->pEnemyGroup->ubNumElites);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ROBOT, pGroup->pEnemyGroup->ubNumRobots);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_JEEP, pGroup->pEnemyGroup->ubNumJeeps);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_TANK, pGroup->pEnemyGroup->ubNumTanks);
|
||||||
|
}
|
||||||
|
|
||||||
pGroup = pGroup->next;
|
pGroup = pGroup->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateTransportGroupInventory();
|
||||||
|
|
||||||
ValidateEnemiesHaveWeapons();
|
ValidateEnemiesHaveWeapons();
|
||||||
UnPauseGame();
|
UnPauseGame();
|
||||||
return ( ( BOOLEAN) ( gpBattleGroup->ubGroupSize > 0 ) );
|
return ( ( BOOLEAN) ( gpBattleGroup->ubGroupSize > 0 ) );
|
||||||
@@ -852,6 +868,7 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
if ( pGroup->usGroupTeam == ENEMY_TEAM && !pGroup->fVehicle &&
|
if ( pGroup->usGroupTeam == ENEMY_TEAM && !pGroup->fVehicle &&
|
||||||
pGroup->ubSectorX == gWorldSectorX && pGroup->ubSectorY == gWorldSectorY && !gbWorldSectorZ )
|
pGroup->ubSectorX == gWorldSectorX && pGroup->ubSectorY == gWorldSectorY && !gbWorldSectorZ )
|
||||||
{ //Process enemy group in sector.
|
{ //Process enemy group in sector.
|
||||||
|
const BOOLEAN isTransportGroup = pGroup->pEnemyGroup->ubIntention == TRANSPORT;
|
||||||
if( sNumSlots > 0 )
|
if( sNumSlots > 0 )
|
||||||
{
|
{
|
||||||
AssertGE(pGroup->pEnemyGroup->ubNumAdmins, pGroup->pEnemyGroup->ubAdminsInBattle);
|
AssertGE(pGroup->pEnemyGroup->ubNumAdmins, pGroup->pEnemyGroup->ubAdminsInBattle);
|
||||||
@@ -865,6 +882,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubAdminsInBattle += ubNumAdmins;
|
pGroup->pEnemyGroup->ubAdminsInBattle += ubNumAdmins;
|
||||||
ubTotalAdmins += ubNumAdmins;
|
ubTotalAdmins += ubNumAdmins;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ADMINISTRATOR, ubNumAdmins);
|
||||||
}
|
}
|
||||||
if( sNumSlots > 0 )
|
if( sNumSlots > 0 )
|
||||||
{ //Add regular army forces.
|
{ //Add regular army forces.
|
||||||
@@ -879,6 +899,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubTroopsInBattle += ubNumTroops;
|
pGroup->pEnemyGroup->ubTroopsInBattle += ubNumTroops;
|
||||||
ubTotalTroops += ubNumTroops;
|
ubTotalTroops += ubNumTroops;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ARMY, ubNumTroops);
|
||||||
}
|
}
|
||||||
if( sNumSlots > 0 )
|
if( sNumSlots > 0 )
|
||||||
{ //Add elite troops
|
{ //Add elite troops
|
||||||
@@ -893,6 +916,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubElitesInBattle += ubNumElites;
|
pGroup->pEnemyGroup->ubElitesInBattle += ubNumElites;
|
||||||
ubTotalElites += ubNumElites;
|
ubTotalElites += ubNumElites;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ELITE, ubNumElites);
|
||||||
}
|
}
|
||||||
if( sNumSlots > 0 )
|
if( sNumSlots > 0 )
|
||||||
{ //Add robots
|
{ //Add robots
|
||||||
@@ -907,6 +933,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubRobotsInBattle += ubNumRobots;
|
pGroup->pEnemyGroup->ubRobotsInBattle += ubNumRobots;
|
||||||
ubTotalRobots += ubNumRobots;
|
ubTotalRobots += ubNumRobots;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ROBOT, ubNumRobots);
|
||||||
}
|
}
|
||||||
if( sNumSlots > 0 )
|
if( sNumSlots > 0 )
|
||||||
{ //Add tanks
|
{ //Add tanks
|
||||||
@@ -921,6 +950,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubTanksInBattle += ubNumTanks;
|
pGroup->pEnemyGroup->ubTanksInBattle += ubNumTanks;
|
||||||
ubTotalTanks += ubNumTanks;
|
ubTotalTanks += ubNumTanks;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_TANK, ubNumTanks);
|
||||||
}
|
}
|
||||||
if ( sNumSlots > 0 )
|
if ( sNumSlots > 0 )
|
||||||
{
|
{
|
||||||
@@ -936,6 +968,9 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
pGroup->pEnemyGroup->ubJeepsInBattle += ubNumJeeps;
|
pGroup->pEnemyGroup->ubJeepsInBattle += ubNumJeeps;
|
||||||
ubTotalJeeps += ubNumJeeps;
|
ubTotalJeeps += ubNumJeeps;
|
||||||
|
|
||||||
|
if (isTransportGroup)
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_JEEP, ubNumJeeps);
|
||||||
}
|
}
|
||||||
//NOTE:
|
//NOTE:
|
||||||
//no provisions for profile troop leader or retreat groups yet.
|
//no provisions for profile troop leader or retreat groups yet.
|
||||||
@@ -976,6 +1011,7 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
unsigned firstSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
unsigned firstSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
||||||
unsigned lastSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bLastID;
|
unsigned lastSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bLastID;
|
||||||
unsigned slotsAvailable = lastSlot-firstSlot+1;
|
unsigned slotsAvailable = lastSlot-firstSlot+1;
|
||||||
|
|
||||||
while( pGroup && sNumSlots > 0 )
|
while( pGroup && sNumSlots > 0 )
|
||||||
{
|
{
|
||||||
if ( pGroup->usGroupTeam != OUR_TEAM && !pGroup->fVehicle &&
|
if ( pGroup->usGroupTeam != OUR_TEAM && !pGroup->fVehicle &&
|
||||||
@@ -1088,6 +1124,7 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: instead of just crashing the game without any explanation to the user, ignore this issue if it still exists.
|
// Flugente: instead of just crashing the game without any explanation to the user, ignore this issue if it still exists.
|
||||||
@@ -1103,6 +1140,8 @@ BOOLEAN PrepareEnemyForSectorBattle()
|
|||||||
pGroup = pGroup->next;
|
pGroup = pGroup->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateTransportGroupInventory();
|
||||||
|
|
||||||
ValidateEnemiesHaveWeapons();
|
ValidateEnemiesHaveWeapons();
|
||||||
UnPauseGame();
|
UnPauseGame();
|
||||||
|
|
||||||
@@ -2145,6 +2184,16 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
|||||||
UINT8 ubTotalSoldiers;
|
UINT8 ubTotalSoldiers;
|
||||||
UINT8 bDesiredDirection=0;
|
UINT8 bDesiredDirection=0;
|
||||||
|
|
||||||
|
// while transport groups can't normally reinforce, this covers the case where a transport group enters a sector (via normal movement)
|
||||||
|
// where a battle is in progress.
|
||||||
|
if (pGroup && pGroup->pEnemyGroup->ubIntention == TRANSPORT)
|
||||||
|
{
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ADMINISTRATOR, ubNumAdmins);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ARMY, ubNumTroops);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_ELITE, ubNumElites);
|
||||||
|
AddToTransportGroupMap(pGroup->ubGroupID, SOLDIER_CLASS_JEEP, ubNumJeeps);
|
||||||
|
}
|
||||||
|
|
||||||
switch( ubStrategicInsertionCode )
|
switch( ubStrategicInsertionCode )
|
||||||
{
|
{
|
||||||
case INSERTION_CODE_NORTH: bDesiredDirection = SOUTHEAST; break;
|
case INSERTION_CODE_NORTH: bDesiredDirection = SOUTHEAST; break;
|
||||||
@@ -3594,3 +3643,5 @@ void CorrectTurncoatCount( INT16 sSectorX, INT16 sSectorY )
|
|||||||
pGroup = pGroup->next;
|
pGroup = pGroup->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,10 @@ How to add a new admin action:
|
|||||||
- if effect applies outside of towns, add help text range band as appropriate to SetupAdminActionBox
|
- if effect applies outside of towns, add help text range band as appropriate to SetupAdminActionBox
|
||||||
|
|
||||||
How to add a new mission:
|
How to add a new mission:
|
||||||
- add to the RebelCommandAgentMissions enum in the header
|
- add strings to text files (szRebelCommandText (trait bonuses), szRebelCommandAgentMissionsText (title/description))
|
||||||
- add strings to text files (szRebelCommandAgentMissionsText)
|
- add to the RebelCommandText and RebelCommandAgentMissions enums in the header
|
||||||
|
- add to the RebelCommandAgentMissionsText enums in the cpp
|
||||||
|
- add mission variables to GameSettings
|
||||||
- add values to MissionHelpers::missionInfo table in SetupInfo()
|
- add values to MissionHelpers::missionInfo table in SetupInfo()
|
||||||
- add to valid check in HandleStrategicEvent() (allows advance from first event/prepare to second event/active effect)
|
- add to valid check in HandleStrategicEvent() (allows advance from first event/prepare to second event/active effect)
|
||||||
- add to SetupMissionAgentBox() (mission description and merc bonus text)
|
- add to SetupMissionAgentBox() (mission description and merc bonus text)
|
||||||
@@ -91,6 +93,7 @@ Points of interest:
|
|||||||
#include "Strategic Mines.h"
|
#include "Strategic Mines.h"
|
||||||
#include "Strategic Movement.h"
|
#include "Strategic Movement.h"
|
||||||
#include "Strategic Town Loyalty.h"
|
#include "Strategic Town Loyalty.h"
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
#include "Structure Wrap.h"
|
#include "Structure Wrap.h"
|
||||||
#include "Tactical Save.h"
|
#include "Tactical Save.h"
|
||||||
#include "Text.h"
|
#include "Text.h"
|
||||||
@@ -405,6 +408,7 @@ enum RebelCommandAgentMissionsText // keep this synced with szRebelCommandAgentM
|
|||||||
{
|
{
|
||||||
MISSION_TEXT(DEEP_DEPLOYMENT)
|
MISSION_TEXT(DEEP_DEPLOYMENT)
|
||||||
MISSION_TEXT(DISRUPT_ASD)
|
MISSION_TEXT(DISRUPT_ASD)
|
||||||
|
MISSION_TEXT(FORGE_TRANSPORT_ORDERS)
|
||||||
MISSION_TEXT(GET_ENEMY_MOVEMENT_TARGETS)
|
MISSION_TEXT(GET_ENEMY_MOVEMENT_TARGETS)
|
||||||
MISSION_TEXT(IMPROVE_LOCAL_SHOPS)
|
MISSION_TEXT(IMPROVE_LOCAL_SHOPS)
|
||||||
MISSION_TEXT(REDUCE_STRATEGIC_DECISION_SPEED)
|
MISSION_TEXT(REDUCE_STRATEGIC_DECISION_SPEED)
|
||||||
@@ -2221,6 +2225,7 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
{
|
{
|
||||||
case RCAM_DEEP_DEPLOYMENT: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DEEP_DEPLOYMENT_TITLE]); break;
|
case RCAM_DEEP_DEPLOYMENT: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DEEP_DEPLOYMENT_TITLE]); break;
|
||||||
case RCAM_DISRUPT_ASD: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DISRUPT_ASD_TITLE]); break;
|
case RCAM_DISRUPT_ASD: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DISRUPT_ASD_TITLE]); break;
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_FORGE_TRANSPORT_ORDERS_TITLE]); break;
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_GET_ENEMY_MOVEMENT_TARGETS_TITLE]); break;
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_GET_ENEMY_MOVEMENT_TARGETS_TITLE]); break;
|
||||||
case RCAM_IMPROVE_LOCAL_SHOPS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_IMPROVE_LOCAL_SHOPS_TITLE]); break;
|
case RCAM_IMPROVE_LOCAL_SHOPS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_IMPROVE_LOCAL_SHOPS_TITLE]); break;
|
||||||
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_REDUCE_STRATEGIC_DECISION_SPEED_TITLE]); break;
|
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_REDUCE_STRATEGIC_DECISION_SPEED_TITLE]); break;
|
||||||
@@ -2241,6 +2246,7 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
{
|
{
|
||||||
case RCAM_DEEP_DEPLOYMENT: missionDurationBase = gRebelCommandSettings.iDeepDeploymentDuration; break;
|
case RCAM_DEEP_DEPLOYMENT: missionDurationBase = gRebelCommandSettings.iDeepDeploymentDuration; break;
|
||||||
case RCAM_DISRUPT_ASD: missionDurationBase = gRebelCommandSettings.iDisruptAsdDuration; break;
|
case RCAM_DISRUPT_ASD: missionDurationBase = gRebelCommandSettings.iDisruptAsdDuration; break;
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS: missionDurationBase = 1; break; // instant effect
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: missionDurationBase = gRebelCommandSettings.iGetEnemyMovementTargetsDuration; break;
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: missionDurationBase = gRebelCommandSettings.iGetEnemyMovementTargetsDuration; break;
|
||||||
case RCAM_IMPROVE_LOCAL_SHOPS: missionDurationBase = gRebelCommandSettings.iImproveLocalShopsDuration; break;
|
case RCAM_IMPROVE_LOCAL_SHOPS: missionDurationBase = gRebelCommandSettings.iImproveLocalShopsDuration; break;
|
||||||
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: missionDurationBase = gRebelCommandSettings.iReduceStrategicDecisionSpeedDuration; break;
|
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: missionDurationBase = gRebelCommandSettings.iReduceStrategicDecisionSpeedDuration; break;
|
||||||
@@ -2264,6 +2270,7 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
{
|
{
|
||||||
case RCAM_DEEP_DEPLOYMENT: missionSuccessChanceBase = gRebelCommandSettings.iDeepDeploymentSuccessChance; break;
|
case RCAM_DEEP_DEPLOYMENT: missionSuccessChanceBase = gRebelCommandSettings.iDeepDeploymentSuccessChance; break;
|
||||||
case RCAM_DISRUPT_ASD: missionSuccessChanceBase = gRebelCommandSettings.iDisruptAsdSuccessChance; break;
|
case RCAM_DISRUPT_ASD: missionSuccessChanceBase = gRebelCommandSettings.iDisruptAsdSuccessChance; break;
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS: missionSuccessChanceBase = gRebelCommandSettings.iForgeTransportOrdersSuccessChance; break;
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: missionSuccessChanceBase = gRebelCommandSettings.iGetEnemyMovementTargetsSuccessChance; break;
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: missionSuccessChanceBase = gRebelCommandSettings.iGetEnemyMovementTargetsSuccessChance; break;
|
||||||
case RCAM_IMPROVE_LOCAL_SHOPS: missionSuccessChanceBase = gRebelCommandSettings.iImproveLocalShopsSuccessChance; break;
|
case RCAM_IMPROVE_LOCAL_SHOPS: missionSuccessChanceBase = gRebelCommandSettings.iImproveLocalShopsSuccessChance; break;
|
||||||
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: missionSuccessChanceBase = gRebelCommandSettings.iReduceStrategicDecisionSpeedSuccessChance; break;
|
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: missionSuccessChanceBase = gRebelCommandSettings.iReduceStrategicDecisionSpeedSuccessChance; break;
|
||||||
@@ -2284,6 +2291,7 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
{
|
{
|
||||||
case RCAM_DEEP_DEPLOYMENT: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DEEP_DEPLOYMENT_DESC]); break;
|
case RCAM_DEEP_DEPLOYMENT: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DEEP_DEPLOYMENT_DESC]); break;
|
||||||
case RCAM_DISRUPT_ASD: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DISRUPT_ASD_DESC]); break;
|
case RCAM_DISRUPT_ASD: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_DISRUPT_ASD_DESC]); break;
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_FORGE_TRANSPORT_ORDERS_DESC]); break;
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_GET_ENEMY_MOVEMENT_TARGETS_DESC]); break;
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_GET_ENEMY_MOVEMENT_TARGETS_DESC]); break;
|
||||||
case RCAM_IMPROVE_LOCAL_SHOPS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_IMPROVE_LOCAL_SHOPS_DESC]); break;
|
case RCAM_IMPROVE_LOCAL_SHOPS: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_IMPROVE_LOCAL_SHOPS_DESC]); break;
|
||||||
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_REDUCE_STRATEGIC_DECISION_SPEED_DESC]); break;
|
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED: swprintf(sText, szRebelCommandAgentMissionsText[RCAMT_REDUCE_STRATEGIC_DECISION_SPEED_DESC]); break;
|
||||||
@@ -2454,6 +2462,12 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS:
|
||||||
|
{
|
||||||
|
// no special modifiers. included for completeness.
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
||||||
{
|
{
|
||||||
// no special modifiers. included for completeness.
|
// no special modifiers. included for completeness.
|
||||||
@@ -2610,7 +2624,13 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
|||||||
swprintf(sText, szRebelCommandText[RCT_MISSION_CANT_START_CONTRACT_EXPIRING]);
|
swprintf(sText, szRebelCommandText[RCT_MISSION_CANT_START_CONTRACT_EXPIRING]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (agentIndex[index] == mercs.size() && rebelCommandSaveInfo.availableMissions[index] == RCAM_SEND_SUPPLIES_TO_TOWN)
|
else if (agentIndex[index] == mercs.size() &&
|
||||||
|
(
|
||||||
|
rebelCommandSaveInfo.availableMissions[index] == RCAM_SEND_SUPPLIES_TO_TOWN ||
|
||||||
|
rebelCommandSaveInfo.availableMissions[index] == RCAM_FORGE_TRANSPORT_ORDERS
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
{
|
{
|
||||||
canStartMission = FALSE;
|
canStartMission = FALSE;
|
||||||
swprintf(sText, szRebelCommandText[RCT_MISSION_CANT_USE_REBEL_AGENT]);
|
swprintf(sText, szRebelCommandText[RCT_MISSION_CANT_USE_REBEL_AGENT]);
|
||||||
@@ -2847,6 +2867,14 @@ void PrepareMission(INT8 index)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS:
|
||||||
|
{
|
||||||
|
missionTitle = RCAMT_FORGE_TRANSPORT_ORDERS_TITLE;
|
||||||
|
missionSuccessChance = gRebelCommandSettings.iForgeTransportOrdersSuccessChance;
|
||||||
|
missionDuration = 12;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
||||||
{
|
{
|
||||||
missionTitle = RCAMT_GET_ENEMY_MOVEMENT_TARGETS_TITLE;
|
missionTitle = RCAMT_GET_ENEMY_MOVEMENT_TARGETS_TITLE;
|
||||||
@@ -3897,6 +3925,7 @@ void DailyUpdate()
|
|||||||
{
|
{
|
||||||
if (i == RCAM_SOLDIER_BOUNTIES_KINGPIN && !(CheckFact(FACT_KINGPIN_INTRODUCED_SELF, 0) == TRUE && CheckFact(FACT_KINGPIN_DEAD, 0) == FALSE && CheckFact(FACT_KINGPIN_IS_ENEMY, 0) == FALSE && CurrentPlayerProgressPercentage() >= 30)) continue;
|
if (i == RCAM_SOLDIER_BOUNTIES_KINGPIN && !(CheckFact(FACT_KINGPIN_INTRODUCED_SELF, 0) == TRUE && CheckFact(FACT_KINGPIN_DEAD, 0) == FALSE && CheckFact(FACT_KINGPIN_IS_ENEMY, 0) == FALSE && CurrentPlayerProgressPercentage() >= 30)) continue;
|
||||||
else if (i == RCAM_DISRUPT_ASD && gGameExternalOptions.fASDActive == FALSE) continue;
|
else if (i == RCAM_DISRUPT_ASD && gGameExternalOptions.fASDActive == FALSE) continue;
|
||||||
|
else if (i == RCAM_FORGE_TRANSPORT_ORDERS && gGameExternalOptions.fStrategicTransportGroupsEnabled == FALSE) continue;
|
||||||
|
|
||||||
validMissions.insert(static_cast<RebelCommandAgentMissions>(i));
|
validMissions.insert(static_cast<RebelCommandAgentMissions>(i));
|
||||||
}
|
}
|
||||||
@@ -4299,6 +4328,16 @@ void SetupInfo()
|
|||||||
{0, 0, 0, 0},
|
{0, 0, 0, 0},
|
||||||
{0, MissionHelpers::DISRUPT_ASD_STEAL_FUEL, MissionHelpers::DISRUPT_ASD_DESTROY_RESERVES, 0}
|
{0, MissionHelpers::DISRUPT_ASD_STEAL_FUEL, MissionHelpers::DISRUPT_ASD_DESTROY_RESERVES, 0}
|
||||||
});
|
});
|
||||||
|
//RCAM_FORGE_TRANSPORT_ORDERS
|
||||||
|
MissionHelpers::missionInfo.push_back(
|
||||||
|
{
|
||||||
|
{COVERT_NT },
|
||||||
|
{-1},
|
||||||
|
{0},
|
||||||
|
{0.f},
|
||||||
|
{0},
|
||||||
|
{0}
|
||||||
|
});
|
||||||
//RCAM_GET_ENEMY_MOVEMENT_TARGETS
|
//RCAM_GET_ENEMY_MOVEMENT_TARGETS
|
||||||
MissionHelpers::missionInfo.push_back(
|
MissionHelpers::missionInfo.push_back(
|
||||||
{
|
{
|
||||||
@@ -4902,6 +4941,7 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
|||||||
{
|
{
|
||||||
case RCAM_DEEP_DEPLOYMENT:
|
case RCAM_DEEP_DEPLOYMENT:
|
||||||
case RCAM_DISRUPT_ASD:
|
case RCAM_DISRUPT_ASD:
|
||||||
|
case RCAM_FORGE_TRANSPORT_ORDERS:
|
||||||
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
case RCAM_GET_ENEMY_MOVEMENT_TARGETS:
|
||||||
case RCAM_IMPROVE_LOCAL_SHOPS:
|
case RCAM_IMPROVE_LOCAL_SHOPS:
|
||||||
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED:
|
case RCAM_REDUCE_STRATEGIC_DECISION_SPEED:
|
||||||
@@ -4926,7 +4966,15 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
|||||||
if (validMission)
|
if (validMission)
|
||||||
{
|
{
|
||||||
const UINT32 activatedMissionParam = SerialiseMissionSecondEvent(evt1.sentGenericRebelAgent, evt1.mercProfileId, mission, extraBits);
|
const UINT32 activatedMissionParam = SerialiseMissionSecondEvent(evt1.sentGenericRebelAgent, evt1.mercProfileId, mission, extraBits);
|
||||||
AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * evt1.missionDurationInHours, activatedMissionParam);
|
if (mission == RCAM_FORGE_TRANSPORT_ORDERS)
|
||||||
|
{
|
||||||
|
// don't send a follow-up event for instant-result missions
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddStrategicEvent(EVENT_REBELCOMMAND, GetWorldTotalMin() + 60 * evt1.missionDurationInHours, activatedMissionParam);
|
||||||
|
missionMap.insert(std::make_pair(mission, activatedMissionParam));
|
||||||
|
}
|
||||||
|
|
||||||
if (!evt1.sentGenericRebelAgent)
|
if (!evt1.sentGenericRebelAgent)
|
||||||
{
|
{
|
||||||
@@ -4935,6 +4983,11 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
|||||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||||
if (pSoldier->ubProfile == evt1.mercProfileId)
|
if (pSoldier->ubProfile == evt1.mercProfileId)
|
||||||
{
|
{
|
||||||
|
if (mission == RCAM_FORGE_TRANSPORT_ORDERS)
|
||||||
|
{
|
||||||
|
ForceDeployTransportGroup(SECTOR(pSoldier->sSectorX, pSoldier->sSectorY));
|
||||||
|
}
|
||||||
|
|
||||||
// mission successful! give some experience pts
|
// mission successful! give some experience pts
|
||||||
StatChange(pSoldier, LDRAMT, 20, FROM_SUCCESS);
|
StatChange(pSoldier, LDRAMT, 20, FROM_SUCCESS);
|
||||||
StatChange(pSoldier, WISDOMAMT, 15, FROM_SUCCESS);
|
StatChange(pSoldier, WISDOMAMT, 15, FROM_SUCCESS);
|
||||||
@@ -4943,7 +4996,6 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
missionMap.insert(std::make_pair(mission, activatedMissionParam));
|
|
||||||
swprintf(msgBoxText, szRebelCommandText[RCT_MISSION_SUCCESS], szRebelCommandAgentMissionsText[evt1.missionId * 2]);
|
swprintf(msgBoxText, szRebelCommandText[RCT_MISSION_SUCCESS], szRebelCommandAgentMissionsText[evt1.missionId * 2]);
|
||||||
swprintf(screenMsgText, szRebelCommandText[RCT_MISSION_SUCCESS], szRebelCommandAgentMissionsText[evt1.missionId * 2]);
|
swprintf(screenMsgText, szRebelCommandText[RCT_MISSION_SUCCESS], szRebelCommandAgentMissionsText[evt1.missionId * 2]);
|
||||||
ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, screenMsgText);
|
ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, screenMsgText);
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ enum RebelCommandAgentMissions
|
|||||||
RCAM_NONE = -1,
|
RCAM_NONE = -1,
|
||||||
RCAM_DEEP_DEPLOYMENT = 0,
|
RCAM_DEEP_DEPLOYMENT = 0,
|
||||||
RCAM_DISRUPT_ASD, // only available if ASD enabled
|
RCAM_DISRUPT_ASD, // only available if ASD enabled
|
||||||
|
RCAM_FORGE_TRANSPORT_ORDERS,
|
||||||
RCAM_GET_ENEMY_MOVEMENT_TARGETS, // aka Strategic Intel
|
RCAM_GET_ENEMY_MOVEMENT_TARGETS, // aka Strategic Intel
|
||||||
RCAM_IMPROVE_LOCAL_SHOPS,
|
RCAM_IMPROVE_LOCAL_SHOPS,
|
||||||
RCAM_REDUCE_STRATEGIC_DECISION_SPEED, // aka Slower Strategic Decisions
|
RCAM_REDUCE_STRATEGIC_DECISION_SPEED, // aka Slower Strategic Decisions
|
||||||
|
|||||||
@@ -246,13 +246,13 @@ BOOLEAN ARMoveBestMilitiaManFromAdjacentSector(INT16 sMapX, INT16 sMapY)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GROUP* GetNonPlayerGroupInSector( INT16 sMapX, INT16 sMapY, UINT8 usTeam )
|
GROUP* GetNonPlayerGroupInSectorForReinforcement( INT16 sMapX, INT16 sMapY, UINT8 usTeam )
|
||||||
{
|
{
|
||||||
GROUP *curr;
|
GROUP *curr;
|
||||||
curr = gpGroupList;
|
curr = gpGroupList;
|
||||||
while( curr )
|
while( curr )
|
||||||
{
|
{
|
||||||
if ( curr->ubSectorX == sMapX && curr->ubSectorY == sMapY && curr->usGroupTeam == usTeam && curr->ubGroupID )
|
if ( curr->ubSectorX == sMapX && curr->ubSectorY == sMapY && curr->usGroupTeam == usTeam && curr->ubGroupID && (curr->usGroupTeam != ENEMY_TEAM || curr->pEnemyGroup->ubIntention != TRANSPORT) )
|
||||||
return curr;
|
return curr;
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
}
|
}
|
||||||
@@ -280,7 +280,7 @@ UINT8 DoReinforcementAsPendingNonPlayer( INT16 sMapX, INT16 sMapY, UINT8 usTeam
|
|||||||
|
|
||||||
for( ubIndex = 0; ubIndex < ubDirNumber; ++ubIndex )
|
for( ubIndex = 0; ubIndex < ubDirNumber; ++ubIndex )
|
||||||
{
|
{
|
||||||
while ( (pGroup = GetNonPlayerGroupInSector( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), usTeam )) != NULL )
|
while ( (pGroup = GetNonPlayerGroupInSectorForReinforcement( SECTORX( pusMoveDir[ubIndex][0] ), SECTORY( pusMoveDir[ubIndex][0] ), usTeam )) != NULL )
|
||||||
{
|
{
|
||||||
pGroup->ubPrevX = pGroup->ubSectorX;
|
pGroup->ubPrevX = pGroup->ubSectorX;
|
||||||
pGroup->ubPrevY = pGroup->ubSectorY;
|
pGroup->ubPrevY = pGroup->ubSectorY;
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ UINT8 NumEnemiesInFiveSectors( INT16 sMapX, INT16 sMapY );
|
|||||||
//For Tactical
|
//For Tactical
|
||||||
UINT8 DoReinforcementAsPendingNonPlayer( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
UINT8 DoReinforcementAsPendingNonPlayer( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
||||||
void AddPossiblePendingMilitiaToBattle();
|
void AddPossiblePendingMilitiaToBattle();
|
||||||
GROUP* GetNonPlayerGroupInSector( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
GROUP* GetNonPlayerGroupInSectorForReinforcement( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+102
-73
@@ -33,6 +33,9 @@
|
|||||||
#include "interface dialogue.h"
|
#include "interface dialogue.h"
|
||||||
#include "ASD.h" // added by Flugente
|
#include "ASD.h" // added by Flugente
|
||||||
#include "Rebel Command.h"
|
#include "Rebel Command.h"
|
||||||
|
#include "Game Event Hook.h"
|
||||||
|
#include "Strategic Town Loyalty.h"
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
|
|
||||||
#include "GameInitOptionsScreen.h"
|
#include "GameInitOptionsScreen.h"
|
||||||
|
|
||||||
@@ -488,7 +491,6 @@ extern INT16 sWorldSectorLocationOfFirstBattle;
|
|||||||
|
|
||||||
void ReassignAIGroup( GROUP **pGroup );
|
void ReassignAIGroup( GROUP **pGroup );
|
||||||
void TransferGroupToPool( GROUP **pGroup );
|
void TransferGroupToPool( GROUP **pGroup );
|
||||||
void SendGroupToPool( GROUP **pGroup );
|
|
||||||
|
|
||||||
//Simply orders all garrisons to take troops from the patrol groups and send the closest troops from them. Any garrison,
|
//Simply orders all garrisons to take troops from the patrol groups and send the closest troops from them. Any garrison,
|
||||||
//whom there request isn't fulfilled (due to lack of troops), will recieve their reinforcements from the queen (P3).
|
//whom there request isn't fulfilled (due to lack of troops), will recieve their reinforcements from the queen (P3).
|
||||||
@@ -2418,6 +2420,11 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Strategic5");
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (pGroup->pEnemyGroup->ubIntention == TRANSPORT)
|
||||||
|
{
|
||||||
|
ProcessTransportGroupReachedDestination(pGroup);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{ //This is a floating group at his final destination...
|
{ //This is a floating group at his final destination...
|
||||||
if( pGroup->pEnemyGroup->ubIntention != STAGING && pGroup->pEnemyGroup->ubIntention != REINFORCEMENTS )
|
if( pGroup->pEnemyGroup->ubIntention != STAGING && pGroup->pEnemyGroup->ubIntention != REINFORCEMENTS )
|
||||||
@@ -3458,7 +3465,7 @@ void EvaluateQueenSituation()
|
|||||||
dEnemyGeneralsSpeedupFactor *= RebelCommand::GetStrategicDecisionSpeedModifier();
|
dEnemyGeneralsSpeedupFactor *= RebelCommand::GetStrategicDecisionSpeedModifier();
|
||||||
|
|
||||||
uiOffset += dEnemyGeneralsSpeedupFactor * (zDiffSetting[gGameOptions.ubDifficultyLevel].iBaseDelayInMinutesBetweenEvaluations + Random( zDiffSetting[gGameOptions.ubDifficultyLevel].iEvaluationDelayVariance ));
|
uiOffset += dEnemyGeneralsSpeedupFactor * (zDiffSetting[gGameOptions.ubDifficultyLevel].iBaseDelayInMinutesBetweenEvaluations + Random( zDiffSetting[gGameOptions.ubDifficultyLevel].iEvaluationDelayVariance ));
|
||||||
|
|
||||||
// Check/update reinforcements pool if old behavior is enabled
|
// Check/update reinforcements pool if old behavior is enabled
|
||||||
if ( !gfUnlimitedTroops && zDiffSetting[gGameOptions.ubDifficultyLevel].iQueenPoolIncrementDaysPerDifficultyLevel == 0 )
|
if ( !gfUnlimitedTroops && zDiffSetting[gGameOptions.ubDifficultyLevel].iQueenPoolIncrementDaysPerDifficultyLevel == 0 )
|
||||||
{
|
{
|
||||||
@@ -3488,88 +3495,88 @@ void EvaluateQueenSituation()
|
|||||||
// Gradually promote any remaining admins into troops
|
// Gradually promote any remaining admins into troops
|
||||||
UpgradeAdminsToTroops();
|
UpgradeAdminsToTroops();
|
||||||
|
|
||||||
if( ( giRequestPoints <= 0 ) || ( ( giReinforcementPoints <= 0 ) && ( giReinforcementPool <= 0 ) ) )
|
// consider deploying a transport group
|
||||||
{ //we either have no reinforcements or request for reinforcements.
|
ExecuteStrategicAIAction( NPC_ACTION_DEPLOY_TRANSPORT_GROUP, 0, 0 );
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// anv: only consider garrisons and patrols that can be reinforced
|
// we either have reinforcements or a request for reinforcements
|
||||||
// otherwise unreinforcable groups will stall the rest, effectively breaking entire system
|
if (giRequestPoints > 0 && (giReinforcementPoints > 0 || giReinforcementPool > 0))
|
||||||
|
|
||||||
Ensure_RepairedGarrisonGroup( &gGarrisonGroup, &giGarrisonArraySize ); /* added NULL fix, 2007-03-03, Sgt. Kolja */
|
|
||||||
|
|
||||||
for( i = 0; i < giGarrisonArraySize; i++ )
|
|
||||||
{
|
{
|
||||||
RecalculateGarrisonWeight( i );
|
// anv: only consider garrisons and patrols that can be reinforced
|
||||||
iWeight = gGarrisonGroup[ i ].bWeight;
|
// otherwise unreinforcable groups will stall the rest, effectively breaking entire system
|
||||||
if( iWeight > 0 )
|
|
||||||
|
Ensure_RepairedGarrisonGroup( &gGarrisonGroup, &giGarrisonArraySize ); /* added NULL fix, 2007-03-03, Sgt. Kolja */
|
||||||
|
|
||||||
|
for( i = 0; i < giGarrisonArraySize; i++ )
|
||||||
{
|
{
|
||||||
if( !gGarrisonGroup[ i ].ubPendingGroupID &&
|
RecalculateGarrisonWeight( i );
|
||||||
EnemyPermittedToAttackSector( NULL, gGarrisonGroup[ i ].ubSectorID ) &&
|
iWeight = gGarrisonGroup[ i ].bWeight;
|
||||||
GarrisonRequestingMinimumReinforcements( i ) )
|
if( iWeight > 0 )
|
||||||
{
|
{
|
||||||
if( ReinforcementsApproved( i, &usDefencePoints ) )
|
if( !gGarrisonGroup[ i ].ubPendingGroupID &&
|
||||||
|
EnemyPermittedToAttackSector( NULL, gGarrisonGroup[ i ].ubSectorID ) &&
|
||||||
|
GarrisonRequestingMinimumReinforcements( i ) )
|
||||||
{
|
{
|
||||||
iApplicableGarrisonIds[iApplicableGarrisons] = i;
|
if( ReinforcementsApproved( i, &usDefencePoints ) )
|
||||||
iApplicableGarrisons++;
|
{
|
||||||
iApplicableRequestPoints += gGarrisonGroup[ i ].bWeight;
|
iApplicableGarrisonIds[iApplicableGarrisons] = i;
|
||||||
|
iApplicableGarrisons++;
|
||||||
|
iApplicableRequestPoints += gGarrisonGroup[ i ].bWeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
for( i = 0; i < giPatrolArraySize; i++ )
|
||||||
for( i = 0; i < giPatrolArraySize; i++ )
|
|
||||||
{
|
|
||||||
RecalculatePatrolWeight( i );
|
|
||||||
iWeight = gPatrolGroup[ i ].bWeight;
|
|
||||||
if( iWeight > 0 )
|
|
||||||
{
|
{
|
||||||
if( !gPatrolGroup[ i ].ubPendingGroupID && PatrolRequestingMinimumReinforcements( i ) )
|
RecalculatePatrolWeight( i );
|
||||||
|
iWeight = gPatrolGroup[ i ].bWeight;
|
||||||
|
if( iWeight > 0 )
|
||||||
{
|
{
|
||||||
iApplicablePatrolIds[iApplicablePatrols] = i;
|
if( !gPatrolGroup[ i ].ubPendingGroupID && PatrolRequestingMinimumReinforcements( i ) )
|
||||||
iApplicablePatrols++;
|
{
|
||||||
iApplicableRequestPoints += gPatrolGroup[ i ].bWeight;
|
iApplicablePatrolIds[iApplicablePatrols] = i;
|
||||||
|
iApplicablePatrols++;
|
||||||
|
iApplicableRequestPoints += gPatrolGroup[ i ].bWeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if( !iApplicableRequestPoints )
|
if( iApplicableRequestPoints )
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//now randomly choose who gets the reinforcements.
|
|
||||||
// giRequestPoints is the combined sum of all the individual weights of all garrisons and patrols requesting reinforcements
|
|
||||||
//iRandom = Random( giRequestPoints );
|
|
||||||
iRandom = Random( iApplicableRequestPoints );
|
|
||||||
|
|
||||||
iOrigRequestPoints = giRequestPoints; // debug only!
|
|
||||||
|
|
||||||
//go through garrisons first
|
|
||||||
for( i = 0; i < iApplicableGarrisons; i++ )
|
|
||||||
{
|
|
||||||
iSumOfAllWeights += iWeight; // debug only!
|
|
||||||
iWeight = gGarrisonGroup[ iApplicableGarrisonIds[i] ].bWeight;
|
|
||||||
if( iRandom < iWeight )
|
|
||||||
{
|
{
|
||||||
//This is the group that gets the reinforcements!
|
//now randomly choose who gets the reinforcements.
|
||||||
if ( SendReinforcementsForGarrison( iApplicableGarrisonIds[i] , usDefencePoints, NULL ) )
|
// giRequestPoints is the combined sum of all the individual weights of all garrisons and patrols requesting reinforcements
|
||||||
return;
|
//iRandom = Random( giRequestPoints );
|
||||||
}
|
iRandom = Random( iApplicableRequestPoints );
|
||||||
iRandom -= iWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
//go through the patrol groups
|
iOrigRequestPoints = giRequestPoints; // debug only!
|
||||||
for( i = 0; i < iApplicablePatrols; i++ )
|
|
||||||
{
|
//go through garrisons first
|
||||||
iSumOfAllWeights += iWeight; // debug only!
|
for( i = 0; i < iApplicableGarrisons; i++ )
|
||||||
iWeight = gPatrolGroup[ iApplicablePatrolIds[i] ].bWeight;
|
{
|
||||||
if( iRandom < iWeight )
|
iSumOfAllWeights += iWeight; // debug only!
|
||||||
{
|
iWeight = gGarrisonGroup[ iApplicableGarrisonIds[i] ].bWeight;
|
||||||
//This is the group that gets the reinforcements!
|
if( iRandom < iWeight )
|
||||||
if ( SendReinforcementsForPatrol( iApplicablePatrolIds[i], NULL ) )
|
{
|
||||||
return;
|
//This is the group that gets the reinforcements!
|
||||||
|
if ( SendReinforcementsForGarrison( iApplicableGarrisonIds[i] , usDefencePoints, NULL ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
iRandom -= iWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
//go through the patrol groups
|
||||||
|
for( i = 0; i < iApplicablePatrols; i++ )
|
||||||
|
{
|
||||||
|
iSumOfAllWeights += iWeight; // debug only!
|
||||||
|
iWeight = gPatrolGroup[ iApplicablePatrolIds[i] ].bWeight;
|
||||||
|
if( iRandom < iWeight )
|
||||||
|
{
|
||||||
|
//This is the group that gets the reinforcements!
|
||||||
|
if ( SendReinforcementsForPatrol( iApplicablePatrolIds[i], NULL ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
iRandom -= iWeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
iRandom -= iWeight;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidateWeights( 27 );
|
ValidateWeights( 27 );
|
||||||
@@ -5125,7 +5132,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
|||||||
if ( ubNumSoldiers )
|
if ( ubNumSoldiers )
|
||||||
{
|
{
|
||||||
InitializeGroup(GROUP_TYPE_ATTACK, ubNumSoldiers, grouptroops[0], groupelites[0], grouprobots[0], groupjeeps[0], grouptanks[0], Random(10) < difficultyMod);
|
InitializeGroup(GROUP_TYPE_ATTACK, ubNumSoldiers, grouptroops[0], groupelites[0], grouprobots[0], groupjeeps[0], grouptanks[0], Random(10) < difficultyMod);
|
||||||
totalusedsoldiers += grouptroops[0] + groupelites[0] + grouprobots[0], grouptanks[0] + groupjeeps[0];
|
totalusedsoldiers += grouptroops[0] + groupelites[0] + grouprobots[0] + grouptanks[0] + groupjeeps[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
pGroup = CreateNewEnemyGroupDepartingFromSector( SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ), 0, grouptroops[0], groupelites[0], grouprobots[0], grouptanks[0], groupjeeps[0] );
|
pGroup = CreateNewEnemyGroupDepartingFromSector( SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ), 0, grouptroops[0], groupelites[0], grouprobots[0], grouptanks[0], groupjeeps[0] );
|
||||||
@@ -5386,6 +5393,14 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
|||||||
gubNumAwareBattles = zDiffSetting[gGameOptions.ubDifficultyLevel].iNumAwareBattles;
|
gubNumAwareBattles = zDiffSetting[gGameOptions.ubDifficultyLevel].iNumAwareBattles;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NPC_ACTION_DEPLOY_TRANSPORT_GROUP:
|
||||||
|
DeployTransportGroup();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NPC_ACTION_RETURN_TRANSPORT_GROUP:
|
||||||
|
ReturnTransportGroup(option1);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ScreenMsg( FONT_RED, MSG_DEBUG, L"QueenAI failed to handle action code %d.", usActionCode );
|
ScreenMsg( FONT_RED, MSG_DEBUG, L"QueenAI failed to handle action code %d.", usActionCode );
|
||||||
break;
|
break;
|
||||||
@@ -6403,8 +6418,14 @@ void UpgradeAdminsToTroops()
|
|||||||
// if there are any admins currently in this group
|
// if there are any admins currently in this group
|
||||||
if ( pGroup->pEnemyGroup->ubNumAdmins > 0 )
|
if ( pGroup->pEnemyGroup->ubNumAdmins > 0 )
|
||||||
{
|
{
|
||||||
|
// skip transport groups
|
||||||
|
if (pGroup->pEnemyGroup->ubIntention == TRANSPORT)
|
||||||
|
{
|
||||||
|
pGroup = pGroup->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// if it's a patrol group
|
// if it's a patrol group
|
||||||
if ( pGroup->pEnemyGroup->ubIntention == PATROL )
|
else if ( pGroup->pEnemyGroup->ubIntention == PATROL )
|
||||||
{
|
{
|
||||||
sPatrolIndex = FindPatrolGroupIndexForGroupID( pGroup->ubGroupID );
|
sPatrolIndex = FindPatrolGroupIndexForGroupID( pGroup->ubGroupID );
|
||||||
Assert( sPatrolIndex != -1 );
|
Assert( sPatrolIndex != -1 );
|
||||||
@@ -6508,9 +6529,17 @@ INT16 FindGarrisonIndexForGroupIDPending( UINT8 ubGroupID )
|
|||||||
|
|
||||||
void TransferGroupToPool( GROUP **pGroup )
|
void TransferGroupToPool( GROUP **pGroup )
|
||||||
{
|
{
|
||||||
//Madd: unlimited reinforcements?
|
if ((*pGroup)->usGroupTeam == ENEMY_TEAM)
|
||||||
if ( !gfUnlimitedTroops )
|
{
|
||||||
giReinforcementPool += (*pGroup)->ubGroupSize;
|
//Madd: unlimited reinforcements?
|
||||||
|
if ( !gfUnlimitedTroops )
|
||||||
|
giReinforcementPool += (*pGroup)->ubGroupSize;
|
||||||
|
|
||||||
|
AddStrategicAIResources(ASD_ROBOT, (*pGroup)->pEnemyGroup->ubNumRobots);
|
||||||
|
AddStrategicAIResources(ASD_JEEP, (*pGroup)->pEnemyGroup->ubNumJeeps);
|
||||||
|
AddStrategicAIResources(ASD_TANK, (*pGroup)->pEnemyGroup->ubNumTanks);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
RemovePGroup( *pGroup );
|
RemovePGroup( *pGroup );
|
||||||
*pGroup = NULL;
|
*pGroup = NULL;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ BOOLEAN StrategicAILookForAdjacentGroups( GROUP *pGroup );
|
|||||||
void RemoveGroupFromStrategicAILists( UINT8 ubGroupID );
|
void RemoveGroupFromStrategicAILists( UINT8 ubGroupID );
|
||||||
void RecalculateSectorWeight( UINT8 ubSectorID );
|
void RecalculateSectorWeight( UINT8 ubSectorID );
|
||||||
void RecalculateGroupWeight( GROUP *pGroup );
|
void RecalculateGroupWeight( GROUP *pGroup );
|
||||||
|
void SendGroupToPool( GROUP **pGroup );
|
||||||
|
|
||||||
BOOLEAN OkayForEnemyToMoveThroughSector( UINT8 ubSectorID );
|
BOOLEAN OkayForEnemyToMoveThroughSector( UINT8 ubSectorID );
|
||||||
BOOLEAN EnemyPermittedToAttackSector( GROUP **pGroup, UINT8 ubSectorID );
|
BOOLEAN EnemyPermittedToAttackSector( GROUP **pGroup, UINT8 ubSectorID );
|
||||||
@@ -78,7 +79,8 @@ BOOLEAN PermittedToFillPatrolGroup( INT32 iPatrolID );
|
|||||||
enum GROUP_TYPE
|
enum GROUP_TYPE
|
||||||
{
|
{
|
||||||
GROUP_TYPE_ATTACK,
|
GROUP_TYPE_ATTACK,
|
||||||
GROUP_TYPE_PATROL
|
GROUP_TYPE_PATROL,
|
||||||
|
GROUP_TYPE_TRANSPORT
|
||||||
};
|
};
|
||||||
|
|
||||||
void ASDInitializePatrolGroup(GROUP *pGroup);
|
void ASDInitializePatrolGroup(GROUP *pGroup);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
#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"
|
#include "Rebel Command.h"
|
||||||
|
#include "Strategic Transport Groups.h"
|
||||||
|
|
||||||
#include "MilitiaSquads.h"
|
#include "MilitiaSquads.h"
|
||||||
#include "Vehicles.h"
|
#include "Vehicles.h"
|
||||||
@@ -3635,7 +3636,10 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
|
|||||||
dEnemyGeneralsSpeedupFactor = max( 0.75f, dEnemyGeneralsSpeedupFactor - gStrategicStatus.usVIPsLeft * gGameExternalOptions.fEnemyGeneralStrategicMovementSpeedBonus );
|
dEnemyGeneralsSpeedupFactor = max( 0.75f, dEnemyGeneralsSpeedupFactor - gStrategicStatus.usVIPsLeft * gGameExternalOptions.fEnemyGeneralStrategicMovementSpeedBonus );
|
||||||
}
|
}
|
||||||
|
|
||||||
iBestTraverseTime = dEnemyGeneralsSpeedupFactor * iBestTraverseTime;
|
// rftr: transport groups move slower than normal
|
||||||
|
const FLOAT transportSpeedFactor = pGroup->pEnemyGroup->ubIntention == TRANSPORT ? 2.0f : 1.0f;
|
||||||
|
|
||||||
|
iBestTraverseTime = dEnemyGeneralsSpeedupFactor * transportSpeedFactor * iBestTraverseTime;
|
||||||
|
|
||||||
iBestTraverseTime = iBestTraverseTime * (100 + RebelCommand::GetHarriersSpeedPenalty(ubSector)) / 100;
|
iBestTraverseTime = iBestTraverseTime * (100 + RebelCommand::GetHarriersSpeedPenalty(ubSector)) / 100;
|
||||||
}
|
}
|
||||||
@@ -3816,6 +3820,13 @@ void HandleArrivalOfReinforcements( GROUP *pGroup )
|
|||||||
ResetMortarsOnTeamCount();
|
ResetMortarsOnTeamCount();
|
||||||
ResetNumSquadleadersInArmyGroup(); // added by SANDRO
|
ResetNumSquadleadersInArmyGroup(); // added by SANDRO
|
||||||
AddPossiblePendingEnemiesToBattle();
|
AddPossiblePendingEnemiesToBattle();
|
||||||
|
|
||||||
|
if (pGroup->pEnemyGroup->ubIntention == TRANSPORT)
|
||||||
|
{
|
||||||
|
// normally, transport groups can't reinforce, but this can be hit normally if a battle is occuring in a sector
|
||||||
|
// where a transport group is moving into.
|
||||||
|
UpdateTransportGroupInventory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( pGroup->usGroupTeam == MILITIA_TEAM )
|
else if ( pGroup->usGroupTeam == MILITIA_TEAM )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ enum //enemy intentions,
|
|||||||
PATROL, //enemy is moving around determining safe areas.
|
PATROL, //enemy is moving around determining safe areas.
|
||||||
REINFORCEMENTS, //enemy group has intentions to fortify position at final destination.
|
REINFORCEMENTS, //enemy group has intentions to fortify position at final destination.
|
||||||
ASSAULT, //enemy is ready to fight anything they encounter.
|
ASSAULT, //enemy is ready to fight anything they encounter.
|
||||||
|
TRANSPORT, //rftr: enemy is carrying out non-combat tasks, but still has an escort
|
||||||
NUM_ENEMY_INTENTIONS
|
NUM_ENEMY_INTENTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -109,6 +110,9 @@ typedef struct ENEMYGROUP
|
|||||||
#define GROUPFLAG_KNOWN_DIRECTION 0x00000080
|
#define GROUPFLAG_KNOWN_DIRECTION 0x00000080
|
||||||
#define GROUPFLAG_KNOWN_NUMBER 0x00000100
|
#define GROUPFLAG_KNOWN_NUMBER 0x00000100
|
||||||
|
|
||||||
|
// rftr: strategic transport group direction flag
|
||||||
|
#define GROUPFLAG_TRANSPORT_ENROUTE 0x00000200
|
||||||
|
|
||||||
typedef struct GROUP
|
typedef struct GROUP
|
||||||
{
|
{
|
||||||
BOOLEAN fDebugGroup; //for testing purposes -- handled differently in certain cases.
|
BOOLEAN fDebugGroup; //for testing purposes -- handled differently in certain cases.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
|||||||
|
#ifndef _STRATEGIC_TRANSPORT_GROUPS_H
|
||||||
|
#define _STRATEGIC_TRANSPORT_GROUPS_H
|
||||||
|
|
||||||
|
#include "Campaign Types.h"
|
||||||
|
#include "Types.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
enum TransportGroupSectorInfo
|
||||||
|
{
|
||||||
|
TransportGroupSectorInfo_LocatedGroup = 0,
|
||||||
|
TransportGroupSectorInfo_LocatedDestination,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GROUP;
|
||||||
|
|
||||||
|
BOOLEAN DeployTransportGroup();
|
||||||
|
BOOLEAN ForceDeployTransportGroup(UINT8 sectorId);
|
||||||
|
BOOLEAN ReturnTransportGroup(INT32 groupId);
|
||||||
|
void FillMapColoursForTransportGroups(INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINATE][MAXIMUM_VALID_X_COORDINATE]);
|
||||||
|
void ProcessTransportGroupReachedDestination(GROUP* pGroup);
|
||||||
|
void UpdateTransportGroupInventory();
|
||||||
|
|
||||||
|
const std::map<UINT8, TransportGroupSectorInfo> GetTransportGroupSectorInfo();
|
||||||
|
|
||||||
|
void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT8 amount);
|
||||||
|
void ClearTransportGroupMap();
|
||||||
|
|
||||||
|
void NotifyTransportGroupDefeated();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -3590,6 +3590,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
|||||||
case NPC_ACTION_SEND_SOLDIERS_TO_BALIME:
|
case NPC_ACTION_SEND_SOLDIERS_TO_BALIME:
|
||||||
case NPC_ACTION_GLOBAL_OFFENSIVE_1:
|
case NPC_ACTION_GLOBAL_OFFENSIVE_1:
|
||||||
case NPC_ACTION_GLOBAL_OFFENSIVE_2:
|
case NPC_ACTION_GLOBAL_OFFENSIVE_2:
|
||||||
|
case NPC_ACTION_DEPLOY_TRANSPORT_GROUP:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NPC_ACTION_TRIGGER_QUEEN_BY_SAM_SITES_CONTROLLED:
|
case NPC_ACTION_TRIGGER_QUEEN_BY_SAM_SITES_CONTROLLED:
|
||||||
|
|||||||
@@ -1220,6 +1220,10 @@ typedef struct
|
|||||||
BOOLEAN fProvidesRobotLaserBonus;
|
BOOLEAN fProvidesRobotLaserBonus;
|
||||||
//shadooow: bitflag controlling what system needs to be in play for item to appear
|
//shadooow: bitflag controlling what system needs to be in play for item to appear
|
||||||
UINT8 usLimitedToSystem;
|
UINT8 usLimitedToSystem;
|
||||||
|
|
||||||
|
// rftr: the progress bounds that allow a transport group to drop an item
|
||||||
|
INT8 iTransportGroupMinProgress;
|
||||||
|
INT8 iTransportGroupMaxProgress;
|
||||||
} INVTYPE;
|
} INVTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2469,7 +2469,9 @@ void ReduceAmmoDroppedByNonPlayerSoldiers( SOLDIERTYPE *pSoldier, INT32 iInvSlot
|
|||||||
OBJECTTYPE *pObj = &( pSoldier->inv[ iInvSlot ] );
|
OBJECTTYPE *pObj = &( pSoldier->inv[ iInvSlot ] );
|
||||||
|
|
||||||
// if it's ammo
|
// if it's ammo
|
||||||
if ( Item[ pObj->usItem ].usItemClass == IC_AMMO )
|
if ( Item[ pObj->usItem ].usItemClass == IC_AMMO
|
||||||
|
&& Magazine[Item[pObj->usItem].ubClassIndex].ubMagType != AMMO_BOX
|
||||||
|
&& Magazine[Item[pObj->usItem].ubClassIndex].ubMagType != AMMO_CRATE)
|
||||||
{
|
{
|
||||||
//don't drop all the clips, just a random # of them between 1 and how many there are
|
//don't drop all the clips, just a random # of them between 1 and how many there are
|
||||||
pObj->ubNumberOfObjects = ( UINT8 ) ( 1 + Random( pObj->ubNumberOfObjects ) );
|
pObj->ubNumberOfObjects = ( UINT8 ) ( 1 + Random( pObj->ubNumberOfObjects ) );
|
||||||
|
|||||||
@@ -387,6 +387,10 @@ enum
|
|||||||
|
|
||||||
NPC_ACTION_GLOBAL_OFFENSIVE_1,
|
NPC_ACTION_GLOBAL_OFFENSIVE_1,
|
||||||
NPC_ACTION_GLOBAL_OFFENSIVE_2,
|
NPC_ACTION_GLOBAL_OFFENSIVE_2,
|
||||||
|
|
||||||
|
// rftr: transport groups
|
||||||
|
NPC_ACTION_DEPLOY_TRANSPORT_GROUP,
|
||||||
|
NPC_ACTION_RETURN_TRANSPORT_GROUP,
|
||||||
|
|
||||||
NPC_ACTION_RECRUIT_PROFILE_TO_EPC = 700,
|
NPC_ACTION_RECRUIT_PROFILE_TO_EPC = 700,
|
||||||
NPC_ACTION_UNRECRUIT_EPC = 701,
|
NPC_ACTION_UNRECRUIT_EPC = 701,
|
||||||
|
|||||||
@@ -1912,6 +1912,8 @@ enum
|
|||||||
STR_PB_ZOMBIE,
|
STR_PB_ZOMBIE,
|
||||||
STR_PB_BANDIT,
|
STR_PB_BANDIT,
|
||||||
STR_PB_BANDIT_KILLCIVS_IN_SECTOR,
|
STR_PB_BANDIT_KILLCIVS_IN_SECTOR,
|
||||||
|
STR_PB_TRANSPORT_GROUP,
|
||||||
|
STR_PB_TRANSPORT_GROUP_EN_ROUTE,
|
||||||
|
|
||||||
TEXT_NUM_STRATEGIC_TEXT
|
TEXT_NUM_STRATEGIC_TEXT
|
||||||
};
|
};
|
||||||
|
|||||||
+17
-5
@@ -307,7 +307,9 @@ itemStartElementHandle(void *userData, const XML_Char *name, const XML_Char **at
|
|||||||
strcmp(name, "ProvidesRobotNightVision") == 0 ||
|
strcmp(name, "ProvidesRobotNightVision") == 0 ||
|
||||||
strcmp(name, "ProvidesRobotLaserBonus") == 0 ||
|
strcmp(name, "ProvidesRobotLaserBonus") == 0 ||
|
||||||
strcmp(name, "FoodSystemExclusive") == 0 ||
|
strcmp(name, "FoodSystemExclusive") == 0 ||
|
||||||
strcmp(name, "DiseaseSystemExclusive") == 0
|
strcmp(name, "DiseaseSystemExclusive") == 0 ||
|
||||||
|
strcmp(name, "TransportGroupMinProgress") == 0 ||
|
||||||
|
strcmp(name, "TransportGroupMaxProgress") == 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
pData->curElement = ELEMENT_PROPERTY;
|
pData->curElement = ELEMENT_PROPERTY;
|
||||||
@@ -1505,26 +1507,36 @@ itemEndElementHandle(void *userData, const XML_Char *name)
|
|||||||
}
|
}
|
||||||
else if (strcmp(name, "ProvidesRobotNightVision") == 0)
|
else if (strcmp(name, "ProvidesRobotNightVision") == 0)
|
||||||
{
|
{
|
||||||
pData->curElement == ELEMENT;
|
pData->curElement = ELEMENT;
|
||||||
pData->curItem.fProvidesRobotNightVision = (BOOLEAN)atol(pData->szCharData);
|
pData->curItem.fProvidesRobotNightVision = (BOOLEAN)atol(pData->szCharData);
|
||||||
}
|
}
|
||||||
else if (strcmp(name, "ProvidesRobotLaserBonus") == 0)
|
else if (strcmp(name, "ProvidesRobotLaserBonus") == 0)
|
||||||
{
|
{
|
||||||
pData->curElement == ELEMENT;
|
pData->curElement = ELEMENT;
|
||||||
pData->curItem.fProvidesRobotLaserBonus = (BOOLEAN)atol(pData->szCharData);
|
pData->curItem.fProvidesRobotLaserBonus = (BOOLEAN)atol(pData->szCharData);
|
||||||
}
|
}
|
||||||
else if (strcmp(name, "FoodSystemExclusive") == 0)
|
else if (strcmp(name, "FoodSystemExclusive") == 0)
|
||||||
{
|
{
|
||||||
pData->curElement == ELEMENT;
|
pData->curElement = ELEMENT;
|
||||||
if (atol(pData->szCharData))
|
if (atol(pData->szCharData))
|
||||||
pData->curItem.usLimitedToSystem|= FOOD_SYSTEM_FLAG;
|
pData->curItem.usLimitedToSystem|= FOOD_SYSTEM_FLAG;
|
||||||
}
|
}
|
||||||
else if (strcmp(name, "DiseaseSystemExclusive") == 0)
|
else if (strcmp(name, "DiseaseSystemExclusive") == 0)
|
||||||
{
|
{
|
||||||
pData->curElement == ELEMENT;
|
pData->curElement = ELEMENT;
|
||||||
if (atol(pData->szCharData))
|
if (atol(pData->szCharData))
|
||||||
pData->curItem.usLimitedToSystem|= DISEASE_SYSTEM_FLAG;
|
pData->curItem.usLimitedToSystem|= DISEASE_SYSTEM_FLAG;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(name, "TransportGroupMinProgress") == 0)
|
||||||
|
{
|
||||||
|
pData->curElement = ELEMENT;
|
||||||
|
pData->curItem.iTransportGroupMinProgress = (INT8)atoi(pData->szCharData);
|
||||||
|
}
|
||||||
|
else if (strcmp(name, "TransportGroupMaxProgress") == 0)
|
||||||
|
{
|
||||||
|
pData->curElement = ELEMENT;
|
||||||
|
pData->curItem.iTransportGroupMaxProgress = (INT8)atoi(pData->szCharData);
|
||||||
|
}
|
||||||
|
|
||||||
--pData->maxReadDepth;
|
--pData->maxReadDepth;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3568,6 +3568,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"僵尸", //L"Zombie",
|
L"僵尸", //L"Zombie",
|
||||||
L"土匪", //L"Bandit",
|
L"土匪", //L"Bandit",
|
||||||
L"土匪杀死了%d名平民,在%s分区。", //注:这里的%d和%s不可以随意放前面或后面,一定要按英文顺序,不然会出错。(%d和%s 在中文中不能反过来。) L"Bandits attack and kill %d civilians in sector %s.",
|
L"土匪杀死了%d名平民,在%s分区。", //注:这里的%d和%s不可以随意放前面或后面,一定要按英文顺序,不然会出错。(%d和%s 在中文中不能反过来。) L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6262,6 +6264,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"天气功能:暴风雪", //L"Weather: Snow",
|
L"天气功能:暴风雪", //L"Weather: Snow",
|
||||||
L"随机事件功能", //L"Mini Events",
|
L"随机事件功能", //L"Mini Events",
|
||||||
L"反抗军司令部功能", //L"Arulco Rebel Command",
|
L"反抗军司令部功能", //L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6309,6 +6312,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|天|气|功|能|:|暴|风|雪\n \n覆盖 [Tactical Weather Settings] ALLOW_SNOW\n \n暴风雪降低了能见度。\n \n配置选项:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW\n \n", //L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|天|气|功|能|:|暴|风|雪\n \n覆盖 [Tactical Weather Settings] ALLOW_SNOW\n \n暴风雪降低了能见度。\n \n配置选项:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW\n \n", //L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|随|机|事|件|功|能\n \n覆盖 [Mini Events Settings] MINI_EVENTS_ENABLED\n \n可能发生一些随机互动事件。\n \n配置选项:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \n详细信息请查看MiniEvents.lua。\n \n", //L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|随|机|事|件|功|能\n \n覆盖 [Mini Events Settings] MINI_EVENTS_ENABLED\n \n可能发生一些随机互动事件。\n \n配置选项:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \n详细信息请查看MiniEvents.lua。\n \n", //L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|反|抗|军|司|令|部|功|能\n \n覆盖 [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \n允许你升级占领的城镇,控制反抗军在战略层面上运作。\n \n详细的内容设定请查看RebelCommand_Settings.ini。\n \n", //L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|反|抗|军|司|令|部|功|能\n \n覆盖 [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \n允许你升级占领的城镇,控制反抗军在战略层面上运作。\n \n详细的内容设定请查看RebelCommand_Settings.ini。\n \n", //L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6356,6 +6360,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"启用暴风雪功能。在暴风雪中,更难被看到,武器退化更快,呼吸也更困难。", //L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"启用暴风雪功能。在暴风雪中,更难被看到,武器退化更快,呼吸也更困难。", //L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"在游戏过程中,可能会弹出简短的事件。您可以从两个选项中选择一个,这可能会产生积极或消极的影响。事件可以影响各种各样的事情,但主要是你的佣兵。", //L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"在游戏过程中,可能会弹出简短的事件。您可以从两个选项中选择一个,这可能会产生积极或消极的影响。事件可以影响各种各样的事情,但主要是你的佣兵。", //L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"在完成反抗军食物运送任务后,你可以访问他们的(A.R.C)指挥部网站。在这里你可以设定反抗军的政策,也可以为占领区单独设置地方政策。这将带来丰厚的奖励。作为代价,城镇的民忠会上升得更慢,所以你需要更加努力地让当地人信任你。", //L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"在完成反抗军食物运送任务后,你可以访问他们的(A.R.C)指挥部网站。在这里你可以设定反抗军的政策,也可以为占领区单独设置地方政策。这将带来丰厚的奖励。作为代价,城镇的民忠会上升得更慢,所以你需要更加努力地让当地人信任你。", //L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12098,6 +12103,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"协同行动,悄悄地抵进敌军,但是要小心:这可能会让你部署在劣势区域。当进攻敌军部队时,部署区会更大。", //L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"协同行动,悄悄地抵进敌军,但是要小心:这可能会让你部署在劣势区域。当进攻敌军部队时,部署区会更大。", //L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"扰乱ASD", //L"Disrupt ASD",
|
L"扰乱ASD", //L"Disrupt ASD",
|
||||||
L"破坏Arulco特种部门(ASD)的日常行动。临时阻止ASD部署更多的机械化单位,并且大幅度降低他们的每日收入。", //L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"破坏Arulco特种部门(ASD)的日常行动。临时阻止ASD部署更多的机械化单位,并且大幅度降低他们的每日收入。", //L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"战略情报", //L"Strategic Intel",
|
L"战略情报", //L"Strategic Intel",
|
||||||
L"侦听敌人,发现敌军的攻击目标。当在战略地图上观察队伍时,敌军优先进攻的目标区域会被标红。", //L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"侦听敌人,发现敌军的攻击目标。当在战略地图上观察队伍时,敌军优先进攻的目标区域会被标红。", //L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"强化本地商店", //L"Improve Local Shops",
|
L"强化本地商店", //L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3568,6 +3568,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6265,6 +6267,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6312,6 +6315,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6359,6 +6363,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12108,6 +12113,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3568,6 +3568,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6262,6 +6264,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6309,6 +6312,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6356,6 +6360,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12098,6 +12103,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3576,6 +3576,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6270,6 +6272,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6317,6 +6320,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6364,6 +6368,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12090,6 +12095,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3605,6 +3605,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6133,6 +6135,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6180,6 +6183,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6227,6 +6231,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12012,6 +12017,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3563,6 +3563,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6251,6 +6253,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6298,6 +6301,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6345,6 +6349,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12099,6 +12104,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3574,6 +3574,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6266,6 +6268,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6313,6 +6316,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6360,6 +6364,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12112,6 +12117,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
@@ -3568,6 +3568,8 @@ STR16 gpStrategicString[] =
|
|||||||
L"Zombie",
|
L"Zombie",
|
||||||
L"Bandit",
|
L"Bandit",
|
||||||
L"Bandits attack and kill %d civilians in sector %s.",
|
L"Bandits attack and kill %d civilians in sector %s.",
|
||||||
|
L"Transport group",
|
||||||
|
L"Transport group en route",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 gpGameClockString[] =
|
STR16 gpGameClockString[] =
|
||||||
@@ -6258,6 +6260,7 @@ STR16 z113FeaturesToggleText[] =
|
|||||||
L"Weather: Snow",
|
L"Weather: Snow",
|
||||||
L"Mini Events",
|
L"Mini Events",
|
||||||
L"Arulco Rebel Command",
|
L"Arulco Rebel Command",
|
||||||
|
L"Strategic Transport Groups",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesHelpText[] =
|
STR16 z113FeaturesHelpText[] =
|
||||||
@@ -6305,6 +6308,7 @@ STR16 z113FeaturesHelpText[] =
|
|||||||
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
L"|W|e|a|t|h|e|r|: |S|n|o|w\nOverrides [Tactical Weather Settings] ALLOW_SNOW\n \nSnowstorms decrease visibility.\n \nConfigurable Options:\nSNOW_EVENTS_PER_DAY\nSNOW_CHANCE_PER_DAY\nSNOW_MIN_LENGTH_IN_MINUTES\nSNOW_MAX_LENGTH_IN_MINUTES\nWEAPON_RELIABILITY_REDUCTION_SNOW\nBREATH_GAIN_REDUCTION_SNOW\nVISUAL_DISTANCE_DECREASE_SNOW\nHEARING_REDUCTION_SNOW",
|
||||||
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
L"|M|i|n|i |E|v|e|n|t|s\nOverrides [Mini Events Settings] MINI_EVENTS_ENABLED\n \nRandom events can occur.\n \nConfigurable Options:\nMINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS\nMINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS\n \nSee MiniEvents.lua for more details.",
|
||||||
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
L"|A|R|C\nOverrides [Rebel Command Settings] REBEL_COMMAND_ENABLED\n \nCommand the rebel movement at the strategic level, and upgrade captured towns.\n \nFor tweakable values, see RebelCommand_Settings.ini.",
|
||||||
|
L"|S|t|r|a|t|e|g|i|c |T|r|a|n|s|p|o|r|t |G|r|o|u|p|s\nOverrides [Strategic Gameplay Settings] STRATEGIC_TRANSPORT_GROUPS_ENABLED\n \nTransport groups carry valuable equipment across the map.\n \nConfigurable Options:\nMAX_SIMULTANEOUS_STRATEGIC_TRANSPORT_GROUPS",
|
||||||
};
|
};
|
||||||
|
|
||||||
STR16 z113FeaturesPanelText[] =
|
STR16 z113FeaturesPanelText[] =
|
||||||
@@ -6352,6 +6356,7 @@ STR16 z113FeaturesPanelText[] =
|
|||||||
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
L"Toggle snow. In a snowstorm, it is harder to see, weapons degrade faster, and it is a little harder to regain breath.",
|
||||||
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
L"During the course of a campaign, brief events can pop up. You can select one of two responses, which may have positive and/or negative effects. Events can affect a wide variety of things, but mostly your mercs.",
|
||||||
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
L"After completing the food delivery quest for the rebels, they will grant you access to their command website (A.R.C.). You can set the rebels' country-wide directive there, and capturing towns allows you to enact policies in that region that provide powerful bonuses. This comes at a price - town loyalty will rise slower, so you will need to work harder to have the locals trust you.",
|
||||||
|
L"The enemy sends groups across the map. If you can find and intercept them, they will probably have valuable gear. However, depending on your difficulty, each group that completes its transport mission provides the AI with strategic resources. Best experienced with Arulco Strategic Division enabled.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -12093,6 +12098,8 @@ STR16 szRebelCommandAgentMissionsText[] =
|
|||||||
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
L"Coordinate efforts to find ways to sneak up on the enemy, but be careful: it's equally possible to put yourself in a disadvantaged deployment area. When attacking enemy forces, the deployment area is much larger.",
|
||||||
L"Disrupt ASD",
|
L"Disrupt ASD",
|
||||||
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
L"Wreak havoc on the day-to-day operations of the Arulco Special Division. Temporarily prevent the ASD from deploying additional mechanised units, and drastically reduce their daily income.",
|
||||||
|
L"Forge Transport Orders",
|
||||||
|
L"Create a bogus supply request. An enemy transport group will be ordered to rendezvous at this agent's location.",
|
||||||
L"Strategic Intel",
|
L"Strategic Intel",
|
||||||
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
L"Intercept plans and discover where enemies intend to strike. When viewing teams on the strategic map, sectors prioritised by the enemy will be marked in red.",
|
||||||
L"Improve Local Shops",
|
L"Improve Local Shops",
|
||||||
|
|||||||
Reference in New Issue
Block a user