diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index b60d194dc..36110547a 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -2614,7 +2614,7 @@ UINT8 CalculateRepairPointsForRepairman(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts extern INT32 CalcThreateningEffectiveness( UINT8 ubMerc ); // Flugente: calculate interrogation value -FLOAT CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) +UINT32 CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) { UINT32 usInterrogationPoints = 0; @@ -2629,7 +2629,7 @@ FLOAT CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) // no prisoners -> no interrogation (this should not happen) if ( !*pusMaxPts ) - return .0f; + return 0; usInterrogationPoints = 50 + 10 * EffectiveExpLevel( pSoldier ) + EffectiveLeadership( pSoldier ); @@ -2649,7 +2649,7 @@ FLOAT CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) } // Flugente: calculate prison guard value -FLOAT CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) +UINT32 CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) { // this is not an assignment. Simply being in the sector will allow us to be counted as guards UINT32 usValue = 0; @@ -5480,6 +5480,10 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) if ( !gGameExternalOptions.fAllowPrisonerSystem ) return; + // no underground prisons! + if ( bZ ) + return; + // Is there a prison in this sector? UINT16 prisonerbaselimit = 0; for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; ++cnt) @@ -5500,19 +5504,13 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) return; // Are there any prisoners in this prison? - UINT32 numprisoners = 0; - if ( !bZ ) - { - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); + SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; - } - else - { - UNDERGROUND_SECTORINFO *pSectorInfo = FindUnderGroundSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); + UINT32 numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; - numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; - } + // add interrogation progress from last hour and erase it in data + UINT32 interrogationpoints = pSectorInfo->uiInterrogationHundredsLeft; + pSectorInfo->uiInterrogationHundredsLeft = 0; if ( !numprisoners ) return; @@ -5521,13 +5519,12 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) if (!SectorOursAndPeaceful( sMapX, sMapY, bZ )) return; - // loop over all mercs in this sector that are on the FACILITY_INTERROGATE_PRISONERS assignment and determine their interrogation progress + // loop over all mercs in this sector that are on the FACILITY_INTERROGATE_PRISONERS assignment and determine their interrogation progress + UINT8 numinterrogators = 0; + + // count any interrogators found here, and sum up their interrogation values SOLDIERTYPE *pSoldier = NULL; UINT32 uiCnt=0; - UINT8 numinterrogators = 0; - FLOAT interrogationpoints = .0f; - - // count any interrogators found here, and sum up their interrogation values for ( uiCnt = 0, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++uiCnt, ++pSoldier) { if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) ) @@ -5545,14 +5542,18 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) if ( !numinterrogators ) return; - + // for every x points, we can interrogate 1 prisoner // TODO: for now, we lose the remaining points UINT32 prisonersinterrogated = interrogationpoints / 100; + + // the part that gets left behind is saved to the map (but not the part that gets lost due to there not being enough prisoners) + interrogationpoints -= prisonersinterrogated * 100; + pSectorInfo->uiInterrogationHundredsLeft = (UINT8)(interrogationpoints); if ( prisonersinterrogated > numprisoners ) prisonersinterrogated = numprisoners; - + if ( !prisonersinterrogated ) return; @@ -5675,27 +5676,12 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) } } - // remove interrogated prisoners... - if ( !bZ ) - { - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - - // safety first... - if ( prisonersinterrogated > pSectorInfo->uiNumberOfPrisonersOfWar ) - pSectorInfo->uiNumberOfPrisonersOfWar = 0; - else - pSectorInfo->uiNumberOfPrisonersOfWar -= prisonersinterrogated; - } + // remove interrogated prisoners... + // safety first... + if ( prisonersinterrogated > pSectorInfo->uiNumberOfPrisonersOfWar ) + pSectorInfo->uiNumberOfPrisonersOfWar = 0; else - { - UNDERGROUND_SECTORINFO *pSectorInfo = FindUnderGroundSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); - - // safety first... - if ( prisonersinterrogated > pSectorInfo->uiNumberOfPrisonersOfWar ) - pSectorInfo->uiNumberOfPrisonersOfWar = 0; - else - pSectorInfo->uiNumberOfPrisonersOfWar -= prisonersinterrogated; - } + pSectorInfo->uiNumberOfPrisonersOfWar -= prisonersinterrogated; } // Flugente: prisons can riot if there aren't enough guards around @@ -5704,6 +5690,10 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) if ( !gGameExternalOptions.fAllowPrisonerSystem ) return; + // no underground prisons! + if ( bZ ) + return; + BOOLEAN fBeginRiot = FALSE; // Is there a prison in this sector? @@ -5726,44 +5716,38 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) return; // Are there any prisoners in this prison? - UINT32 numprisoners = 0; - if ( !bZ ) - { - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); + SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] ); - numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; - } - else - { - UNDERGROUND_SECTORINFO *pSectorInfo = FindUnderGroundSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); - - numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; - } + UINT32 numprisoners = pSectorInfo->uiNumberOfPrisonersOfWar; if ( !numprisoners ) return; + CHAR16 wSectorName[ 64 ]; + GetShortSectorString( sMapX, sMapY, wSectorName ); + // if sector is not under our control, the prisoners are added to the local garrison - if( !bZ && StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].fEnemyControlled == TRUE ) + if( StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].fEnemyControlled == TRUE ) { // add enemies - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - pSectorInfo->ubNumTroops += numprisoners; + + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_ARMY_FREED_PRISON], wSectorName ); + return; } // if sector not under our control, has enemies in it, or is currently in combat mode if (!SectorOursAndPeaceful( sMapX, sMapY, bZ )) return; - // loop over all mercs in this sector that are on the FACILITY_INTERROGATE_PRISONERS assignment and determine their interrogation progress - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; + // loop over all mercs in this sector that are on the FACILITY_INTERROGATE_PRISONERS assignment and add up their interrogation values UINT8 numprisonguards = 0; - FLOAT prisonguardvalue = .0f; + UINT32 prisonguardvalue = 0; // count any interrogators found here, and sum up their interrogation values + SOLDIERTYPE *pSoldier = NULL; + UINT32 uiCnt = 0; UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) @@ -5776,45 +5760,32 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) prisonguardvalue += CalculatePrisonGuardValue(pSoldier, &tmp ); } } - // add militia strength - if ( !bZ ) - { - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - - prisonguardvalue += 100 * pSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ] + 150 * pSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ] + 200 * pSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]; - } - else - { - // there are no underground prisons, so screw this... - } + + // add militia strength + prisonguardvalue += 100 * pSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ] + 150 * pSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ] + 200 * pSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]; if ( !numprisonguards ) fBeginRiot = TRUE; // we now have to determine the combined strength of the prisoners - FLOAT prisonerriotvalue = .0f; + UINT32 prisonerriotvalue = 0; for ( UINT32 i = 0; i < numprisoners; ++i ) { - prisonerriotvalue += 100.0f; + prisonerriotvalue += 100; } if ( prisonerriotvalue > prisonguardvalue ) { - if ( numprisoners > prisonerbaselimit && Random( (UINT32)(prisonerriotvalue) ) > Random( (UINT32)(prisonguardvalue) ) ) + if ( numprisoners > prisonerbaselimit && Random( prisonerriotvalue ) > Random( prisonguardvalue ) ) fBeginRiot = TRUE; } if ( fBeginRiot ) { // add enemies - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - pSectorInfo->ubNumTroops += numprisoners; - CHAR16 zShortTownIDString[ 50 ]; - GetShortSectorString( sMapX, sMapX, zShortTownIDString ); - - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_RIOT], zShortTownIDString ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_RIOT], wSectorName ); } } diff --git a/Strategic/Assignments.h b/Strategic/Assignments.h index 1a44fb982..c26dbcf25 100644 --- a/Strategic/Assignments.h +++ b/Strategic/Assignments.h @@ -191,8 +191,8 @@ UINT16 CalculateHealingPointsForDoctor(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts, UINT8 CalculateRepairPointsForRepairman(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts, BOOLEAN fMakeSureKitIsInHand ); // Flugente: calculate interrogation and prison guard values -FLOAT CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ); -FLOAT CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ); +UINT32 CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ); +UINT32 CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ); // get bonus tarining pts due to an instructor for this student // HEADROCK HAM 3.5: Three functions below have lost an argument which is no longer required ("uiAtGunRange", which was "uiAtFacility" in HAM 3.4) diff --git a/Strategic/Campaign Types.h b/Strategic/Campaign Types.h index cbb94d31b..a35ef3f24 100644 --- a/Strategic/Campaign Types.h +++ b/Strategic/Campaign Types.h @@ -480,8 +480,9 @@ typedef struct SECTORINFO #endif UINT32 uiNumberOfPrisonersOfWar; - - INT8 bPadding[ 37 ]; + UINT8 uiInterrogationHundredsLeft; + + INT8 bPadding[ 36 ]; }SECTORINFO; diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index b671e9567..c3890fe82 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -2408,7 +2408,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case FACILITY_INTERROGATE_PRISONERS: sIconIndex = 23; fDoIcon = TRUE; - sPtsAvailable = (INT16)( CalculateInterrogationValue(pSoldier, &usMaximumPts ) ) / 100; + sPtsAvailable = (INT16)( CalculateInterrogationValue(pSoldier, &usMaximumPts )/100 ); fShowNumber = TRUE; fShowMaximum = TRUE; break; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 60b4b59de..c7050c8d3 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -6674,14 +6674,21 @@ extern INT32 giReinforcementPool; void PrisonerMessageBoxCallBack( UINT8 ubExitValue ) { + if (ubExitValue == MSG_BOX_RETURN_NO) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_RELEASED] ); + } + + UINT32 prisonerstobemoved = 0; + BOOLEAN success = FALSE; if ( !gbWorldSectorZ ) { SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ] ); - UINT32 prisonerstobemoved = pSectorInfo->uiNumberOfPrisonersOfWar; + prisonerstobemoved = pSectorInfo->uiNumberOfPrisonersOfWar; pSectorInfo->uiNumberOfPrisonersOfWar = 0; - + if (ubExitValue == MSG_BOX_RETURN_YES) { UINT32 uSectorID = 0; @@ -6690,21 +6697,23 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue ) SECTORINFO *pPrisonSectorInfo = &( SectorInfo[ uSectorID ] ); if ( pPrisonSectorInfo ) + { + success = TRUE; + pPrisonSectorInfo->uiNumberOfPrisonersOfWar += prisonerstobemoved; + + CHAR16 wString[ 64 ]; + GetShortSectorString( gWorldSectorX, gWorldSectorY, wString ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_SENTTOSECTOR], wString ); + } } } - else - { - // send some prisoners back to queen's pool - // there is a chance that escaped prisoners may return to the queen... - giReinforcementPool += (prisonerstobemoved * gGameExternalOptions.ubPrisonerReturntoQueenChance) / 100; - } } else { UNDERGROUND_SECTORINFO *pSectorInfo = FindUnderGroundSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); - UINT32 prisonerstobemoved = pSectorInfo->uiNumberOfPrisonersOfWar; + prisonerstobemoved = pSectorInfo->uiNumberOfPrisonersOfWar; pSectorInfo->uiNumberOfPrisonersOfWar = 0; @@ -6716,16 +6725,23 @@ void PrisonerMessageBoxCallBack( UINT8 ubExitValue ) SECTORINFO *pPrisonSectorInfo = &( SectorInfo[ uSectorID ] ); if ( pPrisonSectorInfo ) + { + success = TRUE; + pPrisonSectorInfo->uiNumberOfPrisonersOfWar += prisonerstobemoved; + + CHAR16 wString[ 64 ]; + GetShortSectorString( gWorldSectorX, gWorldSectorY, wString ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_SENTTOSECTOR], wString ); + } } } - else - { - // send some prisoners back to queen's pool - // there is a chance that escaped prisoners may return to the queen... - giReinforcementPool += (prisonerstobemoved * gGameExternalOptions.ubPrisonerReturntoQueenChance) / 100; - } } + + if ( !success ) + // send some prisoners back to queen's pool + // there is a chance that escaped prisoners may return to the queen... + giReinforcementPool += (prisonerstobemoved * gGameExternalOptions.ubPrisonerReturntoQueenChance) / 100; } void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) diff --git a/Utils/Text.h b/Utils/Text.h index 3441dea10..bdca280a2 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -735,6 +735,9 @@ enum STR_PRISONER_DETECTION, STR_PRISONER_TURN_MILITIA, STR_PRISONER_RIOT, + STR_PRISONER_SENTTOSECTOR, + STR_PRISONER_RELEASED, + STR_PRISONER_ARMY_FREED_PRISON, TEXT_NUM_PRISONER_STR }; diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index e2c5ad78a..9c668fc01 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -7494,6 +7494,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //CHINESE diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index f37452380..5c31db399 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -7487,6 +7487,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //DUTCH diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 1c8f043d8..b30e52acc 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -7474,6 +7474,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //ENGLISH diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 6e8f43964..4bd22e340 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -7461,6 +7461,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //FRENCH diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index a459b8bd9..99eeedee7 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -7294,14 +7294,16 @@ STR16 szFoodTextStr[]= L"Sectorwide canteen filling not possible, Food System is off!" }; -// TODO.Translate STR16 szPrisonerTextStr[]= { - L"%d prisoners were interrogated.", - L"%d prisoners paid ransom money.", - L"%d prisoners revealed enemy positions.", - L"%d prisoners joined our cause.", - L"Prisoners start a massive riot in %s!", + L"%d Gefangenge wurden verhört.", + L"%d Gefangene wurden gegen Lösegeld freigelassen.", + L"%d Gefangene haben uns Truppenstandorte verraten.", + L"%d Gefangene schliessen sich uns an.", + L"Gefangenenaufstand in %s!", + L"Gefangene wurden nach %s geschickt!", + L"Gefangene freigelassen!", + L"Die Armee hat das Gefängnis in %s besetzt, die Gefangenen wurden befreit!", }; #endif //GERMAN diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 0bea1ec11..23b249238 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -7474,6 +7474,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //ITALIAN diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 9d5a29566..2b34e6e67 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -7488,6 +7488,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //POLISH diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 8eee82369..c29ffbdd2 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -7440,6 +7440,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //RUSSIAN diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index ba0df153a..e02d4d48b 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -7491,6 +7491,9 @@ STR16 szPrisonerTextStr[]= L"%d prisoners revealed enemy positions.", L"%d prisoners joined our cause.", L"Prisoners start a massive riot in %s!", + L"Prisoners were sent to %s!", + L"Prisoners have been released!", + L"The army now occupies the prison in %s, the prisoners were freed!", }; #endif //TAIWANESE