mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New feature (by rftr): Mini events are a feature where the player can receive short text blurbs, and pick one of two outcomes.
Based on game implementations like Gloomhaven (road/city events) or Battletech (travel events). For more info, see https://thepit.ja-galaxy-forum.com/index.php?t=msg&th=24865&goto=363481&#msg_363481 Requires GameDir >= r2599 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9137 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2314,6 +2314,11 @@ void LoadGameExternalOptions()
|
||||
gGameExternalOptions.fAIDecisionInfo = iniReader.ReadBoolean("Tactical AI Settings", "AI_DECISION_INFO", FALSE);
|
||||
gGameExternalOptions.fAIShootUnseen = iniReader.ReadBoolean("Tactical AI Settings", "AI_SHOOT_UNSEEN", FALSE);
|
||||
gGameExternalOptions.fAISafeSuppression = iniReader.ReadBoolean("Tactical AI Settings", "AI_SAFE_SUPPRESSION", TRUE);
|
||||
|
||||
// Mini Events
|
||||
gGameExternalOptions.fMiniEventsEnabled = iniReader.ReadBoolean("Mini Events Settings", "MINI_EVENTS_ENABLED", FALSE);
|
||||
gGameExternalOptions.fMiniEventsMinHoursBetweenEvents = iniReader.ReadInteger("Mini Events Settings", "MINI_EVENTS_MIN_HOURS_BETWEEN_EVENTS", 120, 24, 24000);
|
||||
gGameExternalOptions.fMiniEventsMaxHoursBetweenEvents = iniReader.ReadInteger("Mini Events Settings", "MINI_EVENTS_MAX_HOURS_BETWEEN_EVENTS", 240, 24, 24000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1579,6 +1579,11 @@ typedef struct
|
||||
BOOLEAN fAIShootUnseen;
|
||||
BOOLEAN fAISafeSuppression;
|
||||
|
||||
// Mini Events
|
||||
BOOLEAN fMiniEventsEnabled;
|
||||
UINT16 fMiniEventsMinHoursBetweenEvents;
|
||||
UINT16 fMiniEventsMaxHoursBetweenEvents;
|
||||
|
||||
} GAME_EXTERNAL_OPTIONS;
|
||||
|
||||
typedef struct
|
||||
|
||||
@@ -1600,6 +1600,10 @@ void ProcessTransactionString(STR16 pString, FinanceUnitPtr pFinance)
|
||||
swprintf( pString, pTransactionText[PROMOTE_MILITIA], str );
|
||||
}
|
||||
break;
|
||||
|
||||
case MINI_EVENT:
|
||||
swprintf(pString, L"%s", pTransactionText[MINI_EVENT]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ enum
|
||||
SAM_REPAIR, // Flugente: repair SAM site
|
||||
WORKERS_TRAINED, // Flugente: train workers
|
||||
PROMOTE_MILITIA, // Flugente: drill militia
|
||||
MINI_EVENT, // rftr: mini events
|
||||
TEXT_NUM_FINCANCES
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -1606,4 +1606,4 @@ void ClearWrappedStringsCHAT( WRAPPED_STRING *pStringWrapperHead )
|
||||
|
||||
pStringWrapperHead = NULL;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,6 +197,19 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN
|
||||
|
||||
break;
|
||||
|
||||
case MSG_BOX_MINIEVENT_STYLE:
|
||||
|
||||
ubMercBoxBackground = DIALOG_MERC_POPUP_BACKGROUND;
|
||||
ubMercBoxBorder = DIALOG_MERC_POPUP_BORDER;
|
||||
|
||||
// Add button images
|
||||
gMsgBox.iButtonImages = LoadButtonImage( "INTERFACE\\msgboxbuttonwide.sti", -1,0,-1,1,-1 );
|
||||
ubFontColor = FONT_MCOLOR_WHITE;
|
||||
ubFontShadowColor = DEFAULT_SHADOW;
|
||||
usCursor = CURSOR_NORMAL;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ubMercBoxBackground = BASIC_MERC_POPUP_BACKGROUND;
|
||||
ubMercBoxBorder = BASIC_MERC_POPUP_BORDER;
|
||||
@@ -267,6 +280,14 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN
|
||||
usMBWidth = MSGBOX_BUTTON_WIDTH * 4;
|
||||
bFixedWidth = TRUE;
|
||||
}
|
||||
|
||||
// rftr - bigger msg box. I guess these max out the box?
|
||||
if (usFlags & MSG_BOX_FLAG_BIGGER)
|
||||
{
|
||||
heightincrease = 140;
|
||||
usMBWidth = MSGBOX_BUTTON_WIDTH * 5;
|
||||
bFixedWidth = TRUE;
|
||||
}
|
||||
|
||||
// Init message box
|
||||
gMsgBox.iBoxId = PrepareMercPopupBox( iId, ubMercBoxBackground, ubMercBoxBorder, zString, usMBWidth, 40, 10, 30 + heightincrease, &usTextBoxWidth, &usTextBoxHeight, bFixedWidth );
|
||||
@@ -873,6 +894,31 @@ INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UIN
|
||||
ForceButtonUnDirty( gMsgBox.uiNOButton );
|
||||
}
|
||||
|
||||
if (usFlags & MSG_BOX_FLAG_WIDE_BUTTONS)
|
||||
{
|
||||
sButtonX = 10;//usTextBoxWidth - (MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_X_SEP);
|
||||
sButtonY = usTextBoxHeight - 10;
|
||||
|
||||
gMsgBox.uiYESButton = CreateIconAndTextButton( gMsgBox.iButtonImages, gzUserDefinedButton1, FONT12ARIAL,
|
||||
ubFontColor, ubFontShadowColor,
|
||||
ubFontColor, ubFontShadowColor,
|
||||
TEXT_LJUSTIFIED,
|
||||
(INT16)(gMsgBox.sX + sButtonX ), (INT16)(gMsgBox.sY + sButtonY - 5 - MSGBOX_BUTTON_HEIGHT * 2 ), BUTTON_TOGGLE ,MSYS_PRIORITY_HIGHEST,
|
||||
DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)YESMsgBoxCallback );
|
||||
SetButtonCursor(gMsgBox.uiYESButton, usCursor);
|
||||
ForceButtonUnDirty( gMsgBox.uiYESButton );
|
||||
|
||||
|
||||
gMsgBox.uiNOButton = CreateIconAndTextButton( gMsgBox.iButtonImages, gzUserDefinedButton2, FONT12ARIAL,
|
||||
ubFontColor, ubFontShadowColor,
|
||||
ubFontColor, ubFontShadowColor,
|
||||
TEXT_LJUSTIFIED,
|
||||
(INT16)(gMsgBox.sX + sButtonX ), (INT16)(gMsgBox.sY + sButtonY - MSGBOX_BUTTON_HEIGHT ), BUTTON_TOGGLE ,MSYS_PRIORITY_HIGHEST,
|
||||
DEFAULT_MOVE_CALLBACK, (GUI_CALLBACK)NOMsgBoxCallback );
|
||||
SetButtonCursor(gMsgBox.uiNOButton, usCursor);
|
||||
ForceButtonUnDirty( gMsgBox.uiNOButton );
|
||||
}
|
||||
|
||||
if ( usFlags & MSG_BOX_FLAG_YESNOLIE )
|
||||
{
|
||||
sButtonX = ( usTextBoxWidth - ( MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_WIDTH + MSGBOX_BUTTON_X_SEP ) ) / 3;
|
||||
@@ -1263,6 +1309,12 @@ UINT32 ExitMsgBox( INT8 ubExitCode )
|
||||
RemoveButton( gMsgBox.uiYESButton );
|
||||
RemoveButton( gMsgBox.uiNOButton );
|
||||
}
|
||||
|
||||
if ( gMsgBox.usFlags & MSG_BOX_FLAG_WIDE_BUTTONS )
|
||||
{
|
||||
RemoveButton( gMsgBox.uiYESButton );
|
||||
RemoveButton( gMsgBox.uiNOButton );
|
||||
}
|
||||
}
|
||||
|
||||
if ( gMsgBox.usFlags & MSG_BOX_FLAG_IMAGE )
|
||||
@@ -1521,6 +1573,12 @@ UINT32 MessageBoxScreenHandle( )
|
||||
MarkAButtonDirty( gMsgBox.uiNOButton );
|
||||
}
|
||||
|
||||
if ( gMsgBox.usFlags & MSG_BOX_FLAG_WIDE_BUTTONS )
|
||||
{
|
||||
MarkAButtonDirty( gMsgBox.uiYESButton );
|
||||
MarkAButtonDirty( gMsgBox.uiNOButton );
|
||||
}
|
||||
|
||||
|
||||
RenderMercPopUpBoxFromIndex( gMsgBox.iBoxId, gMsgBox.sX, gMsgBox.sY, FRAME_BUFFER );
|
||||
//gMsgBox.fRenderBox = FALSE;
|
||||
@@ -1725,6 +1783,11 @@ UINT32 MessageBoxScreenShutdown( )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
void DoScreenIndependantMessageBoxFullScreen( const STR16 zString, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback )
|
||||
{
|
||||
SGPRect CenteringRect= {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT };
|
||||
DoScreenIndependantMessageBoxWithRect( zString, usFlags, ReturnCallback, &CenteringRect );
|
||||
}
|
||||
|
||||
// a basic box that don't care what screen we came from
|
||||
void DoScreenIndependantMessageBox( const STR16 zString, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback )
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
#define MSG_BOX_FLAG_IMAGE 0x00040000 // Displays an image
|
||||
#define MSG_BOX_BUTTONS_HORIZONTAL_ORIENTATION 0x00080000 // MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS sets the buttons horizontally
|
||||
|
||||
// rftr - bigger msg box
|
||||
#define MSG_BOX_FLAG_BIGGER 0x00100000 // Bigger msg box
|
||||
#define MSG_BOX_FLAG_WIDE_BUTTONS 0x00200000 // Wide buttons
|
||||
|
||||
// message box return codes
|
||||
#define MSG_BOX_RETURN_OK 1 // ENTER or on OK button
|
||||
#define MSG_BOX_RETURN_YES 2 // ENTER or YES button
|
||||
@@ -46,6 +50,7 @@ enum
|
||||
MSG_BOX_IMP_STYLE,
|
||||
MSG_BOX_LAPTOP_DEFAULT,
|
||||
MSG_BOX_BASIC_MEDIUM_BUTTONS,
|
||||
MSG_BOX_MINIEVENT_STYLE,
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -133,6 +138,7 @@ extern CHAR16 gszMsgBoxInputString[255];
|
||||
////////////////////////////////
|
||||
|
||||
INT32 DoMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback, SGPRect *pCenteringRect, UINT8 ubDefaultButton = MSG_BOX_DEFAULT_BUTTON_NONE );
|
||||
void DoScreenIndependantMessageBoxFullScreen( const STR16 zString, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback );
|
||||
void DoScreenIndependantMessageBox( const STR16 zString, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback );
|
||||
void DoUpperScreenIndependantMessageBox( const STR16 zString, UINT32 usFlags, MSGBOX_CALLBACK ReturnCallback );
|
||||
|
||||
|
||||
+3
-3
@@ -2352,7 +2352,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField( hFile, &this->sDiseasePoints, sizeof(sDiseasePoints), sizeof(INT32), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->sDiseaseFlag, sizeof(sDiseaseFlag), sizeof(UINT8), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubFiller, sizeof( ubFiller ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubFiller1, sizeof( ubFiller1 ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubHoursRemainingOnMiniEvent, sizeof( ubHoursRemainingOnMiniEvent), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usGLDelayMode, sizeof( usGLDelayMode ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usBarrelMode, sizeof( usBarrelMode ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usBarrelCounter, sizeof( usBarrelCounter ), sizeof( UINT8 ), numBytesRead );
|
||||
@@ -2373,7 +2373,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubFiller, sizeof(ubFiller), sizeof(UINT8), numBytesRead );
|
||||
|
||||
buffer += sizeof( ubFiller1 );
|
||||
buffer += sizeof( ubHoursRemainingOnMiniEvent );
|
||||
buffer += sizeof( usGLDelayMode );
|
||||
buffer += sizeof( usBarrelMode );
|
||||
buffer += sizeof( usBarrelCounter );
|
||||
@@ -2421,7 +2421,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
buffer += sizeof( ubFiller1 );
|
||||
buffer += sizeof( ubHoursRemainingOnMiniEvent );
|
||||
buffer += sizeof( usGLDelayMode );
|
||||
buffer += sizeof( usBarrelMode );
|
||||
buffer += sizeof( usBarrelCounter );
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
#include "Militia Control.h" // added by Flugente
|
||||
#include "ASD.h" // added by Flugente
|
||||
#include "Strategic AI.h"
|
||||
#include "MiniEvents.h"
|
||||
#endif
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
@@ -515,6 +516,8 @@ void HandleAdministrationAssignments();
|
||||
// Flugente: handle exploration assignements
|
||||
void HandleExplorationAssignments();
|
||||
|
||||
void HandleMiniEventAssignments();
|
||||
|
||||
// is the character between sectors in mvt
|
||||
BOOLEAN CharacterIsBetweenSectors( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -800,6 +803,11 @@ BOOLEAN BasicCanCharacterAssignment( SOLDIERTYPE * pSoldier, BOOLEAN fNotInComba
|
||||
if (pSoldier->bAssignment == ASSIGNMENT_POW)
|
||||
return(FALSE);
|
||||
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT && pSoldier->ubHoursRemainingOnMiniEvent > 0 )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
@@ -2478,7 +2486,7 @@ BOOLEAN CanCharacterSleep( SOLDIERTYPE *pSoldier, BOOLEAN fExplainWhyNot )
|
||||
}
|
||||
|
||||
// POW?
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW || pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -2696,7 +2704,7 @@ INT8 CanCharacterSquad( SOLDIERTYPE *pSoldier, INT8 bSquadValue )
|
||||
return ( CHARACTER_CANT_JOIN_SQUAD );
|
||||
}
|
||||
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW || (pSoldier->bAssignment == ASSIGNMENT_MINIEVENT && pSoldier->ubHoursRemainingOnMiniEvent > 0))
|
||||
{
|
||||
// not allowed to be put on a squad
|
||||
return( CHARACTER_CANT_JOIN_SQUAD );
|
||||
@@ -3050,6 +3058,8 @@ void UpdateAssignments()
|
||||
// handle exploration
|
||||
HandleExplorationAssignments();
|
||||
|
||||
HandleMiniEventAssignments();
|
||||
|
||||
// check to see if anyone is done healing?
|
||||
UpdatePatientsWhoAreDoneHealing( );
|
||||
|
||||
@@ -5815,7 +5825,7 @@ void FatigueCharacter( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
// POW?
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW || pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -7075,6 +7085,29 @@ void HandleExplorationAssignments()
|
||||
}
|
||||
}
|
||||
|
||||
void HandleMiniEventAssignments()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
UINT32 uiCnt = 0;
|
||||
const UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
const UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
|
||||
for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier )
|
||||
{
|
||||
if ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_MINIEVENT && EnoughTimeOnAssignment( pSoldier ) )
|
||||
{
|
||||
if (--pSoldier->ubHoursRemainingOnMiniEvent == 0)
|
||||
{
|
||||
pSoldier->bSectorZ -= MINI_EVENT_Z_OFFSET;
|
||||
pSoldier->ubInsertionDirection = DIRECTION_IRRELEVANT;
|
||||
pSoldier->ubStrategicInsertionCode = INSERTION_CODE_CENTER;
|
||||
AssignmentDone(pSoldier, TRUE, FALSE);
|
||||
AddCharacterToAnySquad(pSoldier);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// handle snitch spreading propaganda assignment
|
||||
// totally not a copy of HandleRadioScanInSector
|
||||
void HandleSpreadingPropagandaInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
||||
@@ -16251,7 +16284,7 @@ void HandleRestFatigueAndSleepStatus( void )
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ( pSoldier->bAssignment == ASSIGNMENT_POW ) || ( pSoldier->bAssignment == IN_TRANSIT ) )
|
||||
if( ( pSoldier->bAssignment == ASSIGNMENT_POW ) || ( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -16400,7 +16433,7 @@ void HandleRestFatigueAndSleepStatus( void )
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ( pSoldier->bAssignment == ASSIGNMENT_POW ) || ( pSoldier->bAssignment == IN_TRANSIT ) )
|
||||
if( ( pSoldier->bAssignment == ASSIGNMENT_POW ) || ( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -19380,7 +19413,8 @@ BOOLEAN CanCharacterRepairAnotherSoldiersStuff( SOLDIERTYPE *pSoldier, SOLDIERTY
|
||||
( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ||
|
||||
( AM_A_ROBOT( pSoldier ) ) ||
|
||||
( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__EPC ) ||
|
||||
( pOtherSoldier->bAssignment == ASSIGNMENT_DEAD ) )
|
||||
( pOtherSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pOtherSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@ enum
|
||||
BURIAL, // merc removes corpses in this sector
|
||||
ADMINISTRATION, // merc boosts the effectiveness of other mercs
|
||||
EXPLORATION, // merc searches the sector for undiscovered items
|
||||
ASSIGNMENT_MINIEVENT,
|
||||
NUM_ASSIGNMENTS,
|
||||
};
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "ASD.h" // added by Flugente
|
||||
#include "Player Command.h" // added by Flugente
|
||||
#include "LuaInitNPCs.h" // added by Flugente
|
||||
#include "MiniEvents.h"
|
||||
#endif
|
||||
|
||||
#include "connect.h"
|
||||
@@ -672,6 +673,13 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
giReinforcementPool += (INT32)pEvent->uiParam;
|
||||
giTotalRecruitsInTraining -= (INT32)pEvent->uiParam;
|
||||
break;
|
||||
|
||||
case EVENT_MINIEVENT:
|
||||
if (!DelayEventIfBattleInProgress(pEvent))
|
||||
{
|
||||
CheckMiniEvents(pEvent->uiParam);
|
||||
}
|
||||
break;
|
||||
}
|
||||
gfPreventDeletionOfAnyEvent = fOrigPreventFlag;
|
||||
return TRUE;
|
||||
|
||||
@@ -150,6 +150,8 @@ enum
|
||||
EVENT_BANDIT_ATTACK, // Flugente: like a creature attack, but with bandits
|
||||
EVENT_ARMY_FINISH_TRAINING, // Another bunch of Queen Army recruits is about to finish training
|
||||
|
||||
EVENT_MINIEVENT,
|
||||
|
||||
NUMBER_OF_EVENT_TYPES_PLUS_ONE,
|
||||
NUMBER_OF_EVENT_TYPES = NUMBER_OF_EVENT_TYPES_PLUS_ONE - 1
|
||||
};
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "Debug.h"
|
||||
#include "Font Control.h"
|
||||
#include "message.h"
|
||||
#include "MiniEvents.h"
|
||||
#include "Text.h"
|
||||
#endif
|
||||
|
||||
@@ -120,6 +121,7 @@ CHAR16 gEventName[NUMBER_OF_EVENT_TYPES_PLUS_ONE][40]={
|
||||
L"ASDPurchaseJeep",
|
||||
L"ASDPurchaseTank",
|
||||
L"ASDPurchaseHeli",
|
||||
L"ASDPurchaseRobot",
|
||||
L"EnemyHeliUpdate",
|
||||
L"EnemyHeliRepair",
|
||||
L"EnemyHeliRefuel",
|
||||
@@ -137,6 +139,7 @@ CHAR16 gEventName[NUMBER_OF_EVENT_TYPES_PLUS_ONE][40]={
|
||||
L"zombie attack",
|
||||
L"bandit attack",
|
||||
L"ArmyFinishTraining",
|
||||
L"MiniEvent",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -805,6 +808,8 @@ BOOLEAN LoadStrategicEventsFromSavedGame( HWFILE hFile )
|
||||
pTempEvent->next = NULL;
|
||||
}
|
||||
|
||||
InitMiniEvents();
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
#include "CampaignStats.h" // added by Flugente
|
||||
#include "PMC.h" // added by Flugente
|
||||
#include "ASD.h" // added by Flugente
|
||||
#include "MiniEvents.h"
|
||||
#endif
|
||||
|
||||
#include "Vehicles.h"
|
||||
@@ -818,6 +819,8 @@ fFirstTimeInMapScreen = TRUE;
|
||||
RequestTriggerExitFromMapscreen( MAP_EXIT_TO_TACTICAL );
|
||||
#endif
|
||||
|
||||
InitMiniEvents();
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
|
||||
@@ -707,6 +707,7 @@ void HourlyStealUpdate()
|
||||
&& !pSoldier->flags.fMercAsleep
|
||||
&& pSoldier->bAssignment != IN_TRANSIT
|
||||
&& pSoldier->bAssignment != ASSIGNMENT_POW
|
||||
&& pSoldier->bAssignment != ASSIGNMENT_MINIEVENT
|
||||
&& !( ( ( gWorldSectorX == pSoldier->sSectorX ) && ( gWorldSectorY == pSoldier->sSectorY ) && ( gbWorldSectorZ == pSoldier->bSectorZ ) ) && ( gTacticalStatus.fEnemyInSector || guiCurrentScreen == GAME_SCREEN ) ) )
|
||||
{
|
||||
UINT8 ubSectorId = SECTOR( pSoldier->sSectorX, pSoldier->sSectorY );
|
||||
@@ -735,6 +736,7 @@ void HourlyStealUpdate()
|
||||
&& !pOtherSoldier->flags.fBetweenSectors
|
||||
&& pOtherSoldier->bAssignment != IN_TRANSIT
|
||||
&& pOtherSoldier->bAssignment != ASSIGNMENT_POW
|
||||
&& pOtherSoldier->bAssignment != ASSIGNMENT_MINIEVENT
|
||||
&& !SPY_LOCATION( pOtherSoldier->bAssignment )
|
||||
&& pOtherSoldier->bActive
|
||||
&& !pOtherSoldier->flags.fMercAsleep
|
||||
|
||||
@@ -1714,6 +1714,7 @@ BOOLEAN AnyUsableRealMercenariesOnTeam( void )
|
||||
!( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_POW ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_DEAD ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) &&
|
||||
( pSoldier->ubWhatKindOfMercAmI != MERC_TYPE__EPC ) )
|
||||
{
|
||||
return( TRUE );
|
||||
|
||||
@@ -1320,6 +1320,7 @@ INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
|
||||
( pSoldier->bAssignment >= ON_DUTY ) && ( pSoldier->bAssignment != VEHICLE ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_POW ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) &&
|
||||
( pSoldier->stats.bLife > 0 ) &&
|
||||
( !PlayerIDGroupInMotion( pSoldier->ubGroupID ) ) )
|
||||
{
|
||||
@@ -6919,6 +6920,7 @@ BOOLEAN CanMercsScoutThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
if ( ( pSoldier->bAssignment == IN_TRANSIT ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) ||
|
||||
( pSoldier->flags.fMercAsleep == TRUE ) ||
|
||||
( pSoldier->stats.bLife < OKLIFE ) )
|
||||
{
|
||||
|
||||
@@ -1913,7 +1913,7 @@ void UpdateCharRegionHelpText( void )
|
||||
pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ];
|
||||
|
||||
// health/energy/morale
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW )
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
if ( pSoldier->stats.bLife != 0 )
|
||||
{
|
||||
@@ -1955,7 +1955,7 @@ void UpdateCharRegionHelpText( void )
|
||||
}
|
||||
else
|
||||
{
|
||||
// POW - stats unknown
|
||||
// POW/mini event - stats unknown
|
||||
swprintf( sString, L"%s: ??, %s: ??, %s: ??", pMapScreenStatusStrings[ 0 ], pMapScreenStatusStrings[ 1 ], pMapScreenStatusStrings[ 2 ] );
|
||||
}
|
||||
|
||||
@@ -3688,7 +3688,7 @@ void SetUpMovingListsForSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ];
|
||||
|
||||
if( ( pSoldier->bActive ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) &&
|
||||
( pSoldier->sSectorX == sSectorX ) && ( pSoldier->sSectorY == sSectorY ) && ( pSoldier->bSectorZ == sSectorZ ) )
|
||||
{
|
||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
@@ -5961,6 +5961,13 @@ BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbErrorNumber
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
// mini event?
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
*pbErrorNumber = 29;
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
// underground? (can't move strategically, must use tactical traversal )
|
||||
if( pSoldier->bSectorZ != 0 )
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
#ifndef _MINIEVENTS_H
|
||||
#define _MINIEVENTS_H
|
||||
|
||||
#define MINI_EVENT_Z_OFFSET 9
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
void InitMiniEvents();
|
||||
void CheckMiniEvents(UINT32 nextEventId);
|
||||
|
||||
#endif
|
||||
@@ -2360,6 +2360,7 @@ BOOLEAN PlayerMercInvolvedInThisCombat( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->bAssignment != IN_TRANSIT &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_POW &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_DEAD &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_MINIEVENT &&
|
||||
!(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) &&
|
||||
// Robot is involved if it has a valid controller with it, uninvolved otherwise
|
||||
( !AM_A_ROBOT( pSoldier ) || ( pSoldier->ubRobotRemoteHolderID != NOBODY ) ) &&
|
||||
|
||||
@@ -299,7 +299,7 @@ UINT16 NumPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, INT8 sSecto
|
||||
// we test several conditions before we allow adding an opinion
|
||||
// other merc must be active, have a profile, be someone else and not be in transit or dead
|
||||
if ( pTeamSoldier->bActive && !pTeamSoldier->flags.fBetweenSectors && pTeamSoldier->stats.bLife > 0 && !(pTeamSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) &&
|
||||
!(pTeamSoldier->bAssignment == IN_TRANSIT || pTeamSoldier->bAssignment == ASSIGNMENT_DEAD || pTeamSoldier->bAssignment == ASSIGNMENT_POW) &&
|
||||
!(pTeamSoldier->bAssignment == IN_TRANSIT || pTeamSoldier->bAssignment == ASSIGNMENT_DEAD || pTeamSoldier->bAssignment == ASSIGNMENT_POW || pTeamSoldier->bAssignment == ASSIGNMENT_MINIEVENT) &&
|
||||
(pTeamSoldier->sSectorX == sSectorX && pTeamSoldier->sSectorY == sSectorY && pTeamSoldier->bSectorZ == sSectorZ) )
|
||||
{
|
||||
++teammemberspresent;
|
||||
@@ -2789,6 +2789,12 @@ void EnemyCapturesPlayerSoldier( SOLDIERTYPE *pSoldier )
|
||||
return;
|
||||
}
|
||||
|
||||
// can't capture mercs on mini event adventures
|
||||
if (pSoldier->bAssignment == ASSIGNMENT_MINIEVENT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -227,4 +227,5 @@
|
||||
#include "_JA25EnglishText.h"
|
||||
#include "Debug Control.h"
|
||||
#include "expat.h"
|
||||
#include "MiniEvents.h"
|
||||
#endif
|
||||
@@ -5469,7 +5469,7 @@ BOOLEAN TestForBloodcatAmbush( GROUP *pGroup )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if ( MercPtrs[ i ]->sSectorX == pGroup->ubSectorX && MercPtrs[ i ]->sSectorY == pGroup->ubSectorY && MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
if ( MercPtrs[ i ]->sSectorX == pGroup->ubSectorX && MercPtrs[ i ]->sSectorY == pGroup->ubSectorY && MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
{
|
||||
if( HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) && MercPtrs[ i ]->ubProfile != NO_PROFILE )
|
||||
{
|
||||
@@ -5873,6 +5873,7 @@ BOOLEAN GroupHasInTransitDeadOrPOWMercs( GROUP *pGroup )
|
||||
{
|
||||
if( ( pPlayer->pSoldier->bAssignment == IN_TRANSIT ) ||
|
||||
( pPlayer->pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pPlayer->pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) ||
|
||||
SPY_LOCATION( pPlayer->pSoldier->bAssignment ) ||
|
||||
( pPlayer->pSoldier->bAssignment == ASSIGNMENT_DEAD ) )
|
||||
{
|
||||
|
||||
@@ -442,6 +442,10 @@
|
||||
RelativePath=".\MilitiaSquads.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MiniEvents.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MilitiaIndividual.h"
|
||||
>
|
||||
@@ -656,6 +660,10 @@
|
||||
RelativePath=".\MilitiaSquads.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MiniEvents.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MilitiaIndividual.cpp"
|
||||
>
|
||||
|
||||
@@ -442,6 +442,10 @@
|
||||
RelativePath="MilitiaSquads.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MiniEvents.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MilitiaIndividual.h"
|
||||
>
|
||||
@@ -654,6 +658,10 @@
|
||||
RelativePath="MilitiaSquads.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MiniEvents.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MilitiaIndividual.cpp"
|
||||
>
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
<ClInclude Include="mapscreen.h" />
|
||||
<ClInclude Include="Meanwhile.h" />
|
||||
<ClInclude Include="Merc Contract.h" />
|
||||
<ClInclude Include="MiniEvents.h" />
|
||||
<ClInclude Include="MilitiaSquads.h" />
|
||||
<ClInclude Include="MilitiaIndividual.h" />
|
||||
<ClInclude Include="Player Command.h" />
|
||||
@@ -102,6 +103,7 @@
|
||||
<ClCompile Include="mapscreen.cpp" />
|
||||
<ClCompile Include="Meanwhile.cpp" />
|
||||
<ClCompile Include="Merc Contract.cpp" />
|
||||
<ClCompile Include="MiniEvents.cpp" />
|
||||
<ClCompile Include="MilitiaSquads.cpp" />
|
||||
<ClCompile Include="MilitiaIndividual.cpp" />
|
||||
<ClCompile Include="Player Command.cpp" />
|
||||
|
||||
@@ -77,6 +77,9 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="Merc Contract.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MiniEvents.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MilitiaSquads.h">
|
||||
<Filter>Header Files</Filter>
|
||||
@@ -235,6 +238,9 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="Merc Contract.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MiniEvents.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MilitiaSquads.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
<ClInclude Include="Merc Contract.h" />
|
||||
<ClInclude Include="MilitiaIndividual.h" />
|
||||
<ClInclude Include="MilitiaSquads.h" />
|
||||
<ClInclude Include="MiniEvents.h" />
|
||||
<ClInclude Include="Player Command.h" />
|
||||
<ClInclude Include="PreBattle Interface.h" />
|
||||
<ClInclude Include="Queen Command.h" />
|
||||
@@ -104,6 +105,7 @@
|
||||
<ClCompile Include="Merc Contract.cpp" />
|
||||
<ClCompile Include="MilitiaIndividual.cpp" />
|
||||
<ClCompile Include="MilitiaSquads.cpp" />
|
||||
<ClCompile Include="MiniEvents.cpp" />
|
||||
<ClCompile Include="Player Command.cpp" />
|
||||
<ClCompile Include="PreBattle Interface.cpp" />
|
||||
<ClCompile Include="Queen Command.cpp" />
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="Merc Contract.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MiniEvents.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MilitiaSquads.h">
|
||||
<Filter>Header Files</Filter>
|
||||
@@ -232,6 +235,9 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="Merc Contract.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MiniEvents.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MilitiaSquads.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
<ClInclude Include="Merc Contract.h" />
|
||||
<ClInclude Include="MilitiaIndividual.h" />
|
||||
<ClInclude Include="MilitiaSquads.h" />
|
||||
<ClInclude Include="MiniEvents.h" />
|
||||
<ClInclude Include="Player Command.h" />
|
||||
<ClInclude Include="PreBattle Interface.h" />
|
||||
<ClInclude Include="Queen Command.h" />
|
||||
@@ -104,6 +105,7 @@
|
||||
<ClCompile Include="Merc Contract.cpp" />
|
||||
<ClCompile Include="MilitiaIndividual.cpp" />
|
||||
<ClCompile Include="MilitiaSquads.cpp" />
|
||||
<ClCompile Include="MiniEvents.cpp" />
|
||||
<ClCompile Include="Player Command.cpp" />
|
||||
<ClCompile Include="PreBattle Interface.cpp" />
|
||||
<ClCompile Include="Queen Command.cpp" />
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
<ClInclude Include="Merc Contract.h" />
|
||||
<ClInclude Include="MilitiaIndividual.h" />
|
||||
<ClInclude Include="MilitiaSquads.h" />
|
||||
<ClInclude Include="MiniEvents.h" />
|
||||
<ClInclude Include="Player Command.h" />
|
||||
<ClInclude Include="PreBattle Interface.h" />
|
||||
<ClInclude Include="Queen Command.h" />
|
||||
@@ -124,6 +125,7 @@
|
||||
<ClCompile Include="Merc Contract.cpp" />
|
||||
<ClCompile Include="MilitiaIndividual.cpp" />
|
||||
<ClCompile Include="MilitiaSquads.cpp" />
|
||||
<ClCompile Include="MiniEvents.cpp" />
|
||||
<ClCompile Include="Player Command.cpp" />
|
||||
<ClCompile Include="PreBattle Interface.cpp" />
|
||||
<ClCompile Include="Queen Command.cpp" />
|
||||
|
||||
+17
-8
@@ -2312,10 +2312,11 @@ void DrawCharBars( void )
|
||||
return;
|
||||
}
|
||||
|
||||
// skip POWs, dead guys
|
||||
// skip POWs, dead guys, mini events
|
||||
if( ( pSoldier->stats.bLife == 0 ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) )
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -2670,7 +2671,7 @@ void DrawCharHealth( INT16 sCharNum )
|
||||
|
||||
pSoldier = &Menptr[gCharactersList[sCharNum].usSolID];
|
||||
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW )
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
// find starting X coordinate by centering all 3 substrings together, then print them separately (different colors)!
|
||||
swprintf( sString, L"%d/%d", pSoldier->stats.bLife, pSoldier->stats.bLifeMax );
|
||||
@@ -10837,7 +10838,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason )
|
||||
fPlotForMilitia = FALSE;
|
||||
|
||||
// if not dead or POW, select his sector
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) )//&& !SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ))//&& !SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
{
|
||||
ChangeSelectedMapSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
@@ -10890,7 +10891,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason )
|
||||
fPlotForMilitia = FALSE;
|
||||
|
||||
// if not dead or POW, select his sector
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
ChangeSelectedMapSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
@@ -11073,7 +11074,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason )
|
||||
fShownAssignmentMenu = FALSE;
|
||||
|
||||
// if not dead or POW, select his sector
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) )
|
||||
if( ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
ChangeSelectedMapSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
@@ -14546,6 +14547,7 @@ BOOLEAN MapCharacterHasAccessibleInventory( INT8 bCharNumber )
|
||||
|
||||
if( ( pSoldier->bAssignment == IN_TRANSIT ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) ||
|
||||
// Kaiden: Vehicle Inventory change - Commented the following line
|
||||
// ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ||
|
||||
// And added this instead:
|
||||
@@ -14734,7 +14736,7 @@ BOOLEAN CanChangeSleepStatusForSoldier( SOLDIERTYPE *pSoldier )
|
||||
|
||||
// if a vehicle, robot, in transit, or a POW
|
||||
if( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || AM_A_ROBOT( pSoldier ) ||
|
||||
( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_POW ) )
|
||||
( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_POW ) || ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) )
|
||||
{
|
||||
// can't change the sleep status of such mercs
|
||||
return ( FALSE );
|
||||
@@ -15287,7 +15289,7 @@ INT16 CalcLocationValueForChar( INT32 iCounter )
|
||||
pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ];
|
||||
|
||||
// don't reveal location of POWs!
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW )
|
||||
if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
sLocValue = SECTOR( pSoldier->sSectorX, pSoldier->sSectorY );
|
||||
// underground: add 1000 per sublevel
|
||||
@@ -15380,6 +15382,7 @@ BOOLEAN AnyMovableCharsInOrBetweenThisSector( INT16 sSectorX, INT16 sSectorY, IN
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
SPY_LOCATION( pSoldier->bAssignment ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) ||
|
||||
( pSoldier->stats.bLife == 0 ) )
|
||||
{
|
||||
continue;
|
||||
@@ -15977,6 +15980,11 @@ void GetMapscreenMercLocationString( SOLDIERTYPE *pSoldier, CHAR16 sString[] )
|
||||
// POW - location unknown
|
||||
swprintf( sString, L"%s", pPOWStrings[ 1 ] );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
// mini event - unknown location, use the same string as POWs
|
||||
swprintf( sString, L"%s", pPOWStrings[ 1 ] );
|
||||
}
|
||||
else if ( SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
{
|
||||
swprintf( pTempString, L"%s%s%s",
|
||||
@@ -16016,6 +16024,7 @@ void GetMapscreenMercDestinationString( SOLDIERTYPE *pSoldier, CHAR16 sString[]
|
||||
// if dead or POW - has no destination (no longer part of a group, for that matter)
|
||||
if( ( pSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT ) ||
|
||||
SPY_LOCATION( pSoldier->bAssignment ) ||
|
||||
( pSoldier->stats.bLife == 0 ) )
|
||||
{
|
||||
|
||||
@@ -5229,7 +5229,7 @@ BOOLEAN CanGoToTacticalInSector( INT16 sX, INT16 sY, UINT8 ubZ )
|
||||
{
|
||||
// ARM: now allows loading of sector with all mercs below OKLIFE as long as they're alive
|
||||
if( ( pSoldier->bActive && pSoldier->stats.bLife ) && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_DEAD ) && !SoldierAboardAirborneHeli( pSoldier )
|
||||
)
|
||||
|
||||
@@ -6369,7 +6369,7 @@ void HandleSlayDailyEvent( void )
|
||||
}
|
||||
|
||||
// valid soldier?
|
||||
if ( (pSoldier->bActive == FALSE) || (pSoldier->stats.bLife == 0) || (pSoldier->bAssignment == IN_TRANSIT) || (pSoldier->bAssignment == ASSIGNMENT_POW) )
|
||||
if ( (pSoldier->bActive == FALSE) || (pSoldier->stats.bLife == 0) || (pSoldier->bAssignment == IN_TRANSIT) || (pSoldier->bAssignment == ASSIGNMENT_POW) || (pSoldier->bAssignment == ASSIGNMENT_MINIEVENT) )
|
||||
{
|
||||
// no
|
||||
return;
|
||||
|
||||
@@ -475,7 +475,7 @@ void ProfileUpdateStats( MERCPROFILESTRUCT *pProfile, UINT8 ubReason )
|
||||
}
|
||||
|
||||
|
||||
void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubStat, INT16 sPtsChanged, UINT8 ubReason = 0 )
|
||||
void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubStat, INT16 sPtsChanged, UINT8 ubReason )
|
||||
{
|
||||
// this function changes the stat a given amount...
|
||||
INT16 *psStatGainPtr = NULL;
|
||||
|
||||
@@ -66,6 +66,7 @@ void StatChange(SOLDIERTYPE *pSoldier, UINT8 ubStat, UINT16 usNumChances, UINT8
|
||||
void ProfileStatChange(MERCPROFILESTRUCT *pProfile, UINT8 ubStat, UINT16 usNumChances, UINT8 ubReason);
|
||||
void ProcessStatChange(MERCPROFILESTRUCT *pProfile, UINT8 ubStat, UINT16 usNumChances, UINT8 ubReason);
|
||||
|
||||
void ChangeStat(MERCPROFILESTRUCT* pProfile, SOLDIERTYPE* pSoldier, UINT8 ubStat, INT16 sPtsChanged, UINT8 ubReason = 0);
|
||||
void UpdateStats( SOLDIERTYPE *pSoldier, UINT8 ubReason = 0 );
|
||||
void ProfileUpdateStats( MERCPROFILESTRUCT *pProfile, UINT8 ubReason = 0 );
|
||||
void ProcessUpdateStats( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubReason = 0 );
|
||||
|
||||
@@ -1512,6 +1512,9 @@ BOOLEAN DelayedTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteN
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
return( FALSE );
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
return( CharacterDialogue( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, TRUE ) );
|
||||
}
|
||||
|
||||
@@ -1569,6 +1572,8 @@ BOOLEAN TacticalCharacterDialogueWithSpecialEventEx( SOLDIERTYPE *pSoldier, UINT
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
return( CharacterDialogueWithSpecialEventEx( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, FALSE, uiFlag, uiData1, uiData2, uiData3 ) );
|
||||
@@ -1617,6 +1622,9 @@ BOOLEAN TacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
// OK, let's check if this is the exact one we just played, if so, skip.
|
||||
if ( pSoldier->ubProfile == gTacticalStatus.ubLastQuoteProfileNUm &&
|
||||
usQuoteNum == gTacticalStatus.ubLastQuoteSaid )
|
||||
@@ -1706,6 +1714,9 @@ BOOLEAN SnitchTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNu
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
// OK, let's check if this is the exact one we just played, if so, skip.
|
||||
//if ( pSoldier->ubProfile == gTacticalStatus.ubLastQuoteProfileNUm &&
|
||||
// usQuoteNum == gTacticalStatus.ubLastQuoteSaid )
|
||||
@@ -1760,6 +1771,9 @@ BOOLEAN AdditionalTacticalCharacterDialogue_CallsLua( SOLDIERTYPE *pSoldier, UIN
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
return( FALSE );
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
if ( AM_AN_EPC( pSoldier ) && !( gMercProfiles[pSoldier->ubProfile].ubMiscFlags & PROFILE_MISC_FLAG_FORCENPCQUOTE ) )
|
||||
return( FALSE );
|
||||
|
||||
@@ -1788,7 +1802,7 @@ void AdditionalTacticalCharacterDialogue_AllInSector(INT16 aSectorX, INT16 aSect
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->bActive &&
|
||||
pSoldier->ubProfile != ausIgnoreProfile &&
|
||||
pSoldier->sSectorX == aSectorX && pSoldier->sSectorY == aSectorY && pSoldier->bSectorZ == aSectorZ &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != IN_TRANSIT &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT &&
|
||||
(aAroundGridno == NOWHERE || PythSpacesAway( pSoldier->sGridNo, aAroundGridno ) <= aRadius ) &&
|
||||
!pSoldier->flags.fBetweenSectors )
|
||||
{
|
||||
@@ -2088,6 +2102,9 @@ BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
// sleeping guys don't talk.. go to standby to talk
|
||||
if( pSoldier->flags.fMercAsleep == TRUE )
|
||||
{
|
||||
|
||||
@@ -957,6 +957,9 @@ BOOLEAN DynamicOpinionTacticalCharacterDialogue( DynamicOpinionSpeechEvent& aEve
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
return(FALSE);
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
return( FALSE );
|
||||
|
||||
CHAR16 gzQuoteStr[500];
|
||||
|
||||
// remove old box, in case that still exists
|
||||
@@ -2017,7 +2020,7 @@ UINT8 GetFittingInterjectorProfile( UINT8 usEvent, UINT8 usProfileVictim, UINT8
|
||||
for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ )
|
||||
{
|
||||
// only people that are here
|
||||
if ( !pTeamSoldier->bActive || pTeamSoldier->bAssignment == IN_TRANSIT || pTeamSoldier->bAssignment == ASSIGNMENT_DEAD || pTeamSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if ( !pTeamSoldier->bActive || pTeamSoldier->bAssignment == IN_TRANSIT || pTeamSoldier->bAssignment == ASSIGNMENT_DEAD || pTeamSoldier->bAssignment == ASSIGNMENT_POW || pTeamSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
continue;
|
||||
|
||||
// if fSameSector is TRUE then the teammate must be in the same sector
|
||||
|
||||
+14
-2
@@ -595,8 +595,8 @@ void HourlyFoodAutoDigestion( SOLDIERTYPE *pSoldier )
|
||||
// if we're a prisoner, we can't feed ourself, and the player can't do that either. Instead the army provides food (not much and of bad quality)
|
||||
if (pSoldier->bAssignment == ASSIGNMENT_POW)
|
||||
{
|
||||
INT16 powwater = gGameExternalOptions.usFoodDigestionHourlyBaseDrink * gGameExternalOptions.sFoodDigestionAssignment * FOOD_POW_MULTIPLICATOR;
|
||||
INT16 powfoodadd = powwater * gGameExternalOptions.usFoodDigestionHourlyBaseFood / max(1, gGameExternalOptions.usFoodDigestionHourlyBaseDrink);
|
||||
const INT16 powwater = gGameExternalOptions.usFoodDigestionHourlyBaseDrink * gGameExternalOptions.sFoodDigestionAssignment * FOOD_POW_MULTIPLICATOR;
|
||||
const INT16 powfoodadd = powwater * gGameExternalOptions.usFoodDigestionHourlyBaseFood / max(1, gGameExternalOptions.usFoodDigestionHourlyBaseDrink);
|
||||
|
||||
// if we're thirsty or hungry, and this is nutritious, consume it
|
||||
if ( pSoldier->bDrinkLevel < FoodMoraleMods[FOOD_VERY_LOW].bThreshold )
|
||||
@@ -605,6 +605,18 @@ void HourlyFoodAutoDigestion( SOLDIERTYPE *pSoldier )
|
||||
if ( pSoldier->bFoodLevel < FoodMoraleMods[FOOD_VERY_LOW].bThreshold )
|
||||
AddFoodpoints(pSoldier->bDrinkLevel, powfoodadd);
|
||||
}
|
||||
// while on a minievent, assume that we can feed ourselves.. somehow
|
||||
else if (pSoldier->bAssignment == ASSIGNMENT_MINIEVENT)
|
||||
{
|
||||
const INT16 water = gGameExternalOptions.usFoodDigestionHourlyBaseDrink * gGameExternalOptions.sFoodDigestionAssignment;
|
||||
const INT16 foodadd = water * gGameExternalOptions.usFoodDigestionHourlyBaseFood / max(1, gGameExternalOptions.usFoodDigestionHourlyBaseDrink);
|
||||
|
||||
if ( pSoldier->bDrinkLevel < FoodMoraleMods[FOOD_NORMAL].bThreshold )
|
||||
AddFoodpoints(pSoldier->bDrinkLevel, water);
|
||||
|
||||
if ( pSoldier->bFoodLevel < FoodMoraleMods[FOOD_NORMAL].bThreshold )
|
||||
AddFoodpoints(pSoldier->bDrinkLevel, foodadd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// no eating if not able to!
|
||||
|
||||
@@ -6305,7 +6305,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
|
||||
// If anything other than on a squad or guard, make them guard....
|
||||
if ( this->bTeam == gbPlayerNum )
|
||||
{
|
||||
if ( this->bAssignment >= ON_DUTY && this->bAssignment != ASSIGNMENT_POW )
|
||||
if ( this->bAssignment >= ON_DUTY && this->bAssignment != ASSIGNMENT_POW && this->bAssignment != ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
if ( this->flags.fMercAsleep )
|
||||
{
|
||||
|
||||
@@ -1575,8 +1575,8 @@ public:
|
||||
|
||||
// Flugente: Decrease this filler by 1 for each new UINT8 / BOOLEAN variable, so we can maintain savegame compatibility!!
|
||||
// Note that we also have to account for padding, so you might need to substract more than just the size of the new variables
|
||||
UINT8 ubFiller[12];
|
||||
UINT8 ubFiller1;
|
||||
UINT8 ubFiller[10];
|
||||
UINT16 ubHoursRemainingOnMiniEvent;
|
||||
|
||||
// Flugente: modifiers to fire modes
|
||||
UINT8 usGLDelayMode; // if > 0, delay GL grenade explosions
|
||||
|
||||
@@ -1384,6 +1384,11 @@ BOOLEAN IsSquadInSector( SOLDIERTYPE *pSoldier, UINT8 ubSquad )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_MINIEVENT )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( SquadIsEmpty( ubSquad ) == TRUE )
|
||||
{
|
||||
return( TRUE );
|
||||
|
||||
@@ -238,7 +238,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
( pSoldier->bAssignment != MercPtrs[ gusSelectedSoldier ]->bAssignment ||
|
||||
( pSoldier->bAssignment == VEHICLE && pSoldier->iVehicleId != MercPtrs[ gusSelectedSoldier ]->iVehicleId ) ) &&
|
||||
pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD
|
||||
pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT
|
||||
&& !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{ //KM: We need to determine if there are more than one squad (meaning other concious mercs in a different squad or assignment)
|
||||
// These conditions were done to the best of my knowledge, so if there are other situations that require modification,
|
||||
|
||||
@@ -6013,7 +6013,7 @@ void ProcessNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrTy
|
||||
continue; // skip
|
||||
}
|
||||
|
||||
if ( bTeam == gbPlayerNum && pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if ( bTeam == gbPlayerNum && (pSoldier->bAssignment == ASSIGNMENT_POW || pSoldier->bAssignment == ASSIGNMENT_MINIEVENT) )
|
||||
{
|
||||
// POWs should not be processed for noise
|
||||
continue;
|
||||
|
||||
@@ -337,6 +337,7 @@ void InitTacticalPlacementGUI()
|
||||
CurrentBattleSectorIs( MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY, MercPtrs[i]->bSectorZ ) &&
|
||||
!( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles
|
||||
MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW &&
|
||||
MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT &&
|
||||
!( MercPtrs[i]->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) &&
|
||||
MercPtrs[ i ]->bAssignment != IN_TRANSIT )
|
||||
{
|
||||
@@ -353,6 +354,7 @@ void InitTacticalPlacementGUI()
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !MercPtrs[ i ]->flags.fBetweenSectors &&
|
||||
CurrentBattleSectorIs( MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY, MercPtrs[i]->bSectorZ ) &&
|
||||
MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW &&
|
||||
MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT &&
|
||||
!( MercPtrs[i]->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) &&
|
||||
MercPtrs[ i ]->bAssignment != IN_TRANSIT &&
|
||||
!( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) ) // ATE Ignore vehicles
|
||||
|
||||
@@ -2480,6 +2480,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"掩埋尸体", //L"Burial",
|
||||
L"管理", //L"Admin",
|
||||
L"探索", //L"Explore" TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4638,6 +4639,7 @@ STR16 pTransactionText[] =
|
||||
L"修理SAM基地",//L"SAM site repair", // Flugente: SAM repair
|
||||
L"培训工人",//L"Trained workers", // Flugente: train workers
|
||||
L"在%s区域训练民兵", //L"Drill militia in %s", Flugente: drill militia
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2479,6 +2479,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4628,6 +4629,7 @@ STR16 pTransactionText[] =
|
||||
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
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2480,6 +2480,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin",
|
||||
L"Explore",
|
||||
L"Event"// rftr: merc is on a mini event
|
||||
};
|
||||
|
||||
|
||||
@@ -4638,6 +4639,7 @@ STR16 pTransactionText[] =
|
||||
L"SAM site repair", // Flugente: SAM repair
|
||||
L"Trained workers", // Flugente: train workers
|
||||
L"Drill militia in %s", // Flugente: drill militia
|
||||
L"Mini event", // rftr: mini events
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2488,6 +2488,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4632,6 +4633,7 @@ STR16 pTransactionText[] =
|
||||
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
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2519,6 +2519,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pMilitiaString[] =
|
||||
@@ -4630,6 +4631,7 @@ STR16 pTransactionText[] =
|
||||
L"SAM reparieren", // Flugente: SAM repair
|
||||
L"Arbeiter trainiert", // Flugente: train workers
|
||||
L"Miliz in %s ausbilden", // Flugente: drill militia
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2474,6 +2474,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4622,6 +4623,7 @@ STR16 pTransactionText[] =
|
||||
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
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2486,6 +2486,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4633,6 +4634,7 @@ STR16 pTransactionText[] =
|
||||
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
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
@@ -2480,6 +2480,7 @@ STR16 pAssignmentStrings[] =
|
||||
L"Burial",
|
||||
L"Admin", // TODO.Translate
|
||||
L"Explore", // TODO.Translate
|
||||
L"Event"// rftr: merc is on a mini event // TODO: translate
|
||||
};
|
||||
|
||||
|
||||
@@ -4638,6 +4639,7 @@ STR16 pTransactionText[] =
|
||||
L"Стоимость ремонта базы ПВО", // Flugente: SAM repair
|
||||
L"Trained workers", // Flugente: train workers // TODO.Translate
|
||||
L"Drill militia in %s", // Flugente: drill militia // TODO.Translate
|
||||
L"Mini event", // rftr: mini events // TODO: translate
|
||||
};
|
||||
|
||||
STR16 pTransactionAlternateText[] =
|
||||
|
||||
Reference in New Issue
Block a user