*********************************************************

*	2006/05/01					*
*	Little Alien					*
*	Developed in VS 2003				*
*********************************************************

Source:
- Added militia control in tactical (can be turned on/off in ja2.ini file)
- Aiming/readying gun: show in red points needed for readying gun

Data:
- Added new ja2.ini



git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@46 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
lalien
2006-05-01 20:59:34 +00:00
parent dc2b482a8f
commit cce975b6c1
16 changed files with 2454 additions and 205 deletions
+61 -6
View File
@@ -7,14 +7,35 @@
#define GAME_INI_FILE "\\Ja2.ini"
BOOLEAN gfStretch = FALSE;
BOOLEAN gfStretchWinGDI = FALSE;
BOOLEAN gfVSync = FALSE;
#define SET_SYSTEM "JA2 System Settings"
#define SET_RESOLUTION "JA2 Screen Resolution Settings"
#define SET_RAIN "JA2 Rain Settings"
#define SET_THUNDER "JA2 Thunder Settings"
#define SET_TURN_SPEED "JA2 Turnbased Animation Speed Settings"
#define SET_STRATEGIC "JA2 Strategic Settings"
#define SET_SPECIAL "JA2 Special Settings"
#define SET_TACTICAL "JA2 Tactical Settings"
#define SET_TACTICAL_AI "JA2 Tactical AI Settings"
#define SET_GRAPHIC "JA2 Graphic Settings"
#define SET_GAMEPLAY "JA2 Gameplay Settings"
UINT8 gubDeadLockDelay = 15;
UINT8 ubStraightSightRange = 13;
BOOLEAN gfVSync = FALSE;
BOOLEAN gfAllowRain = FALSE;
UINT16 gusRainChancePerDay = 100, gusRainMinLength = 60, gusRainMaxLength = 180;
extern UINT8 gubPlayerTurnSpeedUpFactor;
extern UINT8 gubEnemyTurnSpeedUpFactor;
extern UINT8 gubCreatureTurnSpeedUpFactor;
extern UINT8 gubMilitiaTurnSpeedUpFactor;
extern UINT8 gubCivTurnSpeedUpFactor;
extern UINT32 guiMinLightningInterval;
extern UINT32 guiMaxLightningInterval;
extern UINT32 guiMinDLInterval;
@@ -24,6 +45,14 @@ extern UINT32 guiChanceToDoLightningBetweenTurns;
extern UINT32 guiMaxRainDrops;
BOOLEAN gfEnableEmergencyButton_SkipStrategicEvents = FALSE;
BOOLEAN gfAllowMilitiaGroups = TRUE;
BOOLEAN gfAllowReinforcments = TRUE;
BOOLEAN gfAllowReinforcmentsOnlyInCity = FALSE;
UINT32 guiBaseQueenPoolIncrement = 60;
BOOLEAN fAllowTacticalMilitiaCommand = TRUE;
typedef struct
{
CHAR8* strParamName;
@@ -32,8 +61,6 @@ typedef struct
UINT8 ubVarType;
}TSetting;
#define SET_RAIN "JA2 Rain Settings"
#define SET_THUNDER "JA2 Thunder Settings"
enum
{
@@ -46,8 +73,36 @@ enum
VT_BOOLEAN
};
TSetting gpSettings[] = {
TSetting gpSettings[] =
{
{"fVSync", SET_RESOLUTION, &gfVSync, VT_BOOLEAN},
{"PlayerTurnSpeedUpFactor", SET_TURN_SPEED, (LPVOID)&gubPlayerTurnSpeedUpFactor, VT_UINT8},
{"EnemyTurnSpeedUpFactor", SET_TURN_SPEED, (LPVOID)&gubEnemyTurnSpeedUpFactor, VT_UINT8},
{"CreatureTurnSpeedUpFactor", SET_TURN_SPEED, (LPVOID)&gubCreatureTurnSpeedUpFactor, VT_UINT8},
{"MilitiaTurnSpeedUpFactor", SET_TURN_SPEED, (LPVOID)&gubMilitiaTurnSpeedUpFactor, VT_UINT8},
{"CivTurnSpeedUpFactor", SET_TURN_SPEED, (LPVOID)&gubCivTurnSpeedUpFactor, VT_UINT8},
// Militia Settings
{"AllowTacticalMilitiaCommand", SET_TACTICAL, &fAllowTacticalMilitiaCommand, VT_BOOLEAN},
{"AllowMilitiaMobileGroups", SET_GAMEPLAY, &gfAllowMilitiaGroups, VT_BOOLEAN},
{"AllowReinforcments", SET_GAMEPLAY, &gfAllowReinforcments, VT_BOOLEAN},
{"AllowReinforcmentsOnlyInCities", SET_GAMEPLAY, &gfAllowReinforcmentsOnlyInCity, VT_BOOLEAN},
{"QueenPoolIncrementPerDifficultyLevel", SET_GAMEPLAY, &guiBaseQueenPoolIncrement, VT_UINT32},
//Sight range
{"BaseSightRange", SET_TACTICAL, &ubStraightSightRange, VT_UINT8},
// Maximal search distance for grenades
//{"MaxTossSearchDist", SET_TACTICAL_AI, &guiMaxTossSearchDist, VT_UINT32},
//{"fEnableEmergencyButton_NumLock_ToSkipStrategicEvents", SET_SPECIAL, &gfEnableEmergencyButton_SkipStrategicEvents, VT_BOOLEAN},
// Rain settings
{"ALLOW_RAIN", SET_RAIN, &gfAllowRain, VT_BOOLEAN},
{"RAIN_CHANCE_PER_DAY", SET_RAIN, &gusRainChancePerDay, VT_UINT16},
+10 -4
View File
@@ -1,10 +1,16 @@
#ifndef ___NEW_GAME_SETTINGS___
#define ___NEW_GAME_SETTINGS___
extern BOOLEAN gfUseABResources;
extern BOOLEAN gfEnableEmergencyButton_SkipStrategicEvents;
extern UINT32 guiMaxTossSearchDist;
extern BOOLEAN gfShowItemShadow;
//extern BOOLEAN gfUseABResources;
//extern BOOLEAN gfEnableEmergencyButton_SkipStrategicEvents;
//extern UINT32 guiMaxTossSearchDist;
//extern BOOLEAN gfShowItemShadow;
extern BOOLEAN gfAllowMilitiaGroups;
extern BOOLEAN gfAllowReinforcments;
extern BOOLEAN gfAllowReinforcmentsOnlyInCity;
extern UINT32 guiBaseQueenPoolIncrement;
extern UINT8 ubStraightSightRange;
void NSSaveSettings();
void NSLoadSettings();
+73 -1
View File
@@ -290,6 +290,8 @@ BOOLEAN fShowAttributeMenu = FALSE;
BOOLEAN fShowSquadMenu = FALSE;
BOOLEAN fShowContractMenu = FALSE;
BOOLEAN fShowRemoveMenu = FALSE;
BOOLEAN fShowMilitiaControlMenu = FALSE; //lal
//BOOLEAN fShowTalkToAllMenu = FALSE;//lal
BOOLEAN fRebuildMoveBox = FALSE;
@@ -306,8 +308,17 @@ SGPPoint VehiclePosition={160,150};
SGPPoint RepairPosition={160,150};
SGPRect RepairDimensions={0,0,80,80};
SGPRect AssignmentDimensions = { 0,0, 100, 95};
//lal
SGPPoint MilitiaControlPosition={120,150};
SGPRect MilitiaControlDimensions={0,0,100,95};
//SGPPoint TalkToAllPosition={160,150};
//SGPRect TalkToAllDimensions={0,0,100,95};
//lal
SGPPoint AssignmentPosition = { 120, 150 };
SGPRect AssignmentDimensions = { 0,0, 100, 95};
SGPPoint SquadPosition ={ 160, 150 };
SGPRect SquadDimensions ={ 0, 0, 140, 60 };
@@ -317,6 +328,8 @@ SGPPoint OrigSquadPosition ={ 160, 150 };
SGPPoint OrigAssignmentPosition = { 120, 150 };
SGPPoint OrigTrainPosition={160,150};
SGPPoint OrigVehiclePosition={160,150};
SGPPoint OrigMilitiaControlPosition = { 120, 150 }; //lal
//SGPPoint OrigTalkToAllPosition = { 160, 150 };
//extern BOOLEAN fMapExitDueToMessageBox;
@@ -2205,6 +2218,65 @@ void UpdateMapScreenAssignmentPositions( void )
}
//lal
void UpdateMapScreenMilitiaControlPositions( void )
{
// set the position of the pop up boxes
SGPPoint pPoint;
if( guiCurrentScreen != MAP_SCREEN )
{
return;
}
if( bSelectedAssignChar == -1 )
{
if( gfPreBattleInterfaceActive == FALSE )
{
giBoxY = 0;
}
return;
}
if( gCharactersList[ bSelectedAssignChar ].fValid == FALSE )
{
if( gfPreBattleInterfaceActive == FALSE )
{
giBoxY = 0;
}
return;
}
if( gfPreBattleInterfaceActive )
{
// do nothing
}
else
{
giBoxY = ( Y_START + ( bSelectedAssignChar ) * ( Y_SIZE + 2 ) );
}
MilitiaControlPosition.iY = giBoxY;
//TalkToAllPosition.iY = MilitiaControlPosition.iY + ( GetFontHeight( MAP_SCREEN_FONT ) + 2 )* MILCON_MENU_ALL;
if( fShowMilitiaControlMenu )
{
GetBoxPosition( ghMilitiaControlBox, &pPoint);
pPoint.iY = giBoxY;
SetBoxPosition( ghMilitiaControlBox, pPoint );
}
return;
}
//lal
void RandomMercInGroupSaysQuote( GROUP *pGroup, UINT16 usQuoteNum )
{
+40
View File
@@ -52,6 +52,35 @@ typedef struct FASTHELPREGION {
#define MAP_START_KEYRING_Y 107
#define Y_SIZE GetFontHeight(MAP_SCREEN_FONT)
//lal
// militia control menu
enum{
MILCON_MENU_ATTACK,
MILCON_MENU_HOLD,
MILCON_MENU_RETREAT,
MILCON_MENU_COMETOME,
MILCON_MENU_GETDOWN,
MILCON_MENU_TAKE_COVER,
MILCON_MENU_ALL_ATTACK,
MILCON_MENU_ALL_HOLD,
MILCON_MENU_ALL_RETREAT,
MILCON_MENU_ALL_COMETOME,
MILCON_MENU_ALL_GETDOWN,
MILCON_MENU_ALL_TAKE_COVER,
MILCON_MENU_ALL_TAKE_ITEMS,
MILCON_MENU_CANCEL,
MAX_MILCON_STRING_COUNT,
};
//enum{
// TTALL_MENU_ATTACK,
// TTALL_MENU_HOLD,
// TTALL_MENU_RETREAT,
// TTALL_MENU_COMETOME,
// TTALL_MENU_GETDOWN,
// TTALL_MENU_CANCEL,
// MAX_TTALL_STRING_COUNT,
//};
// attribute menu defines (must match NUM_TRAINABLE_STATS defines, and pAttributeMenuStrings )
enum {
@@ -212,6 +241,8 @@ extern BOOLEAN fShowAttributeMenu;
extern BOOLEAN fShowSquadMenu ;
extern BOOLEAN fShowContractMenu ;
extern BOOLEAN fShowRemoveMenu ;
extern BOOLEAN fShowMilitiaControlMenu ; //lal
//extern BOOLEAN fShowTalkToAllMenu ;
extern BOOLEAN fFirstTimeInMapScreen;
extern BOOLEAN fLockOutMapScreenInterface;
@@ -261,12 +292,20 @@ extern SGPRect SquadDimensions ;
extern SGPPoint RepairPosition;
extern SGPRect RepairDimensions;
extern SGPPoint MilitiaControlPosition; //lal
extern SGPRect MilitiaControlDimensions;
//extern SGPPoint TalkToAllPosition;
//extern SGPRect TalkToAllDimensions;
extern SGPPoint OrigContractPosition;
extern SGPPoint OrigAttributePosition;
extern SGPPoint OrigSquadPosition ;
extern SGPPoint OrigAssignmentPosition ;
extern SGPPoint OrigTrainPosition;
extern SGPPoint OrigVehiclePosition;
extern SGPPoint OrigMilitiaControlPosition ; //lal
//extern SGPPoint OrigTalkToAllPosition ;
// disble team info panel due to showing of battle roster
extern BOOLEAN fDisableDueToBattleRoster;
@@ -433,6 +472,7 @@ void RenderMapRegionBackground( void );
// update mapscreen assignment positions
void UpdateMapScreenAssignmentPositions( void );
void UpdateMapScreenMilitiaControlPositions( void );
// get the umber of valid mercs in the mapscreen character list
INT32 GetNumberOfPeopleInCharacterList( void );
+4
View File
@@ -862,6 +862,7 @@ void CreateTrainingBox( void );
void CreateMercRemoveAssignBox( void );
void DetermineWhichAssignmentMenusCanBeShown( void );
void DetermineWhichMilitiaControlMenusCanBeShown( void ); //lal
void DetermineIfContractMenuCanBeShown( void );
void ContractRegionBtnCallback( MOUSE_REGION * pRegion, INT32 iReason );
@@ -3697,6 +3698,7 @@ UINT32 MapScreenHandle(void)
// check which menus can be shown right now
DetermineWhichAssignmentMenusCanBeShown( );
DetermineWhichMilitiaControlMenusCanBeShown( ); //lal
// determine if contract menu can be shown
DetermineIfContractMenuCanBeShown( );
@@ -6011,6 +6013,7 @@ void EndMapScreen( BOOLEAN fDuringFade )
// clear out mouse regions for pop up boxes
DetermineWhichAssignmentMenusCanBeShown( );
DetermineWhichMilitiaControlMenusCanBeShown( ); //lal
sSelectedMilitiaTown = 0;
CreateDestroyMilitiaPopUPRegions( );
CreateDestroyMilitiaSectorButtons( );
@@ -6024,6 +6027,7 @@ void EndMapScreen( BOOLEAN fDuringFade )
ghContractBox = -1;
CreateDestroyAssignmentPopUpBoxes( );
CreateDestroyMilitiaControlPopUpBoxes( ); //lal
// shutdown movement box
if ( fShowMapScreenMovementList )
+167 -152
View File
@@ -5520,6 +5520,7 @@ BOOLEAN HandleTalkInit( )
INT16 sDistVisible;
INT16 sActionGridNo;
UINT8 ubDirection;
UINT8 commandRange; //lal
// Get soldier
if ( !GetSoldier( &pSoldier, gusSelectedSoldier ) )
@@ -5535,189 +5536,203 @@ BOOLEAN HandleTalkInit( )
// Check if there is a guy here to talk to!
if ( gfUIFullTargetFound )
{
// Is he a valid NPC?
if ( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, FALSE, TRUE , FALSE ) )
{
GetSoldier( &pTSoldier, gusUIFullTargetID );
// Is he a valid NPC?
if ( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, FALSE, TRUE , FALSE ) )
{
GetSoldier( &pTSoldier, gusUIFullTargetID );
if ( pTSoldier->ubID != pSoldier->ubID )
{
//ATE: Check if we have good LOS
// is he close enough to see that gridno if he turns his head?
if ( pTSoldier->ubID != pSoldier->ubID )
{
if ( !(( pTSoldier->bTeam == MILITIA_TEAM ) && ( CheckIfRadioIsEquipped() )) ) //lal
{
//ATE: Check if we have good LOS
// is he close enough to see that gridno if he turns his head?
sDistVisible = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, pTSoldier->sGridNo, pTSoldier->bLevel, pTSoldier );
// Check LOS!
if ( !SoldierTo3DLocationLineOfSightTest( pSoldier, pTSoldier->sGridNo, pTSoldier->bLevel, 3, (UINT8) sDistVisible, TRUE ) )
{
if ( pTSoldier->ubProfile != NO_PROFILE )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_LOS_TO_TALK_TARGET ], pSoldier->name, pTSoldier->name );
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 45 ], pSoldier->name );
}
return( FALSE );
}
}
// Check LOS!
if ( !SoldierTo3DLocationLineOfSightTest( pSoldier, pTSoldier->sGridNo, pTSoldier->bLevel, 3, (UINT8) sDistVisible, TRUE ) )
{
if ( pTSoldier->ubProfile != NO_PROFILE )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_LOS_TO_TALK_TARGET ], pSoldier->name, pTSoldier->name );
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 45 ], pSoldier->name );
}
return( FALSE );
}
}
}
if ( pTSoldier->bCollapsed )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 21 ], pTSoldier->name );
return( FALSE );
}
if ( pTSoldier->bCollapsed )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 21 ], pTSoldier->name );
return( FALSE );
}
// If Q on, turn off.....
if ( guiCurrentScreen == DEBUG_SCREEN )
{
gfExitDebugScreen = TRUE;
// If Q on, turn off.....
if ( guiCurrentScreen == DEBUG_SCREEN )
{
gfExitDebugScreen = TRUE;
}
// ATE: if our own guy...
if ( pTSoldier->bTeam == gbPlayerNum && !AM_AN_EPC( pTSoldier ) )
{
if ( pTSoldier->ubProfile == DIMITRI )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 32 ], pTSoldier->name );
return( FALSE );
}
// ATE: if our own guy...
if ( pTSoldier->bTeam == gbPlayerNum && !AM_AN_EPC( pTSoldier ) )
// Randomize quote to use....
// If buddy had a social trait...
if ( gMercProfiles[ pTSoldier->ubProfile ].bAttitude != ATT_NORMAL )
{
if ( pTSoldier->ubProfile == DIMITRI )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 32 ], pTSoldier->name );
return( FALSE );
}
ubDiceRoll = (UINT8)Random( 3 );
}
else
{
ubDiceRoll = (UINT8)Random( 2 );
}
// Randomize quote to use....
// If we are a PC, only use 0
if ( pTSoldier->ubWhatKindOfMercAmI == MERC_TYPE__PLAYER_CHARACTER )
{
ubDiceRoll = 0;
}
// If buddy had a social trait...
if ( gMercProfiles[ pTSoldier->ubProfile ].bAttitude != ATT_NORMAL )
switch( ubDiceRoll )
{
case 0:
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
break;
case 1:
if ( QuoteExp_PassingDislike[ pTSoldier->ubProfile ] )
{
ubDiceRoll = (UINT8)Random( 3 );
ubQuoteNum = QUOTE_PASSING_DISLIKE;
}
else
{
ubDiceRoll = (UINT8)Random( 2 );
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
}
break;
// If we are a PC, only use 0
if ( pTSoldier->ubWhatKindOfMercAmI == MERC_TYPE__PLAYER_CHARACTER )
{
ubDiceRoll = 0;
}
switch( ubDiceRoll )
{
case 0:
case 2:
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
break;
ubQuoteNum = QUOTE_SOCIAL_TRAIT;
break;
case 1:
default:
if ( QuoteExp_PassingDislike[ pTSoldier->ubProfile ] )
{
ubQuoteNum = QUOTE_PASSING_DISLIKE;
}
else
{
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
}
break;
case 2:
ubQuoteNum = QUOTE_SOCIAL_TRAIT;
break;
default:
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
break;
}
if ( pTSoldier->ubProfile == IRA )
{
ubQuoteNum = QUOTE_PASSING_DISLIKE;
}
TacticalCharacterDialogue( pTSoldier, ubQuoteNum );
return( FALSE );
ubQuoteNum = QUOTE_NEGATIVE_COMPANY;
break;
}
// Check distance
uiRange = GetRangeFromGridNoDiff( pSoldier->sGridNo, usMapPos );
// Double check path
if ( GetCivType( pTSoldier ) != CIV_TYPE_NA )
if ( pTSoldier->ubProfile == IRA )
{
// ATE: If one is already active, just remove it!
if ( ShutDownQuoteBoxIfActive( ) )
{
return( FALSE );
}
ubQuoteNum = QUOTE_PASSING_DISLIKE;
}
if ( uiRange > NPC_TALK_RADIUS )
{
// First get an adjacent gridno....
sActionGridNo = FindAdjacentGridEx( pSoldier, pTSoldier->sGridNo, &ubDirection, NULL, FALSE, TRUE );
if ( sActionGridNo == -1 )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] );
return( FALSE );
}
if ( UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) == 0 )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] );
return( FALSE );
}
TacticalCharacterDialogue( pTSoldier, ubQuoteNum );
// Walk up and talk to buddy....
gfNPCCircularDistLimit = TRUE;
sGoodGridNo = FindGridNoFromSweetSpotWithStructData( pSoldier, pSoldier->usUIMovementMode, pTSoldier->sGridNo, (NPC_TALK_RADIUS-1), &ubNewDirection, TRUE );
gfNPCCircularDistLimit = FALSE;
return( FALSE );
}
// First calculate APs and validate...
sAPCost = AP_TALK;
//sAPCost += UIPlotPath( pSoldier, sGoodGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
// Check distance
uiRange = GetRangeFromGridNoDiff( pSoldier->sGridNo, usMapPos );
// Check AP cost...
if ( !EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{
return( FALSE );
}
// Now walkup to talk....
pSoldier->ubPendingAction = MERC_TALK;
pSoldier->uiPendingActionData1 = pTSoldier->ubID;
pSoldier->ubPendingActionAnimCount = 0;
// WALK UP TO DEST FIRST
EVENT_InternalGetNewSoldierPath( pSoldier, sGoodGridNo, pSoldier->usUIMovementMode , TRUE , pSoldier->fNoAPToFinishMove );
return( FALSE );
}
else
{
sAPCost = AP_TALK;
// Check AP cost...
if ( !EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{
return( FALSE );
}
// OK, startup!
PlayerSoldierStartTalking( pSoldier, pTSoldier->ubID, FALSE );
}
if ( GetCivType( pTSoldier ) != CIV_TYPE_NA )
// Double check path
if ( GetCivType( pTSoldier ) != CIV_TYPE_NA )
{
// ATE: If one is already active, just remove it!
if ( ShutDownQuoteBoxIfActive( ) )
{
return( FALSE );
}
else
{
return( TRUE );
}
}
//lal
if ( pTSoldier->bTeam == MILITIA_TEAM )
{
commandRange = NPC_TALK_RADIUS*3;
}
else
{
commandRange = NPC_TALK_RADIUS;
}
if ( ( uiRange > commandRange ) && ( !CheckIfRadioIsEquipped() ) ) //lal
{
// First get an adjacent gridno....
sActionGridNo = FindAdjacentGridEx( pSoldier, pTSoldier->sGridNo, &ubDirection, NULL, FALSE, TRUE );
if ( sActionGridNo == -1 )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] );
return( FALSE );
}
if ( UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) == 0 )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] );
return( FALSE );
}
// Walk up and talk to buddy....
gfNPCCircularDistLimit = TRUE;
sGoodGridNo = FindGridNoFromSweetSpotWithStructData( pSoldier, pSoldier->usUIMovementMode, pTSoldier->sGridNo, (NPC_TALK_RADIUS-1), &ubNewDirection, TRUE );
gfNPCCircularDistLimit = FALSE;
// First calculate APs and validate...
sAPCost = AP_TALK;
//sAPCost += UIPlotPath( pSoldier, sGoodGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
// Check AP cost...
if ( !EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{
return( FALSE );
}
// Now walkup to talk....
pSoldier->ubPendingAction = MERC_TALK;
pSoldier->uiPendingActionData1 = pTSoldier->ubID;
pSoldier->ubPendingActionAnimCount = 0;
// WALK UP TO DEST FIRST
EVENT_InternalGetNewSoldierPath( pSoldier, sGoodGridNo, pSoldier->usUIMovementMode , TRUE , pSoldier->fNoAPToFinishMove );
return( FALSE );
}
else
{
sAPCost = AP_TALK;
// Check AP cost...
if ( !EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{
return( FALSE );
}
// OK, startup!
PlayerSoldierStartTalking( pSoldier, pTSoldier->ubID, FALSE );
}
if ( GetCivType( pTSoldier ) != CIV_TYPE_NA )
{
return( FALSE );
}
else
{
return( TRUE );
}
}
}
return( FALSE );
+1
View File
@@ -340,6 +340,7 @@ void GotoHeigherStance( SOLDIERTYPE *pSoldier );
BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT16 sGridNo , BOOLEAN fCheckForPath);
void PopupAssignmentMenuInTactical( SOLDIERTYPE *pSoldier );
void PopupMilitiaControlMenu( SOLDIERTYPE *pSoldier ); //lal
void PreventFromTheFreezingBug(SOLDIERTYPE* pSoldier);
+5
View File
@@ -78,6 +78,7 @@ BOOLEAN gfPausedTacticalRenderFlags = FALSE;
// which assignment menu can be shown?
extern void DetermineWhichAssignmentMenusCanBeShown( void );
extern void DetermineWhichMilitiaControlMenusCanBeShown( void ); //lal
extern void HandleAnyMercInSquadHasCompatibleStuff( UINT8 ubSquad, OBJECTTYPE *pObject, BOOLEAN fReset );
extern BOOLEAN RemoveFlashItemSlot( ITEM_POOL *pItemPool );
@@ -346,6 +347,10 @@ void ResetInterface( )
DetermineWhichAssignmentMenusCanBeShown();
CreateDestroyAssignmentPopUpBoxes( );
DetermineWhichMilitiaControlMenusCanBeShown( ); //lal
CreateDestroyMilitiaControlPopUpBoxes( );
HideUICursor( );
ResetPhysicsTrajectoryUI( );
File diff suppressed because it is too large Load Diff
+20
View File
@@ -1,6 +1,11 @@
#ifndef __MILITIA_CONTROL_H
#define __MILITIA_CONTROL_H
#include "Types.h"
#include "Soldier Control.h"
#include "mousesystem.h"
#include "Strategic Movement.h"
void PrepareMilitiaForTactical();
void RemoveMilitiaFromTactical();
void ResetMilitia();
@@ -8,4 +13,19 @@ void HandleMilitiaPromotions();
extern BOOLEAN gfStrategicMilitiaChangesMade;
extern INT32 ghMilitiaControlBox;
//extern INT32 ghTalkToAllBox;
extern BOOLEAN fFirstClickInMilitiaControlScreenMask;
// figure out the assignment menu pop up box positions
void DetermineMilitiaControlBoxPositions( void );
// set x,y position in tactical
void SetTacticalPopUpMilitiaControlBoxXY( SOLDIERTYPE *pSoldier );
BOOLEAN CreateDestroyMilitiaControlPopUpBoxes( void );
BOOLEAN CheckIfRadioIsEquipped( void );
#endif
+2 -2
View File
@@ -151,7 +151,7 @@ BOOLEAN IsItAllowedToRenderRain()
{
if( !gfAllowRain )return FALSE;
if( !( guiEnvWeather & WEATHER_FORECAST_THUNDERSHOWERS | WEATHER_FORECAST_SHOWERS ) )return FALSE;
if( !( guiEnvWeather & (WEATHER_FORECAST_THUNDERSHOWERS | WEATHER_FORECAST_SHOWERS) ) )return FALSE;
if( guiCurrentScreen != GAME_SCREEN && guiCurrentScreen != SHOPKEEPER_SCREEN ) return FALSE;
@@ -198,7 +198,7 @@ void ResetRain()
void GenerateRainDropsList()
{
guiCurrMaxAmountOfRainDrops = (UINT32)(BASE_MAXIMUM_DROPS * gbCurrentRainIntensity);
guiCurrMaxAmountOfRainDrops = (UINT32)BASE_MAXIMUM_DROPS * gbCurrentRainIntensity;
pRainDrops = (TRainDrop *)MemAlloc( sizeof( TRainDrop ) * guiCurrMaxAmountOfRainDrops );
memset( pRainDrops, 0, sizeof( TRainDrop ) * guiCurrMaxAmountOfRainDrops );
+32 -27
View File
@@ -70,6 +70,7 @@ extern BOOLEAN fIgnoreLeftUp;
extern UINT32 guiCurrentEvent;
extern UINT32 guiCurrentUICursor;
extern void DetermineWhichAssignmentMenusCanBeShown( void );
extern void DetermineWhichMilitiaControlMenusCanBeShown( void );
extern BOOLEAN gfIgnoreOnSelectedGuy;
extern INT16 gsOverItemsGridNo;
extern INT16 gsOverItemsLevel;
@@ -1023,34 +1024,38 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
case TALKCURSOR_MODE:
case MOVE_MODE:
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
if ( ( guiUIFullTargetFlags & OWNED_MERC ) && ( guiUIFullTargetFlags & VISIBLE_MERC ) && !( guiUIFullTargetFlags & DEAD_MERC )&&!( pSoldier ? pSoldier->uiStatusFlags & SOLDIER_VEHICLE : 0 ) )
{
//if( pSoldier->bAssignment >= ON_DUTY )
{
PopupAssignmentMenuInTactical( pSoldier );
fClickHoldIntercepted = TRUE;
}
break;
}
else
{
fShowAssignmentMenu = FALSE;
CreateDestroyAssignmentPopUpBoxes( );
DetermineWhichAssignmentMenusCanBeShown( );
}
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
if ( ( guiUIFullTargetFlags & OWNED_MERC ) && ( guiUIFullTargetFlags & VISIBLE_MERC ) && !( guiUIFullTargetFlags & DEAD_MERC )&&!( pSoldier ? pSoldier->uiStatusFlags & SOLDIER_VEHICLE : 0 ) )
{
//if( pSoldier->bAssignment >= ON_DUTY )
{
PopupAssignmentMenuInTactical( pSoldier );
fClickHoldIntercepted = TRUE;
}
break;
}
else
{
fShowAssignmentMenu = FALSE;
CreateDestroyAssignmentPopUpBoxes( );
DetermineWhichAssignmentMenusCanBeShown( );
fShowMilitiaControlMenu = FALSE;
CreateDestroyMilitiaControlPopUpBoxes( );
DetermineWhichMilitiaControlMenusCanBeShown( );
}
// ATE:
if ( !fClickHoldIntercepted )
{
*puiNewEvent = U_MOVEMENT_MENU;
fClickHoldIntercepted = TRUE;
}
break;
}
}
// ATE:
if ( !fClickHoldIntercepted )
{
*puiNewEvent = U_MOVEMENT_MENU;
fClickHoldIntercepted = TRUE;
}
break;
}
}
if ( gCurrentUIMode == ACTION_MODE || gCurrentUIMode == TALKCURSOR_MODE )
{
PauseRT( FALSE );
+32 -12
View File
@@ -93,6 +93,8 @@ UINT8 gubMilitiaTurnSpeedUpFactor = 1;
UINT8 gubCivTurnSpeedUpFactor = 1;
//turnspeed
extern BOOLEAN fAllowTacticalMilitiaCommand; //lal
extern INT16 DirIncrementer[8];
#define PALETTEFILENAME "BINARYDATA\\ja2pal.dat"
@@ -10755,6 +10757,7 @@ void MercStealFromMerc( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTarget )
}
}
SOLDIERTYPE *pTMilitiaSoldier;
BOOLEAN PlayerSoldierStartTalking( SOLDIERTYPE *pSoldier, UINT8 ubTargetID, BOOLEAN fValidate )
{
INT16 sFacingDir, sXPos, sYPos, sAPCost;
@@ -10795,28 +10798,45 @@ BOOLEAN PlayerSoldierStartTalking( SOLDIERTYPE *pSoldier, UINT8 ubTargetID, BOOL
// Deduct points from our guy....
DeductPoints( pSoldier, sAPCost, 0 );
ConvertGridNoToXY( pTSoldier->sGridNo, &sXPos, &sYPos );
if ( !(gTacticalStatus.uiFlags & INCOMBAT) || (gTacticalStatus.uiFlags & REALTIME) ) //lal
{
ConvertGridNoToXY( pTSoldier->sGridNo, &sXPos, &sYPos );
// Get direction from mouse pos
sFacingDir = GetDirectionFromXY( sXPos, sYPos, pSoldier );
// Get direction from mouse pos
sFacingDir = GetDirectionFromXY( sXPos, sYPos, pSoldier );
// Set our guy facing
SendSoldierSetDesiredDirectionEvent( pSoldier, sFacingDir );
// Set our guy facing
SendSoldierSetDesiredDirectionEvent( pSoldier, sFacingDir );
// Set NPC facing
SendSoldierSetDesiredDirectionEvent( pTSoldier, gOppositeDirection[ sFacingDir ] );
// Stop our guys...
EVENT_StopMerc( pSoldier, pSoldier->sGridNo, pSoldier->bDirection );
// Set NPC facing
SendSoldierSetDesiredDirectionEvent( pTSoldier, gOppositeDirection[ sFacingDir ] );
// Stop our guys...
EVENT_StopMerc( pSoldier, pSoldier->sGridNo, pSoldier->bDirection );
}
pTMilitiaSoldier = pTSoldier; //lal
//lal
// ATE; Check for normal civs...
if ( GetCivType( pTSoldier ) != CIV_TYPE_NA )
{
StartCivQuote( pTSoldier );
return( FALSE );
//lal
if ( ( pTSoldier->bTeam == MILITIA_TEAM ) && ( fAllowTacticalMilitiaCommand == TRUE ) )
{
PopupMilitiaControlMenu( pTSoldier );
return( FALSE );
}
else
{
StartCivQuote( pTSoldier );
return( FALSE );
}
}
// Are we an EPC that is being escorted?
if ( pTSoldier->ubProfile != NO_PROFILE && pTSoldier->ubWhatKindOfMercAmI == MERC_TYPE__EPC )
{
+14
View File
@@ -227,6 +227,7 @@ UINT8 gubCheatLevel = STARTING_CHEAT_LEVEL;
extern void DetermineWhichAssignmentMenusCanBeShown( void );
extern void DetermineWhichMilitiaControlMenusCanBeShown( void ); //lal
void GetTBMouseButtonInput( UINT32 *puiNewEvent )
{
@@ -4985,3 +4986,16 @@ void PopupAssignmentMenuInTactical( SOLDIERTYPE *pSoldier )
fFirstClickInAssignmentScreenMask = TRUE;
gfIgnoreScrolling = TRUE;
}
//lal
void PopupMilitiaControlMenu( SOLDIERTYPE *pSoldier )
{
// do something
fShowMilitiaControlMenu = TRUE;
CreateDestroyMilitiaControlPopUpBoxes( );
SetTacticalPopUpMilitiaControlBoxXY( pSoldier );
DetermineMilitiaControlBoxPositions();
DetermineWhichMilitiaControlMenusCanBeShown( );
fFirstClickInMilitiaControlScreenMask = TRUE;
gfIgnoreScrolling = TRUE;
}
+22
View File
@@ -16,6 +16,10 @@
#include "Cursor Control.h"
#endif
//aim
extern UINT8 gubShowActionPointsInRed;
UINT8 gpShadesFromWhiteToRed[] = {FONT_MCOLOR_WHITE, FONT_MCOLOR_DKWHITE, FONT_MCOLOR_DKGRAY, FONT_MCOLOR_DKRED, FONT_MCOLOR_RED };
//aim
#define NUM_MOUSE_LEVELS 2
@@ -1451,6 +1455,16 @@ void DrawMouseText( )
SetFontBackground( FONT_MCOLOR_BLACK );
SetFontForeground( FONT_MCOLOR_WHITE );
SetFontShadow( DEFAULT_SHADOW );
//aim
if ( gubShowActionPointsInRed )
{
SetFontForeground( gpShadesFromWhiteToRed[ gubShowActionPointsInRed - 1 ] );
gubShowActionPointsInRed = 0;
}
else
SetFontForeground( FONT_MCOLOR_WHITE );
//aim
}
}
else
@@ -1460,6 +1474,14 @@ void DrawMouseText( )
if ( gfUIDisplayActionPointsBlack )
{
//aim
if ( gubShowActionPointsInRed )
{
SetFontForeground( gpShadesFromWhiteToRed[ gubShowActionPointsInRed - 1 ] );
gubShowActionPointsInRed = 0;
}
else
//aim
SetFontForeground( FONT_MCOLOR_WHITE );
SetFontShadow( DEFAULT_SHADOW );
}
+2
View File
@@ -14,6 +14,8 @@ extern UINT16 WeaponType[MAXITEMS][30];
extern UINT16 Message[][STRING_LENGTH];
extern UINT16 TeamTurnString[][STRING_LENGTH];
extern STR16 pMilitiaControlMenuStrings[]; //lal
//extern STR16 pTalkToAllMenuStrings[];
extern STR16 pAssignMenuStrings[];
extern STR16 pTrainingStrings[];
extern STR16 pTrainingMenuStrings[];