mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
Drivable Cars update (by anv):
- Streamlined vehicle controls - no more selecting driver and vehicle separately, switching displayed APs and other esoteric activities. To move vehicle just select its driver and you're good to go. If you click on vehicle in tactical, also its driver will be selected automatically. Besides driving car, driver can perform other actions normally. - Vehicle's APs, health and fuel are displayed on the steering wheel - thanks to Buggler for idea. Vehicle APs are treated as a resource (so if car changes driver mid-turn, it won't go any further than it would). - Added option Tactical Interface Settings > ADD_PASSENGER_TO_ANY_SQUAD. If you order passenger to exit vehicle by clicking on the seat belt, he'll be added to new squad, so if you ordered six passengers to exit one by one, you'd end up with six new squads. With ADD_PASSENGER_TO_ANY_SQUAD = TRUE, passenger will be added to any existing squad with empty slot if possible. - Added option Tactical Interface Settings > PASSENGER_LEAVING_SWITCH_TO_NEW_SQUAD. If you order passenger to exit vehicle by clicking on the seat belt, by default you get switched to his new squad. With PASSENGER_LEAVING_SWITCH_TO_NEW_SQUAD = FALSE you'll switch only if exiting passenger is the selected one. - Cosmetic fix: changed display above vehicle from "*Merc's name* (VEHICLE)" to "*Merc's name* (*Vehicle's name*)" and colour from yellow to white (since mercs in vehicle are controllable and yellow is reserved for mercs on assignments). - Fixed passengers rotation. Again. - Fixed vehicles getting "tired" - lowered APs due to fuel below max. They can move the same as long as they have any fuel. - Fixed unrelated bug: clicking on any empty slot in team panel would select merc with id 0. - Fixed unrelated bug: switching to squad with less mercs would cause team panel to still show skill tooltips for mercs from previous squad on empty slots. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7204 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+54
-16
@@ -1459,6 +1459,7 @@ UINT32 UIHandleSelectMerc( UI_EVENT *pUIEvent )
|
||||
UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SOLDIERTYPE *pVehicle;
|
||||
INT32 usMapPos;
|
||||
BOOLEAN fSetCursor = FALSE;
|
||||
UINT32 uiCursorFlags;
|
||||
@@ -1466,6 +1467,7 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
|
||||
EXITGRID ExitGrid;
|
||||
INT32 sIntTileGridNo;
|
||||
ITEM_POOL *pItemPool;
|
||||
BOOLEAN fVehicleDriver = FALSE;
|
||||
|
||||
static INT32 sGridNoForItemsOver;
|
||||
static INT8 bLevelForItemsOver;
|
||||
@@ -1477,22 +1479,9 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
|
||||
gUIActionModeChangeDueToMouseOver = FALSE;
|
||||
|
||||
// If we are a vehicle..... just show an X
|
||||
//if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
//{
|
||||
// if ( ( OK_ENTERABLE_VEHICLE( pSoldier ) ) )
|
||||
// {
|
||||
// if ( !UIHandleOnMerc( TRUE ) )
|
||||
// {
|
||||
// guiNewUICursor = FLOATING_X_UICURSOR;
|
||||
// return( GAME_SCREEN );
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
// If we are a passenger or driver just show an X
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
if ( !gGameExternalOptions.fAllowDrivingVehiclesInTactical && GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if ( ( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER )) )
|
||||
if ( ( OK_ENTERABLE_VEHICLE( pSoldier ) ) )
|
||||
{
|
||||
if ( !UIHandleOnMerc( TRUE ) )
|
||||
{
|
||||
@@ -1502,6 +1491,24 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
|
||||
}
|
||||
}
|
||||
|
||||
// If we are a passenger or driver just show an X
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if ( ( pSoldier->flags.uiStatusFlags & ( SOLDIER_PASSENGER )) )
|
||||
{
|
||||
if ( !UIHandleOnMerc( TRUE ) )
|
||||
{
|
||||
guiNewUICursor = FLOATING_X_UICURSOR;
|
||||
return( GAME_SCREEN );
|
||||
}
|
||||
}
|
||||
else if ( pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER ) )
|
||||
{
|
||||
pVehicle = GetSoldierStructureForVehicle( pSoldier->iVehicleId );
|
||||
fVehicleDriver = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// CHECK IF WE'RE ON A GUY ( EITHER SELECTED, OURS, OR THEIRS
|
||||
if ( !UIHandleOnMerc( TRUE ) )
|
||||
{
|
||||
@@ -1572,6 +1579,11 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
|
||||
// Get Soldier Pointer
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
if( fVehicleDriver )
|
||||
{
|
||||
pSoldier = pVehicle;
|
||||
}
|
||||
|
||||
// Get interactvie tile node
|
||||
pIntNode = GetCurInteractiveTileGridNo( &sIntTileGridNo );
|
||||
|
||||
@@ -1879,6 +1891,11 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent )
|
||||
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if( pSoldier->flags.uiStatusFlags & SOLDIER_DRIVER )
|
||||
{
|
||||
pSoldier = GetSoldierStructureForVehicle( MercPtrs[ gusSelectedSoldier ]->iVehicleId );
|
||||
}
|
||||
|
||||
pInvTile = GetCurInteractiveTile( );
|
||||
|
||||
if ( pInvTile && gpInvTileThatCausedMoveConfirm != pInvTile )
|
||||
@@ -2026,6 +2043,12 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
|
||||
// Get soldier
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
// anv: if we selected vehicle driver, move his vehicle
|
||||
if ( pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER ) )
|
||||
{
|
||||
pSoldier = GetSoldierStructureForVehicle( MercPtrs[ pSoldier->ubID ]->iVehicleId );
|
||||
}
|
||||
|
||||
// CHRISL: This block should only run if we're running in the new inventory system
|
||||
if((UsingNewInventorySystem() == true))
|
||||
{
|
||||
@@ -3196,6 +3219,16 @@ UINT32 UIHandleHCOnTerrain( UI_EVENT *pUIEvent )
|
||||
return( GAME_SCREEN );
|
||||
}
|
||||
|
||||
// If we are a passenger or driver just show an ?
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if ( ( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_DRIVER | SOLDIER_PASSENGER )) )
|
||||
{
|
||||
guiNewUICursor = INVALID_ACTION_UICURSOR;
|
||||
return( GAME_SCREEN );
|
||||
}
|
||||
}
|
||||
|
||||
// If we are out of breath, no cursor...
|
||||
if ( pSoldier->bBreath < OKBREATH && pSoldier->bCollapsed )
|
||||
{
|
||||
@@ -3498,6 +3531,11 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ];
|
||||
|
||||
if( pSoldier->flags.uiStatusFlags & SOLDIER_DRIVER )
|
||||
{
|
||||
pSoldier = GetSoldierStructureForVehicle( pSoldier->iVehicleId );
|
||||
}
|
||||
|
||||
// Is this a valid stance for our position?
|
||||
if ( !IsValidStance( pSoldier, bNewStance ) )
|
||||
{
|
||||
@@ -4979,7 +5017,7 @@ BOOLEAN MakeSoldierTurn( SOLDIERTYPE *pSoldier, INT16 sXPos, INT16 sYPos )
|
||||
INT32 iBPCpst = 0;
|
||||
|
||||
// Make sure the merc is not collapsed!
|
||||
if (!IsValidStance(pSoldier, ANIM_CROUCH) )
|
||||
if (!IsValidStance(pSoldier, ANIM_CROUCH) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) && !IsValidStance(pSoldier, ANIM_STAND) ) )
|
||||
{
|
||||
if ( pSoldier->bCollapsed && pSoldier->bBreath < OKBREATH )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user