mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'user-defined-death-kart-frame' into 'master'
SPR2_DKRT: A new SPR2 which allows character WADs to define a unique kart explosion husk See merge request KartKrew/RingRacers!55
This commit is contained in:
commit
dd45f3cd61
5 changed files with 33 additions and 6 deletions
|
|
@ -369,6 +369,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
|
|
||||||
"S_KART_LEFTOVER",
|
"S_KART_LEFTOVER",
|
||||||
"S_KART_LEFTOVER_NOTIRES",
|
"S_KART_LEFTOVER_NOTIRES",
|
||||||
|
"S_KART_LEFTOVER_CUSTOM",
|
||||||
|
|
||||||
"S_KART_TIRE1",
|
"S_KART_TIRE1",
|
||||||
"S_KART_TIRE2",
|
"S_KART_TIRE2",
|
||||||
|
|
|
||||||
|
|
@ -795,6 +795,7 @@ char spr2names[NUMPLAYERSPRITES][5] =
|
||||||
"SIGN", "SIGL", "SSIG", // Finish signpost
|
"SIGN", "SIGL", "SSIG", // Finish signpost
|
||||||
"XTRA", // Three Faces of Darkness
|
"XTRA", // Three Faces of Darkness
|
||||||
"TALK", // Dialogue
|
"TALK", // Dialogue
|
||||||
|
"DKRT", // Kart husk
|
||||||
};
|
};
|
||||||
playersprite_t free_spr2 = SPR2_FIRSTFREESLOT;
|
playersprite_t free_spr2 = SPR2_FIRSTFREESLOT;
|
||||||
|
|
||||||
|
|
@ -839,13 +840,14 @@ playersprite_t spr2defaults[NUMPLAYERSPRITES] = {
|
||||||
SPR2_SIGN, // SPR2_SSIG
|
SPR2_SIGN, // SPR2_SSIG
|
||||||
0, // SPR2_XTRA
|
0, // SPR2_XTRA
|
||||||
0, // SPR2_TALK
|
0, // SPR2_TALK
|
||||||
|
0, // SPR2_DKRT
|
||||||
};
|
};
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
state_t states[NUMSTATES] =
|
state_t states[NUMSTATES] =
|
||||||
{
|
{
|
||||||
// frame is masked through FF_FRAMEMASK
|
// frame is masked through FF_FRAMEMASK
|
||||||
// FF_ANIMATE makes simple state animations (var1 #frames, var2 tic delay)
|
// FF_ANIMATE makes simple state animations (var1 #frames, var2 tic delay) (var1 is ignored in P_SetupStateAnimation() if sprite is SPR_PLAY)
|
||||||
// FF_FULLBRIGHT activates the fullbright colormap
|
// FF_FULLBRIGHT activates the fullbright colormap
|
||||||
// use FF_TRANS10 - FF_TRANS90 for easy translucency
|
// use FF_TRANS10 - FF_TRANS90 for easy translucency
|
||||||
// (or tr_trans10<<FF_TRANSSHIFT if you want to make it hard on yourself)
|
// (or tr_trans10<<FF_TRANSSHIFT if you want to make it hard on yourself)
|
||||||
|
|
@ -903,6 +905,7 @@ state_t states[NUMSTATES] =
|
||||||
|
|
||||||
{SPR_KART, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_LEFTOVER
|
{SPR_KART, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_LEFTOVER
|
||||||
{SPR_DIEF, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_LEFTOVER_NOTIRES
|
{SPR_DIEF, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_LEFTOVER_NOTIRES
|
||||||
|
{SPR_PLAY, SPR2_DKRT,3,{NULL},0,0,S_KART_LEFTOVER_CUSTOM},// S_KART_LEFTOVER_CUSTOM
|
||||||
|
|
||||||
{SPR_TIRE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE1
|
{SPR_TIRE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE1
|
||||||
{SPR_TIRE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE2
|
{SPR_TIRE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE2
|
||||||
|
|
|
||||||
|
|
@ -1329,6 +1329,7 @@ typedef enum playersprite
|
||||||
SPR2_SIGN, SPR2_SIGL, SPR2_SSIG,
|
SPR2_SIGN, SPR2_SIGL, SPR2_SSIG,
|
||||||
SPR2_XTRA,
|
SPR2_XTRA,
|
||||||
SPR2_TALK,
|
SPR2_TALK,
|
||||||
|
SPR2_DKRT,
|
||||||
|
|
||||||
SPR2_FIRSTFREESLOT,
|
SPR2_FIRSTFREESLOT,
|
||||||
SPR2_LASTFREESLOT = 0x7f,
|
SPR2_LASTFREESLOT = 0x7f,
|
||||||
|
|
@ -1389,6 +1390,7 @@ typedef enum state
|
||||||
|
|
||||||
S_KART_LEFTOVER,
|
S_KART_LEFTOVER,
|
||||||
S_KART_LEFTOVER_NOTIRES,
|
S_KART_LEFTOVER_NOTIRES,
|
||||||
|
S_KART_LEFTOVER_CUSTOM,
|
||||||
|
|
||||||
S_KART_TIRE1,
|
S_KART_TIRE1,
|
||||||
S_KART_TIRE2,
|
S_KART_TIRE2,
|
||||||
|
|
|
||||||
|
|
@ -309,15 +309,34 @@ struct Kart : Mobj
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (health <= 1)
|
if (health <= 1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mobj* p = player();
|
||||||
|
bool pValid = Mobj::valid(p) && p->player;
|
||||||
|
bool hasCustomHusk = pValid && skins[p->player->skin].sprites[SPR2_DKRT].numframes;
|
||||||
|
|
||||||
|
if(hasCustomHusk)
|
||||||
|
{
|
||||||
|
skin = (void*)(&skins[p->player->skin]);
|
||||||
|
frame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
Particle::spew(this);
|
Particle::spew(this);
|
||||||
scale(3 * scale() / 2);
|
scale(3*scale()/2);
|
||||||
|
|
||||||
|
if(hasCustomHusk){
|
||||||
|
flags |= MF_NOSQUISH; //K_Squish() automates spritexscale/spriteyscale & this flag prevents that at the cost of no squish visual when the kart husk hits the ground
|
||||||
|
fixed_t huskScale = FixedDiv(mapobjectscale, scale());
|
||||||
|
spritexscale(FixedMul(spritexscale(), huskScale));
|
||||||
|
spriteyscale(FixedMul(spriteyscale(), huskScale));
|
||||||
|
}
|
||||||
|
|
||||||
health = 1;
|
health = 1;
|
||||||
state(S_KART_LEFTOVER_NOTIRES);
|
state(!hasCustomHusk ? S_KART_LEFTOVER_NOTIRES : S_KART_LEFTOVER_CUSTOM);
|
||||||
cooldown(20);
|
cooldown(20);
|
||||||
burning(burn_duration());
|
burning(burn_duration());
|
||||||
|
|
||||||
|
|
@ -326,9 +345,9 @@ struct Kart : Mobj
|
||||||
voice(sfx_die00);
|
voice(sfx_die00);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Mobj* p = player(); Mobj::valid(p))
|
if(pValid)
|
||||||
{
|
{
|
||||||
if (p->player && skins[p->player->skin].flags & SF_BADNIK)
|
if((skins[p->player->skin].flags & SF_BADNIK))
|
||||||
{
|
{
|
||||||
P_SpawnBadnikExplosion(p);
|
P_SpawnBadnikExplosion(p);
|
||||||
p->spritescale({2*FRACUNIT, 2*FRACUNIT});
|
p->spritescale({2*FRACUNIT, 2*FRACUNIT});
|
||||||
|
|
@ -446,7 +465,7 @@ private:
|
||||||
P_PlayDeathSound(p);
|
P_PlayDeathSound(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
// First tick after hitlag: destroyed kart appears!
|
// First tick after hitlag: destroyed kart appears! State will change away from S_INVISIBLE inside destroy() where S_INVISIBLE was set in static spawn()
|
||||||
if (state()->num() == S_INVISIBLE)
|
if (state()->num() == S_INVISIBLE)
|
||||||
{
|
{
|
||||||
destroy();
|
destroy();
|
||||||
|
|
|
||||||
|
|
@ -9880,10 +9880,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
case MT_KART_LEFTOVER:
|
case MT_KART_LEFTOVER:
|
||||||
{
|
{
|
||||||
Obj_DestroyedKartThink(mobj);
|
Obj_DestroyedKartThink(mobj);
|
||||||
|
|
||||||
if (P_MobjWasRemoved(mobj))
|
if (P_MobjWasRemoved(mobj))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue