mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-20 19:02:37 +00:00
New Drift dust
Applies all the time as long as the object is turning tight enough New Sound Works on Red Shells too!
This commit is contained in:
parent
dd05edfcc0
commit
f00e3dfd5a
10 changed files with 112 additions and 34 deletions
|
@ -6235,11 +6235,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_DRIFTSPARK6",
|
||||
|
||||
// Drift Smoke
|
||||
"S_DRIFTSMOKE1",
|
||||
"S_DRIFTSMOKE2",
|
||||
"S_DRIFTSMOKE3",
|
||||
"S_DRIFTSMOKE4",
|
||||
"S_DRIFTSMOKE5",
|
||||
"S_DRIFTDUST1",
|
||||
"S_DRIFTDUST2",
|
||||
"S_DRIFTDUST3",
|
||||
"S_DRIFTDUST4",
|
||||
|
||||
// Magnet Burst
|
||||
|
||||
|
@ -7109,7 +7108,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
|
||||
"MT_MUSHROOMTRAIL",
|
||||
"MT_DRIFT",
|
||||
"MT_DRIFTSMOKE",
|
||||
"MT_DRIFTDUST",
|
||||
|
||||
"MT_FAKESHIELD",
|
||||
"MT_FAKEITEM",
|
||||
|
|
21
src/info.c
21
src/info.c
|
@ -55,7 +55,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI",
|
||||
"SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO",
|
||||
//SRB2kart Sprites
|
||||
"SPRG","BSPR","RNDM","RPOP","KFRE","DRIF","DSMO","FITM","DFAK","BANA",
|
||||
"SPRG","BSPR","RNDM","RPOP","KFRE","DRIF","DUST","FITM","DFAK","BANA",
|
||||
"DBAN","GSHE","DGSH","RSHE","DRSH","BOMB","KRBM","BLIG","LIGH","SINK",
|
||||
"SITR","KBLN","LAKI","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS",
|
||||
"BUZB","CHOM","SACO","CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO",
|
||||
|
@ -2578,11 +2578,10 @@ state_t states[NUMSTATES] =
|
|||
{SPR_DRIF, 4, 2, {NULL}, 0, 0, S_DRIFTSPARK6}, // S_DRIFTSPARK5
|
||||
{SPR_DRIF, 5, 2, {NULL}, 0, 0, S_DRIFTSPARK4}, // S_DRIFTSPARK6
|
||||
|
||||
{SPR_DSMO, FF_TRANS50|0, 2, {NULL}, 0, 0, S_DRIFTSMOKE2}, // S_DRIFTSMOKE1
|
||||
{SPR_DSMO, FF_TRANS50|1, 2, {NULL}, 0, 0, S_DRIFTSMOKE3}, // S_DRIFTSMOKE2
|
||||
{SPR_DSMO, FF_TRANS50|2, 2, {NULL}, 0, 0, S_DRIFTSMOKE4}, // S_DRIFTSMOKE3
|
||||
{SPR_DSMO, FF_TRANS50|3, 2, {NULL}, 0, 0, S_DRIFTSMOKE5}, // S_DRIFTSMOKE4
|
||||
{SPR_DSMO, FF_TRANS50|4, 2, {NULL}, 0, 0, S_NULL}, // S_DRIFTSMOKE5
|
||||
{SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1
|
||||
{SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2
|
||||
{SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3
|
||||
{SPR_DUST, FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTDUST4
|
||||
|
||||
{SPR_NULL, 0, 10, {NULL}, 0, 0, S_KARTFIRE2}, // S_KARTFIRE1
|
||||
{SPR_KFRE, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KARTFIRE3}, // S_KARTFIRE2
|
||||
|
@ -14355,9 +14354,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DRIFTSMOKE
|
||||
{ // MT_DRIFTDUST
|
||||
-1, // doomednum
|
||||
S_DRIFTSMOKE1, // spawnstate
|
||||
S_DRIFTDUST1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
@ -14372,13 +14371,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
8, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
8*FRACUNIT, // radius
|
||||
15*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_FLOAT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
|
13
src/info.h
13
src/info.h
|
@ -582,7 +582,7 @@ typedef enum sprite
|
|||
SPR_RPOP, // Random Item Box Pop
|
||||
SPR_KFRE, // Mushroom fire trail
|
||||
SPR_DRIF, // Drift Sparks
|
||||
SPR_DSMO, // Drift Smoke
|
||||
SPR_DUST, // Drift Dust
|
||||
|
||||
// Kart Items
|
||||
SPR_FITM, // Fake Item box
|
||||
|
@ -3078,11 +3078,10 @@ typedef enum state
|
|||
S_DRIFTSPARK6,
|
||||
|
||||
// Drift Smoke
|
||||
S_DRIFTSMOKE1,
|
||||
S_DRIFTSMOKE2,
|
||||
S_DRIFTSMOKE3,
|
||||
S_DRIFTSMOKE4,
|
||||
S_DRIFTSMOKE5,
|
||||
S_DRIFTDUST1,
|
||||
S_DRIFTDUST2,
|
||||
S_DRIFTDUST3,
|
||||
S_DRIFTDUST4,
|
||||
|
||||
// Magnet Burst
|
||||
|
||||
|
@ -3969,7 +3968,7 @@ typedef enum mobj_type
|
|||
|
||||
MT_MUSHROOMTRAIL,
|
||||
MT_DRIFT,
|
||||
MT_DRIFTSMOKE,
|
||||
MT_DRIFTDUST,
|
||||
|
||||
MT_FAKESHIELD,
|
||||
MT_FAKEITEM,
|
||||
|
|
68
src/k_kart.c
68
src/k_kart.c
|
@ -1834,7 +1834,7 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void K_SpawnDriftTrail(player_t *player)
|
||||
void K_SpawnBoostTrail(player_t *player)
|
||||
{
|
||||
fixed_t newx;
|
||||
fixed_t newy;
|
||||
|
@ -1874,10 +1874,7 @@ void K_SpawnDriftTrail(player_t *player)
|
|||
ground -= FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale);
|
||||
}
|
||||
#endif
|
||||
if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_mushroomtimer] == 0)
|
||||
flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE);
|
||||
else
|
||||
flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL);
|
||||
flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL);
|
||||
|
||||
P_SetTarget(&flame->target, player->mo);
|
||||
flame->angle = travelangle;
|
||||
|
@ -1901,6 +1898,67 @@ void K_SpawnDriftTrail(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
// K_DriftDustHandling
|
||||
// Parameters:
|
||||
// spawner: The map object that is spawning the drift dust
|
||||
// Description: Spawns the drift dust for objects, players use rmomx/y, other objects use regular momx/y.
|
||||
// Also plays the drift sound.
|
||||
// Other objects should be angled towards where they're trying to go so they don't randomly spawn dust
|
||||
// Do note that most of the function won't run in odd intervals of frames
|
||||
void K_DriftDustHandling(mobj_t *spawner)
|
||||
{
|
||||
angle_t anglediff;
|
||||
const INT16 spawnrange = spawner->radius>>FRACBITS;
|
||||
|
||||
if (!P_IsObjectOnGround(spawner) || leveltime % 2 != 0)
|
||||
return;
|
||||
|
||||
if (spawner->player)
|
||||
{
|
||||
angle_t playerangle;
|
||||
|
||||
if (spawner->player->speed < 5<<FRACBITS)
|
||||
return;
|
||||
|
||||
if (spawner->player->cmd.forwardmove < 0)
|
||||
{
|
||||
playerangle = spawner->angle+ANGLE_180;
|
||||
}
|
||||
else
|
||||
{
|
||||
playerangle = spawner->angle;
|
||||
}
|
||||
anglediff = abs(playerangle - R_PointToAngle2(0, 0, spawner->player->rmomx, spawner->player->rmomy));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (P_AproxDistance(spawner->momx, spawner->momy) < 5<<FRACBITS)
|
||||
return;
|
||||
|
||||
anglediff = abs(spawner->angle - R_PointToAngle2(0, 0, spawner->momx, spawner->momy));
|
||||
}
|
||||
|
||||
if (anglediff > ANGLE_180)
|
||||
anglediff = InvAngle(anglediff);
|
||||
|
||||
if (anglediff > ANG10*4) // Trying to turn further than 40 degrees
|
||||
{
|
||||
fixed_t spawnx = P_RandomRange(-spawnrange, spawnrange)<<FRACBITS;
|
||||
fixed_t spawny = P_RandomRange(-spawnrange, spawnrange)<<FRACBITS;
|
||||
INT32 speedrange = 2;
|
||||
mobj_t *dust = P_SpawnMobj(spawner->x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST);
|
||||
dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
||||
dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
||||
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
|
||||
dust->scale = spawner->scale/2;
|
||||
dust->destscale = spawner->scale * 3;
|
||||
if (leveltime % 6 == 0)
|
||||
{
|
||||
S_StartSound(spawner, sfx_screec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean bobombthrow)
|
||||
{
|
||||
mobj_t *mo;
|
||||
|
|
|
@ -29,7 +29,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source);
|
|||
void K_StealBalloon(player_t *player, player_t *victim, boolean force);
|
||||
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source);
|
||||
void K_SpawnBobombExplosion(mobj_t *source, UINT8 color);
|
||||
void K_SpawnDriftTrail(player_t *player);
|
||||
void K_SpawnBoostTrail(player_t *player);
|
||||
void K_DriftDustHandling(mobj_t *spawner);
|
||||
void K_DoMushroom(player_t *player, boolean doPFlag);
|
||||
void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed);
|
||||
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
||||
|
|
|
@ -2086,7 +2086,17 @@ static int lib_kSpawnDriftTrail(lua_State *L)
|
|||
NOHUD
|
||||
if (!player)
|
||||
return LUA_ErrInvalid(L, "player_t");
|
||||
K_SpawnDriftTrail(player);
|
||||
K_SpawnBoostTrail(player);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kDriftDustHandling(lua_State *L)
|
||||
{
|
||||
mobj_t *spawner = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
NOHUD
|
||||
if (!spawner)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_DriftDustHandling(spawner);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2334,7 +2344,8 @@ static luaL_Reg lib[] = {
|
|||
{"K_ExplodePlayer",lib_kExplodePlayer},
|
||||
{"K_StealBalloon",lib_kStealBalloon},
|
||||
{"K_SpawnKartExplosion",lib_kSpawnKartExplosion},
|
||||
{"K_SpawnDriftTrail",lib_kSpawnDriftTrail},
|
||||
{"K_SpawnBoostTrail",lib_kSpawnDriftTrail},
|
||||
{"K_DriftDustHandling",lib_kDriftDustHandling},
|
||||
{"K_DoMushroom",lib_kDoMushroom},
|
||||
{"K_DoBouncePad",lib_kDoBouncePad},
|
||||
{"K_MomentumToFacing",lib_kMomentumToFacing},
|
||||
|
|
|
@ -7902,6 +7902,13 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|
||||
P_InstaThrust(mobj, R_PointToAngle2(0, 0, mobj->momx, mobj->momy), topspeed);
|
||||
|
||||
if (mobj->tracer)
|
||||
mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->tracer->x, mobj->tracer->y);
|
||||
else
|
||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
||||
|
||||
K_DriftDustHandling(mobj);
|
||||
|
||||
sec2 = P_ThingOnSpecial3DFloor(mobj);
|
||||
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|
||||
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
|
||||
|
|
|
@ -7093,8 +7093,10 @@ static void P_MovePlayer(player_t *player)
|
|||
////////////////////////////
|
||||
|
||||
// SRB2kart - Drifting smoke and fire
|
||||
if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1))
|
||||
K_SpawnDriftTrail(player);
|
||||
if (player->kartstuff[k_mushroomtimer] > 0 && onground && (leveltime & 1))
|
||||
K_SpawnBoostTrail(player);
|
||||
|
||||
K_DriftDustHandling(player->mo);
|
||||
|
||||
/* // SRB2kart - nadah
|
||||
// If the player isn't on the ground, make sure they aren't in a "starting dash" position.
|
||||
|
|
|
@ -805,6 +805,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||
{"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||
{"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||
{"screec", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||
|
||||
// SRB2kart - Skin sounds
|
||||
{"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR},
|
||||
|
|
|
@ -877,6 +877,7 @@ typedef enum
|
|||
sfx_vroom,
|
||||
sfx_boing,
|
||||
sfx_smkinv,
|
||||
sfx_screec,
|
||||
|
||||
sfx_kwin,
|
||||
sfx_klose,
|
||||
|
|
Loading…
Reference in a new issue