mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 03:42:34 +01:00
- lay tyre tracks only if wheels on ground
- new SurfaceType enum
This commit is contained in:
parent
2a9fd24865
commit
973729f117
@ -11,9 +11,9 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "ASM/d2mapasm.h"
|
#include "ASM/d2mapasm.h"
|
||||||
|
|
||||||
sdPlane default_plane = { 0, 0, 0, 0, 2048 };
|
sdPlane default_plane = { SURF_CONCRETE, 0, 0, 0, 2048 };
|
||||||
|
|
||||||
sdPlane sea_plane = { 9, 0, 16384, 0, 2048 }; // a default surface if FindSurfaceD2 fails
|
sdPlane sea_plane = { SURF_DEEPWATER, 0, 16384, 0, 2048 }; // a default surface if FindSurfaceD2 fails
|
||||||
|
|
||||||
sdPlane* GetSeaPlane()
|
sdPlane* GetSeaPlane()
|
||||||
{
|
{
|
||||||
|
@ -1511,7 +1511,7 @@ void CheckCarEffects(CAR_DATA* cp, int player_id)
|
|||||||
for (cnt = 0; cnt < 4; cnt++)
|
for (cnt = 0; cnt < 4; cnt++)
|
||||||
{
|
{
|
||||||
if (cp->hd.wheel[cnt].susCompression != 0)
|
if (cp->hd.wheel[cnt].susCompression != 0)
|
||||||
wheels_on_ground = 1;
|
wheels_on_ground |= 1 << cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
skidsound = 0;
|
skidsound = 0;
|
||||||
@ -1523,7 +1523,7 @@ void CheckCarEffects(CAR_DATA* cp, int player_id)
|
|||||||
rear_vel = ABS(cp->hd.rear_vel);
|
rear_vel = ABS(cp->hd.rear_vel);
|
||||||
front_vel = ABS(cp->hd.front_vel);
|
front_vel = ABS(cp->hd.front_vel);
|
||||||
|
|
||||||
if (rear_vel > 15000 || cp->wheelspin)
|
if ((wheels_on_ground & 5) && (rear_vel > 15000 || cp->wheelspin))
|
||||||
{
|
{
|
||||||
lay_down_tracks |= 1;
|
lay_down_tracks |= 1;
|
||||||
|
|
||||||
@ -1536,7 +1536,7 @@ void CheckCarEffects(CAR_DATA* cp, int player_id)
|
|||||||
skidsound = 13000;
|
skidsound = 13000;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (front_vel > 15000)
|
if ((wheels_on_ground & 10) && front_vel > 15000)
|
||||||
{
|
{
|
||||||
lay_down_tracks |= 2;
|
lay_down_tracks |= 2;
|
||||||
}
|
}
|
||||||
@ -1667,18 +1667,21 @@ void CheckCarEffects(CAR_DATA* cp, int player_id)
|
|||||||
// make tyre tracks
|
// make tyre tracks
|
||||||
GetTyreTrackPositions(cp, player_id);
|
GetTyreTrackPositions(cp, player_id);
|
||||||
|
|
||||||
|
#define ADD_WHEEL_TYRE_TRACK(wheelNum, trackIdx) \
|
||||||
|
if (wheels_on_ground & (1 << wheelNum)) { \
|
||||||
|
AddTyreTrack(trackIdx, tracks_and_smoke, player_id, last_track_state[player_id][trackIdx] != -1); \
|
||||||
|
last_track_state[player_id][trackIdx] = 1; \
|
||||||
|
} else \
|
||||||
|
last_track_state[player_id][trackIdx] = -1;
|
||||||
|
|
||||||
if (lay_down_tracks & 1) // rear
|
if (lay_down_tracks & 1) // rear
|
||||||
{
|
{
|
||||||
#if MAX_TYRE_TRACK_WHEELS == 4
|
#if MAX_TYRE_TRACK_WHEELS == 4
|
||||||
AddTyreTrack(0, tracks_and_smoke, player_id, last_track_state[player_id][0] != -1);
|
ADD_WHEEL_TYRE_TRACK(0, 0)
|
||||||
AddTyreTrack(2, tracks_and_smoke, player_id, last_track_state[player_id][2] != -1);
|
ADD_WHEEL_TYRE_TRACK(2, 2)
|
||||||
last_track_state[player_id][0] = 1;
|
|
||||||
last_track_state[player_id][2] = 1;
|
|
||||||
#else
|
#else
|
||||||
AddTyreTrack(0, tracks_and_smoke, player_id, last_track_state[player_id][0] != -1);
|
ADD_WHEEL_TYRE_TRACK(0, 0)
|
||||||
AddTyreTrack(1, tracks_and_smoke, player_id, last_track_state[player_id][1] != -1);
|
ADD_WHEEL_TYRE_TRACK(2, 1)
|
||||||
last_track_state[player_id][0] = 1;
|
|
||||||
last_track_state[player_id][1] = 1;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1695,17 +1698,17 @@ void CheckCarEffects(CAR_DATA* cp, int player_id)
|
|||||||
#if MAX_TYRE_TRACK_WHEELS == 4
|
#if MAX_TYRE_TRACK_WHEELS == 4
|
||||||
if (lay_down_tracks & 2) // front
|
if (lay_down_tracks & 2) // front
|
||||||
{
|
{
|
||||||
AddTyreTrack(1, tracks_and_smoke, player_id, last_track_state[player_id][1] != -1);
|
ADD_WHEEL_TYRE_TRACK(1, 1)
|
||||||
AddTyreTrack(3, tracks_and_smoke, player_id, last_track_state[player_id][3] != -1);
|
ADD_WHEEL_TYRE_TRACK(3, 3)
|
||||||
last_track_state[player_id][1] = 1;
|
|
||||||
last_track_state[player_id][3] = 1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
last_track_state[player_id][1] = -1;
|
last_track_state[player_id][1] = -1;
|
||||||
last_track_state[player_id][3] = -1;
|
last_track_state[player_id][3] = -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#undef ADD_WHEEL_TYRE_TRACK
|
||||||
|
|
||||||
SetTyreTrackOldPositions(player_id);
|
SetTyreTrackOldPositions(player_id);
|
||||||
}
|
}
|
||||||
|
@ -137,10 +137,10 @@ void AddTyreTrack(int wheel, int tracksAndSmoke, int player_id, int continuous_t
|
|||||||
// check surface type
|
// check surface type
|
||||||
if (SurfaceDataPtr != NULL)
|
if (SurfaceDataPtr != NULL)
|
||||||
{
|
{
|
||||||
if (SurfaceDataPtr->surface == 6)
|
if (SurfaceDataPtr->surface == SURF_WATER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (SurfaceDataPtr->surface == 4)
|
if (SurfaceDataPtr->surface == SURF_GRASS)
|
||||||
{
|
{
|
||||||
tt_p->surface = 2;
|
tt_p->surface = 2;
|
||||||
player[player_id].onGrass = 1;
|
player[player_id].onGrass = 1;
|
||||||
@ -162,10 +162,10 @@ void AddTyreTrack(int wheel, int tracksAndSmoke, int player_id, int continuous_t
|
|||||||
SurfaceDataPtr = sdGetCell(newtp);
|
SurfaceDataPtr = sdGetCell(newtp);
|
||||||
trackSurface = 1;
|
trackSurface = 1;
|
||||||
|
|
||||||
if (SurfaceDataPtr->surface == 6)
|
if (SurfaceDataPtr->surface == SURF_WATER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (SurfaceDataPtr->surface == 4)
|
if (SurfaceDataPtr->surface == SURF_GRASS)
|
||||||
trackSurface = 2;
|
trackSurface = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ void AddWheelForcesDriver1(CAR_DATA* cp, CAR_LOCALS* cl)
|
|||||||
friction_coef = (newCompression * (32400 - wetness) >> 15) + 500;
|
friction_coef = (newCompression * (32400 - wetness) >> 15) + 500;
|
||||||
|
|
||||||
if (SurfacePtr != NULL)
|
if (SurfacePtr != NULL)
|
||||||
wheel->onGrass = SurfacePtr->surface == 4;
|
wheel->onGrass = SurfacePtr->surface == SURF_GRASS;
|
||||||
else
|
else
|
||||||
wheel->onGrass = 0;
|
wheel->onGrass = 0;
|
||||||
|
|
||||||
@ -261,10 +261,10 @@ void AddWheelForcesDriver1(CAR_DATA* cp, CAR_LOCALS* cl)
|
|||||||
{
|
{
|
||||||
switch (SurfacePtr->surface)
|
switch (SurfacePtr->surface)
|
||||||
{
|
{
|
||||||
case 4:
|
case SURF_GRASS:
|
||||||
case 6:
|
case SURF_WATER:
|
||||||
case 9:
|
case SURF_DEEPWATER:
|
||||||
case 11:
|
case SURF_SAND:
|
||||||
wheel->surface = 0x80;
|
wheel->surface = 0x80;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -277,14 +277,14 @@ void AddWheelForcesDriver1(CAR_DATA* cp, CAR_LOCALS* cl)
|
|||||||
|
|
||||||
switch (SurfacePtr->surface)
|
switch (SurfacePtr->surface)
|
||||||
{
|
{
|
||||||
case 8:
|
case SURF_ALLEY:
|
||||||
wheel->surface |= 0x2;
|
wheel->surface |= 0x2;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case SURF_WATER:
|
||||||
case 9:
|
case SURF_DEEPWATER:
|
||||||
wheel->surface |= 0x1;
|
wheel->surface |= 0x1;
|
||||||
break;
|
break;
|
||||||
case 11:
|
case SURF_SAND:
|
||||||
wheel->surface |= 0x3;
|
wheel->surface |= 0x3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -697,7 +697,7 @@ void StepOneCar(CAR_DATA* cp)
|
|||||||
Setup_Debris((VECTOR*)&deepestPoint, &direction, 10, 0);
|
Setup_Debris((VECTOR*)&deepestPoint, &direction, 10, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SurfacePtr && (SurfacePtr->surface != 9) && (SurfacePtr->surface != 6))
|
if (SurfacePtr && (SurfacePtr->surface != SURF_DEEPWATER) && (SurfacePtr->surface != SURF_WATER))
|
||||||
{
|
{
|
||||||
CollisionSound(GetPlayerId(cp), cp, (impulse / 6 + (impulse >> 0x1f) >> 3) - (impulse >> 0x1f), 0);
|
CollisionSound(GetPlayerId(cp), cp, (impulse / 6 + (impulse >> 0x1f) >> 3) - (impulse >> 0x1f), 0);
|
||||||
}
|
}
|
||||||
|
@ -152,12 +152,20 @@ struct DRIVER2_JUNCTION
|
|||||||
u_int flags;
|
u_int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum SurfaceType
|
||||||
|
{
|
||||||
|
SURF_CONCRETE = 0, // concrete/paved tiles
|
||||||
|
SURF_GRASS = 4,
|
||||||
|
SURF_WATER = 6,
|
||||||
|
SURF_ALLEY = 8,
|
||||||
|
SURF_DEEPWATER = 9,
|
||||||
|
SURF_SAND = 11,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct _sdPlane
|
typedef struct _sdPlane
|
||||||
{
|
{
|
||||||
short surface;
|
short surface; // also one of SurfaceTypes
|
||||||
short a;
|
short a, b, c;
|
||||||
short b;
|
|
||||||
short c;
|
|
||||||
int d;
|
int d;
|
||||||
} sdPlane;
|
} sdPlane;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user