mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-22 02:00:11 +00:00
Add first pass at hitlag EFX
Only 9-tic animation is here currently, so hitlag is forced to 9 tics for testing.
This commit is contained in:
parent
a8a8d375c3
commit
8c273039ab
6 changed files with 95 additions and 5 deletions
|
|
@ -4563,6 +4563,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_JANKSPARK3",
|
||||
"S_JANKSPARK4",
|
||||
|
||||
"S_HITLAG_9",
|
||||
|
||||
// Broly Ki Orb
|
||||
"S_BROLY1",
|
||||
"S_BROLY2",
|
||||
|
|
@ -5394,6 +5396,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_DRIFTELECTRICITY",
|
||||
"MT_DRIFTELECTRICSPARK",
|
||||
"MT_JANKSPARK",
|
||||
"MT_HITLAG",
|
||||
|
||||
"MT_ROCKETSNEAKER", // Rocket sneakers
|
||||
|
||||
|
|
|
|||
30
src/info.c
30
src/info.c
|
|
@ -573,6 +573,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"DREL", // Drift electricity
|
||||
"DRES", // Drift electric sparks
|
||||
"JANK", // Stair janking sparks
|
||||
"HFX9", // Hitlag stage 9
|
||||
|
||||
// Kart Items
|
||||
"RSHE", // Rocket sneaker
|
||||
|
|
@ -5236,6 +5237,8 @@ state_t states[NUMSTATES] =
|
|||
{SPR_JANK, 0, 0, {A_SetCustomValue}, -1, 5, S_JANKSPARK4}, // S_JANKSPARK3
|
||||
{SPR_JANK, 0, 0, {A_ChangeAngleRelative}, 180, 180, S_JANKSPARK2}, // S_JANKSPARK4
|
||||
|
||||
{SPR_HFX9, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 9, {NULL}, 8, 1, S_NULL}, // S_HITLAG_9
|
||||
|
||||
// Broly Ki Orb
|
||||
{SPR_LSSJ, FF_REVERSESUBTRACT|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BROLY2}, // S_BROLY1
|
||||
{SPR_NULL, 0, 5*TICRATE, {A_SSMineFlash}, 0, 0, S_NULL}, // S_BROLY2
|
||||
|
|
@ -23478,6 +23481,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_HITLAG
|
||||
-1, // doomednum
|
||||
S_HITLAG_9, // 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
|
||||
8*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_ROCKETSNEAKER
|
||||
-1, // doomednum
|
||||
S_ROCKETSNEAKER_L, // spawnstate
|
||||
|
|
|
|||
|
|
@ -1124,6 +1124,7 @@ typedef enum sprite
|
|||
SPR_DREL, // Drift electricity
|
||||
SPR_DRES, // Drift electric sparks
|
||||
SPR_JANK, // Stair janking sparks
|
||||
SPR_HFX9, // Hitlag: stage 9
|
||||
|
||||
// Kart Items
|
||||
SPR_RSHE, // Rocket sneaker
|
||||
|
|
@ -5666,6 +5667,8 @@ typedef enum state
|
|||
S_JANKSPARK3,
|
||||
S_JANKSPARK4,
|
||||
|
||||
S_HITLAG_9,
|
||||
|
||||
// Broly Ki Orb
|
||||
S_BROLY1,
|
||||
S_BROLY2,
|
||||
|
|
@ -6516,6 +6519,7 @@ typedef enum mobj_type
|
|||
MT_DRIFTELECTRICITY,
|
||||
MT_DRIFTELECTRICSPARK,
|
||||
MT_JANKSPARK,
|
||||
MT_HITLAG,
|
||||
|
||||
MT_ROCKETSNEAKER,
|
||||
|
||||
|
|
|
|||
60
src/k_kart.c
60
src/k_kart.c
|
|
@ -3650,6 +3650,56 @@ void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage)
|
|||
}
|
||||
}
|
||||
|
||||
static void K_SpawnHitLagEFX(mobj_t *mo1, mobj_t *mo2, INT32 tics)
|
||||
{
|
||||
mobj_t *spark = NULL;
|
||||
vector3_t offset = { 0, 0, 0 };
|
||||
INT32 i;
|
||||
|
||||
I_Assert(P_MobjWasRemoved(mo1) == false);
|
||||
P_StartQuakeFromMobj(tics, tics * 2 * mapobjectscale, 512 * mapobjectscale, mo1);
|
||||
|
||||
if (P_MobjWasRemoved(mo2) == false)
|
||||
{
|
||||
offset.x = (mo2->x - mo1->x) / 2;
|
||||
offset.y = (mo2->y - mo1->y) / 2;
|
||||
offset.z = (P_GetMobjHead(mo2) - P_GetMobjHead(mo1)) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
offset.z = mo1->height;
|
||||
}
|
||||
|
||||
offset.x = FixedDiv(offset.x, mapobjectscale);
|
||||
offset.y = FixedDiv(offset.y, mapobjectscale);
|
||||
offset.z = FixedDiv(offset.z, mapobjectscale);
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
spark = P_SpawnMobjFromMobj(
|
||||
mo1,
|
||||
offset.x, offset.y, offset.z,
|
||||
MT_HITLAG
|
||||
);
|
||||
P_SetTarget(&spark->target, mo1);
|
||||
|
||||
spark->destscale *= 3;
|
||||
P_SetScale(spark, spark->scale * 3);
|
||||
|
||||
spark->hitlag = 0;
|
||||
|
||||
spark->angle = R_PointToAngle2(
|
||||
mo1->x, mo1->y,
|
||||
spark->x, spark->y
|
||||
);
|
||||
|
||||
if (i & 1)
|
||||
{
|
||||
spark->angle += ANGLE_90;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDamage)
|
||||
{
|
||||
INT32 finalTics = tics;
|
||||
|
|
@ -3690,8 +3740,15 @@ void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDam
|
|||
}
|
||||
}
|
||||
|
||||
finalTics = 9;
|
||||
|
||||
K_AddHitLag(mo1, finalTics, fromDamage);
|
||||
K_AddHitLag(mo2, finalTics, false); // mo2 is the inflictor, so don't use the damage property.
|
||||
|
||||
if (P_MobjWasRemoved(mo1) == false && fromDamage == true)
|
||||
{
|
||||
K_SpawnHitLagEFX(mo1, mo2, finalTics);
|
||||
}
|
||||
}
|
||||
|
||||
void K_AwardPlayerRings(player_t *player, INT32 rings, boolean overload)
|
||||
|
|
@ -3956,7 +4013,6 @@ void K_TumblePlayer(player_t *player, mobj_t *inflictor, mobj_t *source)
|
|||
player->mo->momz = K_TumbleZ(player->mo, player->tumbleHeight * FRACUNIT);
|
||||
|
||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||
P_StartQuakeFromMobj(10, 64 * player->mo->scale, 512 * player->mo->scale, player->mo);
|
||||
}
|
||||
|
||||
angle_t K_StumbleSlope(angle_t angle, angle_t pitch, angle_t roll)
|
||||
|
|
@ -3995,7 +4051,6 @@ void K_StumblePlayer(player_t *player)
|
|||
player->mo->momz = K_TumbleZ(player->mo, player->tumbleHeight * FRACUNIT);
|
||||
|
||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||
P_StartQuakeFromMobj(10, 64 * player->mo->scale, 512 * player->mo->scale, player->mo);
|
||||
|
||||
// Reset slope.
|
||||
player->mo->pitch = player->mo->roll = 0;
|
||||
|
|
@ -4470,7 +4525,6 @@ INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source) // A
|
|||
player->mo->momz = (117 * player->mo->momz) / 200;
|
||||
|
||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||
P_StartQuakeFromMobj(5, 64 * player->mo->scale, 512 * player->mo->scale, player->mo);
|
||||
|
||||
return ringburst;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Make sure this matches the actual number of states
|
|||
*/
|
||||
#define KART_NUMINVSPARKLESANIM 12
|
||||
|
||||
#define MAXHITLAGTICS 18 //12
|
||||
#define MAXHITLAGTICS (20)
|
||||
#define HITLAGJITTERS (FRACUNIT / 20)
|
||||
|
||||
#define GROW_SCALE (2*FRACUNIT)
|
||||
|
|
|
|||
|
|
@ -2521,7 +2521,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
ringburst = K_ExplodePlayer(player, inflictor, source);
|
||||
break;
|
||||
case DMG_WIPEOUT:
|
||||
P_StartQuakeFromMobj(5, 32 * player->mo->scale, 512 * player->mo->scale, player->mo);
|
||||
K_SpinPlayer(player, inflictor, source, KSPIN_WIPEOUT);
|
||||
K_KartPainEnergyFling(player);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue