wip: ebrake visuals

This commit is contained in:
SinnamonLat 2022-05-03 03:35:01 +02:00
parent d843cc5b5c
commit 464e4a338a
8 changed files with 173 additions and 0 deletions

View file

@ -488,6 +488,7 @@ typedef struct player_s
UINT8 trickboostdecay; // used to know how long you've waited UINT8 trickboostdecay; // used to know how long you've waited
UINT8 trickboost; // Trick boost. This one is weird and has variable speed. Dear god. UINT8 trickboost; // Trick boost. This one is weird and has variable speed. Dear god.
tic_t ebrakefor; // Ebrake timer, used for visuals.
UINT32 roundscore; // battle score this round UINT32 roundscore; // battle score this round
UINT8 emeralds; UINT8 emeralds;

View file

@ -4662,6 +4662,18 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_SPINDASHDUST", "S_SPINDASHDUST",
"S_SPINDASHWIND", "S_SPINDASHWIND",
"S_SOFTLANDING1",
"S_SOFTLANDING2",
"S_SOFTLANDING3",
"S_SOFTLANDING4",
"S_SOFTLANDING5",
"S_DOWNLINE1",
"S_DOWNLINE2",
"S_DOWNLINE3",
"S_DOWNLINE4",
"S_DOWNLINE5",
// Finish line beam // Finish line beam
"S_FINISHBEAM1", "S_FINISHBEAM1",
"S_FINISHBEAM2", "S_FINISHBEAM2",
@ -5781,6 +5793,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_SPINDASHDUST", "MT_SPINDASHDUST",
"MT_SPINDASHWIND", "MT_SPINDASHWIND",
"MT_SOFTLANDING",
"MT_DOWNLINE",
"MT_PAPERITEMSPOT", "MT_PAPERITEMSPOT",

View file

