mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New Feature: strategic militia command allows ordering militia around in the map if someoen performs the STRATEGIC_MILITIA_MOVEMENT facility assignment.
requires GameDir >= r1946 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6943 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+2
-1
@@ -21,6 +21,7 @@ extern CHAR16 zTrackingNumber[16];
|
||||
// Keeps track of the saved game version. Increment the saved game version whenever
|
||||
// you will invalidate the saved game file
|
||||
|
||||
#define MILITIA_MOVEMENT 152 // Flugente: allow control of strategic militia movement
|
||||
#define SNITCH_TRAIT_EXTENDED 151 // anv: more soldier flags, remembering exposition of snitch
|
||||
#define CAMPAIGNSTATS 150 // Flugente: store campaign statistics
|
||||
#define WALDO_CAN_REPAIR_HELICOPTER 149 // anv: have to refresh Waldo records
|
||||
@@ -70,7 +71,7 @@ extern CHAR16 zTrackingNumber[16];
|
||||
#define AP100_SAVEGAME_DATATYPE_CHANGE 105 // Before this, we didn't have the 100AP structure changes
|
||||
#define NIV_SAVEGAME_DATATYPE_CHANGE 102 // Before this, we used the old structure system
|
||||
|
||||
#define SAVE_GAME_VERSION SNITCH_TRAIT_EXTENDED
|
||||
#define SAVE_GAME_VERSION MILITIA_MOVEMENT
|
||||
|
||||
//#define RUSSIANGOLD
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -455,6 +455,9 @@ void ClearSectorScanResults();
|
||||
|
||||
void HandleSpreadingPropagandaInSector( INT16 sMapX, INT16 sMapY, INT8 bZ );
|
||||
|
||||
// Flugente: handle militia command
|
||||
void HandleMilitiaCommand();
|
||||
|
||||
// is the character between secotrs in mvt
|
||||
BOOLEAN CharacterIsBetweenSectors( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -2425,7 +2428,7 @@ void UpdateAssignments()
|
||||
|
||||
// handle any training
|
||||
HandleTrainingInSector( sX, sY, bZ );
|
||||
|
||||
|
||||
// handle training of character in sector
|
||||
HandleRadioScanInSector( sX, sY, bZ );
|
||||
|
||||
@@ -2445,6 +2448,9 @@ void UpdateAssignments()
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: handle militia command
|
||||
HandleMilitiaCommand();
|
||||
|
||||
// check to see if anyone is done healing?
|
||||
UpdatePatientsWhoAreDoneHealing( );
|
||||
|
||||
@@ -5617,6 +5623,24 @@ void ClearSectorScanResults()
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: handle militia command
|
||||
void HandleMilitiaCommand()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
UINT32 uiCnt = 0;
|
||||
UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier)
|
||||
{
|
||||
if( pSoldier && pSoldier->bAssignment == FACILITY_STRATEGIC_MILITIA_MOVEMENT && pSoldier->flags.fMercAsleep == FALSE )
|
||||
{
|
||||
// every commander gets a bit of leadership and wisdom
|
||||
StatChange( pSoldier, LDRAMT, 2, TRUE );
|
||||
StatChange( pSoldier, WISDOMAMT, 1, TRUE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// handle snitch spreading propaganda assignment
|
||||
// totally not a copy of HandleRadioScanInSector
|
||||
void HandleSpreadingPropagandaInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
@@ -14575,6 +14599,28 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
}
|
||||
break;
|
||||
case FACILITY_STRATEGIC_MILITIA_MOVEMENT:
|
||||
{
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
|
||||
// remove from squad
|
||||
RemoveCharacterFromSquads( pSoldier );
|
||||
|
||||
// remove from any vehicle
|
||||
if( pSoldier->bOldAssignment == VEHICLE )
|
||||
{
|
||||
TakeSoldierOutOfVehicle( pSoldier );
|
||||
}
|
||||
|
||||
if ( pSoldier->bAssignment != bAssignment )
|
||||
{
|
||||
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
||||
}
|
||||
|
||||
ChangeSoldiersAssignment( pSoldier, bAssignment );
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
}
|
||||
break;
|
||||
case( VEHICLE ):
|
||||
if( CanCharacterVehicle( pSoldier ) && IsThisVehicleAccessibleToSoldier( pSoldier, iParam1 ) )
|
||||
{
|
||||
@@ -15820,6 +15866,10 @@ void ReEvaluateEveryonesNothingToDo()
|
||||
fNothingToDo = FALSE;
|
||||
break;
|
||||
|
||||
case FACILITY_STRATEGIC_MILITIA_MOVEMENT:
|
||||
fNothingToDo = FALSE;
|
||||
break;
|
||||
|
||||
case VEHICLE:
|
||||
default: // squads
|
||||
fNothingToDo = FALSE;
|
||||
@@ -16101,6 +16151,14 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam )
|
||||
fItWorked = TRUE;
|
||||
}
|
||||
break;
|
||||
case FACILITY_STRATEGIC_MILITIA_MOVEMENT:
|
||||
if( CanCharacterFacility( pSoldier, bParam, FAC_STRATEGIC_MILITIA_MOVEMENT ) )
|
||||
{
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
SetSoldierAssignment( pSoldier, FACILITY_STRATEGIC_MILITIA_MOVEMENT, bParam, 0,0 );
|
||||
fItWorked = TRUE;
|
||||
}
|
||||
break;
|
||||
case( SQUAD_1 ):
|
||||
case( SQUAD_2 ):
|
||||
case( SQUAD_3 ):
|
||||
@@ -18605,9 +18663,16 @@ BOOLEAN CanCharacterFacility( SOLDIERTYPE *pSoldier, UINT8 ubFacilityType, UINT8
|
||||
}
|
||||
}
|
||||
|
||||
/*if ( ubAssignmentType == FAC_STRATEGIC_MILITIA_MOVEMENT )
|
||||
{
|
||||
if( !CanCharacterGatherInformation(pSoldier) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
}*/
|
||||
|
||||
// If we've reached this, then all is well.
|
||||
return( TRUE );
|
||||
|
||||
}
|
||||
|
||||
INT8 CountFreeFacilitySlots( UINT8 sMapX, UINT8 sMapY, UINT8 ubFacilityType )
|
||||
@@ -19632,6 +19697,9 @@ void FacilityAssignmentMenuBtnCallback ( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
case FAC_GATHER_RUMOURS:
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_GATHER_RUMOURS );
|
||||
break;
|
||||
case FAC_STRATEGIC_MILITIA_MOVEMENT:
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_STRATEGIC_MILITIA_MOVEMENT );
|
||||
break;
|
||||
}
|
||||
|
||||
// Flugente: I guess this piece of code is here to get a group Id for the soldier, which must not be there for movement specifically. Just my understanding, in case anybody else coming here wonders
|
||||
@@ -20408,4 +20476,21 @@ void MoveItemMenuMvtCallback(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
// unhighlight all strings in box
|
||||
UnHighLightBox( ghMoveItemBox );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN MercStaffsMilitaryHQ()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
UINT32 uiCnt = 0;
|
||||
UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier)
|
||||
{
|
||||
if( pSoldier && pSoldier->bAssignment == FACILITY_STRATEGIC_MILITIA_MOVEMENT && pSoldier->flags.fMercAsleep == FALSE )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ enum
|
||||
FACILITY_GATHER_RUMOURS,
|
||||
SNITCH_SPREAD_PROPAGANDA,
|
||||
SNITCH_GATHER_RUMOURS,
|
||||
FACILITY_STRATEGIC_MILITIA_MOVEMENT, // Flugente: merc staffs a military HQ, we can now control militia movement on the map
|
||||
NUM_ASSIGNMENTS,
|
||||
};
|
||||
|
||||
@@ -451,6 +452,8 @@ UINT32 HandlePropagandaBlockingBadNewsInTown( INT8 bTownId, UINT32 uiLoyaltyDecr
|
||||
|
||||
void HandleGatheringInformationBySoldier( SOLDIERTYPE* pSoldier );
|
||||
|
||||
BOOLEAN MercStaffsMilitaryHQ();
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -191,6 +191,7 @@ enum
|
||||
FAC_SPREAD_PROPAGANDA,
|
||||
FAC_SPREAD_PROPAGANDA_GLOBAL,
|
||||
FAC_GATHER_RUMOURS,
|
||||
FAC_STRATEGIC_MILITIA_MOVEMENT,
|
||||
NUM_FACILITY_ASSIGNMENTS,
|
||||
};
|
||||
|
||||
|
||||
@@ -769,7 +769,7 @@ INT8 GetSoldierFacilityAssignmentIndex( SOLDIERTYPE *pSoldier )
|
||||
bAssignment == IN_TRANSIT ||
|
||||
bAssignment == TRAIN_TOWN ||
|
||||
bAssignment == TRAIN_MOBILE ||
|
||||
( bAssignment > FACILITY_REST && ( bAssignment < FACILITY_PRISON_SNITCH || bAssignment > FACILITY_GATHER_RUMOURS ) ))
|
||||
( bAssignment > FACILITY_REST && bAssignment != FACILITY_STRATEGIC_MILITIA_MOVEMENT && ( bAssignment < FACILITY_PRISON_SNITCH || bAssignment > FACILITY_GATHER_RUMOURS ) ))
|
||||
{
|
||||
// Soldier is performing a distinctly NON-FACILITY assignment.
|
||||
return (-1);
|
||||
@@ -933,6 +933,9 @@ INT8 GetSoldierFacilityAssignmentIndex( SOLDIERTYPE *pSoldier )
|
||||
case FACILITY_GATHER_RUMOURS:
|
||||
bAssignmentIndex = FAC_GATHER_RUMOURS;
|
||||
break;
|
||||
case FACILITY_STRATEGIC_MILITIA_MOVEMENT:
|
||||
bAssignmentIndex = FAC_STRATEGIC_MILITIA_MOVEMENT;
|
||||
break;
|
||||
default:
|
||||
bAssignmentIndex = -1;
|
||||
break;
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "laptop.h"
|
||||
#include "Campaign.h"
|
||||
#include "PostalService.h"
|
||||
#include "MilitiaSquads.h"
|
||||
#endif
|
||||
|
||||
#include "connect.h"
|
||||
@@ -505,6 +506,9 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
CrippledVersionEndGameCheck();
|
||||
break;
|
||||
#endif
|
||||
case EVENT_MILITIA_MOVEMENT_ORDER:
|
||||
MilitiaMovementOrder( (UINT8) pEvent->uiParam );
|
||||
break;
|
||||
}
|
||||
gfPreventDeletionOfAnyEvent = fOrigPreventFlag;
|
||||
return TRUE;
|
||||
|
||||
@@ -112,6 +112,8 @@ enum
|
||||
EVENT_HELICOPTER_HOVER_FOR_A_MINUTE,
|
||||
EVENT_HELICOPTER_REFUEL_FOR_A_MINUTE,
|
||||
|
||||
EVENT_MILITIA_MOVEMENT_ORDER, // Flugente: timed event: militia was ordered to move, at this time they should arrive
|
||||
|
||||
NUMBER_OF_EVENT_TYPES_PLUS_ONE,
|
||||
NUMBER_OF_EVENT_TYPES = NUMBER_OF_EVENT_TYPES_PLUS_ONE - 1
|
||||
};
|
||||
|
||||
@@ -3741,7 +3741,108 @@ void ShowEnemyGroupsInMotion( INT16 sX, INT16 sY )
|
||||
}
|
||||
curr = curr->next;
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: show militia movement
|
||||
void ShowMilitiaInMotion( INT16 sX, INT16 sY )
|
||||
{
|
||||
INT32 sExiting = 0;
|
||||
INT32 sEntering = 0;
|
||||
INT16 sDest = 0;
|
||||
INT16 sSource = 0;
|
||||
INT16 sOffsetX = 0, sOffsetY = 0;
|
||||
INT16 sXPosition = 0, sYPosition = 0;
|
||||
INT32 iCounter = 0;
|
||||
HVOBJECT hIconHandle;
|
||||
INT16 sTextXOffset = 0;
|
||||
INT16 sTextYOffset = 0;
|
||||
INT32 iWidth = 0, iHeight = 0;
|
||||
INT32 iDeltaXForError = 0, iDeltaYForError = 0;
|
||||
|
||||
if( iCurrentMapSectorZ )
|
||||
return;
|
||||
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sX, sY ) ] );
|
||||
|
||||
if ( !CountMilitia(pSectorInfo) )
|
||||
return;
|
||||
|
||||
if ( ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_ALLDIRS ) == 0 )
|
||||
return;
|
||||
|
||||
// show the icons for people in motion from this sector to the next guy over
|
||||
|
||||
INT16 iX = sX, iY = sY;
|
||||
UINT8 ubDirection = 0;
|
||||
|
||||
GetVideoObject(&hIconHandle, guiENEMYBETWEENSECTORICONS );
|
||||
|
||||
INT16 iconOffsetX = 0;
|
||||
INT16 iconOffsetY = 0;
|
||||
|
||||
if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_NORTH )
|
||||
{
|
||||
ubDirection = 4;
|
||||
sOffsetX = (MAP_GRID_X / 2);
|
||||
sOffsetY = 0;
|
||||
iconOffsetX = -(hIconHandle->pETRLEObject[ubDirection].usWidth / 2);
|
||||
iconOffsetY = -(hIconHandle->pETRLEObject[ubDirection].usHeight);
|
||||
}
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_EAST )
|
||||
{
|
||||
ubDirection = 5;
|
||||
sOffsetX = MAP_GRID_X;
|
||||
sOffsetY = (MAP_GRID_Y / 2);
|
||||
iconOffsetY = -(hIconHandle->pETRLEObject[ubDirection].usHeight / 2);
|
||||
}
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_SOUTH )
|
||||
{
|
||||
ubDirection = 6;
|
||||
sOffsetX = (MAP_GRID_X / 2);
|
||||
sOffsetY = MAP_GRID_Y;
|
||||
iconOffsetX = -(hIconHandle->pETRLEObject[ubDirection].usWidth / 2);
|
||||
}
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_WEST )
|
||||
{
|
||||
ubDirection = 7;
|
||||
sOffsetX = 0;
|
||||
sOffsetY = (MAP_GRID_Y / 2);
|
||||
iconOffsetX = -(hIconHandle->pETRLEObject[ubDirection].usWidth);
|
||||
iconOffsetY = -(hIconHandle->pETRLEObject[ubDirection].usHeight / 2);
|
||||
}
|
||||
|
||||
if (iResolution >= _1024x768 )
|
||||
{
|
||||
iconOffsetY -= 1;
|
||||
}
|
||||
|
||||
iX = MAP_VIEW_START_X+( sX * MAP_GRID_X ) + sOffsetX + iconOffsetX;
|
||||
iY = MAP_VIEW_START_Y + ( sY * MAP_GRID_Y ) + sOffsetY + iconOffsetY;
|
||||
|
||||
BltVideoObject(guiSAVEBUFFER, hIconHandle, ubDirection , ( INT16 ) iX, ( INT16 ) iY , VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
|
||||
iWidth = 12;
|
||||
iHeight = 7;
|
||||
|
||||
// error correction for scrolling with people on the move
|
||||
if( iX < 0 )
|
||||
{
|
||||
iDeltaXForError = 0 - iX;
|
||||
iWidth -= iDeltaXForError;
|
||||
iX = 0;
|
||||
}
|
||||
|
||||
if( iY < 0 )
|
||||
{
|
||||
iDeltaYForError = 0 - iY;
|
||||
iHeight -= iDeltaYForError;
|
||||
iY = 0;
|
||||
}
|
||||
|
||||
if( ( iWidth > 0 )&&( iHeight > 0 ) )
|
||||
{
|
||||
RestoreExternBackgroundRect( iX, iY, ( INT16 )iWidth, ( INT16 )iHeight );
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayDistancesForHelicopter( void )
|
||||
@@ -6389,6 +6490,9 @@ void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
|
||||
return;
|
||||
}
|
||||
|
||||
// Flugente: show militia in motion
|
||||
ShowMilitiaInMotion( sSectorX, sSectorY );
|
||||
|
||||
// get total number of badguys here
|
||||
sNumberOfEnemies = NumEnemiesInSector( sSectorX, sSectorY );
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ void RestoreClipRegionToFullScreenForRectangle( UINT32 uiDestPitchBYTES );
|
||||
// show the icons for people in motion
|
||||
void ShowPeopleInMotion( INT16 sX, INT16 sY );
|
||||
void ShowEnemyGroupsInMotion( INT16 sX, INT16 sY);
|
||||
void ShowMilitiaInMotion( INT16 sX, INT16 sY); // added by Flugente
|
||||
|
||||
// last sector in helicopter's path
|
||||
INT16 GetLastSectorOfHelicoptersPath( void );
|
||||
@@ -298,7 +299,7 @@ extern SGPRect MapScreenRect;
|
||||
extern BOOLEAN fDrawTempHeliPath;
|
||||
|
||||
// selected destination char
|
||||
extern INT8 bSelectedDestChar;
|
||||
extern INT8 bSelectedDestChar;
|
||||
|
||||
// current assignment character
|
||||
extern INT8 bSelectedAssignChar;
|
||||
|
||||
+106
-36
@@ -464,7 +464,7 @@ void GenerateMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY,
|
||||
}
|
||||
|
||||
// Creates militia at destination sector and removes it from starting sector
|
||||
void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOLEAN fAlternativeMax )
|
||||
void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOLEAN fAlternativeMax, BOOLEAN fSkipSpreading )
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
SECTORINFO *pTSectorInfo = &( SectorInfo[ SECTOR( sTMapX, sTMapY ) ] );
|
||||
@@ -476,13 +476,13 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
UINT8 bTotalGreensPercent = 0, bTotalRegularsPercent = 0, bTotalElitesPercent = 0;
|
||||
INT8 bNewSourceGroupSize = 0, bNewDestGroupSize = 0, bGroupSizeRatio = 0;
|
||||
UINT8 ubChanceToSpreadOut;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
// We begin by determining the group's chance to "spread out" into the next sector rather
|
||||
// than moving in en-masse. This is mainly affected by the presence of enemies.
|
||||
|
||||
// Is the target a city or SAM site?
|
||||
if (IsThisSectorASAMSector( sTMapX, sTMapY, 0 ) ||
|
||||
if (fSkipSpreading || IsThisSectorASAMSector( sTMapX, sTMapY, 0 ) ||
|
||||
( GetTownIdForSector( sTMapX, sTMapY ) != BLANK_SECTOR &&
|
||||
gfMilitiaAllowedInTown[GetTownIdForSector( sTMapX, sTMapY )] ))
|
||||
{
|
||||
@@ -1421,13 +1421,78 @@ void ClearBlockMoveList()
|
||||
|
||||
BOOLEAN CheckInBlockMoveList(INT16 sMapX, INT16 sMapY)
|
||||
{
|
||||
UINT16 i;
|
||||
for( i = 0; i < uiBlockMoveListPointer ; ++i)
|
||||
if( sMapX == SECTORX(pBlockMoveList[i]) && sMapY == SECTORY(pBlockMoveList[i]) )return TRUE;
|
||||
for( UINT16 i = 0; i < uiBlockMoveListPointer ; ++i)
|
||||
{
|
||||
if( sMapX == SECTORX(pBlockMoveList[i]) && sMapY == SECTORY(pBlockMoveList[i]) )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void MilitiaMovementOrder(UINT8 sector)
|
||||
{
|
||||
INT16 sX = SECTORX(sector);
|
||||
INT16 sY = SECTORY(sector);
|
||||
|
||||
// if we are in gamescreen and a battle is going on, and this is the sector that militia moves from, don't move them. Suddenly disappearing would be... awkward
|
||||
if ( guiCurrentScreen == GAME_SCREEN && gTacticalStatus.uiFlags & INCOMBAT && gWorldSectorX == sX && gWorldSectorY == sY && !gbWorldSectorZ )
|
||||
{
|
||||
// remove all movement flags
|
||||
StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS;
|
||||
return;
|
||||
}
|
||||
|
||||
// to stop the player from just setting someone in HQ to give orders and then reassigning them, we simply demand that there'll also be someone when the militia peform the travelling
|
||||
if ( !MercStaffsMilitaryHQ() )
|
||||
{
|
||||
// remove all movement flags
|
||||
StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS;
|
||||
return;
|
||||
}
|
||||
|
||||
INT16 targetX = sX;
|
||||
INT16 targetY = sY;
|
||||
|
||||
if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_NORTH )
|
||||
--targetY;
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_WEST )
|
||||
--targetX;
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_EAST )
|
||||
++targetX;
|
||||
else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_SOUTH )
|
||||
++targetY;
|
||||
|
||||
// remove all movement flags
|
||||
StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS;
|
||||
|
||||
UINT8 targetsector = SECTOR(targetX, targetY);
|
||||
|
||||
if ( gGameExternalOptions.gflimitedRoaming && !IsSectorRoamingAllowed(targetsector) )
|
||||
return;
|
||||
|
||||
// if militia moves from the currently loaded sector, it has to drop all gear first
|
||||
if ( gGameExternalOptions.fMilitiaUseSectorInventory && gWorldSectorX == sX && gWorldSectorY == sY && !gbWorldSectorZ )
|
||||
{
|
||||
TeamDropAll( MILITIA_TEAM );
|
||||
}
|
||||
|
||||
MoveMilitiaSquad( sX, sY, targetX, targetY, FALSE, TRUE );
|
||||
|
||||
if ( gfStrategicMilitiaChangesMade)
|
||||
ResetMilitia();
|
||||
|
||||
if( NumEnemiesInSector( targetX, targetY ) )
|
||||
{
|
||||
//Moa: handle deserters before moving in hostile territory
|
||||
MobileMilitiaDeserters( targetX, targetY, TRUE, TRUE );
|
||||
|
||||
gfMSBattle = TRUE;
|
||||
|
||||
EnterAutoResolveMode( targetX, targetY );
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
UINT16 pMoveDir[4][3];
|
||||
@@ -1456,11 +1521,13 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
gfMSBattle = FALSE;
|
||||
}
|
||||
|
||||
if( CheckInBlockMoveList( sMapX, sMapY ) )return;
|
||||
if( CheckInBlockMoveList( sMapX, sMapY ) )
|
||||
return;
|
||||
|
||||
uiMilitiaCount = CountMilitia(pSectorInfo);
|
||||
|
||||
if( !uiMilitiaCount )return;
|
||||
if( !uiMilitiaCount )
|
||||
return;
|
||||
|
||||
// Kaiden: Moved Create Militia code into CreateMilitiaSquads
|
||||
// Removed the code from here and added the procedure call
|
||||
@@ -1469,19 +1536,21 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
|
||||
if( (!gGameExternalOptions.gfmusttrainroaming) && ( GetTownIdForSector( sMapX, sMapY ) != BLANK_SECTOR ) )
|
||||
{
|
||||
if (GetWorldDay( ) < gGameExternalOptions.guiAllowMilitiaGroupsDelay)
|
||||
return;
|
||||
|
||||
if( GetWorldHour() % gGameExternalOptions.guiCreateEachNHours )
|
||||
return;
|
||||
|
||||
CreateMilitiaSquads( sMapX, sMapY );
|
||||
if (gfStrategicMilitiaChangesMade)
|
||||
// Flugente: only enter this if the time is correct (but do not return if it isn't, we still might do the movement part)
|
||||
if (GetWorldDay( ) < gGameExternalOptions.guiAllowMilitiaGroupsDelay && GetWorldHour() % gGameExternalOptions.guiCreateEachNHours )
|
||||
{
|
||||
ResetMilitia();
|
||||
CreateMilitiaSquads( sMapX, sMapY );
|
||||
if (gfStrategicMilitiaChangesMade)
|
||||
{
|
||||
ResetMilitia();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: if we can order militia directly, don't have them wander around at random
|
||||
if ( !MercStaffsMilitaryHQ() )
|
||||
return;
|
||||
|
||||
// HEADROCK HAM B2.7: If INI flag is set, allow militia to move out of Minor City sectors (Orta, Tixa, San Mona, etc).
|
||||
if (gGameExternalOptions.fAllowMilitiaMoveThroughMinorCities)
|
||||
fSourceCityAllowsRoaming = ( !gfMilitiaAllowedInTown[GetTownIdForSector( sMapX, sMapY )] );
|
||||
@@ -1493,14 +1562,16 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
if( !gGameExternalOptions.gfAllowMilitiaFollowPlayer || !PlayerMercsInSector_MSE( (UINT8)sMapX, (UINT8)sMapY, FALSE ) ) // and there's no player's mercs in the sector, or they are not forced to follow
|
||||
{
|
||||
if( GetWorldHour() % 2 )return;
|
||||
if( GetWorldHour() % 2 )
|
||||
return;
|
||||
|
||||
memset(pMoveDir, 0, sizeof(pMoveDir));
|
||||
GenerateDirectionInfos( sMapX, sMapY, &uiDirNumber, pMoveDir, FALSE, FALSE );
|
||||
|
||||
if( uiDirNumber )
|
||||
{
|
||||
for( x = 1; x < uiDirNumber ; ++x )pMoveDir[x][1] += pMoveDir[x-1][1];
|
||||
for( x = 1; x < uiDirNumber ; ++x )
|
||||
pMoveDir[x][1] += pMoveDir[x-1][1];
|
||||
// ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%ld,%ld", x, pMoveDir[x][1]);
|
||||
|
||||
// HEADROCK HAM 3.6: Too many INI settings. Removed a couple, including MIN/MAX SQUAD SIZE.
|
||||
@@ -1508,12 +1579,12 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
// ( uiMilitiaCount >= gGameExternalOptions.guiMinMilitiaSquadSize ? CHANCE_TO_MOVE_A_SQUAD : CHANCE_TO_MOVE_AN_UNFULL_SQUAD ) );
|
||||
iRandom = Random( pMoveDir[ uiDirNumber - 1 ][1] );
|
||||
|
||||
|
||||
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Roll %ld", iRandomRes);
|
||||
|
||||
iRandomRes = 256;
|
||||
|
||||
for( x = 0; x < uiDirNumber; ++x)
|
||||
{
|
||||
if( iRandom < pMoveDir[x][1] )
|
||||
{
|
||||
iRandomRes = x;
|
||||
@@ -1544,11 +1615,11 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
}
|
||||
|
||||
// WDS bug fix for moving militia
|
||||
int targetX = SECTORX( pMoveDir[ iRandomRes ][0] );
|
||||
int targetY = SECTORY( pMoveDir[ iRandomRes ][0] );
|
||||
INT16 targetX = SECTORX( pMoveDir[ iRandomRes ][0] );
|
||||
INT16 targetY = SECTORY( pMoveDir[ iRandomRes ][0] );
|
||||
Assert(targetX >= 0 && targetX < MAP_WORLD_X);
|
||||
Assert(targetY >= 0 && targetY < MAP_WORLD_Y);
|
||||
MoveMilitiaSquad( sMapX, sMapY, targetX, targetY, FALSE );
|
||||
MoveMilitiaSquad( sMapX, sMapY, targetX, targetY, FALSE, FALSE );
|
||||
|
||||
if ( gfStrategicMilitiaChangesMade)
|
||||
{
|
||||
@@ -1575,23 +1646,23 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
//Moa: handle deserters before moving in hostile territory
|
||||
MobileMilitiaDeserters( targetX, targetY, TRUE, TRUE );
|
||||
|
||||
gfMSBattle = TRUE;
|
||||
gfMSBattle = TRUE;
|
||||
|
||||
// GroupArrivedAtSector( pEnemyGroup->ubGroupID , TRUE, FALSE );
|
||||
EnterAutoResolveMode( targetX, targetY );
|
||||
// GroupArrivedAtSector( pEnemyGroup->ubGroupID , TRUE, FALSE );
|
||||
EnterAutoResolveMode( targetX, targetY );
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
else return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Kaiden: Roaming Militia Training:
|
||||
// If we're training roaming militia,
|
||||
// we'll get our squad from here:
|
||||
// Don't need to check for delay, as this function won't be
|
||||
// called if there is a delay set.
|
||||
// Kaiden: Roaming Militia Training:
|
||||
// If we're training roaming militia,
|
||||
// we'll get our squad from here:
|
||||
// Don't need to check for delay, as this function won't be
|
||||
// called if there is a delay set.
|
||||
void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
// Variables for Direction Rating checks
|
||||
@@ -1690,7 +1761,7 @@ void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
}
|
||||
}
|
||||
}
|
||||
iCounter++;
|
||||
++iCounter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1718,7 +1789,7 @@ void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
|
||||
// Check for enemies in target sector
|
||||
if( NumEnemiesInSector( sTMapX, sTMapY ) )
|
||||
{
|
||||
{
|
||||
// Initiave battle
|
||||
gfMSBattle = TRUE;
|
||||
EnterAutoResolveMode( sTMapX, sTMapY );
|
||||
@@ -1742,7 +1813,6 @@ void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY )
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1976,7 +2046,7 @@ void MilitiaFollowPlayer( INT16 sMapX, INT16 sMapY, INT16 sDMapX, INT16 sDMapY )
|
||||
IsThisSectorASAMSector( sDMapX, sDMapY, 0 ) )return;
|
||||
|
||||
|
||||
MoveMilitiaSquad( sMapX, sMapY, sDMapX, sDMapY, FALSE );
|
||||
MoveMilitiaSquad( sMapX, sMapY, sDMapX, sDMapY, FALSE, FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,10 @@ extern UINT8 guiDirNumber;
|
||||
|
||||
// Updates movement orders for militia squads
|
||||
void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY );
|
||||
|
||||
// Flugente: militia in this sector is ordered to move according to flags that were applied to it prior
|
||||
void MilitiaMovementOrder(UINT8 sector);
|
||||
|
||||
// Kaiden: creates militia squad in an adjacent sector
|
||||
// to the coordinates you pass to it.
|
||||
void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY );
|
||||
|
||||
@@ -3059,7 +3059,7 @@ INT32 FindTravelTimeBetweenWaypoints( WAYPOINT * pSource, WAYPOINT * pDest, GROU
|
||||
|
||||
|
||||
|
||||
#define FOOT_TRAVEL_TIME 89
|
||||
//#define FOOT_TRAVEL_TIME 89 // Flugente: moved to header
|
||||
#define CAR_TRAVEL_TIME 30
|
||||
#define TRUCK_TRAVEL_TIME 32
|
||||
#define TRACKED_TRAVEL_TIME 46
|
||||
|
||||
@@ -35,6 +35,8 @@ enum
|
||||
THROUGH_STRATEGIC_MOVE
|
||||
};
|
||||
|
||||
#define FOOT_TRAVEL_TIME 89
|
||||
|
||||
//This structure contains all of the information about a group moving in the strategic
|
||||
//layer. This includes all troops, equipment, and waypoints, and location.
|
||||
//NOTE: This is used for groups that are initiating a movement to another sector.
|
||||
|
||||
@@ -852,6 +852,10 @@ facilitytypeEndElementHandle(void *userData, const XML_Char *name)
|
||||
{
|
||||
//pData->curAssignmentType = (INT16) atol(pData->szCharData);
|
||||
pData->curAssignmentType = FAC_GATHER_RUMOURS;
|
||||
}
|
||||
else if (strcmp(pData->szCharData, "STRATEGIC_MILITIA_MOVEMENT") == 0)
|
||||
{
|
||||
pData->curAssignmentType = FAC_STRATEGIC_MILITIA_MOVEMENT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -7438,6 +7438,11 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
|
||||
//activate autoresolve in prebattle interface.
|
||||
ActivatePreBattleAutoresolveAction();
|
||||
}
|
||||
// Flugente: militia orders
|
||||
else if ( SetMilitiaMovementOrder(sSelMapX, sSelMapY, iCurrentMapSectorZ, MILITIA_MOVE_WEST) )
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
// only handle border button keyboard equivalents if the button is visible!
|
||||
@@ -7491,6 +7496,11 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
|
||||
TestDumpStatChanges();
|
||||
}
|
||||
#endif
|
||||
// Flugente: militia orders
|
||||
if ( SetMilitiaMovementOrder(sSelMapX, sSelMapY, iCurrentMapSectorZ, MILITIA_MOVE_EAST) )
|
||||
{
|
||||
;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
@@ -7950,6 +7960,11 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
|
||||
gfSaveGame = TRUE;
|
||||
RequestTriggerExitFromMapscreen( MAP_EXIT_TO_SAVE );
|
||||
}
|
||||
// Flugente: militia orders
|
||||
else if ( SetMilitiaMovementOrder(sSelMapX, sSelMapY, iCurrentMapSectorZ, MILITIA_MOVE_SOUTH) )
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(gGameExternalOptions.fEnableInventoryPoolQ && fShowMapInventoryPool == TRUE)//dnl ch51 081009
|
||||
{
|
||||
SortInventoryPoolQ();
|
||||
@@ -8192,6 +8207,11 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
|
||||
else if( fCtrl )
|
||||
{
|
||||
}
|
||||
// Flugente: militia orders
|
||||
else if ( SetMilitiaMovementOrder(sSelMapX, sSelMapY, iCurrentMapSectorZ, MILITIA_MOVE_NORTH) )
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
// only handle border button keyboard equivalents if the button is visible!
|
||||
|
||||
+98
-3
@@ -16,6 +16,10 @@
|
||||
#include "Vehicles.h"
|
||||
#include "Game Clock.h"
|
||||
#include "CampaignStats.h" // added by Flugente
|
||||
#include "militiasquads.h" // added by Flugente
|
||||
#include "Game Event Hook.h" // added by Flugente
|
||||
#include "message.h" // added by Flugente
|
||||
#include "Text.h" // added by Flugente
|
||||
#endif
|
||||
|
||||
#ifdef JA2UB
|
||||
@@ -160,7 +164,98 @@ void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier )
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
BOOLEAN SetMilitiaMovementOrder(INT16 sX, INT16 sY, INT8 sZ, UINT32 dir)
|
||||
{
|
||||
// militia can only move on the surface
|
||||
if ( sZ )
|
||||
return FALSE;
|
||||
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sX, sY ) ] );
|
||||
|
||||
// militia needs to be here...
|
||||
if ( !CountMilitia(pSectorInfo) )
|
||||
return FALSE;
|
||||
|
||||
// in order to give movement orders, we need a merc to staff a military headquarter
|
||||
if ( !MercStaffsMilitaryHQ() )
|
||||
return FALSE;
|
||||
|
||||
INT16 newX = sX;
|
||||
INT16 newY = sY;
|
||||
UINT8 movetype = THROUGH_STRATEGIC_MOVE;
|
||||
|
||||
switch (dir)
|
||||
{
|
||||
case MILITIA_MOVE_NORTH:
|
||||
--newY;
|
||||
movetype = NORTH_STRATEGIC_MOVE;
|
||||
break;
|
||||
|
||||
case MILITIA_MOVE_WEST:
|
||||
--newX;
|
||||
movetype = WEST_STRATEGIC_MOVE;
|
||||
break;
|
||||
|
||||
case MILITIA_MOVE_EAST:
|
||||
++newX;
|
||||
movetype = EAST_STRATEGIC_MOVE;
|
||||
break;
|
||||
|
||||
case MILITIA_MOVE_SOUTH:
|
||||
++newY;
|
||||
movetype = SOUTH_STRATEGIC_MOVE;
|
||||
break;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( gGameExternalOptions.gflimitedRoaming && !IsSectorRoamingAllowed( SECTOR(newX, newY) ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, gpStrategicString[STR_MILITIAMOVEMENT_NO_LIMITEDROAMING] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UINT8 ubTraverseType = SectorInfo[ SECTOR(sX, sY) ].ubTraversability[ movetype ];
|
||||
|
||||
if( ubTraverseType == GROUNDBARRIER || ubTraverseType == EDGEOFWORLD )
|
||||
return FALSE;
|
||||
|
||||
UINT32 ubTraverseMod = 0;
|
||||
|
||||
switch( ubTraverseType )
|
||||
{
|
||||
case TOWN: ubTraverseMod = 1780;break;
|
||||
case ROAD: ubTraverseMod = 100;break;
|
||||
case PLAINS: ubTraverseMod = 85; break;
|
||||
case SAND: ubTraverseMod = 50; break;
|
||||
case SPARSE: ubTraverseMod = 70; break;
|
||||
case DENSE: ubTraverseMod = 60; break;
|
||||
case SWAMP: ubTraverseMod = 35; break;
|
||||
case WATER: ubTraverseMod = 25; break;
|
||||
case HILLS: ubTraverseMod = 50; break;
|
||||
case NS_RIVER: ubTraverseMod = 25; break;
|
||||
case EW_RIVER: ubTraverseMod = 25; break;
|
||||
}
|
||||
|
||||
if( ubTraverseMod )
|
||||
{
|
||||
UINT32 timeneeded = FOOT_TRAVEL_TIME * 100 / ubTraverseMod;
|
||||
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sX, sY ) ] );
|
||||
|
||||
StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS;
|
||||
StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags |= dir;
|
||||
|
||||
AddStrategicEvent( EVENT_MILITIA_MOVEMENT_ORDER, GetWorldTotalMin() + timeneeded, SECTOR( sX, sY ) );
|
||||
|
||||
fMapPanelDirty = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
+19
-5
@@ -9,15 +9,18 @@
|
||||
struct strategicmapelement{
|
||||
UINT8 UNUSEDuiFootEta[4]; // eta/mvt costs for feet
|
||||
UINT8 UNUSEDuiVehicleEta[4]; // eta/mvt costs for vehicles
|
||||
UINT8 uiBadFootSector[4]; // blocking mvt for foot
|
||||
UINT8 uiBadVehicleSector[4]; // blocking mvt from vehicles
|
||||
UINT8 uiBadFootSector[4]; // blocking mvt for foot
|
||||
UINT8 uiBadVehicleSector[4]; // blocking mvt from vehicles
|
||||
INT8 bNameId;
|
||||
BOOLEAN fEnemyControlled; // enemy controlled or not
|
||||
BOOLEAN fEnemyControlled; // enemy controlled or not
|
||||
BOOLEAN fEnemyAirControlled;
|
||||
BOOLEAN UNUSEDfLostControlAtSomeTime;
|
||||
INT8 bSAMCondition; // SAM Condition .. 0 - 100, just like an item's status
|
||||
INT8 bSAMCondition; // SAM Condition .. 0 - 100, just like an item's status
|
||||
|
||||
INT8 bFillupforPadding[ 3 ]; // necessary for padding
|
||||
UINT32 usFlags; // Flugente: various flags
|
||||
INT8 bPadding[ 20 ];
|
||||
} ;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -33,6 +36,15 @@ enum
|
||||
INSERTION_CODE_CENTER,
|
||||
};
|
||||
|
||||
// -------- added by Flugente: various item flags --------
|
||||
// flags used for various properties (easier than adding 32 differently named variables). DO NOT CHANGE THEM, UNLESS YOU KNOW WHAT YOU ARE DOING!!!
|
||||
#define MILITIA_MOVE_NORTH 0x00000001 //1 // movement directions for ordering militia on the strategic map
|
||||
#define MILITIA_MOVE_WEST 0x00000002 //2
|
||||
#define MILITIA_MOVE_EAST 0x00000004 //4
|
||||
#define MILITIA_MOVE_SOUTH 0x00000008 //8
|
||||
|
||||
#define MILITIA_MOVE_ALLDIRS 0x0000000F // 15
|
||||
// -------------------------------------------------------
|
||||
|
||||
//PLEASE USE CALCULATE_STRATEGIC_INDEX() macro instead (they're identical).
|
||||
//#define GETWORLDMAPNO( x, y ) ( x+(MAP_WORLD_X*y) )
|
||||
@@ -46,4 +58,6 @@ void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN HandleStrategicDeath( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN SetMilitiaMovementOrder(INT16 sX, INT16 sY, INT8 sZ, UINT32 dir);
|
||||
|
||||
#endif
|
||||
@@ -103,6 +103,7 @@
|
||||
#include "Explosion Control.h"
|
||||
#include "Auto Resolve.h"
|
||||
#include "cursors.h"
|
||||
#include "GameVersion.h"
|
||||
#endif
|
||||
|
||||
#include "LuaInitNPCs.h"
|
||||
@@ -5306,16 +5307,38 @@ BOOLEAN SaveStrategicInfoToSavedFile( HWFILE hFile )
|
||||
BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile )
|
||||
{
|
||||
UINT32 uiNumBytesRead=0;
|
||||
UINT32 uiSize = sizeof( StrategicMapElement ) * ( MAP_WORLD_X * MAP_WORLD_Y );
|
||||
|
||||
UINT32 uiSize = sizeof( StrategicMapElement );
|
||||
|
||||
// Load the strategic map information
|
||||
FileRead( hFile, StrategicMap, uiSize, &uiNumBytesRead );
|
||||
if( uiNumBytesRead != uiSize)
|
||||
if ( guiCurrentSaveGameVersion >= MILITIA_MOVEMENT )
|
||||
{
|
||||
return(FALSE);
|
||||
for(UINT16 i = 0; i < MAP_WORLD_X * MAP_WORLD_Y; ++i)
|
||||
{
|
||||
// Load the strategic map information
|
||||
FileRead( hFile, &StrategicMap[i], uiSize, &uiNumBytesRead );
|
||||
if( uiNumBytesRead != uiSize)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uiSize = 41;
|
||||
|
||||
for(UINT16 i = 0; i < MAP_WORLD_X * MAP_WORLD_Y; ++i)
|
||||
{
|
||||
// Load the strategic map information
|
||||
FileRead( hFile, &StrategicMap[i], uiSize, &uiNumBytesRead );
|
||||
if( uiNumBytesRead != uiSize)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
StrategicMap[i].usFlags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Load the Sector Info
|
||||
for (int sectorID = 0; sectorID <= 255; ++ sectorID) {
|
||||
FileRead( hFile, &SectorInfo[sectorID], sizeof( SECTORINFO ), &uiNumBytesRead );
|
||||
@@ -5348,7 +5371,6 @@ BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile )
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
@@ -2356,6 +2356,11 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
sIconIndex_Assignment = 26;
|
||||
fDoIcon_Assignment = TRUE;
|
||||
break;
|
||||
|
||||
case FACILITY_STRATEGIC_MILITIA_MOVEMENT:
|
||||
sIconIndex_Assignment = 16;
|
||||
fDoIcon_Assignment = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
// Check for being serviced...
|
||||
|
||||
@@ -1807,6 +1807,10 @@ enum
|
||||
STR_DIALOG_CREATURES_KILL_CIVILIANS,
|
||||
STR_DIALOG_ENEMIES_ATTACK_UNCONCIOUSMERCS,
|
||||
STR_DIALOG_CREATURES_ATTACK_UNCONCIOUSMERCS,
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming
|
||||
STR_MILITIAMOVEMENT_NO_LIMITEDROAMING,
|
||||
|
||||
TEXT_NUM_STRATEGIC_TEXT
|
||||
};
|
||||
|
||||
|
||||
@@ -1844,6 +1844,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"战俘", // Prisoner of war - captured
|
||||
L"伤员", // patient in a hospital
|
||||
L"空车", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1939,6 +1946,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"搜集谣言", // facility: gather rumours
|
||||
L"派发传单", // spread propaganda
|
||||
L"搜集谣言", // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1993,6 +2001,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"搜集谣言", // facility: gather rumours
|
||||
L"派发传单", // spread propaganda
|
||||
L"搜集谣言", // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2784,6 +2793,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"异形向你在分区%s的佣兵发起了攻击。你的佣兵中没人能进行战斗。",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7162,6 +7173,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"训练领导",
|
||||
L"训练爆破",
|
||||
L"审讯俘虏", //L"Interrogate Prisoners",
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
STR16 Additional113Text[]=
|
||||
{
|
||||
|
||||
@@ -1841,6 +1841,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"POW", // Prisoner of war - captured
|
||||
L"Kliniek", // patient in a hospital
|
||||
L"Leeg", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1936,6 +1943,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1990,6 +1998,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2780,6 +2789,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"Beesten vallen je huurlingen aan in sector %s. Geen enkele huurling kan vechten!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7170,6 +7181,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Trainer Leadership",
|
||||
L"Trainer Explosives",
|
||||
L"Interrogate Prisoners", // added by Flugente TODO.Translate
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
@@ -1851,6 +1851,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1946,6 +1947,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours", // facility: gather rumours
|
||||
L"Spreading Propaganda", // spread propaganda
|
||||
L"Gathering Rumours", // gather information
|
||||
L"Commanding Militia", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -2000,6 +2002,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours", // facility: gather rumours
|
||||
L"Spread Propaganda", // spread propaganda
|
||||
L"Gather Rumours", // gather information
|
||||
L"Commanding Militia", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -2789,6 +2792,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"Creatures attack your mercs in sector %s. None of your mercs are able to fight!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7170,6 +7175,7 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
STR16 Additional113Text[]=
|
||||
{
|
||||
|
||||
@@ -1848,6 +1848,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"Capturé(e)", // Prisoner of war - captured
|
||||
L"Hôpital", // patient in a hospital
|
||||
L"Vide", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1943,6 +1950,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1997,6 +2005,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2789,6 +2798,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"Les créatures attaquent vos mercenaires dans le secteur %s. Aucun de vos hommes ne peut combattre !",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7162,6 +7173,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Entraîneur Commandement",
|
||||
L"Entraîneur Explosif",
|
||||
L"Interroger prisonnier", // added by Flugente
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
STR16 Additional113Text[]=
|
||||
{
|
||||
|
||||
@@ -1853,6 +1853,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"Gefangen", // Prisoner of war - captured
|
||||
L"Hospital", // patient in a hospital
|
||||
L"Leer", //Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 pMilitiaString[] =
|
||||
@@ -1944,6 +1951,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
// refer to above for comments
|
||||
@@ -1996,6 +2004,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
// the contract options
|
||||
@@ -2789,6 +2798,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector -- ex: A9
|
||||
L"Monster attackieren Ihre Söldner im Sektor %s. Alle Söldner sind bewusstlos!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -6987,6 +6998,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Trainer Führungsqualität",
|
||||
L"Trainer Sprengstoff",
|
||||
L"Gefangene verhören", // added by Flugente
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
@@ -1837,6 +1837,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"PDG", // Prisoner of war - captured
|
||||
L"Ospedale", // patient in a hospital
|
||||
L"Vuoto", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1932,6 +1939,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1986,6 +1994,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2776,6 +2785,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"I nemici attaccano i vostri mercenari nel settore %s. Nessuno dei vostri mercenari è in grado di combattere!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7161,6 +7172,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Trainer Leadership",
|
||||
L"Trainer Explosives",
|
||||
L"Interrogate Prisoners", // added by Flugente TODO.Translate
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
@@ -1853,6 +1853,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"Jeniec", // Prisoner of war - captured
|
||||
L"Szpital", // patient in a hospital
|
||||
L"Pusty", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1948,6 +1955,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Zbiera plotki", // facility: gather rumours
|
||||
L"Szerzy propagandę", // spread propaganda
|
||||
L"Zbiera plotki", // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2002,6 +2010,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Zbieraj plotki", // facility: gather rumours
|
||||
L"Szerz propagandę", // spread propaganda
|
||||
L"Zbieraj plotki", // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2790,6 +2799,8 @@ STR16 gpStrategicString[] =
|
||||
//%c%d is the sector -- ex: A9
|
||||
L"Stworzenia zatakowały twoich najemników w sektorze %s. Żaden z twoich najemników nie może walczyć!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7178,6 +7189,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Instruktor um. dowodzenia",
|
||||
L"Instruktor zn. mat. wybuchowych",
|
||||
L"Interrogate Prisoners", // added by Flugente TODO.Translate
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
@@ -1845,6 +1845,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"В плену", // Prisoner of war - captured
|
||||
L"Госпиталь", // patient in a hospital
|
||||
L"Пуст", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1940,6 +1947,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1994,6 +2002,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2783,6 +2792,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"Твари атаковали ваших наемников в секторе %s. Ни один из ваших бойцов не в состоянии сражаться!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7162,6 +7173,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Тренер на Лидерство",
|
||||
L"Тренер на Взрывчатку",
|
||||
L"Interrogate Prisoners", // added by Flugente TODO.Translate
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
STR16 Additional113Text[]=
|
||||
{
|
||||
|
||||
@@ -1845,6 +1845,13 @@ STR16 pAssignmentStrings[] =
|
||||
L"POW", // Prisoner of war - captured
|
||||
L"Hospital", // patient in a hospital
|
||||
L"Empty", // Vehicle is empty
|
||||
L"Snitch", // facility: undercover prisoner (snitch) // TODO.Translate
|
||||
L"Propag.", // facility: spread propaganda
|
||||
L"Propag.", // facility: spread propaganda (globally)
|
||||
L"Rumours", // facility: gather information
|
||||
L"Propag.", // spread propaganda
|
||||
L"Rumours", // gather information
|
||||
L"Command", // militia movement orders
|
||||
};
|
||||
|
||||
|
||||
@@ -1940,6 +1947,7 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Gathering Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spreading Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gathering Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -1994,6 +2002,7 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Gather Rumours",// TODO.Translate // facility: gather rumours
|
||||
L"Spread Propaganda",// TODO.Translate // spread propaganda
|
||||
L"Gather Rumours",// TODO.Translate // gather information
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
};
|
||||
|
||||
|
||||
@@ -2785,6 +2794,8 @@ STR16 gpStrategicString[] =
|
||||
//%s is the sector location -- ex: A9: Omerta
|
||||
L"Creatures attack your mercs in sector %s. None of your mercs are able to fight!",
|
||||
|
||||
// Flugente: militia movement forbidden due to limited roaming // TODO.Translate
|
||||
L"Militia cannot move here (RESTRICT_ROAMING = TRUE).",
|
||||
};
|
||||
|
||||
STR16 gpGameClockString[] =
|
||||
@@ -7170,6 +7181,12 @@ STR16 gzFacilityAssignmentStrings[]=
|
||||
L"Trainer Leadership",
|
||||
L"Trainer Explosives",
|
||||
L"Interrogate Prisoners", // added by Flugente TODO.Translate
|
||||
L"Undercover Snitch", // TODO.Translate
|
||||
// 36-40
|
||||
L"Spread Propaganda",
|
||||
L"Spread Propaganda", // spread propaganda (globally)
|
||||
L"Gather Rumours",
|
||||
L"Command Militia", // militia movement orders
|
||||
};
|
||||
|
||||
STR16 Additional113Text[]=
|
||||
|
||||
Reference in New Issue
Block a user