From 68ac9080f3967cf2b7be7f76d4cf247d10635e51 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 10 Apr 2019 23:33:01 -0400 Subject: [PATCH] New ring debt indicator & SPB ring lock animations --- src/dehacked.c | 3 +-- src/info.c | 3 +-- src/info.h | 3 +-- src/k_kart.c | 48 ++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 79d8ffa9a..604e617d5 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7164,8 +7164,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_OPAQUESMOKE4", "S_OPAQUESMOKE5", - "S_RINGDEBT1", - "S_RINGDEBT2", + "S_RINGDEBT", #ifdef SEENAMES "S_NAMECHECK", diff --git a/src/info.c b/src/info.c index bc0dbb875..af447c518 100644 --- a/src/info.c +++ b/src/info.c @@ -3413,8 +3413,7 @@ state_t states[NUMSTATES] = {SPR_SMOK, 3, 7, {NULL}, 0, 0, S_OPAQUESMOKE5}, // S_OPAQUESMOKE4 {SPR_SMOK, 4, 8, {NULL}, 0, 0, S_NULL}, // S_OPAQUESMOKE5 - {SPR_MXCL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_RINGDEBT1 - {SPR_MXCL, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_RINGDEBT2 + {SPR_MXCL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_RINGDEBT #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK diff --git a/src/info.h b/src/info.h index 6b5fdbf23..1cfc12949 100644 --- a/src/info.h +++ b/src/info.h @@ -4071,8 +4071,7 @@ typedef enum state S_OPAQUESMOKE4, S_OPAQUESMOKE5, - S_RINGDEBT1, - S_RINGDEBT2, + S_RINGDEBT, #ifdef SEENAMES S_NAMECHECK, diff --git a/src/k_kart.c b/src/k_kart.c index 4d85dff08..e627d9ee0 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4934,9 +4934,12 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) { mobj_t *debtflag = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy, player->mo->z + player->mo->momz + player->mo->height + (24*player->mo->scale), MT_THOK); - P_SetMobjState(debtflag, ((leveltime/5 & 1) ? S_RINGDEBT2 : S_RINGDEBT1)); + P_SetMobjState(debtflag, S_RINGDEBT); P_SetScale(debtflag, (debtflag->destscale = player->mo->scale)); K_MatchGenericExtraFlags(debtflag, player->mo); + debtflag->frame += (leveltime % 4); + if ((leveltime/12) & 1) + debtflag->frame += 4; debtflag->color = player->skincolor; debtflag->fuse = 2; if (P_IsLocalPlayer(player)) @@ -6786,6 +6789,7 @@ static patch_t *kp_facehighlight[8]; static patch_t *kp_ringsticker[2]; static patch_t *kp_ring[6]; static patch_t *kp_ringdebtminus; +static patch_t *kp_ringspblock[16]; static patch_t *kp_speedometersticker; static patch_t *kp_speedometerlabel[4]; @@ -6942,6 +6946,14 @@ void K_LoadKartHUDGraphics(void) kp_ringdebtminus = W_CachePatchName("RDEBTMIN", PU_HUDGFX); + sprintf(buffer, "SPBRNGxx"); + for (i = 0; i < 16; i++) + { + buffer[6] = '0'+((i+1) / 10); + buffer[7] = '0'+((i+1) % 10); + kp_ringspblock[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } + // Speedometer kp_speedometersticker = W_CachePatchName("K_SPDMBG", PU_HUDGFX); @@ -8265,6 +8277,7 @@ static void K_drawKartRingsAndLives(void) static UINT8 ringanim_frame = 0; static UINT8 ringanim_tics = 0; static UINT8 ringanim_delay = RINGANIM_DELAYMAX+1; + static UINT8 ringlockanim = 0; SINT8 ringanim_realframe = ringanim_frame; INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT); @@ -8281,11 +8294,6 @@ static void K_drawKartRingsAndLives(void) ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE); colorring = true; } - else if (stplyr->kartstuff[k_ringlock] && !(leveltime/5 & 1)) // SPB ring lock - { - ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_JET, GTC_CACHE); - colorring = true; - } else if (stplyr->kartstuff[k_rings] >= 20) // Maxed out ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_YELLOW, GTC_CACHE); @@ -8345,6 +8353,34 @@ static void K_drawKartRingsAndLives(void) #undef RINGANIM_FLIPFRAME #undef RINGANIM_DELAYMAX + // SPB ring lock + if (stplyr->kartstuff[k_ringlock]) + { + UINT8 normalanim = (leveltime % 14); + UINT8 debtanim = 14 + (leveltime % 2); + + if (ringlockanim >= 14) // debt animation + { + if ((stplyr->kartstuff[k_rings] > 0) // Get out of 0 ring animation + && (normalanim == 3 || normalanim == 10)) // on these transition frames. + ringlockanim = normalanim; + else + ringlockanim = debtanim; + } + else // normal animation + { + if ((stplyr->kartstuff[k_rings] <= 0) // Go into 0 ring animation + && (ringlockanim == 1 || ringlockanim == 8)) // on these transition frames. + ringlockanim = debtanim; + else + ringlockanim = normalanim; + } + + V_DrawScaledPatch(LAPS_X-5, LAPS_Y-28, V_HUDTRANS|splitflags, kp_ringspblock[ringlockanim]); + } + else + ringlockanim = (leveltime % 14); // reset to normal anim next time + // Lives if (!netgame) {