From 647ab66c2fc6f14b55f0085e85a530a408ae67fe Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 3 Mar 2024 00:46:21 -0700 Subject: [PATCH] WIP: low-ring conveyance fixups --- src/d_player.h | 1 + src/k_kart.c | 29 +++++++++++++++++++++++++++++ src/lua_playerlib.c | 4 ++++ src/p_enemy.c | 10 ++++++++++ src/p_saveg.c | 2 ++ 5 files changed, 46 insertions(+) diff --git a/src/d_player.h b/src/d_player.h index 098ed8bd1..ab30fc934 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -987,6 +987,7 @@ struct player_t INT16 incontrol; // -1 to -175 when spinning out or tumbling, 1 to 175 when not. Use to check for combo hits or emergency inputs. UINT16 progressivethrust; // When getting beat up in GTR_BUMPERS, speed up the longer you've been out of control. + UINT8 ringvisualwarning; boolean analoginput; // Has an input been recorded that requires analog usage? For input display. diff --git a/src/k_kart.c b/src/k_kart.c index 5c07f26f9..b4c0a5011 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8437,6 +8437,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) debtflag->color = player->skincolor; debtflag->fuse = 2; + + if (!(gametyperules & GTR_SPHERES)) + { + P_SetScale(debtflag, + Easing_InQuint( + min(FRACUNIT, FRACUNIT*player->ringvisualwarning/(TICRATE*3)), + debtflag->scale, + debtflag->scale*2 + ) + ); + if (player->ringvisualwarning <= 1) + debtflag->renderflags = K_GetPlayerDontDrawFlag(player); + } + } if (player->springstars && (leveltime & 1)) @@ -9013,6 +9027,21 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->incontrol++; } + if (player->rings <= 0) + { + if (player->ringvisualwarning > 1) + player->ringvisualwarning--; + } + else + { + player->ringvisualwarning = 0; + } + + if (player->ringvisualwarning == 0 && player->rings <= 0) + { + player->ringvisualwarning = 6*TICRATE/2; + } + player->incontrol = min(player->incontrol, 5*TICRATE); player->incontrol = max(player->incontrol, -5*TICRATE); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index e2cbffd0a..b323b3ca8 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -263,6 +263,8 @@ static int player_get(lua_State *L) lua_pushboolean(L, plr->incontrol); else if (fastcmp(field,"progressivethrust")) lua_pushboolean(L, plr->progressivethrust); + else if (fastcmp(field,"ringvisualwarning")) + lua_pushboolean(L, plr->ringvisualwarning); else if (fastcmp(field,"dotrickfx")) lua_pushboolean(L, plr->dotrickfx); else if (fastcmp(field,"bumperinflate")) @@ -801,6 +803,8 @@ static int player_set(lua_State *L) plr->incontrol = luaL_checkinteger(L, 3); else if (fastcmp(field,"progressivethrust")) plr->progressivethrust = luaL_checkboolean(L, 3); + else if (fastcmp(field,"ringvisualwarning")) + plr->ringvisualwarning = luaL_checkboolean(L, 3); else if (fastcmp(field,"analoginput")) plr->markedfordeath = luaL_checkboolean(L, 3); else if (fastcmp(field,"markedfordeath")) diff --git a/src/p_enemy.c b/src/p_enemy.c index 645ff3013..640f17fac 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3522,6 +3522,16 @@ void A_AttractChase(mobj_t *actor) S_ReducedVFXSoundAtVolume(actor->target, sfx_s1b5, actor->target->player->ringvolume, NULL); + if (actor->target->player->rings <= 10 && P_IsDisplayPlayer(actor->target->player)) + { + S_ReducedVFXSoundAtVolume(actor->target, sfx_gshab, + 255 - 10*actor->target->player->rings + , NULL); + + if (actor->target->player->rings == 0) + S_ReducedVFXSoundAtVolume(actor->target, sfx_gshad, 255, NULL); + } + actor->target->player->ringvolume -= RINGVOLUMEUSEPENALTY; sparkle = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_RINGSPARKS); diff --git a/src/p_saveg.c b/src/p_saveg.c index bc58064b7..c3bb62629 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -598,6 +598,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEINT16(save->p, players[i].incontrol); WRITEUINT16(save->p, players[i].progressivethrust); + WRITEUINT8(save->p, players[i].ringvisualwarning); WRITEUINT8(save->p, players[i].analoginput); @@ -1184,6 +1185,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].incontrol = READINT16(save->p); players[i].progressivethrust = READUINT16(save->p); + players[i].ringvisualwarning = READUINT8(save->p); players[i].analoginput = READUINT8(save->p);