@ -752,6 +752,8 @@ char sprnames[NUMSPRITES + 1][5] =
"SDDS", // Spindash dust "SDDS", // Spindash dust
"SDWN", // Spindash wind "SDWN", // Spindash wind
"EBRK", // Soft Landing / Ebrake aura stuff.
"HMTR", // Down Lines
"TRCK", "TRCK",
@ -5246,6 +5248,20 @@ state_t states[NUMSTATES] =
{SPR_SDDS, FF_ANIMATE, 9, {NULL}, 9, 1, S_NULL}, // S_SPINDASHDUST {SPR_SDDS, FF_ANIMATE, 9, {NULL}, 9, 1, S_NULL}, // S_SPINDASHDUST
{SPR_SDWN, FF_ANIMATE|FF_PAPERSPRITE, 18, {NULL}, 9, 2, S_NULL}, // S_SPINDASHWIND {SPR_SDWN, FF_ANIMATE|FF_PAPERSPRITE, 18, {NULL}, 9, 2, S_NULL}, // S_SPINDASHWIND
// Soft Landing
{SPR_EBRK, 0|FF_ADD|FF_FLOORSPRITE, 4, {NULL}, 0, 0, S_SOFTLANDING2}, // S_SOFTLANDING1
{SPR_EBRK, 1|FF_ADD|FF_FLOORSPRITE, 4, {NULL}, 0, 0, S_SOFTLANDING3}, // S_SOFTLANDING2
{SPR_EBRK, 2|FF_ADD|FF_FLOORSPRITE, 4, {NULL}, 0, 0, S_SOFTLANDING4}, // S_SOFTLANDING3
{SPR_EBRK, 3|FF_ADD|FF_FLOORSPRITE, 4, {NULL}, 0, 0, S_SOFTLANDING5}, // S_SOFTLANDING4
{SPR_EBRK, 4|FF_ADD|FF_FLOORSPRITE, 4, {NULL}, 0, 0, S_NULL}, // S_SOFTLANDING5
// Downwards Lines
{SPR_HMTR, 0, 2, {NULL}, 0, 0, S_DOWNLINE2}, // S_DOWNLINE1
{SPR_HMTR, 1, 2, {NULL}, 0, 0, S_DOWNLINE3}, // S_DOWNLINE2
{SPR_HMTR, 2, 2, {NULL}, 0, 0, S_DOWNLINE4}, // S_DOWNLINE3
{SPR_HMTR, 3, 2, {NULL}, 0, 0, S_DOWNLINE5}, // S_DOWNLINE4
{SPR_HMTR, 4, 2, {NULL}, 0, 0, S_NULL}, // S_DOWNLINE5
// Finish line beam // Finish line beam
{SPR_FLBM, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_NULL}, // S_FINISHBEAM1 {SPR_FLBM, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_NULL}, // S_FINISHBEAM1
{SPR_FLBM, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_NULL}, // S_FINISHBEAM2 {SPR_FLBM, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_NULL}, // S_FINISHBEAM2
@ -29197,6 +29213,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_SOFTLANDING
-1, // doomednum
S_SOFTLANDING1, // 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
0, // speed
12*FRACUNIT, // radius
24*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_DOWNLINE
-1, // doomednum
S_DOWNLINE1, // 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
0, // speed
12*FRACUNIT, // radius
24*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_PAPERITEMSPOT { // MT_PAPERITEMSPOT
-1, // doomednum -1, // doomednum
S_INVISIBLE, // spawnstate S_INVISIBLE, // spawnstate

View file

@ -1300,6 +1300,8 @@ typedef enum sprite
SPR_SDDS, // Spindash dust SPR_SDDS, // Spindash dust
SPR_SDWN, // Spindash wind SPR_SDWN, // Spindash wind
SPR_EBRK, // Soft Landing / Ebrake aura stuff.
SPR_HMTR, // downwards line
SPR_TRCK, SPR_TRCK,
@ -5662,6 +5664,18 @@ typedef enum state
S_SPINDASHDUST, S_SPINDASHDUST,
S_SPINDASHWIND, S_SPINDASHWIND,
S_SOFTLANDING1,
S_SOFTLANDING2,
S_SOFTLANDING3,
S_SOFTLANDING4,
S_SOFTLANDING5,
S_DOWNLINE1,
S_DOWNLINE2,
S_DOWNLINE3,
S_DOWNLINE4,
S_DOWNLINE5,
S_FINISHBEAM1, S_FINISHBEAM1,
S_FINISHBEAM2, S_FINISHBEAM2,
S_FINISHBEAM3, S_FINISHBEAM3,
@ -6798,6 +6812,8 @@ typedef enum mobj_type
MT_SPINDASHDUST, MT_SPINDASHDUST,
MT_SPINDASHWIND, MT_SPINDASHWIND,
MT_SOFTLANDING,
MT_DOWNLINE,
MT_PAPERITEMSPOT, MT_PAPERITEMSPOT,

View file

@ -7416,6 +7416,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
player->tripWireState = TRIP_NONE; player->tripWireState = TRIP_NONE;
} }
K_KartEbrakeVisuals(player);
} }
void K_KartPlayerAfterThink(player_t *player) void K_KartPlayerAfterThink(player_t *player)
@ -8585,6 +8587,61 @@ INT32 K_StairJankFlip(INT32 value)
return P_AltFlip(value, 2); return P_AltFlip(value, 2);
} }
// Ebraking visuals for mo
void K_KartEbrakeVisuals(player_t *p)
{
mobj_t *wave;
mobj_t *spdl;
fixed_t sx, sy;
if (K_PlayerEBrake(p))
{
if (p->ebrakefor % 20 == 0)
{
wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_SOFTLANDING);
P_SetScale(wave, p->mo->scale);
wave->standingslope = p->mo->standingslope;
}
if (!p->spindash)
{
// Spawn downwards fastline
sx = p->mo->x + P_RandomRange(-48, 48)*p->mo->scale;
sy = p->mo->y + P_RandomRange(-48, 48)*p->mo->scale;
spdl = P_SpawnMobj(sx, sy, p->mo->z, MT_DOWNLINE);
spdl->colorized = true;
spdl->color = SKINCOLOR_WHITE;
K_MatchGenericExtraFlags(spdl, p->mo);
P_SetScale(spdl, p->mo->scale);
// squish the player a little bit.
p->mo->spritexscale = FRACUNIT*115/100;
p->mo->spriteyscale = FRACUNIT*85/100;
}
else
{
// sqish them a little MORE....
p->mo->spritexscale = FRACUNIT*12/10;
p->mo->spriteyscale = FRACUNIT*8/10;
}
p->ebrakefor++;
}
else if (p->ebrakefor) // cancel effects
{
// reset scale
p->mo->spritexscale = FRACUNIT;
p->mo->spriteyscale = FRACUNIT;
p->ebrakefor = 0;
}
}
static void K_KartSpindashDust(mobj_t *parent) static void K_KartSpindashDust(mobj_t *parent)
{ {
fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale); fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale);

