mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Add K_GetRollingRouletteItem, refactor item drawers
Roulette now cycles through all single items (that have odds). Added missing shields and drop target.
This commit is contained in:
parent
794385dd63
commit
375fb72de1
4 changed files with 86 additions and 211 deletions
187
src/k_hud.c
187
src/k_hud.c
|
|
@ -695,6 +695,40 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
|||
}
|
||||
}
|
||||
|
||||
static patch_t **K_GetItemPatchTable(INT32 item)
|
||||
{
|
||||
patch_t **kp[1 + NUMKARTITEMS] = {
|
||||
kp_sadface,
|
||||
NULL,
|
||||
kp_sneaker,
|
||||
kp_rocketsneaker,
|
||||
kp_invincibility,
|
||||
kp_banana,
|
||||
kp_eggman,
|
||||
kp_orbinaut,
|
||||
kp_jawz,
|
||||
kp_mine,
|
||||
kp_landmine,
|
||||
kp_ballhog,
|
||||
kp_selfpropelledbomb,
|
||||
kp_grow,
|
||||
kp_shrink,
|
||||
kp_lightningshield,
|
||||
kp_bubbleshield,
|
||||
kp_flameshield,
|
||||
kp_hyudoro,
|
||||
kp_pogospring,
|
||||
kp_superring,
|
||||
kp_kitchensink,
|
||||
kp_droptarget,
|
||||
};
|
||||
|
||||
if (item >= KITEM_SAD && item < NUMKARTITEMS)
|
||||
return kp[item - KITEM_SAD];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//}
|
||||
|
||||
INT32 ITEM_X, ITEM_Y; // Item Window
|
||||
|
|
@ -1096,90 +1130,23 @@ static void K_drawKartItem(void)
|
|||
|
||||
if (stplyr->itemroulette)
|
||||
{
|
||||
const INT32 item = K_GetRollingRouletteItem(stplyr);
|
||||
|
||||
if (stplyr->skincolor)
|
||||
localcolor = stplyr->skincolor;
|
||||
|
||||
switch((stplyr->itemroulette % (16*3)) / 3)
|
||||
switch (item)
|
||||
{
|
||||
// Each case is handled in threes, to give three frames of in-game time to see the item on the roulette
|
||||
case 0: // Sneaker
|
||||
localpatch = kp_sneaker[offset];
|
||||
//localcolor = SKINCOLOR_RASPBERRY;
|
||||
break;
|
||||
case 1: // Banana
|
||||
localpatch = kp_banana[offset];
|
||||
//localcolor = SKINCOLOR_YELLOW;
|
||||
break;
|
||||
case 2: // Orbinaut
|
||||
localpatch = kp_orbinaut[3+offset];
|
||||
//localcolor = SKINCOLOR_STEEL;
|
||||
break;
|
||||
case 3: // Mine
|
||||
localpatch = kp_mine[offset];
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 4: // Grow
|
||||
localpatch = kp_grow[offset];
|
||||
//localcolor = SKINCOLOR_TEAL;
|
||||
break;
|
||||
case 5: // Hyudoro
|
||||
localpatch = kp_hyudoro[offset];
|
||||
//localcolor = SKINCOLOR_STEEL;
|
||||
break;
|
||||
case 6: // Rocket Sneaker
|
||||
localpatch = kp_rocketsneaker[offset];
|
||||
//localcolor = SKINCOLOR_TANGERINE;
|
||||
break;
|
||||
case 7: // Jawz
|
||||
localpatch = kp_jawz[offset];
|
||||
//localcolor = SKINCOLOR_JAWZ;
|
||||
break;
|
||||
case 8: // Self-Propelled Bomb
|
||||
localpatch = kp_selfpropelledbomb[offset];
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 9: // Shrink
|
||||
localpatch = kp_shrink[offset];
|
||||
//localcolor = SKINCOLOR_ORANGE;
|
||||
break;
|
||||
case 10: // Invincibility
|
||||
case KITEM_INVINCIBILITY:
|
||||
localpatch = localinv;
|
||||
//localcolor = SKINCOLOR_GREY;
|
||||
break;
|
||||
case 11: // Eggman Monitor
|
||||
localpatch = kp_eggman[offset];
|
||||
//localcolor = SKINCOLOR_ROSE;
|
||||
|
||||
case KITEM_ORBINAUT:
|
||||
localpatch = kp_orbinaut[3 + offset];
|
||||
break;
|
||||
case 12: // Ballhog
|
||||
localpatch = kp_ballhog[offset];
|
||||
//localcolor = SKINCOLOR_LILAC;
|
||||
break;
|
||||
case 13: // Lightning Shield
|
||||
localpatch = kp_lightningshield[offset];
|
||||
//localcolor = SKINCOLOR_CYAN;
|
||||
break;
|
||||
case 14: // Super Ring
|
||||
localpatch = kp_superring[offset];
|
||||
//localcolor = SKINCOLOR_GOLD;
|
||||
break;
|
||||
case 15: // Land Mine
|
||||
localpatch = kp_landmine[offset];
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 16: // Drop Target
|
||||
localpatch = kp_droptarget[offset];
|
||||
//localcolor = SKINCOLOR_LIME;
|
||||
break;
|
||||
/*case 17: // Pogo Spring
|
||||
localpatch = kp_pogospring[offset];
|
||||
localcolor = SKINCOLOR_TANGERINE;
|
||||
break;
|
||||
case 18: // Kitchen Sink
|
||||
localpatch = kp_kitchensink[offset];
|
||||
localcolor = SKINCOLOR_STEEL;
|
||||
break;*/
|
||||
|
||||
default:
|
||||
break;
|
||||
localpatch = K_GetItemPatchTable(item)[offset];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1240,79 +1207,27 @@ static void K_drawKartItem(void)
|
|||
|
||||
switch(stplyr->itemtype)
|
||||
{
|
||||
case KITEM_SNEAKER:
|
||||
localpatch = kp_sneaker[offset];
|
||||
break;
|
||||
case KITEM_ROCKETSNEAKER:
|
||||
localpatch = kp_rocketsneaker[offset];
|
||||
break;
|
||||
case KITEM_INVINCIBILITY:
|
||||
localpatch = localinv;
|
||||
localbg = kp_itembg[offset+1];
|
||||
break;
|
||||
case KITEM_BANANA:
|
||||
localpatch = kp_banana[offset];
|
||||
break;
|
||||
case KITEM_EGGMAN:
|
||||
localpatch = kp_eggman[offset];
|
||||
break;
|
||||
|
||||
case KITEM_ORBINAUT:
|
||||
localpatch = kp_orbinaut[(offset ? 4 : min(stplyr->itemamount-1, 3))];
|
||||
break;
|
||||
case KITEM_JAWZ:
|
||||
localpatch = kp_jawz[offset];
|
||||
break;
|
||||
case KITEM_MINE:
|
||||
localpatch = kp_mine[offset];
|
||||
break;
|
||||
case KITEM_LANDMINE:
|
||||
localpatch = kp_landmine[offset];
|
||||
break;
|
||||
case KITEM_DROPTARGET:
|
||||
localpatch = kp_droptarget[offset];
|
||||
break;
|
||||
case KITEM_BALLHOG:
|
||||
localpatch = kp_ballhog[offset];
|
||||
break;
|
||||
|
||||
case KITEM_SPB:
|
||||
localpatch = kp_selfpropelledbomb[offset];
|
||||
localbg = kp_itembg[offset+1];
|
||||
break;
|
||||
case KITEM_GROW:
|
||||
localpatch = kp_grow[offset];
|
||||
break;
|
||||
case KITEM_SHRINK:
|
||||
localpatch = kp_shrink[offset];
|
||||
break;
|
||||
case KITEM_LIGHTNINGSHIELD:
|
||||
localpatch = kp_lightningshield[offset];
|
||||
localbg = kp_itembg[offset+1];
|
||||
break;
|
||||
case KITEM_BUBBLESHIELD:
|
||||
localpatch = kp_bubbleshield[offset];
|
||||
localbg = kp_itembg[offset+1];
|
||||
break;
|
||||
case KITEM_FLAMESHIELD:
|
||||
localpatch = kp_flameshield[offset];
|
||||
localbg = kp_itembg[offset+1];
|
||||
break;
|
||||
case KITEM_HYUDORO:
|
||||
localpatch = kp_hyudoro[offset];
|
||||
break;
|
||||
case KITEM_POGOSPRING:
|
||||
localpatch = kp_pogospring[offset];
|
||||
break;
|
||||
case KITEM_SUPERRING:
|
||||
localpatch = kp_superring[offset];
|
||||
break;
|
||||
case KITEM_KITCHENSINK:
|
||||
localpatch = kp_kitchensink[offset];
|
||||
break;
|
||||
case KITEM_SAD:
|
||||
localpatch = kp_sadface[offset];
|
||||
break;
|
||||
/*FALLTHRU*/
|
||||
|
||||
default:
|
||||
localpatch = kp_nodraw; // diagnose underflows
|
||||
localpatch = K_GetItemPatchTable(stplyr->itemtype)[offset];
|
||||
|
||||
if (localpatch == NULL)
|
||||
localpatch = kp_nodraw; // diagnose underflows
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
35
src/k_kart.c
35
src/k_kart.c
|
|
@ -350,7 +350,7 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
|
|||
#define NUMKARTODDS 80
|
||||
|
||||
// Less ugly 2D arrays
|
||||
static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
||||
static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
||||
{
|
||||
//P-Odds 0 1 2 3 4 5 6 7
|
||||
/*Sneaker*/ { 0, 0, 2, 4, 6, 0, 0, 0 }, // Sneaker
|
||||
|
|
@ -383,7 +383,7 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
|||
/*Jawz x2*/ { 0, 0, 1, 2, 1, 0, 0, 0 } // Jawz x2
|
||||
};
|
||||
|
||||
static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
|
||||
static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
|
||||
{
|
||||
//P-Odds 0 1
|
||||
/*Sneaker*/ { 2, 1 }, // Sneaker
|
||||
|
|
@ -899,6 +899,37 @@ UINT8 K_FindUseodds(player_t *player, fixed_t mashed, UINT32 pdis, UINT8 bestbum
|
|||
return useodds;
|
||||
}
|
||||
|
||||
INT32 K_GetRollingRouletteItem(player_t *player)
|
||||
{
|
||||
static UINT8 translation[NUMKARTITEMS-1];
|
||||
static UINT16 roulette_size;
|
||||
|
||||
static boolean odds_uncached = true;
|
||||
|
||||
const UINT8 EMPTYODDS[sizeof K_KartItemOddsRace[0]] = {0};
|
||||
|
||||
if (odds_uncached)
|
||||
{
|
||||
UINT8 i;
|
||||
|
||||
roulette_size = 0;
|
||||
|
||||
for (i = 1; i < NUMKARTITEMS; ++i)
|
||||
{
|
||||
if (memcmp(K_KartItemOddsRace[i - 1], EMPTYODDS, sizeof EMPTYODDS))
|
||||
{
|
||||
translation[roulette_size] = i;
|
||||
roulette_size++;
|
||||
}
|
||||
}
|
||||
|
||||
roulette_size *= 3;
|
||||
odds_uncached = false;
|
||||
}
|
||||
|
||||
return translation[(player->itemroulette % roulette_size) / 3];
|
||||
}
|
||||
|
||||
static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
||||
{
|
||||
INT32 i;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ UINT8 K_FindUseodds(player_t *player, fixed_t mashed, UINT32 pdis, UINT8 bestbum
|
|||
fixed_t K_ItemOddsScale(UINT8 numPlayers, boolean spbrush);
|
||||
UINT32 K_ScaleItemDistance(UINT32 distance, UINT8 numPlayers, boolean spbrush);
|
||||
INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, UINT32 ourDist, fixed_t mashed, boolean spbrush, boolean bot, boolean rival);
|
||||
INT32 K_GetRollingRouletteItem(player_t *player);
|
||||
INT32 K_GetShieldFromItem(INT32 item);
|
||||
fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against);
|
||||
boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2);
|
||||
|
|
|
|||
74
src/p_mobj.c
74
src/p_mobj.c
|
|
@ -5997,79 +5997,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
{
|
||||
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
||||
mobj->tracer->sprite = SPR_ITEM;
|
||||
switch((mobj->target->player->itemroulette % (16*3)) / 3)
|
||||
{
|
||||
// Each case is handled in threes, to give three frames of in-game time to see the item on the roulette
|
||||
case 0: // Sneaker
|
||||
mobj->tracer->frame = KITEM_SNEAKER;
|
||||
//localcolor = SKINCOLOR_RASPBERRY;
|
||||
break;
|
||||
case 1: // Banana
|
||||
mobj->tracer->frame = KITEM_BANANA;
|
||||
//localcolor = SKINCOLOR_YELLOW;
|
||||
break;
|
||||
case 2: // Orbinaut
|
||||
mobj->tracer->frame = KITEM_ORBINAUT;
|
||||
//localcolor = SKINCOLOR_STEEL;
|
||||
break;
|
||||
case 3: // Mine
|
||||
mobj->tracer->frame = KITEM_MINE;
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 4: // Grow
|
||||
mobj->tracer->frame = KITEM_GROW;
|
||||
//localcolor = SKINCOLOR_TEAL;
|
||||
break;
|
||||
case 5: // Hyudoro
|
||||
mobj->tracer->frame = KITEM_HYUDORO;
|
||||
//localcolor = SKINCOLOR_STEEL;
|
||||
break;
|
||||
case 6: // Rocket Sneaker
|
||||
mobj->tracer->frame = KITEM_ROCKETSNEAKER;
|
||||
//localcolor = SKINCOLOR_TANGERINE;
|
||||
break;
|
||||
case 7: // Jawz
|
||||
mobj->tracer->frame = KITEM_JAWZ;
|
||||
//localcolor = SKINCOLOR_JAWZ;
|
||||
break;
|
||||
case 8: // Self-Propelled Bomb
|
||||
mobj->tracer->frame = KITEM_SPB;
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 9: // Shrink
|
||||
mobj->tracer->frame = KITEM_SHRINK;
|
||||
//localcolor = SKINCOLOR_ORANGE;
|
||||
break;
|
||||
case 10: // Invincibility
|
||||
mobj->tracer->frame = KITEM_INVINCIBILITY;
|
||||
//localcolor = SKINCOLOR_GREY;
|
||||
break;
|
||||
case 11: // Eggman Monitor
|
||||
mobj->tracer->frame = KITEM_EGGMAN;
|
||||
//localcolor = SKINCOLOR_ROSE;
|
||||
break;
|
||||
case 12: // Ballhog
|
||||
mobj->tracer->frame = KITEM_BALLHOG;
|
||||
//localcolor = SKINCOLOR_LILAC;
|
||||
break;
|
||||
case 13: // Lightning Shield
|
||||
mobj->tracer->frame = KITEM_LIGHTNINGSHIELD;
|
||||
//localcolor = SKINCOLOR_CYAN;
|
||||
break;
|
||||
case 14: // Super Ring
|
||||
mobj->tracer->frame = KITEM_SUPERRING;
|
||||
//localcolor = SKINCOLOR_GOLD;
|
||||
break;
|
||||
case 15: // Land Mine
|
||||
mobj->tracer->frame = KITEM_LANDMINE;
|
||||
//localcolor = SKINCOLOR_JET;
|
||||
break;
|
||||
case 16: // Drop Target
|
||||
mobj->tracer->frame = KITEM_DROPTARGET;
|
||||
//localcolor = SKINCOLOR_LIME;
|
||||
break;
|
||||
}
|
||||
mobj->tracer->frame |= FF_FULLBRIGHT;
|
||||
mobj->tracer->frame = K_GetRollingRouletteItem(mobj->target->player) | FF_FULLBRIGHT;
|
||||
mobj->tracer->renderflags &= ~RF_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->stealingtimer < 0)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue