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:
Flugente
2021-07-09 19:38:55 +00:00
parent e7251981c0
commit 960bb2d4ba
53 changed files with 1812 additions and 35 deletions
+40 -6
View File
@@ -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 );
}
+1
View File
@@ -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,
};
+8
View File
@@ -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;
+2
View File
@@ -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
};
+5
View File
@@ -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 );
}
+3
View File
@@ -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 );
}
+2
View File
@@ -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 );
+2
View File
@@ -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 ) )
{
+10 -3
View File
@@ -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
+11
View File
@@ -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
+1
View File
@@ -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 ) ) &&
+7 -1
View File
@@ -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;
+1
View File
@@ -227,4 +227,5 @@
#include "_JA25EnglishText.h"
#include "Debug Control.h"
#include "expat.h"
#include "MiniEvents.h"
#endif
+2 -1
View File
@@ -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 ) )
{
+8
View File
@@ -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"
>
+8
View File
@@ -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"
>
+2
View File
@@ -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>
+2
View File
@@ -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>
+2
View File
@@ -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" />
+2
View File
@@ -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
View File
@@ -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 ) )
{
+2 -2
View File
@@ -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;