mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-17 02:57:07 +00:00
WIP: Overdrive VFX refactor
This commit is contained in:
parent
81e9441218
commit
4d202fbd67
7 changed files with 256 additions and 28 deletions
|
|
@ -1568,6 +1568,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_BLOCKRING",
|
||||
"S_BLOCKBODY",
|
||||
|
||||
"S_AMPRING",
|
||||
"S_AMPBODY",
|
||||
"S_AMPAURA",
|
||||
|
||||
"S_CHARGEAURA",
|
||||
"S_CHARGEFALL",
|
||||
"S_CHARGEFLICKER",
|
||||
|
|
@ -3507,6 +3511,10 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_BLOCKRING",
|
||||
"MT_BLOCKBODY",
|
||||
|
||||
"MT_AMPRING",
|
||||
"MT_AMPBODY",
|
||||
"MT_AMPAURA",
|
||||
|
||||
"MT_CHARGEAURA",
|
||||
"MT_CHARGEFALL",
|
||||
"MT_CHARGEFLICKER",
|
||||
|
|
|
|||
87
src/info.c
87
src/info.c
|
|
@ -579,6 +579,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
|
||||
"AMPA",
|
||||
"AMPB",
|
||||
"AMPC",
|
||||
"AMPD",
|
||||
|
||||
"WTRL", // Water Trail
|
||||
|
||||
|
|
@ -2125,6 +2127,10 @@ state_t states[NUMSTATES] =
|
|||
{SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
|
||||
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
||||
|
||||
{SPR_AMPB, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_AMPRING
|
||||
{SPR_AMPC, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_AMPBODY
|
||||
{SPR_AMPD, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_AMPAURA
|
||||
|
||||
{SPR_TRC1, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_CHARGEAURA
|
||||
{SPR_TRC2, FF_FULLBRIGHT|FF_ANIMATE|0, 20, {NULL}, 19, 1, S_NULL}, // S_CHARGEFALL
|
||||
{SPR_TRC3, FF_FULLBRIGHT|FF_ADD|0, 2, {NULL}, 0, 0, S_NULL}, // S_CHARGEFLICKER
|
||||
|
|
@ -13634,6 +13640,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_AMPRING
|
||||
-1, // doomednum
|
||||
S_AMPRING, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // 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
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
3, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_AMPBODY
|
||||
-1, // doomednum
|
||||
S_AMPBODY, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // 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
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
2, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_AMPAURA
|
||||
-1, // doomednum
|
||||
S_AMPAURA, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // 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
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEAURA
|
||||
-1, // doomednum
|
||||
S_CHARGEAURA, // spawnstate
|
||||
|
|
|
|||
10
src/info.h
10
src/info.h
|
|
@ -1118,6 +1118,8 @@ typedef enum sprite
|
|||
|
||||
SPR_AMPA,
|
||||
SPR_AMPB,
|
||||
SPR_AMPC,
|
||||
SPR_AMPD,
|
||||
|
||||
SPR_WTRL, // Water Trail
|
||||
|
||||
|
|
@ -2593,6 +2595,10 @@ typedef enum state
|
|||
S_BLOCKRING,
|
||||
S_BLOCKBODY,
|
||||
|
||||
S_AMPRING,
|
||||
S_AMPBODY,
|
||||
S_AMPAURA,
|
||||
|
||||
S_CHARGEAURA,
|
||||
S_CHARGEFALL,
|
||||
S_CHARGEFLICKER,
|
||||
|
|
@ -4559,6 +4565,10 @@ typedef enum mobj_type
|
|||
MT_BLOCKRING,
|
||||
MT_BLOCKBODY,
|
||||
|
||||
MT_AMPRING,
|
||||
MT_AMPBODY,
|
||||
MT_AMPAURA,
|
||||
|
||||
MT_CHARGEAURA,
|
||||
MT_CHARGEFALL,
|
||||
MT_CHARGEFLICKER,
|
||||
|
|
|
|||
|
|
@ -139,6 +139,10 @@ void Obj_BlockRingThink(mobj_t *ring);
|
|||
void Obj_BlockBodyThink(mobj_t *body);
|
||||
void Obj_GuardBreakThink(mobj_t *fx);
|
||||
|
||||
void Obj_AmpRingThink(mobj_t *amp);
|
||||
void Obj_AmpBodyThink(mobj_t *amp);
|
||||
void Obj_AmpAuraThink(mobj_t *amp);
|
||||
|
||||
void Obj_AmpsThink(mobj_t *amps);
|
||||
|
||||
void Obj_ChargeAuraThink(mobj_t *aura);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#define AMP_ARCTIME (8)
|
||||
|
||||
static UINT8 interlacedfuckingthing[] = {6,1,7,2,8,3,9,2,1,1,1,2,1,3,1,2,10,1,11,2,4,3,5,2,1,1,1,2,1,3,1,2};
|
||||
|
||||
void Obj_AmpsThink (mobj_t *amps)
|
||||
{
|
||||
if (P_MobjWasRemoved(amps->target)
|
||||
|
|
@ -46,7 +48,7 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
fixed_t vert = dist/3;
|
||||
fixed_t speed = 45*amps->scale;
|
||||
|
||||
if (amps->extravalue2)
|
||||
if (amps->extravalue2) // Mode: going down, aim at the player and speed up / dampen stray movement
|
||||
{
|
||||
if (amps->extravalue1)
|
||||
amps->extravalue1--;
|
||||
|
|
@ -58,7 +60,7 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
fakez = mo->z + (vert * amps->extravalue1 / AMP_ARCTIME);
|
||||
damper = 1;
|
||||
}
|
||||
else
|
||||
else // Mode: going up, aim above the player
|
||||
{
|
||||
amps->extravalue1++;
|
||||
if (amps->extravalue1 >= AMP_ARCTIME)
|
||||
|
|
@ -86,4 +88,110 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
P_RemoveMobj(amps);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_AmpRingThink (mobj_t *amps)
|
||||
{
|
||||
if (P_MobjWasRemoved(amps->target) || !amps->target->player)
|
||||
{
|
||||
P_RemoveMobj(amps);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = amps->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
amps->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(amps, mo->x, mo->y, mo->z + mo->height/2);
|
||||
amps->flags |= MF_NOCLIPTHING;
|
||||
|
||||
amps->color = mo->player->skincolor;
|
||||
amps->sprite = SPR_AMPB;
|
||||
amps->frame = interlacedfuckingthing[(leveltime/1)%32]-1;
|
||||
amps->colorized = true;
|
||||
|
||||
if (amps->scale != 3*mo->scale/2)
|
||||
P_InstaScale(amps, 3*mo->scale/2);
|
||||
|
||||
amps->angle = amps->target->angle + (ANG15/2 * leveltime);
|
||||
amps->renderflags |= RF_ADD|RF_PAPERSPRITE|RF_FULLBRIGHT;
|
||||
|
||||
if (player->overdrive)
|
||||
amps->renderflags &= ~RF_DONTDRAW;
|
||||
else
|
||||
amps->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (player->overdrive < 35 && player->overdrive % 2)
|
||||
amps->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_AmpBodyThink (mobj_t *amps)
|
||||
{
|
||||
if (P_MobjWasRemoved(amps->target) || !amps->target->player)
|
||||
{
|
||||
P_RemoveMobj(amps);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = amps->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
amps->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(amps, mo->x, mo->y, mo->z + mo->height/2);
|
||||
amps->flags |= MF_NOCLIPTHING;
|
||||
|
||||
amps->color = mo->player->skincolor;
|
||||
amps->frame = leveltime%14;
|
||||
amps->colorized = true;
|
||||
|
||||
if (amps->scale != 5*mo->scale/4)
|
||||
P_InstaScale(amps, 5*mo->scale/4);
|
||||
|
||||
amps->angle = amps->target->angle;
|
||||
amps->renderflags |= RF_ADD|RF_FULLBRIGHT;
|
||||
|
||||
if (player->overdrive)
|
||||
amps->renderflags &= ~RF_DONTDRAW;
|
||||
else
|
||||
amps->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (player->overdrive < 35 && player->overdrive % 2)
|
||||
amps->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_AmpAuraThink (mobj_t *amps)
|
||||
{
|
||||
if (P_MobjWasRemoved(amps->target) || !amps->target->player)
|
||||
{
|
||||
P_RemoveMobj(amps);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = amps->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
amps->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(amps, mo->x, mo->y, mo->z + mo->height/2);
|
||||
amps->flags |= MF_NOCLIPTHING;
|
||||
|
||||
amps->color = mo->player->skincolor;
|
||||
amps->frame = leveltime%2;
|
||||
amps->colorized = true;
|
||||
|
||||
if (amps->scale != 5*mo->scale/4)
|
||||
P_InstaScale(amps, 5*mo->scale/4);
|
||||
|
||||
amps->angle = amps->target->angle;
|
||||
amps->renderflags |= RF_ADD|RF_FULLBRIGHT;
|
||||
|
||||
amps->renderflags &= ~RF_TRANSMASK;
|
||||
amps->renderflags |= (max(3, NUMTRANSMAPS - player->overdrive/TICRATE) << RF_TRANSSHIFT);
|
||||
|
||||
if (!player->overdrive)
|
||||
amps->renderflags |= RF_DONTDRAW;
|
||||
else
|
||||
amps->renderflags &= ~RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@
|
|||
#include "../k_kart.h"
|
||||
#include "../k_powerup.h"
|
||||
|
||||
static UINT8 interlacedfuckingthing[] = {6,1,7,2,8,3,9,2,1,1,1,2,1,3,1,2,10,1,11,2,4,3,5,2,1,1,1,2,1,3,1,2};
|
||||
|
||||
void Obj_BlockRingThink (mobj_t *ring)
|
||||
{
|
||||
if (P_MobjWasRemoved(ring->target) || !ring->target->player)
|
||||
|
|
@ -39,19 +37,6 @@ void Obj_BlockRingThink (mobj_t *ring)
|
|||
fixed_t baseScale = mo->scale / 2;
|
||||
baseScale += (mo->scale / 30) * player->spheres;
|
||||
|
||||
if (player->overdrive)
|
||||
{
|
||||
baseScale += mo->scale;
|
||||
ring->sprite = SPR_AMPB;
|
||||
ring->frame = interlacedfuckingthing[(leveltime/1)%32]-1;
|
||||
ring->colorized = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ring->colorized = false;
|
||||
ring->frame = 0;
|
||||
}
|
||||
|
||||
P_SetScale(ring, baseScale);
|
||||
|
||||
// Twirl
|
||||
|
|
@ -59,19 +44,12 @@ void Obj_BlockRingThink (mobj_t *ring)
|
|||
// Visuals
|
||||
ring->renderflags |= RF_ADD|RF_PAPERSPRITE;
|
||||
|
||||
if (player->overdrive > 35)
|
||||
{
|
||||
if (leveltime%2)
|
||||
ring->renderflags &= ~RF_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (leveltime%2)
|
||||
ring->renderflags &= ~RF_DONTDRAW;
|
||||
else
|
||||
ring->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
ring->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !(K_PlayerGuard(player) || player->overdrive))
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !K_PlayerGuard(player))
|
||||
ring->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
33
src/p_mobj.c
33
src/p_mobj.c
|
|
@ -8595,6 +8595,21 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
Obj_BlockBodyThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_AMPRING:
|
||||
{
|
||||
Obj_AmpRingThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_AMPBODY:
|
||||
{
|
||||
Obj_AmpBodyThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_AMPAURA:
|
||||
{
|
||||
Obj_AmpAuraThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEAURA:
|
||||
{
|
||||
Obj_ChargeAuraThink(mobj);
|
||||
|
|
@ -12155,6 +12170,24 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
K_MatchGenericExtraFlags(body, p->mo);
|
||||
body->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *aring = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPRING);
|
||||
P_SetTarget(å->target, p->mo);
|
||||
P_SetScale(aring, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(aring, p->mo);
|
||||
aring->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *abody = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPBODY);
|
||||
P_SetTarget(&abody->target, p->mo);
|
||||
P_SetScale(abody, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(abody, p->mo);
|
||||
abody->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *aaura = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPAURA);
|
||||
P_SetTarget(&aaura->target, p->mo);
|
||||
P_SetScale(aaura, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(aaura, p->mo);
|
||||
aaura->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (K_PlayerGuard(p))
|
||||
S_StartSound(body, sfx_s1af);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue