From 04212cc5062c3548f6af2f691fca6998988c0e20 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 20 Oct 2018 21:02:25 -0400 Subject: [PATCH] Karma SPB instead of confusing Mine gfx --- src/dehacked.c | 21 +++++++- src/info.c | 25 ++++++++-- src/info.h | 21 +++++++- src/p_mobj.c | 128 ++++++++++++++++++++++++++----------------------- 4 files changed, 129 insertions(+), 66 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 2e0fdf29..875c81cf 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6727,7 +6727,26 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_PLAYERARROW_WANTED6", "S_PLAYERARROW_WANTED7", - "S_PLAYERBOMB", // Player bomb overlay + "S_PLAYERBOMB1", // Player bomb overlay + "S_PLAYERBOMB2", + "S_PLAYERBOMB3", + "S_PLAYERBOMB4", + "S_PLAYERBOMB5", + "S_PLAYERBOMB6", + "S_PLAYERBOMB7", + "S_PLAYERBOMB8", + "S_PLAYERBOMB9", + "S_PLAYERBOMB10", + "S_PLAYERBOMB11", + "S_PLAYERBOMB12", + "S_PLAYERBOMB13", + "S_PLAYERBOMB14", + "S_PLAYERBOMB15", + "S_PLAYERBOMB16", + "S_PLAYERBOMB17", + "S_PLAYERBOMB18", + "S_PLAYERBOMB19", + "S_PLAYERBOMB20", "S_PLAYERITEM", // Player item overlay "S_PLAYERFAKE", // Player fake overlay diff --git a/src/info.c b/src/info.c index bebced60..7c77132e 100644 --- a/src/info.c +++ b/src/info.c @@ -3020,11 +3020,30 @@ state_t states[NUMSTATES] = {SPR_WANT, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_PLAYERARROW_WANTED7}, // S_PLAYERARROW_WANTED6 {SPR_WANT, FF_FULLBRIGHT|6, 3, {NULL}, 0, 0, S_PLAYERARROW_WANTED1}, // S_PLAYERARROW_WANTED7 - {SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB2}, // S_PLAYERBOMB1 + {SPR_SPBM, 1, 1, {NULL}, 0, 0, S_PLAYERBOMB3}, // S_PLAYERBOMB2 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB4}, // S_PLAYERBOMB3 + {SPR_SPBM, 2, 1, {NULL}, 0, 0, S_PLAYERBOMB5}, // S_PLAYERBOMB4 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB6}, // S_PLAYERBOMB5 + {SPR_SPBM, 3, 1, {NULL}, 0, 0, S_PLAYERBOMB7}, // S_PLAYERBOMB6 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB8}, // S_PLAYERBOMB7 + {SPR_SPBM, 4, 1, {NULL}, 0, 0, S_PLAYERBOMB9}, // S_PLAYERBOMB8 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB10}, // S_PLAYERBOMB9 + {SPR_SPBM, 5, 1, {NULL}, 0, 0, S_PLAYERBOMB11}, // S_PLAYERBOMB10 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB12}, // S_PLAYERBOMB11 + {SPR_SPBM, 6, 1, {NULL}, 0, 0, S_PLAYERBOMB13}, // S_PLAYERBOMB12 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB14}, // S_PLAYERBOMB13 + {SPR_SPBM, 7, 1, {NULL}, 0, 0, S_PLAYERBOMB15}, // S_PLAYERBOMB14 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB16}, // S_PLAYERBOMB15 + {SPR_SPBM, 8, 1, {NULL}, 0, 0, S_PLAYERBOMB17}, // S_PLAYERBOMB16 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB18}, // S_PLAYERBOMB17 + {SPR_SPBM, 8, 1, {NULL}, 0, 0, S_PLAYERBOMB19}, // S_PLAYERBOMB18 + {SPR_SPBM, 0, 1, {NULL}, 0, 0, S_PLAYERBOMB20}, // S_PLAYERBOMB19 + {SPR_SPBM, 8, 1, {NULL}, 0, 0, S_PLAYERBOMB1}, // S_PLAYERBOMB20 {SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM {SPR_FITM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERFAKE - {SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL + {SPR_PBOM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL // Oh no it's annoying lightning states....... // Lightning Sparks (it's the ones we'll use for the radius) @@ -17143,7 +17162,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_KARMAHITBOX -1, // doomednum - S_PLAYERBOMB, // spawnstate + S_PLAYERBOMB1, // spawnstate 1000, // spawnhealth S_PLAYERITEM, // seestate sfx_kc2e, // seesound diff --git a/src/info.h b/src/info.h index 41b08928..099342dc 100644 --- a/src/info.h +++ b/src/info.h @@ -3569,7 +3569,26 @@ typedef enum state S_PLAYERARROW_WANTED6, S_PLAYERARROW_WANTED7, - S_PLAYERBOMB, + S_PLAYERBOMB1, // Karma player overlays + S_PLAYERBOMB2, + S_PLAYERBOMB3, + S_PLAYERBOMB4, + S_PLAYERBOMB5, + S_PLAYERBOMB6, + S_PLAYERBOMB7, + S_PLAYERBOMB8, + S_PLAYERBOMB9, + S_PLAYERBOMB10, + S_PLAYERBOMB11, + S_PLAYERBOMB12, + S_PLAYERBOMB13, + S_PLAYERBOMB14, + S_PLAYERBOMB15, + S_PLAYERBOMB16, + S_PLAYERBOMB17, + S_PLAYERBOMB18, + S_PLAYERBOMB19, + S_PLAYERBOMB20, S_PLAYERITEM, S_PLAYERFAKE, diff --git a/src/p_mobj.c b/src/p_mobj.c index 4b9682c6..2d62fc6c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8385,74 +8385,80 @@ void P_MobjThinker(mobj_t *mobj) } break; case MT_KARMAHITBOX: - if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator - || (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper])) { - P_RemoveMobj(mobj); - return; - } + statenum_t state = (mobj->state-states); - P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); - mobj->scalespeed = mobj->target->scalespeed; - mobj->destscale = mobj->target->destscale; - P_SetScale(mobj, mobj->target->scale); - mobj->color = mobj->target->color; - mobj->colorized = (mobj->target->player->kartstuff[k_comebackmode]); - - if (mobj->target->player->kartstuff[k_comebacktimer] > 0) - { - if (mobj->state != &states[mobj->info->spawnstate]) - P_SetMobjState(mobj, mobj->info->spawnstate); - - if (mobj->target->player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1)) - mobj->flags2 &= ~MF2_DONTDRAW; - else - mobj->flags2 |= MF2_DONTDRAW; - } - else - { - if (!mobj->target->player->kartstuff[k_comebackmode] - && mobj->state != &states[mobj->info->spawnstate]) - P_SetMobjState(mobj, mobj->info->spawnstate); - else if (mobj->target->player->kartstuff[k_comebackmode] == 1 - && mobj->state != &states[mobj->info->seestate]) - P_SetMobjState(mobj, mobj->info->seestate); - else if (mobj->target->player->kartstuff[k_comebackmode] == 2 - && mobj->state != &states[mobj->info->painstate]) - P_SetMobjState(mobj, mobj->info->painstate); - - if (mobj->target->player->powers[pw_flashing] && (leveltime & 1)) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - } - - // Now for the wheels - { - const fixed_t rad = FixedMul(mobjinfo[MT_PLAYER].radius, mobj->target->scale); - mobj_t *cur = mobj->hnext; - - while (cur && !P_MobjWasRemoved(cur)) + if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator + || (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper])) { - fixed_t offx = rad; - fixed_t offy = rad; + P_RemoveMobj(mobj); + return; + } - if (cur->lastlook == 1 || cur->lastlook == 3) - offx *= -1; - if (cur->lastlook == 2 || cur->lastlook == 3) - offy *= -1; + P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); + mobj->angle = mobj->target->angle; + mobj->scalespeed = mobj->target->scalespeed; + mobj->destscale = mobj->target->destscale; + P_SetScale(mobj, mobj->target->scale); + mobj->color = mobj->target->color; + mobj->colorized = true; - P_TeleportMove(cur, mobj->x + offx, mobj->y + offy, mobj->z); - cur->scalespeed = mobj->target->scalespeed; - cur->destscale = mobj->target->destscale; - P_SetScale(cur, mobj->target->scale); - - if (mobj->flags2 & MF2_DONTDRAW) - cur->flags2 |= MF2_DONTDRAW; + if (mobj->target->player->kartstuff[k_comebacktimer] > 0) + { + if (state < mobj->info->spawnstate || state > mobj->info->spawnstate+19) + P_SetMobjState(mobj, mobj->info->spawnstate); + if (mobj->target->player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1)) + mobj->flags2 &= ~MF2_DONTDRAW; else - cur->flags2 &= ~MF2_DONTDRAW; + mobj->flags2 |= MF2_DONTDRAW; + } + else + { + if (!mobj->target->player->kartstuff[k_comebackmode] + && (state < mobj->info->spawnstate || state > mobj->info->spawnstate+19)) + P_SetMobjState(mobj, mobj->info->spawnstate); + else if (mobj->target->player->kartstuff[k_comebackmode] == 1 + && state != mobj->info->seestate) + P_SetMobjState(mobj, mobj->info->seestate); + else if (mobj->target->player->kartstuff[k_comebackmode] == 2 + && state != mobj->info->painstate) + P_SetMobjState(mobj, mobj->info->painstate); - cur = cur->hnext; + if (mobj->target->player->powers[pw_flashing] && (leveltime & 1)) + mobj->flags2 |= MF2_DONTDRAW; + else + mobj->flags2 &= ~MF2_DONTDRAW; + } + + // Now for the wheels + { + const fixed_t rad = FixedMul(mobjinfo[MT_PLAYER].radius, mobj->target->scale); + mobj_t *cur = mobj->hnext; + + while (cur && !P_MobjWasRemoved(cur)) + { + fixed_t offx = rad; + fixed_t offy = rad; + + if (cur->lastlook == 1 || cur->lastlook == 3) + offx *= -1; + if (cur->lastlook == 2 || cur->lastlook == 3) + offy *= -1; + + P_TeleportMove(cur, mobj->x + offx, mobj->y + offy, mobj->z); + cur->scalespeed = mobj->target->scalespeed; + cur->destscale = mobj->target->destscale; + P_SetScale(cur, mobj->target->scale); + cur->color = mobj->target->color; + cur->colorized = true; + + if (mobj->flags2 & MF2_DONTDRAW) + cur->flags2 |= MF2_DONTDRAW; + else + cur->flags2 &= ~MF2_DONTDRAW; + + cur = cur->hnext; + } } } break;