diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index c6c25cb10..934e957bb 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1195,7 +1195,7 @@ static void HWR_GetBlendedTexture(patch_t *patch, patch_t *blendpatch, INT32 ski static boolean HWR_AllowModel(mobj_t *mobj) { // Don't allow rendering of model for these. - if (mobj->sprite2 == SPR2_XTRA || mobj->sprite2 == SPR2_SIGN || mobj->sprite2 == SPR2_SIGL || mobj->sprite2 == SPR2_SSIG || mobj->sprite2 == SPR2_TALK) + if (mobj->sprite2 == SPR2_XTRA || mobj->sprite2 == SPR2_SIGN || mobj->sprite2 == SPR2_SIGL || mobj->sprite2 == SPR2_SSIG || mobj->sprite2 == SPR2_TALK || mobj->sprite2 == SPR2_DKRT) // TODO: Remove SPR2_DKRT from this list of clauses once player-specific destroyed karts have an associated model return false; // Otherwise, render the model. diff --git a/src/info.c b/src/info.c index c639c7c35..a09a00dbc 100644 --- a/src/info.c +++ b/src/info.c @@ -839,6 +839,7 @@ playersprite_t spr2defaults[NUMPLAYERSPRITES] = { SPR2_SIGN, // SPR2_SSIG 0, // SPR2_XTRA 0, // SPR2_TALK + 0, // SPR2_DKRT }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -902,7 +903,7 @@ state_t states[NUMSTATES] = {SPR_NULL, 0, -1, {NULL}, 0, 0, S_OBJPLACE_DUMMY}, // S_OBJPLACE_DUMMY {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, SPR2_DKRT, -1, {NULL}, 0, 0, S_NULL}, // S_KART_LEFTOVER_NOTIRES {SPR_TIRE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE1 {SPR_TIRE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE2 diff --git a/src/info.h b/src/info.h index dc9006856..3246580ff 100644 --- a/src/info.h +++ b/src/info.h @@ -1329,6 +1329,7 @@ typedef enum playersprite SPR2_SIGN, SPR2_SIGL, SPR2_SSIG, SPR2_XTRA, SPR2_TALK, + SPR2_DKRT, SPR2_FIRSTFREESLOT, SPR2_LASTFREESLOT = 0x7f, diff --git a/src/objects/destroyed-kart.cpp b/src/objects/destroyed-kart.cpp index b029d8304..3da915467 100644 --- a/src/objects/destroyed-kart.cpp +++ b/src/objects/destroyed-kart.cpp @@ -328,11 +328,21 @@ struct Kart : Mobj if (Mobj* p = player(); Mobj::valid(p)) { - if (p->player && skins[p->player->skin].flags & SF_BADNIK) + if (p->player) { - P_SpawnBadnikExplosion(p); - p->spritescale({2*FRACUNIT, 2*FRACUNIT}); - p->flags |= MF_NOSQUISH; + skin = (&skins[p->player->skin]); + color = (p->player->skincolor); + + // it's necessary to refresh SPR2 on skin changes. + state(S_KART_LEFTOVER_NOTIRES); + sprite2 = (P_GetSkinSprite2(static_cast(skin), SPR2_DKRT, NULL));; + + if(skins[p->player->skin].flags & SF_BADNIK){ + P_SpawnBadnikExplosion(p); + p->spritescale({2*FRACUNIT, 2*FRACUNIT}); + p->flags |= MF_NOSQUISH; + } + } p->state(S_KART_DEAD);