diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 3e15a6130..e47883266 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -6192,7 +6192,7 @@ static void Got_Cheat(UINT8 **cp, INT32 playernum) K_StripItems(player); // Cancel roulette if rolling - player->itemroulette = KROULETTE_DISABLED; + player->itemroulette = 0; player->itemtype = item; player->itemamount = amt; diff --git a/src/d_player.h b/src/d_player.h index d69d8c72b..f52c89bdb 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -137,17 +137,6 @@ typedef enum IF_HOLDREADY = 1<<3, // Hold button-style item is ready to activate } itemflags_t; -typedef enum { - KROULETTE_DISABLED, - KROULETTE_ACTIVE, -} kartroulettestate_t; - -typedef enum { - KROULETTETYPE_NORMAL, - KROULETTETYPE_KARMA, - KROULETTETYPE_EGGMAN, -} kartroulettetype_t; - typedef enum { KSHIELD_NONE = 0, diff --git a/src/deh_tables.c b/src/deh_tables.c index 4ae8378de..cb42346aa 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -1545,11 +1545,7 @@ struct int_const_s const INT_CONST[] = { {"KSHIELD_FLAME",KSHIELD_FLAME}, {"NUMKARTSHIELDS",NUMKARTSHIELDS}, - // kartroulettestate_t - {"KROULETTE_DISABLED",KROULETTE_DISABLED}, - {"KROULETTE_ACTIVE",KROULETTE_ACTIVE}, - - // kartroulettetype_t + // kartroulettetype_e {"KROULETTETYPE_NORMAL",KROULETTETYPE_NORMAL}, {"KROULETTETYPE_KARMA",KROULETTETYPE_KARMA}, {"KROULETTETYPE_EGGMAN",KROULETTETYPE_EGGMAN}, diff --git a/src/g_game.c b/src/g_game.c index 6dac5c1ea..efc653668 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2806,8 +2806,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) // SRB2kart if (betweenmaps || leveltime <= starttime || spectator == true) { - itemroulette = KROULETTE_DISABLED; - previtemroulette = KROULETTE_DISABLED; + itemroulette = 0; + previtemroulette = 0; roulettetype = KROULETTETYPE_NORMAL; itemtype = 0; itemamount = 0; @@ -2847,8 +2847,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) } else { - itemroulette = (players[player].itemroulette > KROULETTE_DISABLED ? KROULETTE_ACTIVE : KROULETTE_DISABLED); - previtemroulette = (players[player].previtemroulette > KROULETTE_DISABLED ? KROULETTE_ACTIVE : KROULETTE_DISABLED); + itemroulette = players[player].itemroulette > 0 ? 1 : 0; + previtemroulette = players[player].previtemroulette > 0 ? 1 : 0; roulettetype = players[player].roulettetype; if (players[player].itemflags & IF_ITEMOUT) diff --git a/src/k_collide.c b/src/k_collide.c index b104ef38e..cb49ec324 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -256,10 +256,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) } else { - K_DropItems(t2->player); //K_StripItems(t2->player); - //K_StripOther(t2->player); - t2->player->itemroulette = KROULETTE_ACTIVE; - t2->player->roulettetype = KROULETTETYPE_EGGMAN; + K_StartRoulette(t2->player, KROULETTETYPE_EGGMAN); } if (t2->player->flamestore && (K_GetShieldFromPlayer(t2->player) == KSHIELD_FLAME)) diff --git a/src/k_items.c b/src/k_items.c index bbebb7cd6..d38f07639 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -337,7 +337,7 @@ void K_AwardPlayerItem(player_t *player, kartitemtype_e type, UINT8 amount, kart player->itemblink = TICRATE; player->itemblinkmode = blink; - player->itemroulette = KROULETTE_DISABLED; // Since we're done, clear the roulette number + player->itemroulette = 0; // Since we're done, clear the roulette number player->roulettetype = KROULETTETYPE_NORMAL; // This too if (P_IsDisplayPlayer(player)) @@ -1316,7 +1316,7 @@ void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) if (player->roulettetype == KROULETTETYPE_EGGMAN) { player->eggmanexplode = 4*TICRATE; - player->itemroulette = KROULETTE_DISABLED; + player->itemroulette = 0; player->roulettetype = KROULETTETYPE_NORMAL; if (P_IsDisplayPlayer(player)) S_StartSound(NULL, sfx_itrole); @@ -1455,6 +1455,15 @@ void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) K_AwardPlayerResult(player, result, player->roulettetype == KROULETTETYPE_KARMA ? KITEMBLINK_KARMA : mashed ? KITEMBLINK_MASHED : KITEMBLINK_NORMAL); } +void K_StartRoulette(player_t *player, kartroulettetype_e roulettetype) +{ + if (roulettetype == KROULETTETYPE_EGGMAN) + K_DropItems(player); + + player->itemroulette = 1; + player->roulettetype = roulettetype; +} + void K_SetPlayerItemCooldown(player_t *player, tic_t timer, boolean force) { if ((timer >= player->itemusecooldown) || force) diff --git a/src/k_items.h b/src/k_items.h index 9925fc8ee..38ec0944e 100644 --- a/src/k_items.h +++ b/src/k_items.h @@ -51,6 +51,13 @@ typedef enum KITEMBLINK_DEBUG, } kartitemblink_e; +typedef enum +{ + KROULETTETYPE_NORMAL, + KROULETTETYPE_KARMA, + KROULETTETYPE_EGGMAN, +} kartroulettetype_e; + typedef enum { ODDS_RACE, @@ -184,6 +191,7 @@ UINT8 K_FindUseodds(const player_t *player, fixed_t mashed, UINT32 pdis, UINT8 b UINT32 K_ScaleItemDistance(UINT32 distance, UINT8 numPlayers, boolean spbrush); INT32 K_GetRollingRouletteItem(player_t *player); void K_KartItemRoulette(player_t *player, ticcmd_t *cmd); +void K_StartRoulette(player_t *player, kartroulettetype_e roulettetype); void K_SetPlayerItemCooldown(player_t *player, tic_t timer, boolean force); diff --git a/src/k_kart.c b/src/k_kart.c index 078987902..81d230e65 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7285,8 +7285,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) K_KartItemRoulette(player, cmd); // Gain rings when roulette starts. - if (player->itemroulette > KROULETTE_DISABLED - && player->previtemroulette == KROULETTE_DISABLED + if (player->itemroulette > 0 + && player->previtemroulette == 0 && player->roulettetype != KROULETTETYPE_EGGMAN) { K_AwardScaledPlayerRings(player, ASR_ITEMBOX); @@ -9669,9 +9669,9 @@ void K_StripItems(player_t *player) player->itemflags &= ~IF_EGGMANOUT; K_UnsetItemOut(player); - if (!player->itemroulette || player->roulettetype != 2) + if (!player->itemroulette || player->roulettetype != KROULETTETYPE_EGGMAN) { - player->itemroulette = KROULETTE_DISABLED; + player->itemroulette = 0; player->roulettetype = KROULETTETYPE_NORMAL; } @@ -9690,7 +9690,7 @@ void K_StripItems(player_t *player) void K_StripOther(player_t *player) { - player->itemroulette = KROULETTE_DISABLED; + player->itemroulette = 0; player->roulettetype = KROULETTETYPE_NORMAL; player->invincibilitytimer = 0; diff --git a/src/p_enemy.c b/src/p_enemy.c index 5094eceb6..fbea63c8e 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -10839,7 +10839,7 @@ void A_ItemPop(void *thing) if (!((gametyperules & GTR_BUMPERS) && actor->target->player->bumper <= 0) && !itembreaker) { - actor->target->player->itemroulette = KROULETTE_ACTIVE; + K_StartRoulette(actor->target->player, KROULETTETYPE_NORMAL); } else if (itembreaker) { diff --git a/src/p_inter.c b/src/p_inter.c index db594a633..68e22f0c5 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -459,8 +459,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->karmadelay = comebacktime; - player->itemroulette = KROULETTE_ACTIVE; - player->roulettetype = KROULETTETYPE_KARMA; + K_StartRoulette(player, KROULETTETYPE_KARMA); } else if (special->target->player->karmamode == 2 && P_CanPickupItem(player, 2)) { @@ -495,11 +494,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->karmadelay = comebacktime; - K_DropItems(player); //K_StripItems(player); - //K_StripOther(player); - - player->itemroulette = KROULETTE_ACTIVE; - player->roulettetype = KROULETTETYPE_EGGMAN; + K_StartRoulette(player, KROULETTETYPE_EGGMAN); if (special->target->player->eggmanblame >= 0 && special->target->player->eggmanblame < MAXPLAYERS @@ -591,8 +586,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) if (special->fuse || !P_CanPickupItem(player, 1) || ((gametyperules & GTR_BUMPERS) && player->bumper <= 0)) return; - player->itemroulette = KROULETTE_ACTIVE; - player->roulettetype = KROULETTETYPE_KARMA; + K_StartRoulette(player, KROULETTETYPE_KARMA); // Karma fireworks for (i = 0; i < 5; i++)