View file

@ -141,6 +141,7 @@ void K_CheckSpectateStatus(void);
UINT8 K_GetInvincibilityItemFrame(void); UINT8 K_GetInvincibilityItemFrame(void);
UINT8 K_GetOrbinautItemFrame(UINT8 count); UINT8 K_GetOrbinautItemFrame(UINT8 count);
boolean K_IsSPBInGame(void); boolean K_IsSPBInGame(void);
void K_KartEbrakeVisuals(player_t *p);
// sound stuff for lua // sound stuff for lua
void K_PlayAttackTaunt(mobj_t *source); void K_PlayAttackTaunt(mobj_t *source);

View file

@ -9590,6 +9590,16 @@ void P_SceneryThinker(mobj_t *mobj)
P_CycleMobjState(mobj); P_CycleMobjState(mobj);
// Flicker softlanding mobj, this just prevents us from needing like 20 states.
if (mobj->type == MT_SOFTLANDING)
{
mobj->renderflags |= RF_NOSPLATBILLBOARD|RF_OBJECTSLOPESPLAT;
if (mobj->tics & 1)
mobj->renderflags |= RF_DONTDRAW;
else
mobj->renderflags &= ~RF_DONTDRAW;
}
if (mobj->type != MT_RANDOMAUDIENCE) if (mobj->type != MT_RANDOMAUDIENCE)
return; return;

View file

@ -326,6 +326,8 @@ static void P_NetArchivePlayers(void)
WRITEUINT8(save_p, players[i].trickboostdecay); WRITEUINT8(save_p, players[i].trickboostdecay);
WRITEUINT8(save_p, players[i].trickboost); WRITEUINT8(save_p, players[i].trickboost);
WRITEUINT32(save_p, players[i].ebrakefor);
WRITEUINT32(save_p, players[i].roundscore); WRITEUINT32(save_p, players[i].roundscore);
WRITEUINT8(save_p, players[i].emeralds); WRITEUINT8(save_p, players[i].emeralds);
WRITEUINT8(save_p, players[i].bumpers); WRITEUINT8(save_p, players[i].bumpers);
@ -592,6 +594,8 @@ static void P_NetUnArchivePlayers(void)
players[i].trickboostdecay = READUINT8(save_p); players[i].trickboostdecay = READUINT8(save_p);
players[i].trickboost = READUINT8(save_p); players[i].trickboost = READUINT8(save_p);
players[i].ebrakefor = READUINT32(save_p);
players[i].roundscore = READUINT32(save_p); players[i].roundscore = READUINT32(save_p);
players[i].emeralds = READUINT8(save_p); players[i].emeralds = READUINT8(save_p);
players[i].bumpers = READUINT8(save_p); players[i].bumpers = READUINT8(save_p);