mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-17 04:02:50 +00:00
Charge minimum viable visuals (plus future frame/obj setup)
This commit is contained in:
parent
9bb1f56fa6
commit
041d7660ae
7 changed files with 315 additions and 11 deletions
|
|
@ -3326,6 +3326,11 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_BLOCKBODY",
|
||||
|
||||
"S_CHARGEAURA",
|
||||
"S_CHARGEFALL",
|
||||
"S_CHARGEFLICKER",
|
||||
"S_CHARGESPARK",
|
||||
"S_CHARGERELEASE",
|
||||
"S_CHARGEEXTRA",
|
||||
|
||||
"S_SERVANTHAND",
|
||||
|
||||
|
|
@ -5559,6 +5564,11 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_BLOCKBODY",
|
||||
|
||||
"MT_CHARGEAURA",
|
||||
"MT_CHARGEFALL",
|
||||
"MT_CHARGEFLICKER",
|
||||
"MT_CHARGESPARK",
|
||||
"MT_CHARGERELEASE",
|
||||
"MT_CHARGEEXTRA",
|
||||
|
||||
"MT_SERVANTHAND",
|
||||
|
||||
|
|
|
|||
144
src/info.c
144
src/info.c
|
|
@ -568,6 +568,10 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"GBDY", // Guard body
|
||||
|
||||
"TRC1", // Charge aura
|
||||
"TRC2", // Charge fall
|
||||
"TRC3", // Charge flicker/sparks
|
||||
"TRC4", // Charge release
|
||||
"TRC5", // Charge extra
|
||||
|
||||
"DHND", // Servant Hand
|
||||
|
||||
|
|
@ -4142,6 +4146,11 @@ state_t states[NUMSTATES] =
|
|||
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
||||
|
||||
{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
|
||||
{SPR_TRC3, FF_FULLBRIGHT|FF_ADD|1, 2, {NULL}, 0, 0, S_NULL}, // S_CHARGESPARK
|
||||
{SPR_TRC4, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|0, -1, {NULL}, 4, 1, S_NULL}, // S_CHARGERELEASE
|
||||
{SPR_TRC5, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|0, -1, {NULL}, 4, 1, S_NULL}, // S_CHARGEEXTRA
|
||||
|
||||
{SPR_DHND, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SERVANTHAND
|
||||
|
||||
|
|
@ -23274,6 +23283,141 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEFALL
|
||||
-1, // doomednum
|
||||
S_CHARGEFALL, // 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
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEFLICKER
|
||||
-1, // doomednum
|
||||
S_CHARGEFLICKER, // 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
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGESPARK
|
||||
-1, // doomednum
|
||||
S_CHARGESPARK, // 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
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGERELEASE
|
||||
-1, // doomednum
|
||||
S_CHARGERELEASE, // 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
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEEXTRA
|
||||
-1, // doomednum
|
||||
S_CHARGEEXTRA, // 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
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SERVANTHAND
|
||||
-1, // doomednum
|
||||
S_SERVANTHAND, // spawnstate
|
||||
|
|
|
|||
14
src/info.h
14
src/info.h
|
|
@ -1125,6 +1125,10 @@ typedef enum sprite
|
|||
SPR_GBDY, // Guard body
|
||||
|
||||
SPR_TRC1, // Charge aura
|
||||
SPR_TRC2, // Charge fall
|
||||
SPR_TRC3, // Charge flicker/sparks
|
||||
SPR_TRC4, // Charge release
|
||||
SPR_TRC5, // Charge extra
|
||||
|
||||
SPR_DHND, // Servant Hand
|
||||
|
||||
|
|
@ -4553,6 +4557,11 @@ typedef enum state
|
|||
S_BLOCKBODY,
|
||||
|
||||
S_CHARGEAURA,
|
||||
S_CHARGEFALL,
|
||||
S_CHARGEFLICKER,
|
||||
S_CHARGESPARK,
|
||||
S_CHARGERELEASE,
|
||||
S_CHARGEEXTRA,
|
||||
|
||||
S_SERVANTHAND,
|
||||
|
||||
|
|
@ -6824,6 +6833,11 @@ typedef enum mobj_type
|
|||
MT_BLOCKBODY,
|
||||
|
||||
MT_CHARGEAURA,
|
||||
MT_CHARGEFALL,
|
||||
MT_CHARGEFLICKER,
|
||||
MT_CHARGESPARK,
|
||||
MT_CHARGERELEASE,
|
||||
MT_CHARGEEXTRA,
|
||||
|
||||
MT_SERVANTHAND,
|
||||
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -8545,7 +8545,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
mobj_t *aura = P_SpawnMobjFromMobj(player->mo, 0, 0, player->mo->height/2, MT_CHARGEAURA);
|
||||
aura->angle = player->mo->angle + i*ANG15;
|
||||
P_SetTarget(&aura->target, player->mo);
|
||||
if (i != 0)
|
||||
if (i == 0)
|
||||
aura->extravalue2 = 1;
|
||||
else
|
||||
aura->renderflags |= RF_TRANS50;
|
||||
}
|
||||
}
|
||||
|
|
@ -8871,14 +8873,6 @@ void K_KartResetPlayerColor(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
if (player->trickcharge && (leveltime & 1))
|
||||
{
|
||||
player->mo->colorized = true;
|
||||
player->mo->color = SKINCOLOR_INVINCFLASH;
|
||||
fullbright = true;
|
||||
goto finalise;
|
||||
}
|
||||
|
||||
if (player->ringboost && (leveltime & 1)) // ring boosting
|
||||
{
|
||||
player->mo->colorized = true;
|
||||
|
|
@ -12483,9 +12477,17 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
P_InstaThrust(player->mo, player->mo->angle, 2*abs(player->fastfall)/3 + 15*FRACUNIT);
|
||||
player->mo->hitlag = 3;
|
||||
S_StartSound(player->mo, sfx_gshac); // TODO
|
||||
S_StartSound(player->mo, sfx_gshba); // TODO
|
||||
player->fastfall = 0; // intentionally skip bounce
|
||||
player->trickcharge = 0;
|
||||
|
||||
UINT8 i;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
mobj_t *arc = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_CHARGEFALL);
|
||||
P_SetTarget(&arc->target, player->mo);
|
||||
arc->extravalue1 = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -127,6 +127,11 @@ void Obj_BlockBodyThink(mobj_t *body);
|
|||
void Obj_GuardBreakThink(mobj_t *fx);
|
||||
|
||||
void Obj_ChargeAuraThink(mobj_t *aura);
|
||||
void Obj_ChargeFallThink(mobj_t *charge);
|
||||
void Obj_ChargeFlickerThink(mobj_t *flicker);
|
||||
void Obj_ChargeSparkThink(mobj_t *spawk);
|
||||
void Obj_ChargeReleaseThink(mobj_t *release);
|
||||
void Obj_ChargeExtraThink(mobj_t *extra);
|
||||
|
||||
/* Ring Shooter */
|
||||
boolean Obj_RingShooterThinker(mobj_t *mo);
|
||||
|
|
|
|||
|
|
@ -4,10 +4,16 @@
|
|||
#include "../p_local.h"
|
||||
#include "../k_kart.h"
|
||||
#include "../k_powerup.h"
|
||||
#include "../m_random.h"
|
||||
|
||||
#define CHARGEAURA_BURSTTIME (9)
|
||||
#define CHARGEAURA_SPARKRADIUS (160)
|
||||
|
||||
// xval1: destruction timer
|
||||
// xval2: master (spawns other visuals)
|
||||
void Obj_ChargeAuraThink (mobj_t *aura)
|
||||
{
|
||||
if (P_MobjWasRemoved(aura->target) || !aura->target->player || !aura->target->player->trickcharge)
|
||||
if (P_MobjWasRemoved(aura->target) || !aura->target->player || (aura->extravalue1 >= CHARGEAURA_BURSTTIME))
|
||||
{
|
||||
P_RemoveMobj(aura);
|
||||
}
|
||||
|
|
@ -22,7 +28,20 @@ void Obj_ChargeAuraThink (mobj_t *aura)
|
|||
aura->flags |= MF_NOCLIPTHING;
|
||||
aura->color = mo->color;
|
||||
|
||||
aura->renderflags &= ~RF_DONTDRAW;
|
||||
|
||||
fixed_t baseScale = 12*mo->scale/10;
|
||||
|
||||
if (aura->extravalue1 || !player->trickcharge)
|
||||
{
|
||||
aura->extravalue1++;
|
||||
baseScale += (mo->scale / 3) * aura->extravalue1;
|
||||
aura->renderflags &= ~RF_TRANSMASK;
|
||||
aura->renderflags |= (aura->extravalue1)<<RF_TRANSSHIFT;
|
||||
if (aura->extravalue1 % 2)
|
||||
aura->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
||||
P_SetScale(aura, baseScale);
|
||||
|
||||
// Twirl
|
||||
|
|
@ -30,5 +49,90 @@ void Obj_ChargeAuraThink (mobj_t *aura)
|
|||
// Visuals
|
||||
aura->renderflags |= RF_PAPERSPRITE|RF_ADD;
|
||||
|
||||
// fuck
|
||||
boolean forceinvisible = !!!(leveltime % 8);
|
||||
if (aura->extravalue1 || !(player->driftcharge > K_GetKartDriftSparkValueForStage(player, 3)))
|
||||
forceinvisible = false;
|
||||
|
||||
if (forceinvisible)
|
||||
aura->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (aura->extravalue2)
|
||||
{
|
||||
if (player->driftcharge)
|
||||
{
|
||||
mobj_t *spark = P_SpawnMobjFromMobj(aura,
|
||||
mo->scale*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
mo->scale*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
mo->scale*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
MT_CHARGESPARK);
|
||||
spark->frame = P_RandomRange(PR_DECORATION, 1, 5);
|
||||
P_SetTarget(&spark->target, aura);
|
||||
P_SetScale(spark, 15*aura->scale/10);
|
||||
}
|
||||
|
||||
if (forceinvisible)
|
||||
{
|
||||
mobj_t *flicker = P_SpawnMobjFromMobj(aura, 0, 0, 0, MT_CHARGEFLICKER);
|
||||
P_SetTarget(&flicker->target, aura);
|
||||
P_SetScale(flicker, aura->scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_ChargeFallThink (mobj_t *charge)
|
||||
{
|
||||
if (P_MobjWasRemoved(charge->target) || !charge->target->player)
|
||||
{
|
||||
P_RemoveMobj(charge);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = charge->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
// Follow player
|
||||
charge->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(charge, mo->x, mo->y, mo->z);
|
||||
charge->flags |= MF_NOCLIPTHING;
|
||||
charge->color = mo->color;
|
||||
charge->angle = mo->angle + ANGLE_45 + (ANGLE_90 * charge->extravalue1);
|
||||
|
||||
if (!P_IsObjectOnGround(mo))
|
||||
charge->renderflags |= RF_DONTDRAW;
|
||||
else
|
||||
charge->renderflags &= ~RF_DONTDRAW;
|
||||
|
||||
fixed_t baseScale = 12*mo->scale/10;
|
||||
P_SetScale(charge, baseScale);
|
||||
|
||||
charge->renderflags &= ~RF_TRANSMASK;
|
||||
if (charge->tics < 10)
|
||||
charge->renderflags |= (9 - charge->tics)<<RF_TRANSSHIFT;
|
||||
|
||||
// Visuals
|
||||
charge->renderflags |= RF_PAPERSPRITE|RF_ADD;
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_ChargeFlickerThink (mobj_t *flicker)
|
||||
{
|
||||
// xd
|
||||
}
|
||||
|
||||
void Obj_ChargeSparkThink (mobj_t *spark)
|
||||
{
|
||||
// xd
|
||||
spark->renderflags |= RF_FULLBRIGHT|RF_ADD;
|
||||
}
|
||||
|
||||
void Obj_ChargeReleaseThink (mobj_t *flicker)
|
||||
{
|
||||
// xd
|
||||
}
|
||||
|
||||
void Obj_ChargeExtraThink (mobj_t *flicker)
|
||||
{
|
||||
// xd
|
||||
}
|
||||
25
src/p_mobj.c
25
src/p_mobj.c
|
|
@ -8856,6 +8856,31 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
Obj_ChargeAuraThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEFALL:
|
||||
{
|
||||
Obj_ChargeFallThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEFLICKER:
|
||||
{
|
||||
Obj_ChargeFlickerThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGESPARK:
|
||||
{
|
||||
Obj_ChargeSparkThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGERELEASE:
|
||||
{
|
||||
Obj_ChargeReleaseThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEEXTRA:
|
||||
{
|
||||
Obj_ChargeExtraThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_GUARDBREAK:
|
||||
{
|
||||
Obj_GuardBreakThink(mobj);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue