- When ordering a merc to interrogate, one can now select what type of prisoners should be interrogated primarily. Thus one no longer has to empty the prison just to get to the one remaining officer.

- Generals are now a separate prisoner type. They cannot join militia, but yield an impressive ransom.
- various prisoner fixes

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7327 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2014-07-10 21:19:26 +00:00
parent 7fb31cc9c8
commit 0efc3b7241
31 changed files with 1000 additions and 310 deletions
+16 -7
View File
@@ -1832,21 +1832,30 @@ void LoadGameExternalOptions()
gGameExternalOptions.fSurrenderMultiplier = iniReader.ReadFloat("Strategic Gameplay Settings", "SURRENDER_MULTIPLIER", 5.0f, 2.0f, 10.0f);
gGameExternalOptions.fPlayerCanAsktoSurrender = iniReader.ReadBoolean("Strategic Gameplay Settings","PLAYER_CAN_ASK_TO_SURRENDER", TRUE);
gGameExternalOptions.ubPrisonerReturntoQueenChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_RETURN_TO_ARMY_CHANCE", 50, 0, 100);
gGameExternalOptions.ubPrisonerProcessDefectChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_DEFECT_CHANCE", 25, 0, 100);
gGameExternalOptions.ubPrisonerProcessInfoBaseChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INFO_BASECHANCE", 25, 0, 100);
gGameExternalOptions.ubPrisonerProcessChance[PRISONER_INTERROGATION_DEFECT] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_DEFECT_CHANCE", 25, 0, 100 );
gGameExternalOptions.ubPrisonerProcessChance[PRISONER_INTERROGATION_INFO] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INFO_BASECHANCE", 25, 0, 100 );
gGameExternalOptions.ubPrisonerProcessInfoNumberChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INFO_NUMBER_CHANCE", 30, 0, 100);
gGameExternalOptions.ubPrisonerProcessInfoDirectionChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INFO_DIRECTION_CHANCE", 40, 0, 100);
gGameExternalOptions.ubPrisonerProcessRansomBaseChance = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_RANSOM_CHANCE", 25, 0, 100);
gGameExternalOptions.ubPrisonerProcessChance[PRISONER_INTERROGATION_RANSOM] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_RANSOM_CHANCE", 25, 0, 100 );
gGameExternalOptions.ubPrisonerProcessChance[PRISONER_INTERROGATION_NOTHING] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_NOTHING_CHANCE", 25, 0, 100 );
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ADMIN] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_ADMIN", 80, 30, 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_REGULAR] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_REGULAR", 100, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ADMIN], 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ELITE] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_ELITE", 100, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_REGULAR], 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_OFFICER] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_POINTS_OFFICER", 100, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ELITE], 1000 );
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ADMIN] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_ADMIN", 30, 10, 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_REGULAR] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_REGULAR", 50, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ADMIN], 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ELITE] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_ELITE", 80, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_REGULAR], 1000);
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_OFFICER] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_OFFICER", 150, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ELITE], 1000 );
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_GENERAL] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_GENERAL", 250, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_OFFICER], 1000 );
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_THUG] = 100;
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_SECRET1] = 100;
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_SECRET2] = 100;
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ADMIN] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_ADMIN", 0, 0, 100 );
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_REGULAR] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_REGULAR", 1, gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ADMIN], 100 );
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ELITE] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_ELITE", 10, gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_REGULAR], 100 );
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_OFFICER] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_OFFICER", 60, gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ELITE], 100 );
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_GENERAL] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_GENERAL", 80, gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_OFFICER], 100 );
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_THUG] = 0;
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_SECRET1] = 0;
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_SECRET2] = 0;
// CHRISL: Determine how Skyrider should handle landing in enemy occupied sectors
gGameExternalOptions.ubSkyriderHotLZ = iniReader.ReadInteger("Strategic Gameplay Settings", "ALLOW_SKYRIDER_HOT_LZ", 0, 0, 3);
+14 -5
View File
@@ -213,6 +213,17 @@ enum
ITEM_PROGRESS_VERY_FAST,
};
// Flugente: prisoner interrogation results
enum
{
PRISONER_INTERROGATION_DEFECT = 0,
PRISONER_INTERROGATION_INFO,
PRISONER_INTERROGATION_RANSOM,
PRISONER_INTERROGATION_NOTHING,
PRISONER_INTERROGATION_MAX
};
typedef struct
{
BOOLEAN fGunNut;
@@ -1372,13 +1383,11 @@ typedef struct
FLOAT fSurrenderMultiplier;
BOOLEAN fPlayerCanAsktoSurrender;
UINT8 ubPrisonerReturntoQueenChance;
UINT8 ubPrisonerProcessDefectChance;
UINT8 ubPrisonerProcessInfoBaseChance;
UINT8 ubPrisonerProcessChance[PRISONER_INTERROGATION_MAX];
UINT8 ubPrisonerProcessInfoNumberChance;
UINT8 ubPrisonerProcessInfoDirectionChance;
UINT8 ubPrisonerProcessRansomBaseChance;
UINT16 ubPrisonerInterrogationPoints[4]; // points needed to interrogate a prisoner of a specific type
UINT8 ubPrisonerInterrogationEnemyGeneralInfoChance[4]; // chance that when getting info from interrogation, this prisoner will tell us about general we do not yet know about
UINT16 ubPrisonerInterrogationPoints[8]; // points needed to interrogate a prisoner of a specific type
UINT8 ubPrisonerInterrogationEnemyGeneralInfoChance[8]; // chance that when getting info from interrogation, this prisoner will tell us about general we do not yet know about
// Flugente: sexism/racism/etc.
INT8 sMoraleModAppearance;
+9 -9
View File
@@ -15,9 +15,9 @@
#ifdef JA2EDITOR
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.7327 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.7327 (Development Build)" };
#endif
// ------------------------------
@@ -27,11 +27,11 @@
//DEBUG BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.7327 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.7327 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.7327 (Development Build)" };
#endif
#elif defined CRIPPLED_VERSION
@@ -46,16 +46,16 @@
//RELEASE BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.7327 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.7327 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Release v1.13.7297 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release v1.13.7327 (Development Build)" };
#endif
#endif
CHAR8 czVersionNumber[16] = { "Build 14.06.27" }; //YY.MM.DD
CHAR8 czVersionNumber[16] = { "Build 14.07.10" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" };
// SAVE_GAME_VERSION is defined in header, change it there
+3 -2
View File
@@ -21,7 +21,8 @@ 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 DYNAMIC_DIALOGUE 157 // Flugente: mercs have dynamic dialogue depending on nely formed opinions, an the player can interact with them
#define PRISONER_EXPANSION 158 // Flugente: more types of prisoners
#define DYNAMIC_DIALOGUE 157 // Flugente: mercs have dynamic dialogue depending on newly formed opinions, an the player can interact with them
#define DYNAMIC_OPINIONS 156 // Flugente: mercs can form opinions on other people depending on their behaviour
#define INCREASED_REFUEL_SITES 155 // Flugente: increased the number of helicopter refuel sites
#define ENEMY_VIPS 154 // Flugente: enemy generals are placed randomly in the map
@@ -76,7 +77,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 DYNAMIC_DIALOGUE
#define SAVE_GAME_VERSION PRISONER_EXPANSION
//#define RUSSIANGOLD
#ifdef __cplusplus
+2 -2
View File
@@ -273,6 +273,7 @@ private:
DynamicOpinionSpeechEvent mEvent;
};
// due to the way callbacks on mouse regions are handled, we need a static object that we can 'hook' on. Thus we use this singleton
class IMPDialogueChooseBox_Static : public IMPDialogueChooseBox
{
public:
@@ -287,7 +288,7 @@ public:
static void SelectRegionDropDown_DropDown( MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast<IMPDialogueChooseBox*>(mpSelf)->SelectDropDownRegionCallBack( pRegion, iReason ); }
MOUSE_CALLBACK
CallBackWrapper( void* pt2Object, UINT8 arg, void( *pt2Function )(MOUSE_REGION * pRegion, INT32 iReason) )
CallBackWrapper( void* pt2Object, UINT8 arg, void( *pt2Function )(MOUSE_REGION * pRegion, INT32 iReason) )
{
mpSelf = pt2Object;
@@ -318,5 +319,4 @@ BOOLEAN DynamicDialogueBoxesActive( );
// used fo example when we load a game - dialogue has to start anew, so all boxes must be wiped
void DestroyAllDynamicDialogueBoxes( );
#endif
+2 -2
View File
@@ -73,10 +73,10 @@ typedef struct
//General Laptop Info
BOOLEAN gfNewGameLaptop; //Is it the firs time in Laptop
BOOLEAN fVisitedBookmarkAlready[20]; // have we visitied this site already?
INT32 iBookMarkList[MAX_BOOKMARKS];
INT32 iBookMarkList[MAX_BOOKMARKS];
INT32 iCurrentBalance; // current players balance
INT32 iCurrentBalance; // current players balance
//IMP Information
+6 -23
View File
@@ -170,28 +170,28 @@ void RenderMercCompareMain( )
}
BOOLEAN InitMercCompareDefaults( )
void InitMercCompareDefaults( )
{
VOBJECT_DESC VObjectDesc;
// load the Insurance bullet graphic and add it
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
FilenameForBPP( "LAPTOP\\bullet.sti", VObjectDesc.ImageFile );
CHECKF( AddVideoObject( &VObjectDesc, &guiMercCompareBulletImage ) );
CHECKV( AddVideoObject( &VObjectDesc, &guiMercCompareBulletImage ) );
// load the Flower Account Box graphic and add it
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
FilenameForBPP( "LAPTOP\\BackGroundTile.sti", VObjectDesc.ImageFile );
CHECKF( AddVideoObject( &VObjectDesc, &guiInsuranceBackGround ) );
CHECKV( AddVideoObject( &VObjectDesc, &guiInsuranceBackGround ) );
// load the red bar on the side of the page and add it
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
FilenameForBPP( "LAPTOP\\LargeBar.sti", VObjectDesc.ImageFile );
CHECKF( AddVideoObject( &VObjectDesc, &guiInsuranceBigRedLineImage ) );
CHECKV( AddVideoObject( &VObjectDesc, &guiInsuranceBigRedLineImage ) );
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
FilenameForBPP( "LAPTOP\\PressLogos.sti", VObjectDesc.ImageFile );
CHECKF( AddVideoObject( &VObjectDesc, &guiMercCompareLogoImage ) );
CHECKV( AddVideoObject( &VObjectDesc, &guiMercCompareLogoImage ) );
UINT16 usPosX = CAMPAIGN_HISTORY_LINK_START_X;
UINT16 usPosY = CAMPAIGN_HISTORY_LINK_START_Y;
@@ -204,8 +204,6 @@ BOOLEAN InitMercCompareDefaults( )
usPosY += CAMPAIGN_HISTORY_LINK_STEP_Y;
}
return(TRUE);
}
void DisplayMercCompareDefaults( )
@@ -298,11 +296,6 @@ void SelectMercCompareRegionCallBack( MOUSE_REGION * pRegion, INT32 iReason )
////////////////////////// MERC COMPARE CUSTOMERS ////////////////////////////////
void GameInitMercCompareCustomers( )
{
}
BOOLEAN EnterMercCompareCustomers( )
{
InitMercCompareDefaults( );
@@ -388,11 +381,6 @@ BOOLEAN fMercCompareRedraw = FALSE;
template<> void DropDownTemplate<DROPDOWNNR_MERCCOMPARE1>::SetRefresh( ) { fMercCompareRedraw = TRUE; }
template<> void DropDownTemplate<DROPDOWNNR_MERCCOMPARE2>::SetRefresh( ) { fMercCompareRedraw = TRUE; }
void GameInitMercCompareAnalyze()
{
}
BOOLEAN EnterMercCompareAnalyze()
{
InitMercCompareDefaults( );
@@ -988,11 +976,6 @@ template<> void DropDownTemplate<DROPDOWNNR_MERCCOMPARE_SQUADSELECTION>::SetRefr
fMercCompareMatrixRedraw = TRUE;
}
void GameInitMercCompareMatrix( )
{
}
BOOLEAN EnterMercCompareMatrix( )
{
InitMercCompareDefaults( );
@@ -1183,7 +1166,7 @@ void RenderMercCompareMatrix( )
CURSOR_WWW, MSYS_NO_CALLBACK, SelectMercCompareMatrixRegionCallBack );
MSYS_AddRegion( &gMercCompareMatrixLinkRegion[currentmouseregion] );
// both profilenumbers are combined to a single value which cn later be reinterpreted.
// both profilenumbers are combined to a single value which can later be reinterpreted.
// Note: this will fail if the profile IDs are bigger than UINT16 (currently UINT8)
MSYS_SetRegionUserData( &gMercCompareMatrixLinkRegion[currentmouseregion], 0, ((pSoldierA->ubProfile << 8) | pSoldierB->ubProfile) );
gMercCompareMatrixLinkDefined[currentmouseregion] = TRUE;
+1 -4
View File
@@ -12,20 +12,18 @@ void ExitMercCompareMain( );
void HandleMercCompareMain( );
void RenderMercCompareMain( );
BOOLEAN InitMercCompareDefaults( );
void InitMercCompareDefaults( );
void DisplayMercCompareDefaults( );
void RemoveMercCompareDefaults( );
void GetMercCompareText( UINT8 ubNumber, STR16 pString );
// displays a few quotes of customers
void GameInitMercCompareCustomers( );
BOOLEAN EnterMercCompareCustomers( );
void ExitMercCompareCustomers( );
void HandleMercCompareCustomers( );
void RenderMercCompareCustomers( );
// comparison of characters
void GameInitMercCompareAnalyze( );
BOOLEAN EnterMercCompareAnalyze( );
void ExitMercCompareAnalyze( );
void HandleMercCompareAnalyze( );
@@ -34,7 +32,6 @@ void RenderMercCompareAnalyze( );
BOOLEAN DisplayMercData( UINT8 usProfileA, UINT8 usProfileB );
// squad opinion overview
void GameInitMercCompareMatrix( );
BOOLEAN EnterMercCompareMatrix( );
void ExitMercCompareMatrix( );
void HandleMercCompareMatrix( );
+632 -143
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -275,6 +275,9 @@ extern INT32 ghSnitchBox;
extern INT32 ghSnitchToggleBox;
extern INT32 ghSnitchSectorBox;
// Flugente: prisoner menu
extern INT32 ghPrisonerBox;
extern MOUSE_REGION gAssignmentScreenMaskRegion;
@@ -356,6 +359,11 @@ void CreateDestroyMouseRegionsForSnitchSectorMenu( void );
void SnitchSectorMenuMvtCallBack(MOUSE_REGION * pRegion, INT32 iReason );
void SnitchSectorMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
// Flugente: prisoner menu
void CreateDestroyMouseRegionsForPrisonerMenu();
void PrisonerMenuMvtCallBack( MOUSE_REGION * pRegion, INT32 iReason );
void PrisonerMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
// contract menu
void CreateDestroyMouseRegionsForContractMenu( void );
void ContractMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
+9 -4
View File
@@ -425,6 +425,11 @@ typedef enum
PRISONER_REGULAR,
PRISONER_ELITE,
PRISONER_OFFICER,
PRISONER_GENERAL, // generals can be captured too, interogating them gives special rewards
PRISONER_THUG, // captured enemies not affiliated to the army fall into this category
PRISONER_SECRET1, // tbA
PRISONER_SECRET2, // tbA
PRISONER_MAX,
} PrisonerType;
@@ -495,15 +500,15 @@ typedef struct SECTORINFO
BOOLEAN fCampaignSector;
#endif
UINT8 uiNumberOfPrisonersOfWar[PRISONER_MAX];
UINT8 uiInterrogationHundredsLeft;
UINT8 uiNumberOfPrisonersOfWar[PRISONER_MAX]; // TODO: PRISONER_MAX got expanded - Varaiblen werden falsch ausgelesen!!!
UINT8 uiInterrogationHundredsLeft[PRISONER_MAX];
UINT32 uiTimeAIArtillerywasOrdered; // Flugente: updated every time an artillery strike is ordered from the militia
UINT8 ubNumTanks;
UINT8 ubTanksInBattle;
INT8 bPadding[ 27 ];
INT8 bPadding[ 20 ];
}SECTORINFO;
@@ -545,7 +550,7 @@ typedef struct UNDERGROUND_SECTORINFO
UINT8 ubNumTanks;
UINT8 ubTanksInBattle;
INT8 bPadding[30];
INT8 bPadding[26];
//no padding left!
}UNDERGROUND_SECTORINFO;
@@ -434,8 +434,8 @@ void AddTextToTownBox( void )
}
// Flugente: if this is a prison we control, display number of prisoners here
UINT8 prisoners[PRISONER_MAX] = { 0 };
UINT16 numprisoners = GetNumberOfPrisoners( &(SectorInfo[SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY )]), &prisoners[PRISONER_OFFICER], &prisoners[PRISONER_ELITE], &prisoners[PRISONER_REGULAR], &prisoners[PRISONER_ADMIN] );
INT16 aPrisoners[PRISONER_MAX] = {0};
UINT16 numprisoners = GetNumberOfPrisoners( &(SectorInfo[SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY )]), aPrisoners );
if ( numprisoners )
{
// determine prison capacity
@@ -457,7 +457,7 @@ void AddTextToTownBox( void )
// prisoners
swprintf( wString, L"%s:", pwTownInfoStrings[13] );
AddMonoString( &hStringHandle, wString );
swprintf( wString, L"%d/%d - %dA %dR %dE %dO", numprisoners, capacity, prisoners[PRISONER_ADMIN], prisoners[PRISONER_REGULAR], prisoners[PRISONER_ELITE], prisoners[PRISONER_OFFICER] );
swprintf( wString, L"%d/%d - %dA %dR %dE %dO %dG", numprisoners, capacity, aPrisoners[PRISONER_ADMIN], aPrisoners[PRISONER_REGULAR], aPrisoners[PRISONER_ELITE], aPrisoners[PRISONER_OFFICER], aPrisoners[PRISONER_GENERAL] );
AddSecondColumnMonoString( &hStringHandle, wString );
}
}
+16 -4
View File
@@ -349,6 +349,9 @@ SGPRect SnitchToggleDimensions={0,0,80,80};
SGPPoint SnitchSectorPosition={320,150};
SGPRect SnitchSectorDimensions={0,0,80,80};
SGPPoint PrisonerPosition = {320, 150};
SGPRect PrisonerDimensions = {0, 0, 80, 80};
//lal
SGPPoint MilitiaControlPosition={120,150};
SGPRect MilitiaControlDimensions={0,0,100,95};
@@ -377,6 +380,8 @@ SGPPoint OrigSnitchPosition={160,150};
SGPPoint OrigSnitchTogglePosition={320,150};
SGPPoint OrigSnitchSectorPosition={320,150};
SGPPoint OrigPrisonerPosition = {320, 150};
SQUAD_NAMES SquadNames[20];
//extern BOOLEAN fMapExitDueToMessageBox;
@@ -939,6 +944,10 @@ void RestoreBackgroundForAssignmentGlowRegionList( void )
ForceUpDateOfBox( ghSnitchSectorBox );
}
}
else if ( fShowPrisonerMenu )
{
ForceUpDateOfBox( ghPrisonerBox );
}
}
if( fDisableDueToBattleRoster )
@@ -959,9 +968,6 @@ void RestoreBackgroundForAssignmentGlowRegionList( void )
// set old to current
iOldAssignmentLine = giAssignHighLine;
}
// leave
return;
}
void RestoreBackgroundForDestinationGlowRegionList( void )
@@ -2336,7 +2342,13 @@ void UpdateMapScreenAssignmentPositions( void )
SetBoxPosition( ghFacilityAssignmentBox, pPoint );
}
return;
if ( fShowPrisonerMenu )
{
GetBoxPosition( ghPrisonerBox, &pPoint );
pPoint.iY = giBoxY + (GetFontHeight( MAP_SCREEN_FONT ) + 2) * ASSIGN_MENU_FACILITY;
SetBoxPosition( ghPrisonerBox, pPoint );
}
}
+19
View File
@@ -158,6 +158,17 @@ enum {
MAX_SNITCH_SECTOR_MENU_STRING_COUNT,
};
// Flugente: prisoner menu defines
enum {
PRISONER_MENU_ADMIN = 0,
PRISONER_MENU_TROOP,
PRISONER_MENU_ELITE,
PRISONER_MENU_OFFICER,
PRISONER_MENU_GENERAL,
PRISONER_MENU_CANCEL,
MAX_PRISONER_MENU_STRING_COUNT,
};
// training assignment menu defines
enum {
TRAIN_MENU_SELF,
@@ -305,6 +316,9 @@ extern BOOLEAN fShowSnitchMenu;
extern BOOLEAN fShowSnitchToggleMenu;
extern BOOLEAN fShowSnitchSectorMenu;
// Flugente: prisoner menu
extern BOOLEAN fShowPrisonerMenu;
extern BOOLEAN fFirstTimeInMapScreen;
extern BOOLEAN fLockOutMapScreenInterface;
@@ -365,6 +379,9 @@ extern SGPRect SnitchToggleDimensions;
extern SGPPoint SnitchSectorPosition;
extern SGPRect SnitchSectorDimensions;
extern SGPPoint PrisonerPosition;
extern SGPRect PrisonerDimensions;
extern SGPPoint MilitiaControlPosition; //lal
extern SGPRect MilitiaControlDimensions;
@@ -385,6 +402,8 @@ extern SGPPoint OrigSnitchPosition;
extern SGPPoint OrigSnitchTogglePosition;
extern SGPPoint OrigSnitchSectorPosition;
extern SGPPoint OrigPrisonerPosition;
// disble team info panel due to showing of battle roster
extern BOOLEAN fDisableDueToBattleRoster;
+16 -3
View File
@@ -5403,13 +5403,26 @@ BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile )
StrategicMap[i].usFlags = 0;
}
}
// Load the Sector Info
for (int sectorID = 0; sectorID <= 255; ++ sectorID) {
for (int sectorID = 0; sectorID <= 255; ++sectorID)
{
FileRead( hFile, &SectorInfo[sectorID], sizeof( SECTORINFO ), &uiNumBytesRead );
if( uiNumBytesRead != sizeof( SECTORINFO )) {
if( uiNumBytesRead != sizeof( SECTORINFO ))
{
return(FALSE);
}
// Flugente: changes in SECTORINFO require a weird-looking remapping
if ( guiCurrentSaveGameVersion < PRISONER_EXPANSION )
{
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_GENERAL] = 0;
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_THUG] = 0;
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_SECRET1] = 0;
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_SECRET2] = 0;
SectorInfo[sectorID].ubNumTanks = SectorInfo[sectorID].uiInterrogationHundredsLeft[PRISONER_GENERAL];
SectorInfo[sectorID].ubTanksInBattle = SectorInfo[sectorID].uiInterrogationHundredsLeft[PRISONER_THUG];
}
}
// uiSize = sizeof( SECTORINFO ) * 256;
// FileRead( hFile, SectorInfo, uiSize, &uiNumBytesRead );
+45 -53
View File
@@ -6693,10 +6693,7 @@ BOOLEAN GetPlayerControlledPrisonList( std::vector<UINT32>& arSectorIDVector )
extern INT32 giReinforcementPool;
// we cannot simply move all prisoners of a sector. It might be a prison we are already using, so we would move all inmates, not just the new ones
UINT16 gusPrisonersOfficer = 0;
UINT16 gusPrisonersElite = 0;
UINT16 gusPrisonersRegular = 0;
UINT16 gusPrisonersAdmin = 0;
INT16 gsNumPrisoner[PRISONER_MAX] = {0};
void PrisonerMessageBoxCallBack( UINT8 ubExitValue )
{
@@ -6727,7 +6724,9 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue )
}
BOOLEAN success = FALSE;
UINT16 prisonerstobemoved = gusPrisonersOfficer + gusPrisonersElite + gusPrisonersRegular + gusPrisonersAdmin;
INT16 prisonerstobemoved = 0;
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
prisonerstobemoved += gsNumPrisoner[i];
if ( usSectorID > 0 )
{
@@ -6737,7 +6736,7 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue )
{
success = TRUE;
ChangeNumberOfPrisoners( pPrisonSectorInfo, gusPrisonersOfficer, gusPrisonersElite, gusPrisonersRegular, gusPrisonersAdmin );
ChangeNumberOfPrisoners( pPrisonSectorInfo, gsNumPrisoner );
CHAR16 wString[64];
GetShortSectorString( SECTORX( usSectorID ), SECTORY( usSectorID ), wString );
@@ -6745,10 +6744,8 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue )
}
}
gusPrisonersOfficer = 0;
gusPrisonersElite = 0;
gusPrisonersRegular = 0;
gusPrisonersAdmin = 0;
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
gsNumPrisoner[i] = 0;
if ( !success )
{
@@ -6760,13 +6757,10 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue )
void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
{
SOLDIERTYPE *pTeamSoldier;
INT32 cnt = 0;
UINT16 ubNumPrisoners = 0;
UINT16 ubNumPrisonerAdmin = 0;
UINT16 ubNumPrisonerTroop = 0;
UINT16 ubNumPrisonerElite = 0;
UINT16 ubNumPrisonerOfficer = 0;
SOLDIERTYPE* pTeamSoldier;
INT32 cnt = 0;
UINT16 ubNumPrisoners = 0;
INT16 sNumPrisoner[PRISONER_MAX] = {0};
// Check if the battle is won!
// Loop through all mercs and make go
@@ -6781,18 +6775,18 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
// if we arrive here and the guy has lifepoints < OKLIFE, something is very odd... better take him prisoner and remove him anyway
//if ( pTeamSoldier->stats.bLife > OKLIFE && pTeamSoldier->stats.bLife != 0 )
{
// officers are 'special' prisoners...
if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_ENEMY_OFFICER )
{
++ubNumPrisonerOfficer;
}
// officers and generals are 'special' prisoners...
if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_VIP )
++sNumPrisoner[PRISONER_GENERAL];
else if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_ENEMY_OFFICER )
++sNumPrisoner[PRISONER_OFFICER];
else
{
switch ( pTeamSoldier->ubSoldierClass )
{
case SOLDIER_CLASS_ADMINISTRATOR: ++ubNumPrisonerAdmin; break;
case SOLDIER_CLASS_ARMY: ++ubNumPrisonerTroop; break;
case SOLDIER_CLASS_ELITE: ++ubNumPrisonerElite; break;
case SOLDIER_CLASS_ADMINISTRATOR: ++sNumPrisoner[PRISONER_ADMIN]; break;
case SOLDIER_CLASS_ARMY: ++sNumPrisoner[PRISONER_REGULAR]; break;
case SOLDIER_CLASS_ELITE: ++sNumPrisoner[PRISONER_ELITE]; break;
default:
// if none of the above classes, ignore this one
continue;
@@ -6802,9 +6796,7 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
// Flugente: VIPs
if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_VIP )
{
DeleteVIP( pTeamSoldier->sSectorX, pTeamSoldier->sSectorY );
}
// Flugente: campaign stats
gCurrentIncident.AddStat( pTeamSoldier, CAMPAIGNHISTORY_TYPE_PRISONER );
@@ -6911,10 +6903,8 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
}
// remember all prisoners...
gusPrisonersOfficer = ubNumPrisonerOfficer;
gusPrisonersElite = ubNumPrisonerElite;
gusPrisonersRegular = ubNumPrisonerTroop;
gusPrisonersAdmin = ubNumPrisonerAdmin;
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
gsNumPrisoner[i] = sNumPrisoner[i];
DoMessageBox( MSG_BOX_BASIC_MEDIUM_BUTTONS, TacticalStr[ PRISONER_DECIDE_STR ], GAME_SCREEN, MSG_BOX_FLAG_GENERIC_EIGHT_BUTTONS, PrisonerMessageBoxCallBack, NULL );
}
@@ -10637,52 +10627,54 @@ BOOLEAN IsProfileInUse(UINT8 usTeam, INT8 aType, UINT16 aNr)
return FALSE;
}
UINT16 GetNumberOfPrisoners( SECTORINFO *pSectorInfo, UINT8* aOfficer, UINT8* apElite, UINT8* apRegular, UINT8* apAdmin )
UINT16 GetNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aPrisoners[] )
{
if ( !pSectorInfo )
return 0;
*aOfficer = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER];
*apElite = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE];
*apRegular = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR];
*apAdmin = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN];
UINT16 sum = 0;
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
{
aPrisoners[i] = pSectorInfo->uiNumberOfPrisonersOfWar[i];
return (UINT16)(pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN]);
sum += pSectorInfo->uiNumberOfPrisonersOfWar[i];
}
return sum;
}
UINT16 GetNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, UINT8* aOfficer, UINT8* apElite, UINT8* apRegular, UINT8* apAdmin )
UINT16 GetNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aPrisoners[] )
{
if ( !pSectorInfo )
return 0;
*aOfficer = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER];
*apElite = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE];
*apRegular = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR];
*apAdmin = pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN];
UINT16 sum = 0;
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
{
aPrisoners[i] = pSectorInfo->uiNumberOfPrisonersOfWar[i];
return (UINT16)(pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] + pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN]);
sum += pSectorInfo->uiNumberOfPrisonersOfWar[i];
}
return sum;
}
void ChangeNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aOfficer, INT16 aElite, INT16 aRegular, INT16 aAdmin, INT16 sX, INT16 sY )
void ChangeNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aPrisoners[] )
{
if ( !pSectorInfo )
return;
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] + aOfficer ) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] + aElite) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] + aRegular) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN] + aAdmin) );
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
pSectorInfo->uiNumberOfPrisonersOfWar[i] = max( 0, min( 255, pSectorInfo->uiNumberOfPrisonersOfWar[i] + aPrisoners[i] ) );
}
void ChangeNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aOfficer, INT16 aElite, INT16 aRegular, INT16 aAdmin )
void ChangeNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aPrisoners[] )
{
if ( !pSectorInfo )
return;
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_OFFICER] + aOfficer ) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ELITE] + aElite) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_REGULAR] + aRegular) );
pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN] = max(0, min(255, pSectorInfo->uiNumberOfPrisonersOfWar[PRISONER_ADMIN] + aAdmin) );
for ( int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
pSectorInfo->uiNumberOfPrisonersOfWar[i] = max( 0, min( 255, pSectorInfo->uiNumberOfPrisonersOfWar[i] + aPrisoners[i] ) );
}
void DeleteAllPrisoners( SECTORINFO *pSectorInfo )
+4 -4
View File
@@ -373,11 +373,11 @@ BOOLEAN AllowedToStealFromTeamMate( UINT8 aAccessorID, UINT8 aTargetID );
BOOLEAN IsProfileInUse(UINT8 usTeam, INT8 aType, UINT16 aNr);
// Flugente: functions altering a sector's prisoners
UINT16 GetNumberOfPrisoners( SECTORINFO *pSectorInfo, UINT8* aOfficer, UINT8* apElite, UINT8* apRegular, UINT8* apAdmin );
UINT16 GetNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, UINT8* aOfficer, UINT8* apElite, UINT8* apRegular, UINT8* apAdmin );
UINT16 GetNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aPrisoners[] );
UINT16 GetNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aPrisoners[] );
void ChangeNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aOfficer, INT16 aElite, INT16 aRegular, INT16 aAdmin, INT16 sX = 0, INT16 sY = 0 );
void ChangeNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aOfficer, INT16 aElite, INT16 aRegular, INT16 aAdmin );
void ChangeNumberOfPrisoners( SECTORINFO *pSectorInfo, INT16 aPrisoners[] );
void ChangeNumberOfPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo, INT16 aPrisoners[] );
void DeleteAllPrisoners( SECTORINFO *pSectorInfo );
void DeleteAllPrisoners( UNDERGROUND_SECTORINFO *pSectorInfo );
+2 -2
View File
@@ -16085,8 +16085,8 @@ BOOLEAN SOLDIERTYPE::CanProcessPrisoners( )
{
SECTORINFO *pSectorInfo = &(SectorInfo[SECTOR( this->sSectorX, this->sSectorY )]);
UINT8 tmp1 = 0, tmp2 = 0, tmp3 = 0, tmp4 = 0;
if ( GetNumberOfPrisoners( pSectorInfo, &tmp1, &tmp2, &tmp3, &tmp4 ) > 0 )
INT16 aPrisoners[PRISONER_MAX] = {0};
if ( GetNumberOfPrisoners( pSectorInfo, aPrisoners ) > 0 )
return TRUE;
}
+8
View File
@@ -399,6 +399,14 @@ enum
#define SOLDIER_SNITCHING_OFF 0x00000001 //1 // isn't allowed to snitch
#define SOLDIER_PREVENT_MISBEHAVIOUR_OFF 0x00000002 //2 // isn't allowed to prevent misbehaviour
#define SOLDIER_RAM_THROUGH_OBSTACLES 0x00000004 //4 // vehicle
#define SOLDIER_INTERROGATE_ADMIN 0x00000008 //8 // interrogate admins. Flags might not be the best solution, but I won't add an extra variable for this
#define SOLDIER_INTERROGATE_TROOP 0x00000010 //16 // interrogate troops
#define SOLDIER_INTERROGATE_ELITE 0x00000020 //32 // interrogate elites
#define SOLDIER_INTERROGATE_OFFICER 0x00000040 //64 // interrogate officers
#define SOLDIER_INTERROGATE_GENERAL 0x00000080 //128 // interrogate generals
#define SOLDIER_INTERROGATE_ALL 0x000000F8 // all interrogation flags
// ----------------------------------------------------------------
// -------- added by Flugente: background property flags --------
+2 -2
View File
@@ -2875,8 +2875,8 @@ void SectorAddPrisonersofWar( INT16 sMapX, INT16 sMapY, INT16 sMapZ )
return;
// only continue if there are prisoners in this sector that need to be placed
UINT8 tmp1 = 0, tmp2 = 0, tmp3 = 0, tmp4 = 0;
UINT16 numprisoners = GetNumberOfPrisoners(pSector, &tmp1, &tmp2, &tmp3, &tmp4);
INT16 aPrisoners[PRISONER_MAX] = {0};
UINT16 numprisoners = GetNumberOfPrisoners( pSector, aPrisoners );
if ( !numprisoners )
return;
+2
View File
@@ -139,6 +139,8 @@ bool Loc::ExportStrings()
ExportSection(props, L"SnitchToggleMenuDesc", Loc::pSnitchToggleMenuDescStrings, 0, MAX_SNITCH_TOGGLE_MENU_STRING_COUNT-1);
ExportSection(props, L"SnitchSectorMenu", Loc::pSnitchSectorMenuStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT);
ExportSection(props, L"SnitchSectorMenuDesc", Loc::pSnitchSectorMenuDescStrings, 0, MAX_SNITCH_SECTOR_MENU_STRING_COUNT-1);
ExportSection(props, L"PrisonerMenu", Loc::pPrisonerMenuStrings, 0, MAX_PRISONER_MENU_STRING_COUNT );
ExportSection(props, L"PrisonerMenuDesc", Loc::pPrisonerMenuDescStrings, 0, MAX_PRISONER_MENU_STRING_COUNT - 1 );
ExportSection(props, L"SnitchPrisonExposed", Loc::pSnitchPrisonExposedStrings, 0, NUM_SNITCH_PRISON_EXPOSED);
ExportSection(props, L"SnitchGatheringRumoursResult", Loc::pSnitchGatheringRumoursResultStrings, 0, NUM_SNITCH_GATHERING_RUMOURS_RESULT);
+17 -37
View File
@@ -196,8 +196,6 @@ void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
// shade line
PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fShadeFlag = TRUE;
}
return;
}
void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
@@ -217,8 +215,6 @@ void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
// shade line
PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fShadeFlag = FALSE;
}
return;
}
@@ -239,8 +235,6 @@ void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
// shade line
PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fSecondaryShadeFlag = TRUE;
}
return;
}
void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
@@ -260,8 +254,6 @@ void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber )
// shade line
PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fSecondaryShadeFlag = FALSE;
}
return;
}
@@ -271,13 +263,11 @@ void SetBoxBuffer(INT32 hBoxHandle, UINT32 uiBuffer)
if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) )
return;
Assert( PopUpBoxList[ hBoxHandle ] );
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->uiBuffer=uiBuffer;
PopUpBoxList[hBoxHandle]->uiBuffer=uiBuffer;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
return;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
}
@@ -286,14 +276,12 @@ void SetBoxPosition( INT32 hBoxHandle,SGPPoint Position )
if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) )
return;
Assert( PopUpBoxList[ hBoxHandle ] );
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->Position.iX=Position.iX;
PopUpBoxList[hBoxHandle]->Position.iY=Position.iY;
PopUpBoxList[hBoxHandle]->Position.iX=Position.iX;
PopUpBoxList[hBoxHandle]->Position.iY=Position.iY;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
return;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
}
@@ -306,8 +294,6 @@ void GetBoxPosition( INT32 hBoxHandle, SGPPoint *Position )
Position->iX = PopUpBoxList[hBoxHandle]->Position.iX;
Position->iY = PopUpBoxList[hBoxHandle]->Position.iY;
return;
}
void SetBoxSize(INT32 hBoxHandle,SGPRect Dimensions)
@@ -315,16 +301,14 @@ void SetBoxSize(INT32 hBoxHandle,SGPRect Dimensions)
if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) )
return;
Assert( PopUpBoxList[ hBoxHandle ] );
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->Dimensions.iLeft=Dimensions.iLeft;
PopUpBoxList[hBoxHandle]->Dimensions.iBottom=Dimensions.iBottom;
PopUpBoxList[hBoxHandle]->Dimensions.iRight=Dimensions.iRight;
PopUpBoxList[hBoxHandle]->Dimensions.iTop=Dimensions.iTop;
PopUpBoxList[hBoxHandle]->Dimensions.iLeft=Dimensions.iLeft;
PopUpBoxList[hBoxHandle]->Dimensions.iBottom=Dimensions.iBottom;
PopUpBoxList[hBoxHandle]->Dimensions.iRight=Dimensions.iRight;
PopUpBoxList[hBoxHandle]->Dimensions.iTop=Dimensions.iTop;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
return;
PopUpBoxList[hBoxHandle]->fUpdated = FALSE;
}
@@ -339,8 +323,6 @@ void GetBoxSize( INT32 hBoxHandle, SGPRect *Dimensions )
Dimensions->iBottom = PopUpBoxList[hBoxHandle]->Dimensions.iBottom;
Dimensions->iRight = PopUpBoxList[hBoxHandle]->Dimensions.iRight;
Dimensions->iTop = PopUpBoxList[hBoxHandle]->Dimensions.iTop;
return;
}
@@ -349,9 +331,8 @@ void SetBorderType(INT32 hBoxHandle, INT32 iBorderObjectIndex)
if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) )
return;
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->iBorderObjectIndex=iBorderObjectIndex;
return;
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->iBorderObjectIndex=iBorderObjectIndex;
}
void SetBackGroundSurface(INT32 hBoxHandle, INT32 iBackGroundSurfaceIndex)
@@ -359,9 +340,8 @@ void SetBackGroundSurface(INT32 hBoxHandle, INT32 iBackGroundSurfaceIndex)
if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) )
return;
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->iBackGroundSurface=iBackGroundSurfaceIndex;
return;
Assert( PopUpBoxList[ hBoxHandle ] );
PopUpBoxList[hBoxHandle]->iBackGroundSurface=iBackGroundSurfaceIndex;
}
+2
View File
@@ -175,6 +175,8 @@ extern STR16 pSnitchToggleMenuStrings[];
extern STR16 pSnitchToggleMenuDescStrings[];
extern STR16 pSnitchSectorMenuStrings[];
extern STR16 pSnitchSectorMenuDescStrings[];
extern STR16 pPrisonerMenuStrings[];
extern STR16 pPrisonerMenuDescStrings[];
extern STR16 pSnitchPrisonExposedStrings[];
extern STR16 pSnitchGatheringRumoursResultStrings[];
extern STR16 pAssignMenuStrings[];
+20
View File
@@ -2263,6 +2263,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s告发者的身份暴露,但是及时注意到并成功逃脱。",
+20
View File
@@ -2261,6 +2261,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s was exposed as a snitch but managed to notice it and get out alive.",
+21 -1
View File
@@ -2264,6 +2264,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] =
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s was exposed as a snitch but managed to notice it and get out alive.",
@@ -8227,7 +8247,7 @@ STR16 szPersonalityHelpText[]=
L"What are your manners?",
L"How important are the manners of other people to you?",
L"What is your nationality?",
L"What nation o you dislike?",
L"What nation do you dislike?",
L"How much do you dislike that nation?",
L"How racist are you?",
L"What is your race? You will be\nracist against all other races.",
+20
View File
@@ -2270,6 +2270,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s s'est exposé(e) comme mouchard, mais s'en est rendu compte et a pu s'en sortir vivant.",
+20
View File
@@ -2266,6 +2266,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s was exposed as a snitch but managed to notice it and get out alive.",
+21
View File
@@ -2257,6 +2257,27 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
// toggle snitching
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s was exposed as a snitch but managed to notice it and get out alive.",
+20
View File
@@ -2272,6 +2272,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s został zdemaskowany jako kapuś, ale w porę to spostrzegł i zdołał ujść z życiem.",
+20
View File
@@ -2265,6 +2265,26 @@ STR16 pSnitchSectorMenuDescStrings[] =
L"",
};
STR16 pPrisonerMenuStrings[] = // TODO.Translate
{
L"Interrogate admins",
L"Interrogate troops",
L"Interrogate elites",
L"Interrogate officers",
L"Interrogate generals",
L"Cancel",
};
STR16 pPrisonerMenuDescStrings[] =
{
L"Administrators are easy to process, but give only poor results",
L"Regular troops are common an don't give you high rewards.",
L"If elite troops defect to you, they can become veteran militia.",
L"Interrogating enemy officers can lead you to find enemy generals.",
L"Generals cannot join your militia, but lead to high ransoms.",
L"Cancel",
};
STR16 pSnitchPrisonExposedStrings[] =
{
L"%s was exposed as a snitch but managed to notice it and get out alive.",