Added new assignments for training existing militia and doctoring them.

For more info, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=23044&goto=352617&#msg_352617

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8537 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2018-03-04 21:20:38 +00:00
parent a95c4fd614
commit 82a2b6c2db
27 changed files with 1939 additions and 218 deletions
+6 -5
View File
@@ -1557,14 +1557,15 @@ void LoadGameExternalOptions()
//################# Individual Militia Settings ##################
// Flugente: individual militia
gGameExternalOptions.fIndividualMilitia = iniReader.ReadBoolean( "Individual Militia Settings", "INDIVIDUAL_MILITIA", FALSE );
gGameExternalOptions.fIndividualMilitia = iniReader.ReadBoolean( "Individual Militia Settings", "INDIVIDUAL_MILITIA", FALSE );
gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Regular = iniReader.ReadInteger( "Individual Militia Settings", "INDIVIDUAL_MILITIA_PROMOTIONPOINTS_TO_REGULAR", 4, 1, 100 );
gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Elite = iniReader.ReadInteger( "Individual Militia Settings", "INDIVIDUAL_MILITIA_PROMOTIONPOINTS_TO_ELITE", 10, 1, 100 );
gGameExternalOptions.fIndividualMilitia_ManageHealth = iniReader.ReadBoolean( "Individual Militia Settings", "INDIVIDUAL_MILITIA_MANAGE_HEALTH", TRUE );
gGameExternalOptions.dIndividualMilitiaHourlyHealthPercentageGain = iniReader.ReadFloat( "Individual Militia Settings", "INDIVIDUAL_MILITIA_HOURLYHEALTHPERCENTAGEGAIN", 2.0f, 0.0f, 100.0f );
gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Elite = iniReader.ReadInteger( "Individual Militia Settings", "INDIVIDUAL_MILITIA_PROMOTIONPOINTS_TO_ELITE", 6, 1, 100 );
gGameExternalOptions.fIndividualMilitia_ManageHealth = iniReader.ReadBoolean( "Individual Militia Settings", "INDIVIDUAL_MILITIA_MANAGE_HEALTH", TRUE );
gGameExternalOptions.dIndividualMilitiaHourlyHealthPercentageGain = iniReader.ReadFloat( "Individual Militia Settings", "INDIVIDUAL_MILITIA_HOURLYHEALTHPERCENTAGEGAIN", 2.0f, 0.0f, 100.0f );
gGameExternalOptions.dIndividualMilitiaDoctorHealModifier = iniReader.ReadFloat( "Individual Militia Settings", "INDIVIDUAL_MILITIA_DOCTORHEALMODIFIER", 0.01f, 0.01f, 1.0f );
//################# Tactical Cover System Settings ##################
// CPT: Cover System Settings
+1
View File
@@ -1479,6 +1479,7 @@ typedef struct
UINT16 usIndividualMilitia_PromotionPoints_To_Elite;
BOOLEAN fIndividualMilitia_ManageHealth;
FLOAT dIndividualMilitiaHourlyHealthPercentageGain;
FLOAT dIndividualMilitiaDoctorHealModifier;
// Sandro: Alternative weapon holding (rifles fired from hip / pistols fired one-handed)
UINT8 ubAllowAlternativeWeaponHolding;
+9 -9
View File
@@ -15,9 +15,9 @@
#ifdef JA2EDITOR
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8537 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8537 (Development Build)" };
#endif
// ------------------------------
@@ -27,11 +27,11 @@
//DEBUG BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8537 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8537 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8537 (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.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8537 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8537 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Release v1.13.8531 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release v1.13.8537 (Development Build)" };
#endif
#endif
CHAR8 czVersionNumber[16] = { "Build 18.02.28" }; //YY.MM.DD
CHAR8 czVersionNumber[16] = { "Build 18.03.04" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" };
// SAVE_GAME_VERSION is defined in header, change it there
+2 -1
View File
@@ -21,6 +21,7 @@ extern CHAR16 zTrackingNumber[16];
// Keeps track of the saved game version. Increment the saved game version whenever
// you will invalidate the saved game file
#define INDIVIDUAL_MILITIA_EXP_FLOAT 177 // Flugente: changed the way we store individual militia experience
#define CHAT_TO_DISTRACT 176 // Flugente: internal variable allows us to distract enemies by engrossing them in conversation
#define INDIVIDUAL_MILITIA_RANKFIX 175 // Flugente: internal individual militia change requires variable change
#define DRAGPERSONS 174 // Flugente: we can drag people and corpses now
@@ -95,7 +96,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 CHAT_TO_DISTRACT
#define SAVE_GAME_VERSION INDIVIDUAL_MILITIA_EXP_FLOAT
//#define RUSSIANGOLD
#ifdef __cplusplus
+12
View File
@@ -1585,6 +1585,18 @@ void ProcessTransactionString(STR16 pString, FinanceUnitPtr pFinance)
case WORKERS_TRAINED:
swprintf( pString, L"%s", pTransactionText[pFinance->ubCode] );
break;
case PROMOTE_MILITIA:
{
CHAR16 str[128];
UINT8 ubSectorX;
UINT8 ubSectorY;
ubSectorX = (UINT8)SECTORX( pFinance->ubSecondCode );
ubSectorY = (UINT8)SECTORY( pFinance->ubSecondCode );
GetSectorIDString( ubSectorX, ubSectorY, 0, str, TRUE );
swprintf( pString, pTransactionText[PROMOTE_MILITIA], str );
}
break;
}
}
+1
View File
@@ -58,6 +58,7 @@ enum
PMC_CONTRACT, // Flugente: hired militia from a PMC
SAM_REPAIR, // Flugente: repair SAM site
WORKERS_TRAINED, // Flugente: train workers
PROMOTE_MILITIA, // Flugente: drill militia
TEXT_NUM_FINCANCES
};
+948 -98
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -94,6 +94,8 @@ enum
TRAIN_WORKERS,
CONCEALED, // Flugente: spy hides among the population
GATHERINTEL, // gathers information while disguised in enemy territory
DOCTOR_MILITIA, // heal militia
DRILL_MILITIA, // train existing militia (does not create new ones)
NUM_ASSIGNMENTS,
};
@@ -172,6 +174,9 @@ typedef struct TOWN_TRAINER_TYPE
// can this character be assigned as a doctor?
BOOLEAN CanCharacterDoctor( SOLDIERTYPE *pCharacter );
// can this character doctor militia (assignmentwise)?
BOOLEAN CanCharacterDoctorMilitia( SOLDIERTYPE *pSoldier );
// can this character diagnose diseases?
BOOLEAN CanCharacterDiagnoseDisease( SOLDIERTYPE *pSoldier );
@@ -189,6 +194,8 @@ BOOLEAN CanCharacterRepair( SOLDIERTYPE *pCharacter );
BOOLEAN CanCharacterPatient( SOLDIERTYPE *pCharacter );
// can character train militia?
BOOLEAN CanCharacterMilitiaAssignment( SOLDIERTYPE *pSoldier );
BOOLEAN CanCharacterDrillMilitia( SOLDIERTYPE *pSoldier, BOOLEAN aErrorReport = FALSE );
BOOLEAN CanCharacterTrainMilitia( SOLDIERTYPE *pCharacter );
BOOLEAN CanCharacterTrainMobileMilitia( SOLDIERTYPE *pSoldier );
@@ -319,6 +326,7 @@ extern INT32 ghTrainingBox;
extern INT32 ghMoveItemBox;
extern INT32 ghDiseaseBox;
extern INT32 ghSpyBox;
extern INT32 ghMilitiaBox;
extern INT32 ghAttributeBox;
extern INT32 ghRemoveMercAssignBox;
extern INT32 ghContractBox;
@@ -361,6 +369,7 @@ enum
ASMENU_TRAIN,
ASMENU_SQUAD,
ASMENU_SNITCH,
ASMENU_MILITIA,
};
extern int gAssignMenuState;
@@ -419,6 +428,11 @@ void CreateDestroyMouseRegionForSpyMenu( void );
void SpyMenuMvtCallback( MOUSE_REGION * pRegion, INT32 iReason );
void SpyMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
// Flugente: militia menu
void CreateDestroyMouseRegionForMilitiaMenu( void );
void MilitiaMenuMvtCallback( MOUSE_REGION * pRegion, INT32 iReason );
void MilitiaMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
// HEADROCK HAM 3.6: Facility Menu
void CreateDestroyMouseRegionForFacilityMenu( void );
void FacilityMenuMvtCallback(MOUSE_REGION * pRegion, INT32 iReason );
+9
View File
@@ -2329,6 +2329,15 @@ void UpdateMapScreenAssignmentPositions( void )
SetBoxPosition( ghFacilityBox, pPoint );
}
break;
case ASMENU_MILITIA:
{
GetBoxPosition( ghMilitiaBox, &pPoint );
pPoint.iY = giBoxY + ( GetFontHeight( MAP_SCREEN_FONT ) + 2 ) * ASSIGN_MENU_MILITIA;
SetBoxPosition( ghMilitiaBox, pPoint );
}
break;
}
if( fShowAttributeMenu )
+1 -1
View File
@@ -129,6 +129,7 @@ enum {
ASSIGN_MENU_RADIO_SCAN, // added by Flugente
ASSIGN_MENU_SNITCH,
ASSIGN_MENU_TRAIN,
ASSIGN_MENU_MILITIA, // added by Flugente: all things militia
ASSIGN_MENU_MOVE_ITEMS, // added by Flugente
ASSIGN_MENU_FORTIFY, // added by Flugente
ASSIGN_MENU_SPY, // added by Flugente
@@ -176,7 +177,6 @@ enum {
// training assignment menu defines
enum {
TRAIN_MENU_SELF,
TRAIN_MENU_TOWN,
TRAIN_MENU_MOBILE,
TRAIN_MENU_WORKERS,
TRAIN_MENU_TEAMMATES,
+266 -39
View File
@@ -73,8 +73,21 @@ MILITIA::Load( HWFILE hwFile )
numBytesRead = ReadFieldByField( hwFile, &healthratio, sizeof(healthratio), sizeof(FLOAT), numBytesRead );
numBytesRead = ReadFieldByField( hwFile, &kills, sizeof(kills), sizeof(UINT16), numBytesRead);
numBytesRead = ReadFieldByField( hwFile, &assists, sizeof(assists), sizeof(UINT16), numBytesRead );
numBytesRead = ReadFieldByField( hwFile, &promotionpoints, sizeof(promotionpoints), sizeof(UINT16), numBytesRead );
numBytesRead = ReadFieldByField( hwFile, &filler1, sizeof(filler1), sizeof(UINT16), numBytesRead );
// promotionpoints has been changed from UINT16 to FLOAT, so we need changes here
if ( guiCurrentSaveGameVersion >= INDIVIDUAL_MILITIA_EXP_FLOAT )
{
numBytesRead = ReadFieldByField( hwFile, &promotionpoints, sizeof( promotionpoints ), sizeof( FLOAT ), numBytesRead );
}
else
{
UINT16 tmp;
numBytesRead = ReadFieldByField( hwFile, &tmp, sizeof( tmp ), sizeof( UINT16 ), numBytesRead );
promotionpoints = tmp;
numBytesRead = ReadFieldByField( hwFile, &tmp, sizeof( tmp ), sizeof( UINT16 ), numBytesRead );
}
if ( numBytesRead != SIZEOF_MILITIA_POD )
return(FALSE);
@@ -272,8 +285,8 @@ SOLDIERTYPE* GetUsedSoldierToIndividualMilitia( UINT32 aMilitiaId )
return NULL;
}
// update the health values of all militia in tactical
void UpdateAllMilitiaHealthInTactical()
// apply tactical life ratio to militia health ratio
void ApplyTacticalLifeRatioToMilitia()
{
if ( !gGameExternalOptions.fIndividualMilitia )
return;
@@ -299,52 +312,95 @@ void UpdateAllMilitiaHealthInTactical()
}
}
void HandleHourlyMilitiaHealing( )
void ApplyMilitiaHealthRatioToTactical()
{
if ( !gGameExternalOptions.fIndividualMilitia || !gGameExternalOptions.fIndividualMilitia_ManageHealth )
return;
INT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
SOLDIERTYPE* pSoldier;
UINT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
INT32 lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
SOLDIERTYPE* pSoldier = NULL;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier )
{
MILITIA militia;
if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLifeMax && GetMilitia( pSoldier->usIndividualMilitiaID, &militia ) )
{
INT8 oldlife = pSoldier->stats.bLife;
FLOAT currenthealthratio = 100.0f * oldlife / pSoldier->stats.bLifeMax;
militia.healthratio = max( militia.healthratio, currenthealthratio );
pSoldier->stats.bLife = min( pSoldier->stats.bLifeMax, ( militia.healthratio / 100.0f ) * pSoldier->stats.bLifeMax );
// healing done will be displayed the next time the player sees this soldier
pSoldier->flags.fDisplayDamage = TRUE;
pSoldier->sDamage -= pSoldier->stats.bLife - oldlife;
// while we're here, update kills and assists too
militia.AddKills( pSoldier->ubMilitiaKills, pSoldier->ubMilitiaAssists );
pSoldier->ubMilitiaKills = 0;
pSoldier->ubMilitiaAssists = 0;
UpdateMilitia( militia );
}
}
}
void HandleHourlyMilitiaHealing( )
{
if ( !gGameExternalOptions.fIndividualMilitia || !gGameExternalOptions.fIndividualMilitia_ManageHealth )
return;
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end( );
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin( ); it != itend; ++it )
{
if ( !((*it).flagmask & MILITIAFLAG_DEAD) )
{
(*it).healthratio = min( 100.0f, (*it).healthratio + gGameExternalOptions.dIndividualMilitiaHourlyHealthPercentageGain );
// if this guy is in the currently loaded sector, heal the soldier instead (and update health ratio while you're there)
if ( !gbWorldSectorZ && (*it).sector == SECTOR( gWorldSectorX, gWorldSectorY ) )
{
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier )
{
if ( pSoldier && pSoldier->bActive && (*it).id == pSoldier->usIndividualMilitiaID &&
gWorldSectorX == pSoldier->sSectorX && gWorldSectorY == pSoldier->sSectorY && !pSoldier->bSectorZ &&
pSoldier->stats.bLifeMax > 0 )
{
INT8 oldlife = pSoldier->stats.bLife;
FLOAT currenthealthratio = 100.0f * oldlife / pSoldier->stats.bLifeMax;
currenthealthratio = min( 100.0f, currenthealthratio + gGameExternalOptions.dIndividualMilitiaHourlyHealthPercentageGain );
pSoldier->stats.bLife = min( pSoldier->stats.bLifeMax, (currenthealthratio / 100.0f) * pSoldier->stats.bLifeMax );
// healing done will be displayed the next time the player sees this soldier
pSoldier->flags.fDisplayDamage = TRUE;
pSoldier->sDamage -= pSoldier->stats.bLife - oldlife;
// update new health ratio
(*it).healthratio = currenthealthratio;
break;
}
}
}
}
}
ApplyMilitiaHealthRatioToTactical();
}
UINT32 MilitiaIndividual_Heal( UINT32 points, UINT8 aSector )
{
if ( !gGameExternalOptions.fIndividualMilitia || !gGameExternalOptions.fIndividualMilitia_ManageHealth )
return 0;
FLOAT totalhealthmissing = 0.0f;
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end();
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin(); it != itend; ++it )
{
if ( !( ( *it ).flagmask & (MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) && (*it).sector == aSector && ( *it ).healthratio < 100.0f )
{
totalhealthmissing += ( 100.0f - ( *it ).healthratio );
}
}
if ( totalhealthmissing <= 0.0f )
return 0;
FLOAT pointstouse = min( (FLOAT)points, totalhealthmissing );
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin(); it != itend; ++it )
{
if ( !( ( *it ).flagmask & ( MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) && ( *it ).sector == aSector && ( *it ).healthratio < 100.0f )
{
( *it ).healthratio += ( 100.0f - ( *it ).healthratio ) * pointstouse / totalhealthmissing;
}
}
// update militia in current sector
if ( !gbWorldSectorZ && SECTOR( gWorldSectorX, gWorldSectorY ) == aSector )
{
ApplyMilitiaHealthRatioToTactical();
}
return (UINT32)pointstouse;
}
UINT32 CreateRandomIndividualMilitia( UINT8 aMilitiaRank, UINT8 aOrigin, UINT8 aSector )
@@ -490,7 +546,7 @@ UINT32 CreateNewIndividualMilitia( UINT8 aMilitiaRank, UINT8 aOrigin, UINT8 aSec
newmilitia.kills = 0;
newmilitia.assists = 0;
newmilitia.promotionpoints = 0;
newmilitia.promotionpoints = 0.0f;
// promotion points are based on kills and assists. For proper accounting, award points for current rank
newmilitia.AddKills( 0, 0 );
@@ -509,7 +565,7 @@ UINT32 CreateNewIndividualMilitia( UINT8 aMilitiaRank, UINT8 aOrigin, UINT8 aSec
// search for a individual militia that is alive and not currently in use in this sector, and return its id
// if none is found, create new and return that one
UINT32 GetIdOfUnusedindividualMilitia( UINT8 aSoldierClass, UINT8 aSector )
UINT32 GetIdOfUnusedIndividualMilitia( UINT8 aSoldierClass, UINT8 aSector )
{
if ( !gGameExternalOptions.fIndividualMilitia )
return 0;
@@ -557,6 +613,123 @@ UINT32 GetIdOfUnusedindividualMilitia( UINT8 aSoldierClass, UINT8 aSector )
return CreateNewIndividualMilitia( militialevel, MO_ARULCO, aSector );
}
BOOLEAN GetIdOfIndividualMilitiaWithClassSector( UINT8 aSoldierClass, UINT8 aSector, UINT32& arId )
{
arId = 0;
if ( !gGameExternalOptions.fIndividualMilitia )
return FALSE;
UINT8 militialevel = SoldierClassToMilitiaRank( aSoldierClass );
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end();
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin(); it != itend; ++it )
{
if ( !( ( *it ).flagmask & ( MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) && ( *it ).sector == aSector && ( *it ).militiarank == militialevel )
{
arId = ( *it ).id;
return TRUE;
}
}
return FALSE;
}
extern void ResetMilitia();
FLOAT PromoteIndividualMilitiaInSector( UINT8 aSector, FLOAT aPointsToAdd )
{
FLOAT pointsused = 0.0f;
if ( !gGameExternalOptions.fIndividualMilitia )
return pointsused;
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end();
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin(); it != itend; ++it )
{
if ( !( ( *it ).flagmask & ( MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) && ( *it ).sector == aSector && ( *it ).militiarank == GREEN_MILITIA )
{
MILITIA militia = ( *it );
FLOAT pointstoadd = min( aPointsToAdd - pointsused, max( 0, gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Regular - militia.promotionpoints ) );
pointsused += pointstoadd;
militia.promotionpoints += pointstoadd;
PossiblyPromoteIndividualMilitia( militia );
if ( militia.militiarank == REGULAR_MILITIA )
StrategicPromoteMilitiaInSector( SECTORX( aSector ), SECTORY( aSector ), GREEN_MILITIA, 1 );
else if ( militia.militiarank == ELITE_MILITIA )
{
StrategicPromoteMilitiaInSector( SECTORX( aSector ), SECTORY( aSector ), GREEN_MILITIA, 1 );
StrategicPromoteMilitiaInSector( SECTORX( aSector ), SECTORY( aSector ), REGULAR_MILITIA, 1 );
}
UpdateMilitia( militia );
}
if ( pointsused >= aPointsToAdd )
break;
}
if ( gGameExternalOptions.gfTrainVeteranMilitia )
{
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end();
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin(); it != itend; ++it )
{
if ( !( ( *it ).flagmask & ( MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) && ( *it ).sector == aSector && ( *it ).militiarank == REGULAR_MILITIA )
{
MILITIA militia = ( *it );
FLOAT pointstoadd = min( aPointsToAdd - pointsused, max( 0, gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Regular + gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Elite - militia.promotionpoints ) );
pointsused += pointstoadd;
militia.promotionpoints += pointstoadd;
PossiblyPromoteIndividualMilitia( militia );
if ( militia.militiarank == ELITE_MILITIA )
StrategicPromoteMilitiaInSector( SECTORX( aSector ), SECTORY( aSector ), REGULAR_MILITIA, 1 );
UpdateMilitia( militia );
}
if ( pointsused >= aPointsToAdd )
break;
}
}
// do possible update in tactical
if ( !gbWorldSectorZ && SECTORX( aSector ) == gWorldSectorX && SECTORY( aSector ) == gWorldSectorY )
{
BOOLEAN changesnecessary = FALSE;
SOLDIERTYPE* pSoldier = NULL;
int cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++cnt, ++pSoldier )
{
MILITIA militia;
if ( pSoldier && GetMilitia( pSoldier->usIndividualMilitiaID, &militia ) )
{
if ( SoldierClassToMilitiaRank( pSoldier->ubSoldierClass ) < militia.militiarank )
{
pSoldier->ubSoldierClass = MilitiaRankToSoldierClass( militia.militiarank );
changesnecessary = TRUE;
}
}
}
if ( changesnecessary )
ResetMilitia();
}
return pointsused;
}
// handle possible militia promotion and individual militia update
void HandlePossibleMilitiaPromotion( SOLDIERTYPE* pSoldier, BOOLEAN aAutoResolve )
{
@@ -775,6 +948,60 @@ void PromoteIndividualMilitia( UINT8 aSector, UINT8 aSoldierClass )
ScreenMsg( FONT_MCOLOR_RED, MSG_INTERFACE, L"Possible error: Not enough individual militia found in PromoteIndividualMilitia" );
}
void PossiblyPromoteIndividualMilitia( MILITIA& aMilitia )
{
if ( !( aMilitia.flagmask & ( MILITIAFLAG_DEAD | MILITIAFLAG_FIRED ) ) )
{
// Flugente: check whether we have the resources to promote militia
BOOLEAN fCanPromoteToRegular = TRUE;
BOOLEAN fCanPromoteToElite = TRUE;
if ( gGameExternalOptions.fMilitiaResources && !gGameExternalOptions.fMilitiaUseSectorInventory )
{
FLOAT val_gun, val_armour, val_misc;
GetResources( val_gun, val_armour, val_misc );
// regular militia require an additional gun and armour
if ( val_gun <= 1.0f || val_armour <= 1.0f )
{
fCanPromoteToRegular = FALSE;
fCanPromoteToElite = FALSE;
}
// elite also require misc resources
else if ( val_misc <= 1.0f )
{
fCanPromoteToElite = FALSE;
}
}
// if we have enough points, promote
if ( aMilitia.militiarank == GREEN_MILITIA )
{
if ( aMilitia.promotionpoints >= gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Regular )
{
if ( fCanPromoteToRegular )
{
aMilitia.militiarank = REGULAR_MILITIA;
AddResources( -1, -1, 0 );
}
}
}
if ( aMilitia.militiarank == REGULAR_MILITIA )
{
if ( aMilitia.promotionpoints >= gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Regular + gGameExternalOptions.usIndividualMilitia_PromotionPoints_To_Elite )
{
if ( fCanPromoteToElite )
{
aMilitia.militiarank = ELITE_MILITIA;
AddResources( -1, -1, -1 );
}
}
}
}
}
// return the sum of daily wages, and the number of individual militia per class
UINT32 GetDailyUpkeep_IndividualMilitia( UINT32& arNumGreen, UINT32& arNumRegular, UINT32& arNumElite )
{
+14 -6
View File
@@ -123,9 +123,7 @@ public:
// we don't store the experience level, we store the amount of points in regard to promotion.
// While this is made up of kills and assists, we need this, as we have to account for militia initially starting at regular level
UINT16 promotionpoints;
UINT16 filler1; // necessary for padding - fill up so that SIZEOF_MILITIA_POD is doubly even
FLOAT promotionpoints;
char endOfPOD; // marker for end of POD (plain old data)
@@ -154,16 +152,24 @@ void UpdateMilitia( MILITIA aMilitia );
SOLDIERTYPE* GetUsedSoldierToIndividualMilitia( UINT32 aMilitiaId );
// update the health values of all militia in tactical
void UpdateAllMilitiaHealthInTactical();
// apply tactical life ratio to militia health ratio
void ApplyTacticalLifeRatioToMilitia();
// apply health ratios to militia in tactical
void ApplyMilitiaHealthRatioToTactical();
void HandleHourlyMilitiaHealing( );
UINT32 MilitiaIndividual_Heal(UINT32 points, UINT8 aSector );
UINT32 CreateRandomIndividualMilitia( UINT8 aMilitiaRank, UINT8 aOrigin, UINT8 aSector );
UINT32 CreateNewIndividualMilitia( UINT8 aMilitiaRank, UINT8 aOrigin, UINT8 aSector );
UINT32 GetIdOfUnusedindividualMilitia( UINT8 aSoldierClass, UINT8 aSector );
UINT32 GetIdOfUnusedIndividualMilitia( UINT8 aSoldierClass, UINT8 aSector );
BOOLEAN GetIdOfIndividualMilitiaWithClassSector( UINT8 aSoldierClass, UINT8 aSector, UINT32& arId );
FLOAT PromoteIndividualMilitiaInSector( UINT8 aSector, FLOAT aPointsToAdd );
// handle possible militia promotion and individual militia update
void HandlePossibleMilitiaPromotion( SOLDIERTYPE* pSoldier, BOOLEAN aAutoResolve );
@@ -175,6 +181,8 @@ void DisbandIndividualMilitia( UINT8 aSector, UINT8 usGreens, UINT8 usRegulars,
void PromoteIndividualMilitia( UINT8 aSector, UINT8 aSoldierClass );
void PossiblyPromoteIndividualMilitia( MILITIA& aMilitia );
// return the sum of daily wages, and the number of individual militia per class
UINT32 GetDailyUpkeep_IndividualMilitia( UINT32& arNumGreen, UINT32& arNumRegular, UINT32& arNumElite );
+4 -4
View File
@@ -641,7 +641,7 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
// Flugente: update individual militia data
UpdateAllMilitiaHealthInTactical( );
ApplyTacticalLifeRatioToMilitia( );
// Flugente: disease
PopulationMove( sMapX, sMapY, sTMapX, sTMapY, elites + regulars + greens );
@@ -686,7 +686,7 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
// Flugente: update individual militia data
UpdateAllMilitiaHealthInTactical( );
ApplyTacticalLifeRatioToMilitia( );
// Flugente: disease
PopulationMove( sMapX, sMapY, sTMapX, sTMapY, elites + regulars + greens );
@@ -779,7 +779,7 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
// Flugente: update individual militia data
UpdateAllMilitiaHealthInTactical( );
ApplyTacticalLifeRatioToMilitia( );
// Flugente: disease
PopulationMove( sMapX, sMapY, sTMapX, sTMapY, elites + regulars + greens );
@@ -809,7 +809,7 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, pSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ], pSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ], pSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
// Flugente: update individual militia data
UpdateAllMilitiaHealthInTactical( );
ApplyTacticalLifeRatioToMilitia( );
UINT8 greens = pSectorInfo->ubNumberOfCivsAtLevel[GREEN_MILITIA];
UINT8 regulars = pSectorInfo->ubNumberOfCivsAtLevel[REGULAR_MILITIA];
+1 -1
View File
@@ -2306,7 +2306,7 @@ void GroupArrivedAtSector( UINT8 ubGroupID, BOOLEAN fCheckForBattle, BOOLEAN fNe
TeamDropAll( MILITIA_TEAM );
// Flugente: update individual militia data
UpdateAllMilitiaHealthInTactical( );
ApplyTacticalLifeRatioToMilitia( );
// we now force a resetting of militia - they will be removed and recreated
// as the group's coordinates have alreay 'moved' to the next sector, the group militia will now be gone
+2 -2
View File
@@ -715,10 +715,10 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
//Madd: option to make mercs quiet during training / doctoring / repairing
if ( ((pSoldier->bAssignment == TRAIN_BY_OTHER || pSoldier->bAssignment == TRAIN_TEAMMATE || pSoldier->bAssignment == TRAIN_SELF ||
pSoldier->bAssignment == FACILITY_STAFF || pSoldier->bAssignment == TRAIN_TOWN || pSoldier->bAssignment == TRAIN_MOBILE
|| pSoldier->bAssignment == TRAIN_WORKERS )
|| pSoldier->bAssignment == TRAIN_WORKERS || pSoldier->bAssignment == DRILL_MILITIA )
&& !gGameSettings.fOptions[TOPTION_QUIET_TRAINING]) ||
(IS_REPAIR(pSoldier->bAssignment) && !gGameSettings.fOptions[TOPTION_QUIET_REPAIRING]) ||
(IS_DOCTOR(pSoldier->bAssignment) && !gGameSettings.fOptions[TOPTION_QUIET_DOCTORING]))
((IS_DOCTOR(pSoldier->bAssignment) || pSoldier->bAssignment == DOCTOR_MILITIA ) && !gGameSettings.fOptions[TOPTION_QUIET_DOCTORING]))
TacticalCharacterDialogue( pSoldier, QUOTE_EXPERIENCE_GAIN );
}
+18 -5
View File
@@ -2277,15 +2277,26 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
switch( pSoldier->bAssignment )
{
CASE_DOCTOR:
case DOCTOR_MILITIA:
sIconIndex_Assignment = 1;
fDoIcon_Assignment = TRUE;
sPtsAvailable = CalculateHealingPointsForDoctor( MercPtrs[ pFace->ubSoldierID ], &usMaximumPts, FALSE );
fShowNumber = TRUE;
fShowMaximum = TRUE;
// divide both amounts by 10 to make the displayed numbers a little more user-palatable (smaller)
sPtsAvailable = ( sPtsAvailable + 5 ) / 10;
usMaximumPts = ( usMaximumPts + 5 ) / 10;
fShowCustomText = TRUE;
if ( pSoldier->bAssignment == DOCTOR_MILITIA )
{
// show percentage that we can heal
swprintf( sString, L"%3.1f/%3.1f", (FLOAT)( sPtsAvailable * gGameExternalOptions.dIndividualMilitiaDoctorHealModifier ), (FLOAT)( usMaximumPts * gGameExternalOptions.dIndividualMilitiaDoctorHealModifier ) );
}
else
{
// shos HP we can heal
swprintf( sString, L"%3.1f/%3.1f", (FLOAT)( sPtsAvailable ) / 100.0f, (FLOAT)( usMaximumPts ) / 100.0f );
}
usTextWidth = StringPixLength( sString, FONT10ARIAL );
break;
CASE_PATIENT:
@@ -2305,6 +2316,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
case TRAIN_TEAMMATE:
case TRAIN_BY_OTHER:
case TRAIN_WORKERS:
case DRILL_MILITIA:
sIconIndex_Assignment = 3;
fDoIcon_Assignment = TRUE;
fShowNumber = TRUE;
@@ -2320,6 +2332,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
break;
case( TRAIN_TOWN ):
case( TRAIN_MOBILE ):
case DRILL_MILITIA:
sPtsAvailable = GetTownTrainPtsForCharacter( MercPtrs[ pFace->ubSoldierID ], &usMaximumPts );
// divide both amounts by 10 to make the displayed numbers a little more user-palatable (smaller)
sPtsAvailable = ( sPtsAvailable + 5 ) / 10;
+1 -1
View File
@@ -1731,7 +1731,7 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir
{
InternalSoldierInSectorSleep( pSoldier, pSoldier->sInsertionGridNo, FALSE );
}
else if ( IS_DOCTOR(pSoldier->bAssignment) )
else if ( IS_DOCTOR(pSoldier->bAssignment) || pSoldier->bAssignment == DOCTOR_MILITIA )
{
SoldierInSectorDoctor( pSoldier, pSoldier->sInsertionGridNo );
}
+1 -1
View File
@@ -635,7 +635,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
// do not do so during loading of a savegame
if ( tbTeam == MILITIA_TEAM && !pCreateStruct->fUseExistingSoldier )
{
Soldier.usIndividualMilitiaID = GetIdOfUnusedindividualMilitia( pCreateStruct->ubSoldierClass, SECTOR( pCreateStruct->sSectorX, pCreateStruct->sSectorY ) );
Soldier.usIndividualMilitiaID = GetIdOfUnusedIndividualMilitia( pCreateStruct->ubSoldierClass, SECTOR( pCreateStruct->sSectorX, pCreateStruct->sSectorY ) );
}
// OK, CHECK IF WE HAVE A VALID PROFILE ID!
+2
View File
@@ -3066,6 +3066,8 @@ extern STR16 szIntelText[];
extern STR16 szChatTextSpy[];
extern STR16 szChatTextEnemy[];
extern STR16 szMilitiaText[];
#define TACTICAL_INVENTORY_DIALOG_NUM 16
#define TACTICAL_COVER_DIALOG_NUM 16
+82 -1
View File
@@ -2470,6 +2470,8 @@ STR16 pAssignmentStrings[] =
L"培训工人",//L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2575,6 +2577,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"培训工人",//L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2639,6 +2643,8 @@ STR16 pLongAssignmentStrings[] =
L"培训工人",//L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2758,6 +2764,7 @@ STR16 pAssignMenuStrings[] =
L"无线电扫描", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"告发", // anv: snitch actions
L"训练",
L"Militia", // all things militia
L"搬运物品", // get items
L"筑防", //L"Fortify", fortify sector
L"Intel", // covert assignments // TODO.Translate
@@ -2983,7 +2990,6 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"锻炼", // train yourself
L"民兵", // train the town
L"游击队", // L"Mobile Militia", //ham3.6
L"培训工人", //L"Train workers",
L"教练", // train your teammates
@@ -4587,6 +4593,7 @@ STR16 pTransactionText[] =
L"Kerberus安保公司的费用", //L"Payment to Kerberus",  // Flugente: PMC
L"修理SAM基地",//L"SAM site repair", // Flugente: SAM repair
L"培训工人",//L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11364,6 +11371,80 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
// WANNE: Some Chinese specific strings that needs to be in unicode!
STR16 ChineseSpecString1 = L"%"; //defined in _ChineseText.cpp as this file is already unicode
STR16 ChineseSpecString2 = L"*%3d%%%"; //defined in _ChineseText.cpp as this file is already unicode
+88 -7
View File
@@ -2469,6 +2469,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2574,6 +2576,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2638,6 +2642,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2757,6 +2763,7 @@ STR16 pAssignMenuStrings[] =
L"Radio Scan", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Snitch", // TODO.Translate // anv: snitch actions
L"Train", // the merc is training
L"Militia", // all things militia
L"Get Item", // get items // TODO.Translate
L"Fortify", // fortify sector // TODO.Translate
L"Intel", // covert assignments // TODO.Translate
@@ -2983,13 +2990,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Oefenen", // train yourself
L"Militie", // train the town
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Trainer", // train your teammates
L"Student", // be trained by an instructor
L"Stop", // cancel this menu
L"Oefenen", // train yourself
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Trainer", // train your teammates
L"Student", // be trained by an instructor
L"Stop", // cancel this menu
};
@@ -4592,6 +4598,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair // TODO.Translate
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11382,4 +11389,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //DUTCH
+23 -8
View File
@@ -2470,6 +2470,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide",
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2575,6 +2577,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised",
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2639,6 +2643,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised",
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2755,9 +2761,10 @@ STR16 pAssignMenuStrings[] =
L"Patient", // the merc is receiving medical attention
L"Vehicle", // the merc is in a vehicle
L"Repair", // the merc is repairing items
L"Radio Scan", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Radio Scan", // the merc is scanning for patrols in neighbouring sectors
L"Snitch", // anv: snitch actions
L"Train", // the merc is training
L"Militia", // all things militia
L"Get Item", // move items
L"Fortify", // fortify sector
L"Intel", // covert assignments
@@ -2982,13 +2989,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Practice", // train yourself
L"Militia", // train the town
L"Mobile Militia",
L"Train workers",
L"Trainer", // train your teammates
L"Student", // be trained by an instructor
L"Cancel", // cancel this menu
L"Practice", // train yourself
L"Mobile Militia",
L"Train workers",
L"Trainer", // train your teammates
L"Student", // be trained by an instructor
L"Cancel", // cancel this menu
};
@@ -4588,6 +4594,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia
};
STR16 pTransactionAlternateText[] =
@@ -11432,4 +11439,12 @@ STR16 szChatTextEnemy[] =
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //ENGLISH
+82 -1
View File
@@ -2478,6 +2478,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2583,6 +2585,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2647,6 +2651,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2766,6 +2772,7 @@ STR16 pAssignMenuStrings[] =
L"Radio", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Infiltré", // anv: snitch actions
L"Formation", // the merc is training
L"Militia", // all things militia
L"Dépl obj.", // move items
L"Fortify", // fortify sector // TODO.Translate
L"Intel", // covert assignments // TODO.Translate
@@ -2991,7 +2998,6 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Formation", // train yourself
L"Milice", // train the town
L"Milice mobile",
L"Train workers", // TODO.Translate
L"Entraîneur", // train your teammates
@@ -4596,6 +4602,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair // TODO.Translate
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11364,4 +11371,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //FRENCH
+88 -7
View File
@@ -2483,6 +2483,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
STR16 pMilitiaString[] =
@@ -2584,6 +2586,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
// refer to above for comments
@@ -2646,6 +2650,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
// the contract options
@@ -2761,6 +2767,7 @@ STR16 pAssignMenuStrings[] =
L"Radio Scan", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Snitch", // TODO.Translate // anv: snitch actions
L"Training", // the merc is training
L"Miliz", // all things militia
L"Umzug", // move items
L"Fortify", // fortify sector // TODO.Translate
L"Intel", // covert assignments // TODO.Translate
@@ -2986,13 +2993,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Üben", // train yourself
L"Miliz", // train the town
L"Mobile Miliz",
L"Train workers", // TODO.Translate
L"Trainer", // train your teammates
L"Rekrut", // be trained by an instructor
L"Abbrechen", // cancel this menu
L"Üben", // train yourself
L"Mobile Miliz",
L"Train workers", // TODO.Translate
L"Trainer", // train your teammates
L"Rekrut", // be trained by an instructor
L"Abbrechen", // cancel this menu
};
STR16 pSquadMenuStrings[] =
@@ -4568,6 +4574,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair // TODO.Translate
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11194,4 +11201,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //GERMAN
+88 -7
View File
@@ -2464,6 +2464,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2569,6 +2571,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2633,6 +2637,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2752,6 +2758,7 @@ STR16 pAssignMenuStrings[] =
L"Radio Scan", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Snitch", // TODO.Translate // anv: snitch actions
L"Si esercita", // the merc is training
L"Militia", // all things militia
L"Get Item", // get items // TODO.Translate
L"Fortify", // fortify sector // TODO.Translate
L"Intel", // covert assignments // TODO.Translate
@@ -2978,13 +2985,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Allenati", // train yourself
L"Esercito", // train the town
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Allenatore", // train your teammates
L"Studente", // be trained by an instructor
L"Annulla", // cancel this menu
L"Allenati", // train yourself
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Allenatore", // train your teammates
L"Studente", // be trained by an instructor
L"Annulla", // cancel this menu
};
@@ -4586,6 +4592,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair // TODO.Translate
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11373,4 +11380,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //ITALIAN
+88 -7
View File
@@ -2476,6 +2476,8 @@ STR16 pAssignmentStrings[] =
L"Train W.",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2581,6 +2583,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2645,6 +2649,8 @@ STR16 pLongAssignmentStrings[] =
L"Train workers",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2764,6 +2770,7 @@ STR16 pAssignMenuStrings[] =
L"Nasłuch", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Kapuś", // anv: snitch actions
L"Szkolenie", // the merc is training
L"Militia", // all things militia
L"Get Item", // get items // TODO.Translate
L"Fortify", // fortify sector // TODO.Translate
L"Intel", // covert assignments // TODO.Translate
@@ -2988,13 +2995,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Praktyka", // train yourself
L"Samoobrona", // train the town
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Instruktor", // train your teammates
L"Uczeń", // be trained by an instructor
L"Anuluj", // cancel this menu
L"Praktyka", // train yourself
L"Mobile Militia", // TODO.Translate
L"Train workers", // TODO.Translate
L"Instruktor", // train your teammates
L"Uczeń", // be trained by an instructor
L"Anuluj", // cancel this menu
};
@@ -4597,6 +4603,7 @@ STR16 pTransactionText[] =
L"Payment to Kerberus", // Flugente: PMC
L"SAM site repair", // Flugente: SAM repair // TODO.Translate
L"Trained workers", // Flugente: train workers
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11386,4 +11393,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //POLISH
+88 -7
View File
@@ -2470,6 +2470,8 @@ STR16 pAssignmentStrings[] =
L"Учит рабочих",
L"Hide", // TODO.Translate
L"GetIntel",
L"DoctorM.",
L"DMilitia",
};
@@ -2575,6 +2577,8 @@ STR16 pPersonnelAssignmentStrings[] =
L"Учит рабочих",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2639,6 +2643,8 @@ STR16 pLongAssignmentStrings[] =
L"Учит рабочих",
L"Hide while disguised", // TODO.Translate
L"Get intel while disguised",
L"Doctor wounded militia",
L"Drill existing militia",
};
@@ -2758,6 +2764,7 @@ STR16 pAssignMenuStrings[] =
L"Радио", // Flugente: the merc is scanning for patrols in neighbouring sectors
L"Осведомитель", // anv: snitch actions
L"Обучение", // the merc is training
L"Militia", // all things militia
L"Носильщик", // move items
L"Укреплять", // fortify sector
L"Intel", // covert assignments // TODO.Translate
@@ -2982,13 +2989,12 @@ STR16 pAttributeMenuStrings[] =
STR16 pTrainingMenuStrings[] =
{
L"Практика", // train yourself
L"Ополчение", // train the town
L"Патрульные",
L"Рабочие", // Train workers
L"Тренер", // train your teammates
L"Ученик", // be trained by an instructor
L"Отмена", // cancel this menu
L"Практика", // train yourself
L"Патрульные",
L"Рабочие", // Train workers
L"Тренер", // train your teammates
L"Ученик", // be trained by an instructor
L"Отмена", // cancel this menu
};
@@ -4588,6 +4594,7 @@ STR16 pTransactionText[] =
L"Оплата услуг Цербер", // Flugente: PMC
L"Стоимость ремонта базы ПВО", // Flugente: SAM repair
L"Trained workers", // Flugente: train workers // TODO.Translate
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
};
STR16 pTransactionAlternateText[] =
@@ -11366,4 +11373,78 @@ STR16 szIntelText[] =
L"%s has been discovered, going to sector!",
};
STR16 szChatTextSpy[] =
{
L"... so imagine my surprise when suddenly...",
L"... and did I ever tell you the story of that one time...",
L"... so, in conclusion, the colonel decided...",
L"... tell you, they did not see that coming...",
L"... so, without further consideration...",
L"... but then SHE said...",
L"... and, speaking of llamas...",
L"... there I was, in the middle of the dustbowl, when...",
L"... and let me tell, those things chafe...",
L"... you should have seen his face...",
L"... which wasn't the last of what we saw of them...",
L"... which reminds me, my grandmother used to say...",
L"... who, by the way, is a total berk...",
L"... also, the roots were off by a margin...",
L"... and I was like, 'Back off, heathen!'...",
L"... at that point the vicars were in oben rebellion...",
L"... not that I would've minded, you know, but...",
L"... if not for that ridiculous hat...",
L"... besides, it wasn't his favourite leg anyway...",
L"... even though the ships were still watertight...",
L"... aside from the fact that giraffes can't do that...",
L"... totally wasted that fork, mind you...",
L"... and no bakery in sight. After that...",
L"... even though regulations are clear in that regard...",
};
STR16 szChatTextEnemy[] =
{
L"Whoa. I had no idea!",
L"Really?",
L"Uhhhh....",
L"Well... you see, uhh...",
L"I am not entirely sure that...",
L"I... well...",
L"If I could just...",
L"But...",
L"I don't mean to intrude, but...",
L"Really? I had no idea!",
L"What? All of it?",
L"No way!",
L"Haha!",
L"Whoa, the guys are not going to believe me!",
L"... yeah, just...",
L"That's just like the gypsy woman said!",
L"... yeah, is that why...",
L"... hehe, talk about refurbishing...",
L"... yeah, I guess...",
L"Wait. What?",
L"... wouldn't have minded seeing that...",
L"... now that you mention it...",
L"... but where did all the chalk go...",
L"... had never even considered that...",
};
STR16 szMilitiaText[] =
{
L"Train new militia",
L"Drill militia",
L"Doctor militia",
L"Cancel",
};
#endif //RUSSIAN