diff --git a/src/d_player.h b/src/d_player.h index d57f9e1f2..8e5f57f5f 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -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 diff --git a/src/deh_tables.c b/src/deh_tables.c index a524e7aa8..c0f42c9e7 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -554,8 +554,6 @@ const char *const KARTSTUFF_LIST[] = { }; const char *const KARTHUD_LIST[] = { - "ITEMBLINK", - "ITEMBLINKMODE", "RINGFRAME", "RINGTICS", diff --git a/src/k_hud.c b/src/k_hud.c index 027ada4e4..9da03988b 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -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); diff --git a/src/k_kart.c b/src/k_kart.c index 6cc84af15..2275721c5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index f1ee10811..44fcd2ea4 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -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) diff --git a/src/p_inter.c b/src/p_inter.c index 97a852b42..e208e4d7f 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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)) diff --git a/src/p_saveg.c b/src/p_saveg.c index 86f2b8125..09b7f7f61 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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);