mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-23 22:11:01 +00:00
Merge branch 'driftboost' into 'master'
Drift boost effects See merge request KartKrew/Kart!297
This commit is contained in:
commit
17b244969b
6 changed files with 302 additions and 22 deletions
|
|
@ -6585,6 +6585,39 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_DRIFTEXPLODE2",
|
||||
"S_DRIFTEXPLODE3",
|
||||
"S_DRIFTEXPLODE4",
|
||||
"S_DRIFTEXPLODE5",
|
||||
"S_DRIFTEXPLODE6",
|
||||
"S_DRIFTEXPLODE7",
|
||||
"S_DRIFTEXPLODE8",
|
||||
|
||||
// Drift boost clip
|
||||
"S_DRIFTCLIPA1",
|
||||
"S_DRIFTCLIPA2",
|
||||
"S_DRIFTCLIPA3",
|
||||
"S_DRIFTCLIPA4",
|
||||
"S_DRIFTCLIPA5",
|
||||
"S_DRIFTCLIPA6",
|
||||
"S_DRIFTCLIPA7",
|
||||
"S_DRIFTCLIPA8",
|
||||
"S_DRIFTCLIPA9",
|
||||
"S_DRIFTCLIPA10",
|
||||
"S_DRIFTCLIPA11",
|
||||
"S_DRIFTCLIPA12",
|
||||
"S_DRIFTCLIPA13",
|
||||
"S_DRIFTCLIPA14",
|
||||
"S_DRIFTCLIPA15",
|
||||
"S_DRIFTCLIPA16",
|
||||
"S_DRIFTCLIPB1",
|
||||
"S_DRIFTCLIPB2",
|
||||
"S_DRIFTCLIPB3",
|
||||
"S_DRIFTCLIPB4",
|
||||
"S_DRIFTCLIPB5",
|
||||
"S_DRIFTCLIPB6",
|
||||
"S_DRIFTCLIPB7",
|
||||
"S_DRIFTCLIPB8",
|
||||
|
||||
// Drift boost clip spark
|
||||
"S_DRIFTCLIPSPARK",
|
||||
|
||||
// Sneaker boost effect
|
||||
"S_BOOSTFLAME",
|
||||
|
|
@ -8093,6 +8126,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_FASTLINE",
|
||||
"MT_FASTDUST",
|
||||
"MT_DRIFTEXPLODE",
|
||||
"MT_DRIFTCLIP",
|
||||
"MT_DRIFTCLIPSPARK",
|
||||
"MT_BOOSTFLAME",
|
||||
"MT_BOOSTSMOKE",
|
||||
"MT_SNEAKERTRAIL",
|
||||
|
|
|
|||
96
src/info.c
96
src/info.c
|
|
@ -72,7 +72,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN",
|
||||
|
||||
"FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL","XMS4",
|
||||
"XMS5","FBUB","GCHA","CHEZ","VIEW"
|
||||
"XMS5","FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC","DBST",
|
||||
};
|
||||
|
||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||
|
|
@ -2560,10 +2560,42 @@ state_t states[NUMSTATES] =
|
|||
{SPR_DSHR, FF_PAPERSPRITE|5, 1, {NULL}, 0, 0, S_FASTDUST7}, // S_FASTDUST6
|
||||
{SPR_DSHR, FF_PAPERSPRITE|6, 1, {NULL}, 0, 0, S_NULL}, // S_FASTDUST7
|
||||
|
||||
{SPR_DBOS, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTEXPLODE2}, // S_DRIFTEXPLODE1
|
||||
{SPR_DBOS, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTEXPLODE3}, // S_DRIFTEXPLODE2
|
||||
{SPR_DBOS, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3
|
||||
{SPR_DBOS, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE4
|
||||
{SPR_DBOS, FF_FULLBRIGHT, 1, {NULL}, 6, 1, S_DRIFTEXPLODE2}, // S_DRIFTEXPLODE1
|
||||
{SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 6, 1, S_DRIFTEXPLODE3}, // S_DRIFTEXPLODE2
|
||||
{SPR_DBOS, FF_FULLBRIGHT|1, 1, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3
|
||||
{SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 6, 1, S_DRIFTEXPLODE5}, // S_DRIFTEXPLODE4
|
||||
{SPR_DBOS, FF_FULLBRIGHT|2, 1, {NULL}, 6, 1, S_DRIFTEXPLODE6}, // S_DRIFTEXPLODE5
|
||||
{SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 6, 1, S_DRIFTEXPLODE7}, // S_DRIFTEXPLODE6
|
||||
{SPR_DBOS, FF_FULLBRIGHT|3, 1, {NULL}, 6, 1, S_DRIFTEXPLODE8}, // S_DRIFTEXPLODE7
|
||||
{SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|3, 1, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE8
|
||||
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x0, 1, {NULL}, 6, 1, S_DRIFTCLIPA2}, // S_DRIFTCLIPA1
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x8, 1, {NULL}, 6, 1, S_DRIFTCLIPA3}, // S_DRIFTCLIPA2
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x1, 1, {NULL}, 6, 1, S_DRIFTCLIPA4}, // S_DRIFTCLIPA3
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x9, 1, {NULL}, 6, 1, S_DRIFTCLIPA5}, // S_DRIFTCLIPA4
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x2, 1, {NULL}, 6, 1, S_DRIFTCLIPA6}, // S_DRIFTCLIPA5
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xA, 1, {NULL}, 6, 1, S_DRIFTCLIPA7}, // S_DRIFTCLIPA6
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x3, 1, {NULL}, 6, 1, S_DRIFTCLIPA8}, // S_DRIFTCLIPA7
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xB, 1, {NULL}, 6, 1, S_DRIFTCLIPA9}, // S_DRIFTCLIPA8
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x4, 1, {NULL}, 6, 1, S_DRIFTCLIPA10}, // S_DRIFTCLIPA9
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xC, 1, {NULL}, 6, 1, S_DRIFTCLIPA11}, // S_DRIFTCLIPA10
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x5, 1, {NULL}, 6, 1, S_DRIFTCLIPA12}, // S_DRIFTCLIPA11
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xD, 1, {NULL}, 6, 1, S_DRIFTCLIPA13}, // S_DRIFTCLIPA12
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x6, 1, {NULL}, 6, 1, S_DRIFTCLIPA14}, // S_DRIFTCLIPA13
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xE, 1, {NULL}, 6, 1, S_DRIFTCLIPA15}, // S_DRIFTCLIPA14
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0x7, 1, {NULL}, 6, 1, S_DRIFTCLIPA16}, // S_DRIFTCLIPA15
|
||||
{SPR_DBCL, FF_FULLBRIGHT|0xF, 1, {NULL}, 6, 1, S_DRIFTCLIPB1}, // S_DRIFTCLIPA16
|
||||
|
||||
{SPR_DBCL, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTCLIPB2}, // S_DRIFTCLIPB1
|
||||
{SPR_DBCL, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTCLIPB3}, // S_DRIFTCLIPB2
|
||||
{SPR_DBCL, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTCLIPB4}, // S_DRIFTCLIPB3
|
||||
{SPR_DBCL, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTCLIPB5}, // S_DRIFTCLIPB4
|
||||
{SPR_DBCL, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTCLIPB6}, // S_DRIFTCLIPB5
|
||||
{SPR_DBCL, FF_FULLBRIGHT|5, 2, {NULL}, 6, 1, S_DRIFTCLIPB7}, // S_DRIFTCLIPB6
|
||||
{SPR_DBCL, FF_FULLBRIGHT|6, 2, {NULL}, 6, 1, S_DRIFTCLIPB8}, // S_DRIFTCLIPB7
|
||||
{SPR_DBCL, FF_FULLBRIGHT|7, 2, {NULL}, 6, 1, S_DRIFTCLIPB1}, // S_DRIFTCLIPB8
|
||||
|
||||
{SPR_DBNC, FF_FULLBRIGHT|FF_ANIMATE, 14, {NULL}, 6, 1, S_NULL}, // S_DRIFTCLIPSPARK
|
||||
|
||||
{SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME
|
||||
{SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER
|
||||
|
|
@ -15346,6 +15378,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DRIFTCLIP
|
||||
-1, // doomednum
|
||||
S_DRIFTCLIPA1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
105, // speed
|
||||
32*FRACUNIT, // radius
|
||||
64*FRACUNIT, // height
|
||||
1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_DONTENCOREMAP|MF_GRENADEBOUNCE|MF_BOUNCE, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DRIFTCLIPSPARK
|
||||
-1, // doomednum
|
||||
S_DRIFTCLIPSPARK, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
8, // speed
|
||||
32*FRACUNIT, // radius
|
||||
64*FRACUNIT, // height
|
||||
1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BOOSTFLAME
|
||||
-1, // doomednum
|
||||
S_BOOSTFLAME, // spawnstate
|
||||
|
|
|
|||
39
src/info.h
39
src/info.h
|
|
@ -811,6 +811,10 @@ typedef enum sprite
|
|||
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
||||
SPR_VIEW,
|
||||
|
||||
SPR_DBCL, // Drift boost clip
|
||||
SPR_DBNC, // Drift boost clip's sparks
|
||||
SPR_DBST, // Drift boost plume
|
||||
|
||||
SPR_FIRSTFREESLOT,
|
||||
SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
|
||||
NUMSPRITES
|
||||
|
|
@ -3246,6 +3250,39 @@ typedef enum state
|
|||
S_DRIFTEXPLODE2,
|
||||
S_DRIFTEXPLODE3,
|
||||
S_DRIFTEXPLODE4,
|
||||
S_DRIFTEXPLODE5,
|
||||
S_DRIFTEXPLODE6,
|
||||
S_DRIFTEXPLODE7,
|
||||
S_DRIFTEXPLODE8,
|
||||
|
||||
// Drift boost clip
|
||||
S_DRIFTCLIPA1,
|
||||
S_DRIFTCLIPA2,
|
||||
S_DRIFTCLIPA3,
|
||||
S_DRIFTCLIPA4,
|
||||
S_DRIFTCLIPA5,
|
||||
S_DRIFTCLIPA6,
|
||||
S_DRIFTCLIPA7,
|
||||
S_DRIFTCLIPA8,
|
||||
S_DRIFTCLIPA9,
|
||||
S_DRIFTCLIPA10,
|
||||
S_DRIFTCLIPA11,
|
||||
S_DRIFTCLIPA12,
|
||||
S_DRIFTCLIPA13,
|
||||
S_DRIFTCLIPA14,
|
||||
S_DRIFTCLIPA15,
|
||||
S_DRIFTCLIPA16,
|
||||
S_DRIFTCLIPB1,
|
||||
S_DRIFTCLIPB2,
|
||||
S_DRIFTCLIPB3,
|
||||
S_DRIFTCLIPB4,
|
||||
S_DRIFTCLIPB5,
|
||||
S_DRIFTCLIPB6,
|
||||
S_DRIFTCLIPB7,
|
||||
S_DRIFTCLIPB8,
|
||||
|
||||
// Drift boost clip sparks
|
||||
S_DRIFTCLIPSPARK,
|
||||
|
||||
// Sneaker boost effect
|
||||
S_BOOSTFLAME,
|
||||
|
|
@ -4791,6 +4828,8 @@ typedef enum mobj_type
|
|||
MT_FASTLINE,
|
||||
MT_FASTDUST,
|
||||
MT_DRIFTEXPLODE,
|
||||
MT_DRIFTCLIP,
|
||||
MT_DRIFTCLIPSPARK,
|
||||
MT_BOOSTFLAME,
|
||||
MT_BOOSTSMOKE,
|
||||
MT_SNEAKERTRAIL,
|
||||
|
|
|
|||
97
src/k_kart.c
97
src/k_kart.c
|
|
@ -1648,6 +1648,50 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m
|
|||
sparks->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
|
||||
static fixed_t K_RandomFlip(fixed_t f)
|
||||
{
|
||||
return ( ( leveltime & 1 ) ? f : -f );
|
||||
}
|
||||
|
||||
void K_SpawnDriftBoostClip(player_t *player)
|
||||
{
|
||||
mobj_t *clip;
|
||||
fixed_t scale = 115*FRACUNIT/100;
|
||||
fixed_t z;
|
||||
|
||||
if (( player->mo->eflags & MFE_VERTICALFLIP ))
|
||||
z = player->mo->z;
|
||||
else
|
||||
z = player->mo->z + player->mo->height;
|
||||
|
||||
clip = P_SpawnMobj(player->mo->x, player->mo->y, z, MT_DRIFTCLIP);
|
||||
|
||||
P_SetTarget(&clip->target, player->mo);
|
||||
P_SetScale(clip, ( clip->destscale = FixedMul(scale, player->mo->scale) ));
|
||||
K_MatchGenericExtraFlags(clip, player->mo);
|
||||
|
||||
clip->fuse = 105;
|
||||
clip->momz = 7 * P_MobjFlip(clip) * clip->scale;
|
||||
|
||||
P_InstaThrust(clip, player->mo->angle +
|
||||
K_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)),
|
||||
FixedMul(scale, player->speed));
|
||||
}
|
||||
|
||||
void K_SpawnDriftBoostClipSpark(mobj_t *clip)
|
||||
{
|
||||
mobj_t *spark;
|
||||
|
||||
spark = P_SpawnMobj(clip->x, clip->y, clip->z, MT_DRIFTCLIPSPARK);
|
||||
|
||||
P_SetTarget(&spark->target, clip);
|
||||
P_SetScale(spark, ( spark->destscale = clip->scale ));
|
||||
K_MatchGenericExtraFlags(spark, clip);
|
||||
|
||||
spark->momx = clip->momx/2;
|
||||
spark->momy = clip->momx/2;
|
||||
}
|
||||
|
||||
/** \brief Handles the state changing for moving players, moved here to eliminate duplicate code
|
||||
|
||||
\param player player data
|
||||
|
|
@ -6330,6 +6374,43 @@ INT32 K_GetKartDriftSparkValue(player_t *player)
|
|||
return (26*4 + kartspeed*2 + (9 - player->kartweight))*8;
|
||||
}
|
||||
|
||||
/*
|
||||
Stage 1: red sparks
|
||||
Stage 2: blue sparks
|
||||
Stage 3: big large rainbow sparks
|
||||
*/
|
||||
static void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
||||
{
|
||||
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE);
|
||||
|
||||
P_SetTarget(&overlay->target, player->mo);
|
||||
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||
K_FlipFromObject(overlay, player->mo);
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
case 1:
|
||||
overlay->color = SKINCOLOR_KETCHUP;
|
||||
overlay->fuse = 16;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
overlay->color = SKINCOLOR_SAPPHIRE;
|
||||
overlay->fuse = 32;
|
||||
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
overlay->color = SKINCOLOR_SILVER;
|
||||
overlay->fuse = 120;
|
||||
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_s3kc4l);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void K_KartDrift(player_t *player, boolean onground)
|
||||
{
|
||||
fixed_t minspeed = (10 * player->mo->scale);
|
||||
|
|
@ -6346,10 +6427,6 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone)
|
||||
{
|
||||
angle_t pushdir = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
||||
//mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE);
|
||||
//P_SetTarget(&overlay->target, player->mo);
|
||||
//P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||
//K_FlipFromObject(overlay, player->mo);
|
||||
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
//K_SpawnDashDustRelease(player);
|
||||
|
|
@ -6362,9 +6439,6 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
|
||||
if (player->kartstuff[k_driftboost] < 15)
|
||||
player->kartstuff[k_driftboost] = 15;
|
||||
|
||||
//overlay->color = SKINCOLOR_GOLD;
|
||||
//overlay->fuse = 8;
|
||||
}
|
||||
else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
|
||||
{
|
||||
|
|
@ -6375,8 +6449,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->kartstuff[k_driftboost] < 20)
|
||||
player->kartstuff[k_driftboost] = 20;
|
||||
|
||||
//overlay->color = SKINCOLOR_KETCHUP;
|
||||
//overlay->fuse = 16;
|
||||
K_SpawnDriftBoostExplosion(player, 1);
|
||||
}
|
||||
else if (player->kartstuff[k_driftcharge] < dsthree)
|
||||
{
|
||||
|
|
@ -6387,8 +6460,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->kartstuff[k_driftboost] < 50)
|
||||
player->kartstuff[k_driftboost] = 50;
|
||||
|
||||
//overlay->color = SKINCOLOR_SAPPHIRE;
|
||||
//overlay->fuse = 32;
|
||||
K_SpawnDriftBoostExplosion(player, 2);
|
||||
}
|
||||
else if (player->kartstuff[k_driftcharge] >= dsthree)
|
||||
{
|
||||
|
|
@ -6399,8 +6471,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->kartstuff[k_driftboost] < 125)
|
||||
player->kartstuff[k_driftboost] = 125;
|
||||
|
||||
//overlay->color = SKINCOLOR_SILVER;
|
||||
//overlay->fuse = 120;
|
||||
K_SpawnDriftBoostExplosion(player, 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
|||
void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master);
|
||||
void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master);
|
||||
void K_SpawnDashDustRelease(player_t *player);
|
||||
void K_SpawnDriftBoostClip(player_t *player);
|
||||
void K_SpawnDriftBoostClipSpark(mobj_t *clip);
|
||||
void K_KartMoveAnimation(player_t *player);
|
||||
void K_KartPlayerHUDUpdate(player_t *player);
|
||||
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||
|
|
|
|||
55
src/p_mobj.c
55
src/p_mobj.c
|
|
@ -2457,6 +2457,17 @@ static boolean P_ZMovement(mobj_t *mo)
|
|||
mom.z = P_MobjFlip(mo)*FixedMul(5*FRACUNIT, mo->scale);
|
||||
else if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here
|
||||
;
|
||||
else if (mo->type == MT_DRIFTCLIP)
|
||||
{
|
||||
mom.z = -mom.z/2;
|
||||
if (abs(mom.z) > 4 * mo->scale / 3)
|
||||
{
|
||||
K_SpawnDriftBoostClipSpark(mo);
|
||||
S_StartSound(mo, sfx_tink);
|
||||
}
|
||||
else
|
||||
mo->flags2 ^= MF2_DONTDRAW;
|
||||
}
|
||||
else if (mo->flags & MF_MISSILE)
|
||||
{
|
||||
if (!(mo->flags & MF_NOCLIP))
|
||||
|
|
@ -8318,15 +8329,48 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
return;
|
||||
}
|
||||
|
||||
mobj->angle = mobj->target->angle;
|
||||
P_TeleportMove(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
|
||||
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
|
||||
//mobj->angle = mobj->target->angle;
|
||||
{
|
||||
angle_t angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy);
|
||||
fixed_t nudge;
|
||||
|
||||
mobj->angle = angle;
|
||||
|
||||
if (( mobj->fuse & 1 ))
|
||||
{
|
||||
nudge = 4*mobj->target->radius;
|
||||
}
|
||||
else
|
||||
{
|
||||
nudge = 2*mobj->target->radius;
|
||||
/* rotate the papersprite frames to see the flat angle */
|
||||
mobj->angle += ANGLE_90;
|
||||
}
|
||||
|
||||
P_TeleportMove(mobj,
|
||||
mobj->target->x + P_ReturnThrustX(mobj, angle + ANGLE_180, nudge),
|
||||
mobj->target->y + P_ReturnThrustY(mobj, angle + ANGLE_180, nudge),
|
||||
mobj->target->z);
|
||||
}
|
||||
P_SetScale(mobj, mobj->target->scale);
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
#ifdef HWRENDER
|
||||
mobj->modeltilt = mobj->target->modeltilt;
|
||||
#endif
|
||||
|
||||
if (mobj->fuse <= 16)
|
||||
{
|
||||
mobj->color = SKINCOLOR_KETCHUP;
|
||||
/* don't draw papersprite frames after blue boost */
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
}
|
||||
else if (mobj->fuse <= 32)
|
||||
mobj->color = SKINCOLOR_SAPPHIRE;
|
||||
else if (mobj->fuse > 32)
|
||||
mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
|
||||
|
||||
if (mobj->fuse == 17 || mobj->fuse == 33)/* to red/blue */
|
||||
K_SpawnDriftBoostClip(mobj->target->player);
|
||||
|
||||
{
|
||||
player_t *p = NULL;
|
||||
if (mobj->target->target && mobj->target->target->player)
|
||||
|
|
@ -10754,6 +10798,9 @@ static void P_DefaultMobjShadowScale(mobj_t *thing)
|
|||
case MT_FLOATINGITEM:
|
||||
thing->shadowscale = FRACUNIT/2;
|
||||
break;
|
||||
case MT_DRIFTCLIP:
|
||||
thing->shadowscale = FRACUNIT/3;
|
||||
break;
|
||||
default:
|
||||
if (thing->flags & (MF_ENEMY|MF_BOSS))
|
||||
thing->shadowscale = FRACUNIT;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue