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
|
INT32 ITEM_X, ITEM_Y; // Item Window
|
||||||
|
|
@ -1096,90 +1130,23 @@ static void K_drawKartItem(void)
|
||||||
|
|
||||||
if (stplyr->itemroulette)
|
if (stplyr->itemroulette)
|
||||||
{
|
{
|
||||||
|
const INT32 item = K_GetRollingRouletteItem(stplyr);
|
||||||
|
|
||||||
if (stplyr->skincolor)
|
if (stplyr->skincolor)
|
||||||
localcolor = 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 KITEM_INVINCIBILITY:
|
||||||
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
|
|
||||||
localpatch = localinv;
|
localpatch = localinv;
|
||||||
//localcolor = SKINCOLOR_GREY;
|
|
||||||
break;
|
break;
|
||||||
case 11: // Eggman Monitor
|
|
||||||
localpatch = kp_eggman[offset];
|
case KITEM_ORBINAUT:
|
||||||
//localcolor = SKINCOLOR_ROSE;
|
localpatch = kp_orbinaut[3 + offset];
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
localpatch = K_GetItemPatchTable(item)[offset];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1240,79 +1207,27 @@ static void K_drawKartItem(void)
|
||||||
|
|
||||||
switch(stplyr->itemtype)
|
switch(stplyr->itemtype)
|
||||||
{
|
{
|
||||||
case KITEM_SNEAKER:
|
|
||||||
localpatch = kp_sneaker[offset];
|
|
||||||
break;
|
|
||||||
case KITEM_ROCKETSNEAKER:
|
|
||||||
localpatch = kp_rocketsneaker[offset];
|
|
||||||
break;
|
|
||||||
case KITEM_INVINCIBILITY:
|
case KITEM_INVINCIBILITY:
|
||||||
localpatch = localinv;
|
localpatch = localinv;
|
||||||
localbg = kp_itembg[offset+1];
|
localbg = kp_itembg[offset+1];
|
||||||
break;
|
break;
|
||||||
case KITEM_BANANA:
|
|
||||||
localpatch = kp_banana[offset];
|
|
||||||
break;
|
|
||||||
case KITEM_EGGMAN:
|
|
||||||
localpatch = kp_eggman[offset];
|
|
||||||
break;
|
|
||||||
case KITEM_ORBINAUT:
|
case KITEM_ORBINAUT:
|
||||||
localpatch = kp_orbinaut[(offset ? 4 : min(stplyr->itemamount-1, 3))];
|
localpatch = kp_orbinaut[(offset ? 4 : min(stplyr->itemamount-1, 3))];
|
||||||
break;
|
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:
|
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:
|
case KITEM_LIGHTNINGSHIELD:
|
||||||
localpatch = kp_lightningshield[offset];
|
|
||||||
localbg = kp_itembg[offset+1];
|
|
||||||
break;
|
|
||||||
case KITEM_BUBBLESHIELD:
|
case KITEM_BUBBLESHIELD:
|
||||||
localpatch = kp_bubbleshield[offset];
|
|
||||||
localbg = kp_itembg[offset+1];
|
|
||||||
break;
|
|
||||||
case KITEM_FLAMESHIELD:
|
case KITEM_FLAMESHIELD:
|
||||||
localpatch = kp_flameshield[offset];
|
|
||||||
localbg = kp_itembg[offset+1];
|
localbg = kp_itembg[offset+1];
|
||||||
break;
|
/*FALLTHRU*/
|
||||||
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;
|
|
||||||
default:
|
default:
|
||||||
localpatch = kp_nodraw; // diagnose underflows
|
localpatch = K_GetItemPatchTable(stplyr->itemtype)[offset];
|
||||||
|
|
||||||
|
if (localpatch == NULL)
|
||||||
|
localpatch = kp_nodraw; // diagnose underflows
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
35
src/k_kart.c
35
src/k_kart.c
|
|
@ -350,7 +350,7 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
|
||||||
#define NUMKARTODDS 80
|
#define NUMKARTODDS 80
|
||||||
|
|
||||||
// Less ugly 2D arrays
|
// 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
|
//P-Odds 0 1 2 3 4 5 6 7
|
||||||
/*Sneaker*/ { 0, 0, 2, 4, 6, 0, 0, 0 }, // Sneaker
|
/*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
|
/*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
|
//P-Odds 0 1
|
||||||
/*Sneaker*/ { 2, 1 }, // Sneaker
|
/*Sneaker*/ { 2, 1 }, // Sneaker
|
||||||
|
|
@ -899,6 +899,37 @@ UINT8 K_FindUseodds(player_t *player, fixed_t mashed, UINT32 pdis, UINT8 bestbum
|
||||||
return useodds;
|
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)
|
static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
INT32 i;
|
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);
|
fixed_t K_ItemOddsScale(UINT8 numPlayers, boolean spbrush);
|
||||||
UINT32 K_ScaleItemDistance(UINT32 distance, 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_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);
|
INT32 K_GetShieldFromItem(INT32 item);
|
||||||
fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against);
|
fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against);
|
||||||
boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2);
|
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);
|
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
||||||
mobj->tracer->sprite = SPR_ITEM;
|
mobj->tracer->sprite = SPR_ITEM;
|
||||||
switch((mobj->target->player->itemroulette % (16*3)) / 3)
|
mobj->tracer->frame = K_GetRollingRouletteItem(mobj->target->player) | FF_FULLBRIGHT;
|
||||||
{
|
|
||||||
// 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->renderflags &= ~RF_DONTDRAW;
|
mobj->tracer->renderflags &= ~RF_DONTDRAW;
|
||||||
}
|
}
|
||||||
else if (mobj->target->player->stealingtimer < 0)
|
else if (mobj->target->player->stealingtimer < 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue