Move itemblink and itemblinkmode to player_t to restore hyudoro behaviour

This commit is contained in:
NepDisk 2025-03-21 13:36:10 -04:00
parent 1e47df835a
commit 42ddaa5b1f
7 changed files with 49 additions and 39 deletions

View file

@ -228,9 +228,6 @@ typedef enum
typedef enum
{
// Unsynced, HUD or clientsided effects
// Item box
khud_itemblink, // Item flashing after roulette, serves as a mashing indicator
khud_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items)
// Rings
khud_ringlock, // Ring lock
@ -590,6 +587,8 @@ struct player_t
UINT8 tripwireReboundDelay; // When failing Tripwire, brieftly lock out speed-based tripwire pass (anti-cheese)
UINT16 itemroulette; // Used for the roulette when deciding what item to give you (was "pw_kartitem")
UINT16 itemblink; // Item flashing after roulette, serves as a mashing indicator. Also prevents item from being stolen.
UINT16 itemblinkmode; // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items)
UINT8 roulettetype; // Used for the roulette, for deciding type (0 = normal, 1 = better, 2 = eggman mark)
// Item held stuff

View file

@ -554,8 +554,6 @@ const char *const KARTSTUFF_LIST[] = {
};
const char *const KARTHUD_LIST[] = {
"ITEMBLINK",
"ITEMBLINKMODE",
"RINGFRAME",
"RINGTICS",

View file

@ -1017,11 +1017,11 @@ static void K_drawKartItem(void)
localpatch = kp_nodraw;
}
if (stplyr->karthud[khud_itemblink] && (leveltime & 1))
if (stplyr->itemblink && (leveltime & 1))
{
colormode = TC_BLINK;
switch (stplyr->karthud[khud_itemblinkmode])
switch (stplyr->itemblinkmode)
{
case 2:
localcolor = K_RainbowColor(leveltime);

View file

@ -1478,8 +1478,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (player->roulettetype == 2)
{
player->eggmanexplode = 4*TICRATE;
//player->karthud[khud_itemblink] = TICRATE;
//player->karthud[khud_itemblinkmode] = 1;
//player->itemblink = TICRATE;
//player->itemblinkmode = 1;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player) && !demo.freecam)
@ -1493,8 +1493,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
{
K_KartGetItemResult(player, cv_kartdebugitem.value);
player->itemamount = cv_kartdebugamount.value;
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 2;
player->itemblink = TICRATE;
player->itemblinkmode = 2;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player) && !demo.freecam)
@ -1509,8 +1509,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
SINT8 itemroll = P_RandomRange(KITEM_SNEAKER, NUMKARTITEMS - 1);
K_KartGetItemResult(player, itemroll);
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 0;
player->itemblink = TICRATE;
player->itemblinkmode = 0;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player))
@ -1527,7 +1527,7 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (mashed && ((K_RingsActive() == true) && (modeattacking || cv_superring.value))) // ANY mashed value? You get rings.
{
K_KartGetItemResult(player, KITEM_SUPERRING);
player->karthud[khud_itemblinkmode] = 1;
player->itemblinkmode = 1;
if (P_IsDisplayPlayer(player))
S_StartSound(NULL, sfx_itrolm);
}
@ -1537,7 +1537,7 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
K_KartGetItemResult(player, KITEM_SNEAKER);
else // Default to sad if nothing's enabled...
K_KartGetItemResult(player, KITEM_SAD);
player->karthud[khud_itemblinkmode] = 0;
player->itemblinkmode = 0;
if (P_IsDisplayPlayer(player))
S_StartSound(NULL, sfx_itrolf);
}
@ -1547,20 +1547,20 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (mashed && (bossinfo.boss || cv_banana.value) && !itembreaker) // ANY mashed value? You get a banana.
{
K_KartGetItemResult(player, KITEM_BANANA);
player->karthud[khud_itemblinkmode] = 1;
player->itemblinkmode = 1;
if (P_IsDisplayPlayer(player))
S_StartSound(NULL, sfx_itrolm);
}
else if (bossinfo.boss)
{
K_KartGetItemResult(player, KITEM_ORBINAUT);
player->karthud[khud_itemblinkmode] = 0;
player->itemblinkmode = 0;
if (P_IsDisplayPlayer(player))
S_StartSound(NULL, sfx_itrolf);
}
}
player->karthud[khud_itemblink] = TICRATE;
player->itemblink = TICRATE;
player->itemroulette = 0;
player->roulettetype = 0;
return;
@ -1574,8 +1574,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (P_RandomChance((debtamount*FRACUNIT)/20))
{
K_KartGetItemResult(player, KITEM_SUPERRING);
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 1;
player->itemblink = TICRATE;
player->itemblinkmode = 1;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player))
@ -1593,8 +1593,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
&& cv_selfpropelledbomb.value)
{
K_KartGetItemResult(player, KITEM_SPB);
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 2;
player->itemblink = TICRATE;
player->itemblinkmode = 2;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player))
@ -1618,8 +1618,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (useodds == 69)
{
K_KartGetItemResult(player, KITEM_SPB);
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 2;
player->itemblink = TICRATE;
player->itemblinkmode = 2;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player))
@ -1662,8 +1662,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
if (P_IsDisplayPlayer(player) && !demo.freecam)
S_StartSound(NULL, ((player->roulettetype == 1) ? sfx_itrolk : (mashed ? sfx_itrolm : sfx_itrolf)));
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = ((player->roulettetype == 1) ? 2 : (mashed ? 1 : 0));
player->itemblink = TICRATE;
player->itemblinkmode = ((player->roulettetype == 1) ? 2 : (mashed ? 1 : 0));
player->itemroulette = 0; // Since we're done, clear the roulette number
player->roulettetype = 0; // This too
@ -5072,7 +5072,8 @@ static void K_DoHyudoroSteal(player_t *player)
// Has an item
&& (players[i].itemtype
&& players[i].itemamount
&& !(players[i].itemflags & IF_ITEMOUT)))
&& !(players[i].itemflags & IF_ITEMOUT)
&& !players[i].itemblink))
{
playerswappable[numplayers] = i;
numplayers++;
@ -6619,12 +6620,6 @@ void K_KartPlayerHUDUpdate(player_t *player)
if (player->karthud[khud_tauntvoices])
player->karthud[khud_tauntvoices]--;
if (player->karthud[khud_itemblink] && player->karthud[khud_itemblink]-- <= 0)
{
player->karthud[khud_itemblinkmode] = 0;
player->karthud[khud_itemblink] = 0;
}
if (gametype == GT_RACE)
{
@ -7246,6 +7241,12 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->tiregrease > 0)
player->tiregrease--;;
if (player->itemblink && player->itemblink-- <= 0)
{
player->itemblinkmode = 0;
player->itemblink = 0;
}
K_UpdateTripwire(player);
K_KartPlayerHUDUpdate(player);

View file

@ -310,6 +310,10 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->tripwireReboundDelay);
else if (fastcmp(field,"itemroulette"))
lua_pushinteger(L, plr->itemroulette);
else if (fastcmp(field,"itemblink"))
lua_pushinteger(L, plr->itemblink);
else if (fastcmp(field,"itemblinkmode"))
lua_pushinteger(L, plr->itemblinkmode);
else if (fastcmp(field,"roulettetype"))
lua_pushinteger(L, plr->roulettetype);
else if (fastcmp(field,"itemtype"))
@ -725,6 +729,10 @@ static int player_set(lua_State *L)
plr->tripwireReboundDelay = luaL_checkinteger(L, 3);
else if (fastcmp(field,"itemroulette"))
plr->itemroulette = luaL_checkinteger(L, 3);
else if (fastcmp(field,"itemblink"))
plr->itemblink = luaL_checkinteger(L, 3);
else if (fastcmp(field,"itemblinkmode"))
plr->itemblinkmode = luaL_checkinteger(L, 3);
else if (fastcmp(field,"roulettetype"))
plr->roulettetype = luaL_checkinteger(L, 3);
else if (fastcmp(field,"itemtype"))
@ -1274,10 +1282,10 @@ static int kartstuff_get(lua_State *L)
// v1.0.2+ vars
case k_itemblink:
lua_pushinteger(L, plr->karthud[khud_itemblink]);
lua_pushinteger(L, plr->itemblink);
return 1;
case k_itemblinkmode:
lua_pushinteger(L, plr->karthud[khud_itemblinkmode]);
lua_pushinteger(L, plr->itemblinkmode);
return 1;
case k_getsparks:
lua_pushinteger(L, (plr->pflags & PF_GETSPARKS));
@ -1537,10 +1545,10 @@ static int kartstuff_set(lua_State *L)
// v1.0.2+ vars
case k_itemblink:
plr->karthud[khud_itemblink] = i;
plr->itemblink = i;
break;
case k_itemblinkmode:
plr->karthud[khud_itemblinkmode] = i;
plr->itemblinkmode = i;
break;
case k_getsparks:
if (i > 0)

View file

@ -1708,8 +1708,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
else
player->itemamount = max(1, target->movecount);
}
player->karthud[khud_itemblink] = TICRATE;
player->karthud[khud_itemblinkmode] = 0;
player->itemblink = TICRATE;
player->itemblinkmode = 0;
player->itemroulette = 0;
player->roulettetype = 0;
if (P_IsDisplayPlayer(player))

View file

@ -285,6 +285,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].tripwireReboundDelay);
WRITEUINT16(save->p, players[i].itemroulette);
WRITEUINT16(save->p, players[i].itemblink);
WRITEUINT16(save->p, players[i].itemblinkmode);
WRITEUINT8(save->p, players[i].roulettetype);
WRITESINT8(save->p, players[i].itemtype);
@ -594,6 +596,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].tripwireReboundDelay = READUINT8(save->p);
players[i].itemroulette = READUINT16(save->p);
players[i].itemblink = READUINT16(save->p);
players[i].itemblinkmode = READUINT16(save->p);
players[i].roulettetype = READUINT8(save->p);
players[i].itemtype = READSINT8(save->p);