mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
SPR2_DKR<A TO K EXCLUDING F>: New SPR2s which allow character WADs to define unique kart explosion gibs
This commit is contained in:
parent
ac7249fc54
commit
01503f8bb3
4 changed files with 106 additions and 30 deletions
|
|
@ -369,7 +369,17 @@ 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_LEFTOVER_PARTICLE_CUSTOM_A",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_B",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_C",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_D",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_E",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_F",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_G",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_H",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_I",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_J",
|
||||||
|
"S_KART_LEFTOVER_PARTICLE_CUSTOM_K",
|
||||||
|
|
||||||
"S_KART_TIRE1",
|
"S_KART_TIRE1",
|
||||||
"S_KART_TIRE2",
|
"S_KART_TIRE2",
|
||||||
|
|
|
||||||
36
src/info.c
36
src/info.c
|
|
@ -795,7 +795,17 @@ 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
|
"DKRA", // Kart husk particle (A)
|
||||||
|
"DKRB", // Kart husk particle (B)
|
||||||
|
"DKRC", // Kart husk particle (C)
|
||||||
|
"DKRD", // Kart husk particle (D)
|
||||||
|
"DKRE", // Kart husk particle (E)
|
||||||
|
"DKRF", // Kart husk particle (F) AKA The kart husk itself
|
||||||
|
"DKRG", // Kart husk particle (G)
|
||||||
|
"DKRH", // Kart husk particle (H)
|
||||||
|
"DKRI", // Kart husk particle (I)
|
||||||
|
"DKRJ", // Kart husk particle (J)
|
||||||
|
"DKRK", // Kart husk particle (K)
|
||||||
};
|
};
|
||||||
playersprite_t free_spr2 = SPR2_FIRSTFREESLOT;
|
playersprite_t free_spr2 = SPR2_FIRSTFREESLOT;
|
||||||
|
|
||||||
|
|
@ -840,7 +850,17 @@ 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
|
0, // SPR2_DKRA
|
||||||
|
0, // SPR2_DKRB
|
||||||
|
0, // SPR2_DKRC
|
||||||
|
0, // SPR2_DKRD
|
||||||
|
0, // SPR2_DKRE
|
||||||
|
0, // SPR2_DKRF
|
||||||
|
0, // SPR2_DKRG
|
||||||
|
0, // SPR2_DKRH
|
||||||
|
0, // SPR2_DKRI
|
||||||
|
0, // SPR2_DKRJ
|
||||||
|
0, // SPR2_DKRK
|
||||||
};
|
};
|
||||||
|
|
||||||
// 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)
|
||||||
|
|
@ -905,7 +925,17 @@ 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_PLAY, SPR2_DKRA, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_A}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_A
|
||||||
|
{SPR_PLAY, SPR2_DKRB, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_B}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_B
|
||||||
|
{SPR_PLAY, SPR2_DKRC, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_C}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_C
|
||||||
|
{SPR_PLAY, SPR2_DKRD, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_D}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_D
|
||||||
|
{SPR_PLAY, SPR2_DKRE, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_E}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_E
|
||||||
|
{SPR_PLAY, SPR2_DKRF, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_F},// S_KART_LEFTOVER_PARTICLE_CUSTOM_F
|
||||||
|
{SPR_PLAY, SPR2_DKRG, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_G}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_G
|
||||||
|
{SPR_PLAY, SPR2_DKRH, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_H}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_H
|
||||||
|
{SPR_PLAY, SPR2_DKRI, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_I}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_I
|
||||||
|
{SPR_PLAY, SPR2_DKRJ, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_J}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_J
|
||||||
|
{SPR_PLAY, SPR2_DKRK, 3, {NULL}, 0, 0, S_KART_LEFTOVER_PARTICLE_CUSTOM_K}, // S_KART_LEFTOVER_PARTICLE_CUSTOM_K
|
||||||
|
|
||||||
{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
|
||||||
|
|
|
||||||
24
src/info.h
24
src/info.h
|
|
@ -1329,7 +1329,17 @@ 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_DKRA,
|
||||||
|
SPR2_DKRB,
|
||||||
|
SPR2_DKRC,
|
||||||
|
SPR2_DKRD,
|
||||||
|
SPR2_DKRE,
|
||||||
|
SPR2_DKRF,
|
||||||
|
SPR2_DKRG,
|
||||||
|
SPR2_DKRH,
|
||||||
|
SPR2_DKRI,
|
||||||
|
SPR2_DKRJ,
|
||||||
|
SPR2_DKRK,
|
||||||
|
|
||||||
SPR2_FIRSTFREESLOT,
|
SPR2_FIRSTFREESLOT,
|
||||||
SPR2_LASTFREESLOT = 0x7f,
|
SPR2_LASTFREESLOT = 0x7f,
|
||||||
|
|
@ -1390,7 +1400,17 @@ typedef enum state
|
||||||
|
|
||||||
S_KART_LEFTOVER,
|
S_KART_LEFTOVER,
|
||||||
S_KART_LEFTOVER_NOTIRES,
|
S_KART_LEFTOVER_NOTIRES,
|
||||||
S_KART_LEFTOVER_CUSTOM,
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_A,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_B,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_C,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_D,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_E,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_F,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_G,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_H,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_I,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_J,
|
||||||
|
S_KART_LEFTOVER_PARTICLE_CUSTOM_K,
|
||||||
|
|
||||||
S_KART_TIRE1,
|
S_KART_TIRE1,
|
||||||
S_KART_TIRE2,
|
S_KART_TIRE2,
|
||||||
|
|
|
||||||
|
|
@ -55,16 +55,32 @@ struct Particle : Mobj
|
||||||
|
|
||||||
bool is_shrapnel() const { return sprite == SPR_KRBM; }
|
bool is_shrapnel() const { return sprite == SPR_KRBM; }
|
||||||
|
|
||||||
static void spew(Mobj* source)
|
static void spew(Mobj* source,int pskin)
|
||||||
{
|
{
|
||||||
auto generic = [&](spritenum_t sprite, int degr, Fixed scale, int momx, const Vec2<int>& momz)
|
auto generic = [&](spritenum_t sprite, int pskinn, statenum_t spr2state, int degr, Fixed scale, int momx, const Vec2<int>& momz)
|
||||||
{
|
{
|
||||||
Particle* x = source->spawn_from<Particle>({}, MT_KART_PARTICLE);
|
Particle* x = source->spawn_from<Particle>({}, MT_KART_PARTICLE);
|
||||||
if (x)
|
if (x)
|
||||||
{
|
{
|
||||||
x->sprite = sprite;
|
if(pskinn >= 0 && pskinn < numskins
|
||||||
|
&& spr2state > S_NULL && spr2state < NUMSTATES &&
|
||||||
|
states[spr2state].frame >= 0 && states[spr2state].frame < NUMPLAYERSPRITES * 2 && //'NUMPLAYERSPRITES * 2' being the length of the 'skin_t.sprites' array member
|
||||||
|
skins[pskinn]->sprites[states[spr2state].frame].numframes > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
x->skin = (void*)(&skins[pskinn]);
|
||||||
|
x->state(spr2state);
|
||||||
|
//frame will be set by state()
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//state will be set by mapthing definition
|
||||||
|
x->sprite = sprite;
|
||||||
|
x->frame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
x->frame |=FF_SEMIBRIGHT;
|
||||||
|
|
||||||
x->color = source->color;
|
x->color = source->color;
|
||||||
x->frame = FF_SEMIBRIGHT;
|
|
||||||
x->lightlevel = 112;
|
x->lightlevel = 112;
|
||||||
x->scale(scale * x->scale());
|
x->scale(scale * x->scale());
|
||||||
|
|
||||||
|
|
@ -79,34 +95,34 @@ struct Particle : Mobj
|
||||||
return x;
|
return x;
|
||||||
};
|
};
|
||||||
|
|
||||||
auto part = [&](spritenum_t sprite, int degr, Fixed scale)
|
auto part = [&](spritenum_t sprite, int pskinn, statenum_t spr2state, int degr, Fixed scale)
|
||||||
{
|
{
|
||||||
return generic(sprite, degr, scale, 2, {8, 16});
|
return generic(sprite, pskinn, spr2state, degr, scale, 2, {8, 16});
|
||||||
};
|
};
|
||||||
|
|
||||||
auto radial = [&](spritenum_t sprite, int ofs, int spokes, Fixed scale)
|
auto radial = [&](spritenum_t sprite, int pskinn, statenum_t spr2state, int ofs, int spokes, Fixed scale)
|
||||||
{
|
{
|
||||||
radial_generic(ofs, spokes, [&](int ang) { part(sprite, ang, scale); });
|
radial_generic(ofs, spokes, [&](int ang) { part(sprite, pskinn, spr2state, ang, scale); });
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr Fixed kSmall = 3*FRACUNIT/2;
|
constexpr Fixed kSmall = 3*FRACUNIT/2;
|
||||||
constexpr Fixed kMedium = 7*FRACUNIT/4;
|
constexpr Fixed kMedium = 7*FRACUNIT/4;
|
||||||
constexpr Fixed kLarge = 2*FRACUNIT;
|
constexpr Fixed kLarge = 2*FRACUNIT;
|
||||||
|
|
||||||
part(SPR_DIEE, 0, kLarge); // steering wheel
|
part(SPR_DIEE, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_E, 0, kLarge); // steering wheel
|
||||||
part(SPR_DIEK, 180 + 45, kLarge); // engine
|
part(SPR_DIEK, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_K, 180 + 45, kLarge); // engine
|
||||||
|
|
||||||
part(SPR_DIEG, 90, kLarge); // left pedal base
|
part(SPR_DIEG, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_G, 90, kLarge); // left pedal base
|
||||||
part(SPR_DIED, -90, kLarge); // right pedal base
|
part(SPR_DIED, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_D, -90, kLarge); // right pedal base
|
||||||
|
|
||||||
radial(SPR_DIEI, 90, 2, kLarge); // wheel axle bars
|
radial(SPR_DIEI, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_I, 90, 2, kLarge); // wheel axle bars
|
||||||
radial(SPR_DIEC, 90, 2, kLarge); // pedal tips
|
radial(SPR_DIEC, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_C, 90, 2, kLarge); // pedal tips
|
||||||
radial(SPR_DIEA, 45, 4, kMedium); // tires
|
radial(SPR_DIEA, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_A, 45, 4, kMedium); // tires
|
||||||
radial(SPR_DIEH, 45, 4, kMedium); // struts / springs
|
radial(SPR_DIEH, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_H, 45, 4, kMedium); // struts / springs
|
||||||
radial(SPR_DIEB, 360/12, 6, kSmall); // pipeframe bars
|
radial(SPR_DIEB, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_B, 360/12, 6, kSmall); // pipeframe bars
|
||||||
radial(SPR_DIEJ, 360/16, 8, kSmall); // screws
|
radial(SPR_DIEJ, pskin, S_KART_LEFTOVER_PARTICLE_CUSTOM_J, 360/16, 8, kSmall); // screws
|
||||||
|
|
||||||
radial_generic(0, 6, [&](int degr) { generic(SPR_KRBM, degr, kSmall, 8, {22, 28}); }); // shrapnel
|
radial_generic(0, 6, [&](int degr) { generic(SPR_KRBM, -1, S_NULL, degr, kSmall, 8, {22, 28}); }); // shrapnel
|
||||||
|
|
||||||
// explosion
|
// explosion
|
||||||
radial_generic(
|
radial_generic(
|
||||||
|
|
@ -317,15 +333,15 @@ struct Kart : Mobj
|
||||||
|
|
||||||
Mobj* p = player();
|
Mobj* p = player();
|
||||||
bool pValid = Mobj::valid(p) && p->player;
|
bool pValid = Mobj::valid(p) && p->player;
|
||||||
bool hasCustomHusk = pValid && skins[p->player->skin]->sprites[SPR2_DKRT].numframes;
|
int pSkin = pValid ? p->player->skin : -1; //rip lyman lineface :-1
|
||||||
|
bool hasCustomHusk = pSkin >=0 && pSkin < numskins && skins[pSkin]->sprites[SPR2_DKRF].numframes;
|
||||||
|
|
||||||
if(hasCustomHusk)
|
if(hasCustomHusk)
|
||||||
{
|
{
|
||||||
skin = (void*)(skins[p->player->skin]);
|
skin = (void*)(skins[pSkin]);
|
||||||
frame = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Particle::spew(this);
|
Particle::spew(this,pSkin);
|
||||||
scale(3*scale()/2);
|
scale(3*scale()/2);
|
||||||
|
|
||||||
if(hasCustomHusk){
|
if(hasCustomHusk){
|
||||||
|
|
@ -336,7 +352,7 @@ struct Kart : Mobj
|
||||||
}
|
}
|
||||||
|
|
||||||
health = 1;
|
health = 1;
|
||||||
state(!hasCustomHusk ? S_KART_LEFTOVER_NOTIRES : S_KART_LEFTOVER_CUSTOM);
|
state(!hasCustomHusk ? S_KART_LEFTOVER_NOTIRES : S_KART_LEFTOVER_PARTICLE_CUSTOM_F);
|
||||||
cooldown(20);
|
cooldown(20);
|
||||||
burning(burn_duration());
|
burning(burn_duration());
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue