mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
- New prisoner class: Civilians can be interrogated. Does not work for profile-based charcters.
- Capturing civilians is possible if their faction has <fCanBeCaptured> set to 1. Requires GameDir >= r2215. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7762 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+2
-2
@@ -1830,7 +1830,7 @@ void LoadGameExternalOptions()
|
||||
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_CIVILIAN] = iniReader.ReadInteger("Strategic Gameplay Settings", "PRISONER_INTERROGATION_POINTS_CIVILIAN", 25, 10, 1000 );
|
||||
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_SECRET1] = 100;
|
||||
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_SECRET2] = 100;
|
||||
|
||||
@@ -1839,7 +1839,7 @@ void LoadGameExternalOptions()
|
||||
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_CIVILIAN] = iniReader.ReadInteger( "Strategic Gameplay Settings", "PRISONER_INTERROGATION_ENEMY_GENERAL_CHANCE_CIVILIAN", 0, 0, 100 );
|
||||
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_SECRET1] = 0;
|
||||
gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_SECRET2] = 0;
|
||||
|
||||
|
||||
+61
-37
@@ -6764,6 +6764,11 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
++numinterrogators[PRISONER_GENERAL];
|
||||
interrogationpoints[PRISONER_GENERAL] += points;
|
||||
}
|
||||
else if ( pSoldier->usSoldierFlagMask2 & SOLDIER_INTERROGATE_CIVILIAN )
|
||||
{
|
||||
++numinterrogators[PRISONER_CIVILIAN];
|
||||
interrogationpoints[PRISONER_CIVILIAN] += points;
|
||||
}
|
||||
// admin is default
|
||||
else
|
||||
{
|
||||
@@ -6846,16 +6851,18 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
return;
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_PROCESSED],
|
||||
interrogatedprisoners[PRISONER_OFFICER], interrogatedprisoners[PRISONER_ELITE], interrogatedprisoners[PRISONER_REGULAR], interrogatedprisoners[PRISONER_ADMIN] );
|
||||
interrogatedprisoners[PRISONER_OFFICER], interrogatedprisoners[PRISONER_ELITE], interrogatedprisoners[PRISONER_REGULAR],
|
||||
interrogatedprisoners[PRISONER_ADMIN], interrogatedprisoners[PRISONER_GENERAL], interrogatedprisoners[PRISONER_CIVILIAN] );
|
||||
|
||||
UINT16 turnedmilitia[PRISONER_MAX] = { 0 };
|
||||
UINT16 volunteers = 0;
|
||||
UINT32 revealedpositions = 0;
|
||||
UINT32 ransomscollected = 0;
|
||||
UINT32 ransommoney = 0;
|
||||
for ( UINT32 i = 0; i < prisonersinterrogated; ++i )
|
||||
{
|
||||
// what kind of a prisoner is this?
|
||||
UINT8 prisonertype = PRISONER_THUG;
|
||||
UINT8 prisonertype = PRISONER_CIVILIAN;
|
||||
if ( i < interrogatedprisoners[PRISONER_ADMIN] )
|
||||
prisonertype = PRISONER_ADMIN;
|
||||
else if ( i < interrogatedprisoners[PRISONER_ADMIN] + interrogatedprisoners[PRISONER_REGULAR] )
|
||||
@@ -6877,8 +6884,9 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
if ( prisonertype == PRISONER_GENERAL )
|
||||
chances[PRISONER_INTERROGATION_DEFECT] = 0;
|
||||
|
||||
if ( prisonertype == PRISONER_THUG )
|
||||
chances[PRISONER_INTERROGATION_DEFECT] = 0;
|
||||
// civilians know nothing about army movement
|
||||
if ( prisonertype == PRISONER_CIVILIAN )
|
||||
chances[PRISONER_INTERROGATION_INFO] = 0;
|
||||
|
||||
// for normalisation, get sum of chances
|
||||
UINT16 sumchance = 0;
|
||||
@@ -6903,14 +6911,21 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
if ( result < chances[PRISONER_INTERROGATION_DEFECT] )
|
||||
{
|
||||
// troops are converted to militia, but there is a chance that they will be demoted in the process
|
||||
if ( prisonertype >= PRISONER_OFFICER && Chance( 80 ) )
|
||||
|
||||
// civilians need to receive basic training - these are volunteers
|
||||
if ( prisonertype == PRISONER_CIVILIAN )
|
||||
++volunteers;
|
||||
else if ( prisonertype >= PRISONER_OFFICER && Chance( 80 ) )
|
||||
++turnedmilitia[PRISONER_OFFICER];
|
||||
else if ( prisonertype >= PRISONER_ELITE && Chance( 80 ) )
|
||||
++turnedmilitia[PRISONER_ELITE];
|
||||
else if ( prisonertype >= PRISONER_REGULAR && Chance( 80 ) )
|
||||
++turnedmilitia[PRISONER_REGULAR];
|
||||
else
|
||||
else if ( prisonertype >= PRISONER_ADMIN && Chance( 80 ) )
|
||||
++turnedmilitia[PRISONER_ADMIN];
|
||||
else
|
||||
// some might even fail to qualify as admins, these are volunteers - we have to 'retrain' them
|
||||
++volunteers;
|
||||
|
||||
// we continue so that this guy cannot also run back to the queen
|
||||
continue;
|
||||
@@ -6918,30 +6933,8 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
// chance that prisoner will give us random info about enemy positions
|
||||
else if ( result < chances[PRISONER_INTERROGATION_DEFECT] + chances[PRISONER_INTERROGATION_INFO] )
|
||||
{
|
||||
// if this guy is an elite or a special prisoner, there is a chance he might tell us about high-value targets!
|
||||
BOOLEAN fGetInfoOnHiddenVIPs = FALSE;
|
||||
if ( prisonertype == PRISONER_ADMIN )
|
||||
{
|
||||
if ( Chance( gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ADMIN] ) )
|
||||
fGetInfoOnHiddenVIPs = TRUE;
|
||||
}
|
||||
else if ( prisonertype == PRISONER_REGULAR )
|
||||
{
|
||||
if ( Chance( gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_REGULAR] ) )
|
||||
fGetInfoOnHiddenVIPs = TRUE;
|
||||
}
|
||||
else if ( prisonertype == PRISONER_ELITE )
|
||||
{
|
||||
if ( Chance( gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_ELITE] ) )
|
||||
fGetInfoOnHiddenVIPs = TRUE;
|
||||
}
|
||||
else if ( prisonertype == PRISONER_OFFICER )
|
||||
{
|
||||
if ( Chance( gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[PRISONER_OFFICER] ) )
|
||||
fGetInfoOnHiddenVIPs = TRUE;
|
||||
}
|
||||
|
||||
if ( fGetInfoOnHiddenVIPs )
|
||||
// there is a chance this guy might tell us about high-value targets!
|
||||
if ( Chance( gGameExternalOptions.ubPrisonerInterrogationEnemyGeneralInfoChance[prisonertype] ) )
|
||||
{
|
||||
UINT16 unknownvipector = 0;
|
||||
if ( GetRandomUnknownVIPSector( unknownvipector ) )
|
||||
@@ -7006,8 +6999,8 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
ransom *= 3;
|
||||
else if ( prisonertype == PRISONER_GENERAL )
|
||||
ransom *= 10;
|
||||
else if ( prisonertype == PRISONER_THUG )
|
||||
ransom *= 0.7f;
|
||||
else if ( prisonertype == PRISONER_CIVILIAN )
|
||||
ransom *= 0.5f;
|
||||
|
||||
ransommoney += ransom;
|
||||
|
||||
@@ -7021,7 +7014,11 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
|
||||
// there is a chance that escaped prisoners may return to the queen...
|
||||
if ( Random( 100 ) < gGameExternalOptions.ubPrisonerReturntoQueenChance )
|
||||
++giReinforcementPool;
|
||||
{
|
||||
// but not for civilians
|
||||
if ( prisonertype != PRISONER_CIVILIAN )
|
||||
++giReinforcementPool;
|
||||
}
|
||||
}
|
||||
|
||||
if ( turnedmilitia[PRISONER_ADMIN] + turnedmilitia[PRISONER_REGULAR] + turnedmilitia[PRISONER_ELITE] + turnedmilitia[PRISONER_OFFICER] )
|
||||
@@ -7034,6 +7031,15 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_TURN_MILITIA], turnedmilitia[PRISONER_OFFICER], turnedmilitia[PRISONER_ELITE], turnedmilitia[PRISONER_REGULAR], turnedmilitia[PRISONER_ADMIN] );
|
||||
}
|
||||
|
||||
if ( volunteers )
|
||||
{
|
||||
AddVolunteers( volunteers );
|
||||
|
||||
// we add the volunteers anyway, but only show the message if this feature is on
|
||||
if ( gGameExternalOptions.fMilitiaVolunteerPool )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_TURN_VOLUNTEER], volunteers );
|
||||
}
|
||||
|
||||
if ( revealedpositions )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_DETECTION], revealedpositions );
|
||||
|
||||
@@ -7046,7 +7052,12 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
|
||||
// give experience rewards to the interrogators
|
||||
// exp gained depends on prisoner type
|
||||
FLOAT totalexp = (FLOAT)(4 * interrogatedprisoners[PRISONER_ADMIN] + 5 * interrogatedprisoners[PRISONER_REGULAR] + 7 * interrogatedprisoners[PRISONER_ELITE] + 10 * interrogatedprisoners[PRISONER_OFFICER]);
|
||||
FLOAT totalexp = (FLOAT)(4 * interrogatedprisoners[PRISONER_ADMIN]
|
||||
+ 5 * interrogatedprisoners[PRISONER_REGULAR]
|
||||
+ 7 * interrogatedprisoners[PRISONER_ELITE]
|
||||
+ 10 * interrogatedprisoners[PRISONER_OFFICER]
|
||||
+ 30 * interrogatedprisoners[PRISONER_GENERAL]
|
||||
+ 3 * interrogatedprisoners[PRISONER_CIVILIAN]);
|
||||
FLOAT expratio = totalexp / sum_points;
|
||||
|
||||
// award experience
|
||||
@@ -7165,7 +7176,7 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
fBeginRiot = TRUE;
|
||||
|
||||
// we now have to determine the combined strength of the prisoners
|
||||
UINT32 prisonerriotvalue = 100 * aPrisoners[PRISONER_THUG]
|
||||
UINT32 prisonerriotvalue = 60 * aPrisoners[PRISONER_CIVILIAN]
|
||||
+ 200 * aPrisoners[PRISONER_GENERAL]
|
||||
+ 200 * aPrisoners[PRISONER_OFFICER]
|
||||
+ 125 * aPrisoners[PRISONER_ELITE]
|
||||
@@ -7189,8 +7200,8 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
for (int i = PRISONER_ADMIN; i < PRISONER_MAX; ++i )
|
||||
escapedprisoners[i] = min( Random( aPrisoners[i] * prisonertoguardratio ), aPrisoners[i] );
|
||||
|
||||
// add enemies
|
||||
pSectorInfo->ubNumTroops = min( 512, pSectorInfo->ubNumTroops + escapedprisoners[PRISONER_REGULAR] + escapedprisoners[PRISONER_THUG] );
|
||||
// add enemies (PRISONER_CIVILIAN just flee)
|
||||
pSectorInfo->ubNumTroops = min( 512, pSectorInfo->ubNumTroops + escapedprisoners[PRISONER_REGULAR] );
|
||||
pSectorInfo->ubNumElites = min( 512, pSectorInfo->ubNumElites + escapedprisoners[PRISONER_ELITE] + escapedprisoners[PRISONER_OFFICER] + escapedprisoners[PRISONER_GENERAL] );
|
||||
pSectorInfo->ubNumAdmins = min( 512, pSectorInfo->ubNumAdmins + escapedprisoners[PRISONER_ADMIN] );
|
||||
|
||||
@@ -12066,6 +12077,14 @@ void PrisonerMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
fShowAssignmentMenu = FALSE;
|
||||
giAssignHighLine = -1;
|
||||
}
|
||||
else if ( iValue == PRISONER_MENU_CIVILIAN )
|
||||
{
|
||||
pSoldier->usSoldierFlagMask2 &= ~SOLDIER_INTERROGATE_ALL;
|
||||
pSoldier->usSoldierFlagMask2 |= SOLDIER_INTERROGATE_CIVILIAN;
|
||||
fShowPrisonerMenu = FALSE;
|
||||
fShowAssignmentMenu = FALSE;
|
||||
giAssignHighLine = -1;
|
||||
}
|
||||
|
||||
// rerender tactical stuff
|
||||
gfRenderPBInterface = TRUE;
|
||||
@@ -15959,6 +15978,7 @@ void HandleShadingOfLinesForPrisonerMenu( void )
|
||||
UnShadeStringInBox( ghPrisonerBox, PRISONER_MENU_ELITE );
|
||||
UnShadeStringInBox( ghPrisonerBox, PRISONER_MENU_OFFICER );
|
||||
UnShadeStringInBox( ghPrisonerBox, PRISONER_MENU_GENERAL );
|
||||
UnShadeStringInBox( ghPrisonerBox, PRISONER_MENU_CIVILIAN );
|
||||
|
||||
if ( pSoldier->usSoldierFlagMask2 & SOLDIER_INTERROGATE_ADMIN )
|
||||
{
|
||||
@@ -15980,6 +16000,10 @@ void HandleShadingOfLinesForPrisonerMenu( void )
|
||||
{
|
||||
ShadeStringInBox( ghPrisonerBox, PRISONER_MENU_GENERAL );
|
||||
}
|
||||
else if ( pSoldier->usSoldierFlagMask2 & SOLDIER_INTERROGATE_CIVILIAN )
|
||||
{
|
||||
ShadeStringInBox( ghPrisonerBox, PRISONER_MENU_CIVILIAN );
|
||||
}
|
||||
}
|
||||
|
||||
void HandleShadingOfLinesForSnitchSectorMenu( void )
|
||||
|
||||
@@ -432,7 +432,7 @@ typedef enum
|
||||
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_CIVILIAN, // captured civilians (Kingpin, Hicks...)
|
||||
PRISONER_SECRET1, // tbA
|
||||
PRISONER_SECRET2, // tbA
|
||||
PRISONER_MAX,
|
||||
|
||||
@@ -458,8 +458,19 @@ void AddTextToTownBox( void )
|
||||
// prisoners
|
||||
swprintf( wString, L"%s:", pwTownInfoStrings[ 13 ] );
|
||||
AddMonoString( &hStringHandle, wString );
|
||||
swprintf( wString, pwTownInfoStrings[ 14 ], numprisoners, capacity, aPrisoners[PRISONER_ADMIN], aPrisoners[PRISONER_REGULAR], aPrisoners[PRISONER_ELITE], aPrisoners[PRISONER_OFFICER], aPrisoners[PRISONER_GENERAL] );
|
||||
swprintf( wString, pwTownInfoStrings[14], numprisoners, capacity );
|
||||
AddSecondColumnMonoString( &hStringHandle, wString );
|
||||
|
||||
for ( int i = 0; i < PRISONER_MAX; ++i )
|
||||
{
|
||||
if ( aPrisoners[i] )
|
||||
{
|
||||
swprintf( wString, L"" );
|
||||
AddMonoString( &hStringHandle, wString );
|
||||
swprintf( wString, pwTownInfoStrings[15 + i], aPrisoners[i] );
|
||||
AddSecondColumnMonoString( &hStringHandle, wString );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -166,6 +166,7 @@ enum {
|
||||
PRISONER_MENU_ELITE,
|
||||
PRISONER_MENU_OFFICER,
|
||||
PRISONER_MENU_GENERAL,
|
||||
PRISONER_MENU_CIVILIAN,
|
||||
PRISONER_MENU_CANCEL,
|
||||
MAX_PRISONER_MENU_STRING_COUNT,
|
||||
};
|
||||
|
||||
@@ -5367,11 +5367,11 @@ BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile )
|
||||
if ( guiCurrentSaveGameVersion < PRISONER_EXPANSION )
|
||||
{
|
||||
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_GENERAL] = 0;
|
||||
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_THUG] = 0;
|
||||
SectorInfo[sectorID].uiNumberOfPrisonersOfWar[PRISONER_CIVILIAN] = 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];
|
||||
SectorInfo[sectorID].ubTanksInBattle = SectorInfo[sectorID].uiInterrogationHundredsLeft[PRISONER_CIVILIAN];
|
||||
}
|
||||
}
|
||||
// uiSize = sizeof( SECTORINFO ) * 256;
|
||||
|
||||
@@ -1248,7 +1248,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
|
||||
// Flugente: handcuffing people
|
||||
if ( gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag( usHandItem, HANDCUFFS ) && pTargetSoldier && pTargetSoldier->CanBeHandcuffed( ) )
|
||||
if ( gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag( usHandItem, HANDCUFFS ) && pTargetSoldier && pTargetSoldier->CanBeCaptured( ) )
|
||||
{
|
||||
// ATE: AI CANNOT GO THROUGH HERE!
|
||||
INT32 usMapPos;
|
||||
|
||||
@@ -82,6 +82,7 @@ typedef struct
|
||||
BOOLEAN Enabled; //add
|
||||
BOOLEAN Loyalty;
|
||||
BOOLEAN AddToBattle;
|
||||
BOOLEAN fCanBeCaptured; // Flugente: if TRUE, members of this faction can be captured
|
||||
CHAR16 szCurGroup[MAX_ENEMY_NAMES_CHARS];
|
||||
|
||||
} CIV_NAMES_VALUES;
|
||||
|
||||
+57
-10
@@ -6789,7 +6789,7 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
for ( pTeamSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; ++pTeamSoldier, ++cnt )
|
||||
{
|
||||
// Kill those not already dead.,...
|
||||
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == ENEMY_TEAM )
|
||||
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector )
|
||||
{
|
||||
// Only pows that are not dead yet
|
||||
if ( (pTeamSoldier->usSoldierFlagMask & SOLDIER_POW) && !(pTeamSoldier->flags.uiStatusFlags & SOLDIER_DEAD) )
|
||||
@@ -6802,7 +6802,7 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
++sNumPrisoner[PRISONER_GENERAL];
|
||||
else if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_ENEMY_OFFICER )
|
||||
++sNumPrisoner[PRISONER_OFFICER];
|
||||
else
|
||||
else if ( pTeamSoldier->bTeam == ENEMY_TEAM )
|
||||
{
|
||||
switch ( pTeamSoldier->ubSoldierClass )
|
||||
{
|
||||
@@ -6815,6 +6815,10 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
break;
|
||||
}
|
||||
}
|
||||
else //if ( pTeamSoldier->bTeam == CIV_TEAM )
|
||||
{
|
||||
++sNumPrisoner[PRISONER_CIVILIAN];
|
||||
}
|
||||
|
||||
// Flugente: VIPs
|
||||
if ( pTeamSoldier->usSoldierFlagMask & SOLDIER_VIP )
|
||||
@@ -10427,6 +10431,12 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// if the merc asking for surrender is experienced in capitulation negotiations, we get a bonus to our strength
|
||||
if ( pSoldier )
|
||||
playersidestrength = (playersidestrength * (100 + pSoldier->GetBackgroundValue(BG_PERC_CAPITULATION))) / 100;
|
||||
|
||||
// Capturing profile-based NPCs would be desirable, but is a good way to break quests. Due to this, we don't allow capturing them.
|
||||
// As it would be odd if the entire enemy team surrenders apart from one guy, we don't allow surrender, no matter the surrender strength, if a hostile profile-based NPC is around.
|
||||
// We also don't allow surrender if the enemy has a tank.
|
||||
// We justify this storywise by these soldiers being very determined leaders who don't allow surrender categorically.
|
||||
BOOLEAN fNoSurrender = FALSE;
|
||||
|
||||
// enemy team
|
||||
firstid = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
||||
@@ -10436,6 +10446,9 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) )
|
||||
{
|
||||
enemysidestrength += pSoldier->GetSurrenderStrength();
|
||||
|
||||
if ( pSoldier->ubProfile != NO_PROFILE || pSoldier->ubSoldierClass == SOLDIER_CLASS_TANK )
|
||||
fNoSurrender = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10447,8 +10460,14 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) )
|
||||
{
|
||||
// if a civilian is not neutral and on the enemy side, add his strength to the team
|
||||
if ( !pSoldier->aiData.bNeutral && pSoldier->bSide == 1 )
|
||||
enemysidestrength += pSoldier->GetSurrenderStrength();
|
||||
if ( !pSoldier->aiData.bNeutral && pSoldier->bSide == 1 && zCivGroupName[pSoldier->ubCivilianGroup].fCanBeCaptured && pSoldier->ubProfile != NO_PROFILE )
|
||||
fNoSurrender = TRUE;
|
||||
|
||||
// a civilian can only be captured if his faction is allowed to. This should prevent the player from exploiting a huge numerical superiority against small enemy groups, like lone assassins.
|
||||
if ( !pSoldier->CanBeCaptured() )
|
||||
continue;
|
||||
|
||||
enemysidestrength += pSoldier->GetSurrenderStrength( );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10464,7 +10483,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_SURRENDER_VALUES], playersidestrength, gGameExternalOptions.fSurrenderMultiplier * enemysidestrength );
|
||||
|
||||
// perhaps this can be fleshed out more, for now, let's see if this is acceptable behaviour
|
||||
if ( playersidestrength >= gGameExternalOptions.fSurrenderMultiplier * enemysidestrength )
|
||||
if ( !fNoSurrender && playersidestrength >= gGameExternalOptions.fSurrenderMultiplier * enemysidestrength )
|
||||
{
|
||||
// it is enough to simply set all soldiers to captured
|
||||
firstid = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
||||
@@ -10473,8 +10492,12 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
{
|
||||
if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) )
|
||||
{
|
||||
// only if not dying, and if not a NPC (Mike...)
|
||||
if( pSoldier->stats.bLife >= OKLIFE && pSoldier->ubProfile == NO_PROFILE )
|
||||
// can this guy be captured?
|
||||
if ( !pSoldier->CanBeCaptured( ) )
|
||||
continue;
|
||||
|
||||
// only if not dying
|
||||
if( pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
pSoldier->usSoldierFlagMask |= SOLDIER_POW;
|
||||
|
||||
@@ -10483,10 +10506,34 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
firstid = gTacticalStatus.Team[CIV_TEAM].bFirstID;
|
||||
lastid = gTacticalStatus.Team[CIV_TEAM].bLastID;
|
||||
for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier )
|
||||
{
|
||||
if ( pSoldier->bActive && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) )
|
||||
{
|
||||
// can this guy be captured?
|
||||
if ( !pSoldier->CanBeCaptured() )
|
||||
continue;
|
||||
|
||||
// only if not dying
|
||||
if ( pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
pSoldier->usSoldierFlagMask |= SOLDIER_POW;
|
||||
|
||||
// Remove as target
|
||||
RemoveManAsTarget( pSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_REFUSE_SURRENDER] );
|
||||
if ( fNoSurrender )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_REFUSE_SURRENDER_LEADER] );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_REFUSE_SURRENDER] );
|
||||
|
||||
// if asking for surrender while undercover and the enemy refuses, he learns who you are, so he uncovers you
|
||||
if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->usSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER) )
|
||||
@@ -10561,8 +10608,8 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// Flugente: offer the enemy the chance to surrender
|
||||
void HandleSurrenderOffer( SOLDIERTYPE* pSoldier )
|
||||
{
|
||||
// only against enemies...
|
||||
if ( !pSoldier || pSoldier->bTeam != ENEMY_TEAM )
|
||||
// abort if bad pointer, or not an enemy and not a capturable civilian
|
||||
if ( !pSoldier || !pSoldier->CanBeCaptured( ) )
|
||||
return;
|
||||
|
||||
// remember the target's ID
|
||||
|
||||
@@ -16176,13 +16176,28 @@ BOOLEAN SOLDIERTYPE::FreePrisoner( )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// can this guy be handcuffed?
|
||||
BOOLEAN SOLDIERTYPE::CanBeHandcuffed( )
|
||||
// can this guy be captured (by handcuffing or asking him to surrender)?
|
||||
BOOLEAN SOLDIERTYPE::CanBeCaptured( )
|
||||
{
|
||||
// if this is an enemy that has not already been captured, and is not a NPC, we can handcuff and thus capture him
|
||||
if ( this->bTeam == ENEMY_TEAM && !(this->usSoldierFlagMask & SOLDIER_POW) && this->ubProfile == NO_PROFILE )
|
||||
return TRUE;
|
||||
// if this guy is not already handcuffed, and is not an NPC
|
||||
if ( !(this->usSoldierFlagMask & SOLDIER_POW) && this->ubProfile == NO_PROFILE )
|
||||
{
|
||||
// tanks cannot be captured
|
||||
if ( this->ubSoldierClass == SOLDIER_CLASS_TANK )
|
||||
return FALSE;
|
||||
|
||||
// enemies can be captured
|
||||
if ( this->bTeam == ENEMY_TEAM )
|
||||
return TRUE;
|
||||
|
||||
// civilians can be captured if their faction can, and if they are hostile
|
||||
if ( this->bTeam == CIV_TEAM && zCivGroupName[this->ubCivilianGroup].fCanBeCaptured )
|
||||
{
|
||||
if ( !this->aiData.bNeutral && this->bSide == 1 )
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -19795,7 +19810,7 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection
|
||||
|
||||
UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel );
|
||||
|
||||
if ( ubPerson != NOBODY && MercPtrs[ubPerson]->CanBeHandcuffed( ) )
|
||||
if ( ubPerson != NOBODY && MercPtrs[ubPerson]->CanBeCaptured( ) )
|
||||
{
|
||||
// we found someone we can handcuff
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ubPerson];
|
||||
@@ -20390,8 +20405,9 @@ BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT8 ubTargetID, BOOLEAN fValid
|
||||
DeductPoints( this, sAPCost, 0, UNTRIGGERED_INTERRUPT );
|
||||
apsDeducted = TRUE;
|
||||
|
||||
// Flugente: if we are talking to an enemy, we have the option to offer them surrendering... but not on y levels >= 16 (no surrendering in the palace, as we have to kill, not capture, the queen)
|
||||
if ( pTSoldier->bTeam == ENEMY_TEAM && (gGameExternalOptions.fEnemyCanSurrender || gGameExternalOptions.fPlayerCanAsktoSurrender) && gWorldSectorY < WORLD_MAP_X - 2 )
|
||||
// Flugente: if we are talking to an enemy, we have the option to offer them surrender...
|
||||
if ( (pTSoldier->bTeam == ENEMY_TEAM || (pTSoldier->bTeam == CIV_TEAM && zCivGroupName[pTSoldier->ubCivilianGroup].fCanBeCaptured) )
|
||||
&& (gGameExternalOptions.fEnemyCanSurrender || gGameExternalOptions.fPlayerCanAsktoSurrender) )
|
||||
{
|
||||
HandleSurrenderOffer( pTSoldier );
|
||||
return(FALSE);
|
||||
|
||||
@@ -407,7 +407,9 @@ enum
|
||||
#define SOLDIER_INTERROGATE_OFFICER 0x00000040 //64 // interrogate officers
|
||||
#define SOLDIER_INTERROGATE_GENERAL 0x00000080 //128 // interrogate generals
|
||||
|
||||
#define SOLDIER_INTERROGATE_ALL 0x000000F8 // all interrogation flags
|
||||
#define SOLDIER_INTERROGATE_CIVILIAN 0x00000100 //256 // interrogate civilian
|
||||
|
||||
#define SOLDIER_INTERROGATE_ALL 0x000001F8 // all interrogation flags
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
// -------- added by Flugente: disease property flags --------
|
||||
@@ -1769,7 +1771,7 @@ public:
|
||||
BOOLEAN CanProcessPrisoners();
|
||||
UINT32 GetSurrenderStrength();
|
||||
BOOLEAN FreePrisoner(); // used for an enemy liberating fellow prisoners
|
||||
BOOLEAN CanBeHandcuffed(); // can this guy be handcuffed?
|
||||
BOOLEAN CanBeCaptured(); // can this guy be captured (by handcuffing or asking him to surrender)?
|
||||
|
||||
// Flugente: scuba gear
|
||||
BOOLEAN UsesScubaGear();
|
||||
|
||||
@@ -2253,7 +2253,7 @@ UINT8 HandleHandcuffCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso
|
||||
{
|
||||
// is there a person here?
|
||||
UINT8 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel );
|
||||
if ( usSoldierIndex != NOBODY && MercPtrs[usSoldierIndex]->CanBeHandcuffed( ) )
|
||||
if ( usSoldierIndex != NOBODY && MercPtrs[usSoldierIndex]->CanBeCaptured( ) )
|
||||
{
|
||||
return( HANDCUFF_GREY_UICURSOR );
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ civGroupNamesStartElementHandle(void *userData, const XML_Char *name, const XML_
|
||||
strcmp(name, "Enabled") == 0 ||
|
||||
strcmp(name, "Loyalty") == 0 ||
|
||||
strcmp(name, "AddToBattle") == 0 ||
|
||||
strcmp(name, "fCanBeCaptured" ) == 0 ||
|
||||
strcmp(name, "szGroup") == 0 ))
|
||||
{
|
||||
pData->curElement = ELEMENT_PROPERTY;
|
||||
@@ -98,6 +99,7 @@ civGroupNamesEndElementHandle(void *userData, const XML_Char *name)
|
||||
|
||||
zCivGroupName[pData->curCivGroupNames.uiIndex].AddToBattle = pData->curCivGroupNames.AddToBattle;
|
||||
zCivGroupName[pData->curCivGroupNames.uiIndex].Loyalty = pData->curCivGroupNames.Loyalty;
|
||||
zCivGroupName[pData->curCivGroupNames.uiIndex].fCanBeCaptured = pData->curCivGroupNames.fCanBeCaptured;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -125,6 +127,11 @@ civGroupNamesEndElementHandle(void *userData, const XML_Char *name)
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curCivGroupNames.AddToBattle = (BOOLEAN) atol(pData->szCharData);
|
||||
}
|
||||
else if ( strcmp( name, "fCanBeCaptured" ) == 0 )
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curCivGroupNames.fCanBeCaptured = (BOOLEAN)atol( pData->szCharData );
|
||||
}
|
||||
else if(strcmp(name, "szGroup") == 0 )
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
|
||||
@@ -858,6 +858,8 @@ enum
|
||||
SRT_PRISONER_INI_SETTING_OFF,
|
||||
STR_PRISONER_X_FREES_Y,
|
||||
STR_PRISONER_DETECTION_VIP,
|
||||
STR_PRISONER_REFUSE_SURRENDER_LEADER,
|
||||
STR_PRISONER_TURN_VOLUNTEER,
|
||||
|
||||
TEXT_NUM_PRISONER_STR
|
||||
};
|
||||
|
||||
+18
-4
@@ -2277,16 +2277,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3565,8 +3567,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"民兵训练度", // 10 // state of civilian training in town
|
||||
L"民兵", // the state of the trained civilians in the town
|
||||
L"巡逻民兵", // L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town
|
||||
L"囚犯", // Flugente: display number of prisoners
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts // TODO.Translate
|
||||
L"囚犯", //L"Prisoners",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8131,7 +8143,7 @@ STR16 szFoodTextStr[]=
|
||||
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"审讯了%d军官,%d精英士兵,%d普通士兵和%d巡逻官。",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"%d 名俘虏已支付赎金", //L"%d prisoners paid ransom money.",
|
||||
L"%d 名俘虏已供出同伙位置", //L"%d prisoners revealed enemy positions.",
|
||||
L"%d军官,%d精英士兵,%d普通士兵和%d巡逻官加入了我方。",
|
||||
@@ -8144,6 +8156,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"这些可以在 INI 设置关闭。", // L"This behaviour is set OFF in your ini settings.",
|
||||
L"%s释放了%s!", //L"%s has freed %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]=
|
||||
|
||||
+18
-4
@@ -2275,16 +2275,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3563,8 +3565,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Training Burgers", // 10 // state of civilian training in town
|
||||
L"Militie", // the state of the trained civilians in the town
|
||||
L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town // TODO.Translate
|
||||
L"Prisoners", // Flugente: display number of prisoners // TODO.Translate
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts
|
||||
L"Prisoners",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8142,7 +8154,7 @@ STR16 szFoodTextStr[]=
|
||||
// TODO.Translate
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d officers, %d elites, %d regulars and %d admins were interrogated.",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"%d prisoners paid ransom money.",
|
||||
L"%d prisoners revealed enemy positions.",
|
||||
L"%d officers, %d elites, %d regulars and %d admins joined our cause.",
|
||||
@@ -8155,6 +8167,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"This behaviour is set OFF in your ini settings.",
|
||||
L"%s has freed %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]= // TODO.Translate
|
||||
|
||||
+18
-4
@@ -2278,16 +2278,18 @@ STR16 pPrisonerMenuStrings[] =
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3564,8 +3566,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Civilian Training", // 10 // state of civilian training in town
|
||||
L"Militia", // the state of the trained civilians in the town
|
||||
L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town
|
||||
L"Prisoners", // Flugente: display number of prisoners
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts
|
||||
L"Prisoners",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8129,7 +8141,7 @@ STR16 szFoodTextStr[]=
|
||||
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d officers, %d elites, %d regulars and %d admins were interrogated.",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.",
|
||||
L"%d prisoners paid ransom money.",
|
||||
L"%d prisoners revealed enemy positions.",
|
||||
L"%d officers, %d elites, %d regulars and %d admins joined our cause.",
|
||||
@@ -8142,6 +8154,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"This behaviour is set OFF in your ini settings.",
|
||||
L"%s has freed %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!",
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]=
|
||||
|
||||
+18
-4
@@ -2284,16 +2284,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3568,8 +3570,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Formation ", // 10 // state of civilian training in town
|
||||
L"Milice ", // the state of the trained civilians in the town
|
||||
L"Formation mobile ", // HEADROCK HAM 3.6: The stat of Mobile militia training in town
|
||||
L"Prisonnier ", // Flugente: display number of prisoners
|
||||
L"%d/%d = %dA %dR %dÉ %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts // TODO.Translate
|
||||
L"Prisonnier ",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8128,7 +8140,7 @@ STR16 szFoodTextStr[]=
|
||||
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"Prisonnier(s) ayant été interrogé(s) : %d officiers, %d élite(s), %d régulier(s) et %d administratif(s).",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"Prisonnier(s) ayant payé une rançon : %d.",
|
||||
L"Prisonnier(s) ayant révélé les positions ennemies : %d.",
|
||||
L"Prisonnier(s) ayant rejoint notre cause : %d officiers, %d élite(s), %d régulier(s) et %d administratif(s).",
|
||||
@@ -8141,6 +8153,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"Ce comportement est désactivé dans vos fichiers ini.",
|
||||
L"%s a libéré %s !",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]=
|
||||
|
||||
+19
-5
@@ -2280,16 +2280,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3562,8 +3564,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Zivilistentraining", // 10 // state of civilian training in town
|
||||
L"Miliz", // the state of the trained civilians in the town
|
||||
L"Mobile M. Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town
|
||||
L"Prisoners", // Flugente: display number of prisoners // TODO.Translate
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts
|
||||
L"Gefangene",
|
||||
L"%d (max. %d)",
|
||||
L"%d Hilfssoldaten",
|
||||
L"%d Truppen",
|
||||
L"%d Elite",
|
||||
L"%d Offiziere",
|
||||
L"%d Generele",
|
||||
L"%d Zivilisten",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -7959,7 +7971,7 @@ STR16 szFoodTextStr[]=
|
||||
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d Offiziere, %d Elite-, %d Reguläre und %d Hilfssoldaten wurden verhört.",
|
||||
L"%d Offiziere, %d Elite-, %d Reguläre, %d Hilfssoldaten, %d Generäle und %d Zivilisten wurden verhört.",
|
||||
L"%d Gefangene wurden gegen Lösegeld freigelassen.",
|
||||
L"%d Gefangene haben uns Truppenstandorte verraten.",
|
||||
L"%d Offiziere, %d Elite-, %d Reguläre und %d Hilfssoldaten laufen zu uns über.",
|
||||
@@ -7971,7 +7983,9 @@ STR16 szPrisonerTextStr[]=
|
||||
L"Der Feind weigert sich, Sie als Gefangenen zu nehmen - Er möchte Sie tod sehen!",
|
||||
L"Dieses Verhalten ist ausgeschaltet in der ja2_options.ini Datei.",
|
||||
L"%s hat %s befreit!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"Ein Gefangener hat den Aufenthaltsort eines hochrangigen Offiziers in %s enthüllt!",
|
||||
L"Der feindliche Anführer denkt nicht mal an Kapitulation!",
|
||||
L"%d Gefangene sind uns als Freiwillige beigetreten.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]=
|
||||
|
||||
+18
-5
@@ -2266,22 +2266,23 @@ STR16 pSnitchSectorMenuDescStrings[] =
|
||||
|
||||
STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
{
|
||||
// toggle snitching
|
||||
L"Interrogate admins",
|
||||
L"Interrogate troops",
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3559,8 +3560,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"addestramento civili", // 10 // state of civilian training in town
|
||||
L"Esercito", // the state of the trained civilians in the town
|
||||
L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town // TODO.Translate
|
||||
L"Prisoners", // Flugente: display number of prisoners // TODO.Translate
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts // TODO.Translate
|
||||
L"Prisoners",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8137,7 +8148,7 @@ STR16 szFoodTextStr[]=
|
||||
// TODO.Translate
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d officers, %d elites, %d regulars and %d admins were interrogated.",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"%d prisoners paid ransom money.",
|
||||
L"%d prisoners revealed enemy positions.",
|
||||
L"%d officers, %d elites, %d regulars and %d admins joined our cause.",
|
||||
@@ -8150,6 +8161,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"This behaviour is set OFF in your ini settings.",
|
||||
L"%s has freed %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]= // TODO.Translate
|
||||
|
||||
+18
-4
@@ -2286,16 +2286,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
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"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3573,8 +3575,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Szkolenie cywili", // 10 // state of civilian training in town
|
||||
L"Samoobrona", // the state of the trained civilians in the town
|
||||
L"Mobile Training", // HEADROCK HAM 3.6: The stat of Mobile militia training in town // TODO.Translate
|
||||
L"Prisoners", // Flugente: display number of prisoners // TODO.Translate
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts // TODO.Translate
|
||||
L"Prisoners",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8154,7 +8166,7 @@ STR16 szFoodTextStr[]=
|
||||
// TODO.Translate
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d officers, %d elites, %d regulars and %d admins were interrogated.",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"%d prisoners paid ransom money.",
|
||||
L"%d prisoners revealed enemy positions.",
|
||||
L"%d officers, %d elites, %d regulars and %d admins joined our cause.",
|
||||
@@ -8167,6 +8179,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"This behaviour is set OFF in your ini settings.",
|
||||
L"%s has freed %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]= // TODO.Translate
|
||||
|
||||
+18
-4
@@ -2277,16 +2277,18 @@ STR16 pPrisonerMenuStrings[] = // TODO.Translate
|
||||
L"Interrogate elites",
|
||||
L"Interrogate officers",
|
||||
L"Interrogate generals",
|
||||
L"Interrogate civilians",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
STR16 pPrisonerMenuDescStrings[] = // TODO.Translate
|
||||
{
|
||||
L"Administrators are easy to process, but give only poor results",
|
||||
L"Regular troops are common an don't give you high rewards.",
|
||||
L"Regular troops are common and 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"Civilians don't offer much resistance, but are second-rate troops at best.",
|
||||
L"Cancel",
|
||||
};
|
||||
|
||||
@@ -3561,8 +3563,18 @@ STR16 pwTownInfoStrings[] =
|
||||
L"Тренировка ополчения", // 10 // state of civilian training in town
|
||||
L"Ополчение", // the state of the trained civilians in the town
|
||||
L"Тренинг мобильных групп", // HEADROCK HAM 3.6: The stat of Mobile militia training in town //Mobile Training
|
||||
L"Заключенные", // Flugente: display number of prisoners
|
||||
L"%d/%d - %dA %dR %dE %dO %dG", // TODO.Translate // Info: Total # of prisoners/capacity - # of Admins # of Regulars # of Elites # of Officers # of Generals
|
||||
|
||||
// Flugente: prisoner texts // TODO.Translate
|
||||
L"Заключенные",
|
||||
L"%d (capacity %d)",
|
||||
L"%d Admins",
|
||||
L"%d Regulars",
|
||||
L"%d Elites",
|
||||
L"%d Officers",
|
||||
L"%d Generals",
|
||||
L"%d Civilians",
|
||||
L"%d Special1",
|
||||
L"%d Special2",
|
||||
};
|
||||
|
||||
// Mine strings
|
||||
@@ -8124,7 +8136,7 @@ STR16 szFoodTextStr[]=
|
||||
|
||||
STR16 szPrisonerTextStr[]=
|
||||
{
|
||||
L"%d офицеров, %d элитных солдат, %d рядовых и %d полицейских были допрошены.",
|
||||
L"%d officers, %d elites, %d regulars, %d admins, %d generals and %d civilians were interrogated.", // TODO.Translate
|
||||
L"%d пленных заплатили выкуп.",
|
||||
L"%d пленных выдали расположение отрядов армии.",
|
||||
L"%d офицеров, %d элитных солдат, %d рядовых и %d полицейских решили присоединиться к нам.",
|
||||
@@ -8137,6 +8149,8 @@ STR16 szPrisonerTextStr[]=
|
||||
L"Этот режим отключен в настройках.",
|
||||
L"%s освободил %s!",
|
||||
L"A prisoner revealed the location of a high-ranking army officer in %s!", // TODO.Translate
|
||||
L"The enemy leader refuses to even consider surrender!",
|
||||
L"%d prisoners volunteered to join our forces.",
|
||||
};
|
||||
|
||||
STR16 szMTATextStr[]=
|
||||
|
||||
Reference in New Issue
Block a user