Driveable vehicle Update: Externalized vehicle seats (by anv)

- externalised vehicle seats (TableData\Vehicles.xml) influence position of passenger, field of view, ability to shoot and being hidden,
- seat can chosen by using ctrl+RMB on vehicle (ctrl + LMB just takes the first visible seat)
- seats can be changed or swapped while inside vehicle,
- remade JSD files for cars,
- vehicles aren't transparent anymore,
- vehicles are louder than people, depending how fast they move.
see: http://www.bears-pit.com/board/ubbthreads.php/topics/332790/5.html


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7212 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2014-05-18 15:26:15 +00:00
parent cf1b9982ba
commit bbff053fc5
35 changed files with 1209 additions and 144 deletions
+27 -20
View File
@@ -11,6 +11,25 @@
extern std::vector<INT8> gubVehicleMovementGroups;
#define MAX_MAIN_VEHICLE_CHARS 500
typedef struct
{
UINT8 ubSeatIndex; // index inside a vehicle (corresponding to .pPassengers[counter])
CHAR16 zSeatName[20]; // name (to display on entering menu and on team panel)
BOOLEAN fDriver; // seat has to be taken to steer the vehicle
BOOLEAN fBlockedView; // can't look out of vehicle
BOOLEAN fBlockedShots; // can't shoot from this seat
BOOLEAN fSeatBelt; // for collisions
BOOLEAN fHidden; // merc on this seat is invisible from outside - spy as a driver smuggling in others?
UINT8 ubRotation; // initial rotation in relation to vehicle
INT8 bOffsetX; // X offset of seat grid, relative to vehicle middle
INT8 bOffsetY; // Y offset of seat grid, relative to vehicle middle
UINT8 ubCoverage; // influence probability vehicle will be hit instead of passenger
UINT8 ubCompartment; // passenger can switch to another seat in the same compartment without exiting vehicle
UINT8 ubStructureLink; // link to physical part of structure (for hit calculations)
UINT32 usMountedGun; // passenger on this seat will use this gun instead of his own, link to Items.xml
} VEHICLE_SEAT;
typedef struct
{
UINT8 uiIndex;
@@ -30,27 +49,10 @@ typedef struct
CHAR16 NewShortVehicleStrings[128];
INT32 NewCarPortraits;
BOOLEAN NewUsed;
VEHICLE_SEAT VehicleSeats[10];
} NEW_CAR;
typedef struct
{
UINT8 ubSeatIndex; // index inside a vehicle (corresponding to .pPassengers[counter])
CHAR16 zSeatName[16]; // name (to display on entering menu and on team panel)
BOOLEAN fDriver; // seat has to be taken to steer the vehicle
BOOLEAN fView; // can look out of vehicle
BOOLEAN fDriveBy; // can shoot from this seat
BOOLEAN fSeatBelt; // for collisions
BOOLEAN fHidden; // merc on this seat is invisible from outside - spy as a driver smuggling in others?
UINT8 ubRotation; // rotation in relation to vehicle
UINT8 ubTunnelVision; // tunnel vision (small windows, etc.)
UINT8 ubProtection; // influence probability vehicle will be hit instead of passenger
UINT8 ubCompartment; // passenger can switch to another seat in the same compartment without exiting vehicle
UINT8 ubStructureLink; // link to physical part of structure (for hit calculations)
UINT32 usMountedGun; // passenger on this seat will use this gun instead of his own, link to Items.xml
} VEHICLE_SEAT;
extern NEW_CAR gNewVehicle[NUM_PROFILES];
extern BOOLEAN LoadNewVehiclesToSaveGameFile( HWFILE hFile );
@@ -331,7 +333,7 @@ BOOLEAN AnyAccessibleVehiclesInSoldiersSector( SOLDIERTYPE *pSoldier );
BOOLEAN IsThisVehicleAccessibleToSoldier( SOLDIERTYPE *pSoldier, INT32 iId );
// add soldier to Vehicle
BOOLEAN AddSoldierToVehicle( SOLDIERTYPE *pSoldier, INT32 iId, BOOLEAN fSpecificSeat = FALSE, UINT8 ubSeatIndex = 0 );
BOOLEAN AddSoldierToVehicle( SOLDIERTYPE *pSoldier, INT32 iId, UINT8 ubSeatIndex = 0 );
// remove soldier from vehicle
BOOLEAN RemoveSoldierFromVehicle( SOLDIERTYPE *pSoldier, INT32 iId );
@@ -387,7 +389,7 @@ INT32 GetNumberInVehicle( INT32 iId );
// grab # in vehicle skipping EPCs (who aren't allowed to drive :-)
INT32 GetNumberOfNonEPCsInVehicle( INT32 iId );
BOOLEAN EnterVehicle( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, BOOLEAN fSpecificSeat = FALSE, UINT8 ubSeatIndex = 0 );
BOOLEAN EnterVehicle( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubSeatIndex = 0 );
SOLDIERTYPE *GetDriver( INT32 iID );
@@ -395,6 +397,9 @@ void SetVehicleName( SOLDIERTYPE *pVehicle );
BOOLEAN ExitVehicle( SOLDIERTYPE *pSoldier );
BOOLEAN ChangeVehicleSeat( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubSeatIndex );
BOOLEAN SwapVehicleSeat( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubSeatIndex );
void AddPassangersToTeamPanel( INT32 iId );
@@ -456,6 +461,8 @@ BOOLEAN IsEnoughSpaceInVehicle( INT32 iID );
BOOLEAN IsSoldierInThisVehicleSquad( SOLDIERTYPE *pSoldier, INT8 bSquadNumber );
INT8 GetSeatIndexFromSoldier( SOLDIERTYPE *pSoldier );
SOLDIERTYPE* PickRandomPassengerFromVehicle( SOLDIERTYPE *pSoldier );
BOOLEAN DoesVehicleHaveAnyPassengers( INT32 iVehicleID );