mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-04 14:12:41 +00:00
WIP: Ring Box
This commit is contained in:
parent
5eeb29d552
commit
41540ed9e5
10 changed files with 163 additions and 14 deletions
|
|
@ -398,7 +398,13 @@ consvar_t cv_items[NUMKARTRESULTS-1] = {
|
|||
CVAR_INIT ("tripleorbinaut", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("quadorbinaut", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("dualjawz", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("triplegachabom", "On", CV_NETVAR, CV_OnOff, NULL)
|
||||
CVAR_INIT ("triplegachabom", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("bar", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("doublebar", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("triplebar", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("slotring", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("seven", "On", CV_NETVAR, CV_OnOff, NULL),
|
||||
CVAR_INIT ("jackpot", "On", CV_NETVAR, CV_OnOff, NULL)
|
||||
};
|
||||
|
||||
consvar_t cv_kartspeed = CVAR_INIT ("gamespeed", "Auto", CV_NETVAR|CV_CALL|CV_NOINIT, kartspeed_cons_t, KartSpeed_OnChange);
|
||||
|
|
|
|||
|
|
@ -160,7 +160,13 @@ Run this macro, then #undef FOREACH afterward
|
|||
FOREACH (KITCHENSINK, 20),\
|
||||
FOREACH (DROPTARGET, 21),\
|
||||
FOREACH (GARDENTOP, 22),\
|
||||
FOREACH (GACHABOM, 23)
|
||||
FOREACH (GACHABOM, 23),\
|
||||
FOREACH (BAR, 24),\
|
||||
FOREACH (DOUBLEBAR, 25),\
|
||||
FOREACH (TRIPLEBAR, 26),\
|
||||
FOREACH (SLOTRING, 27),\
|
||||
FOREACH (SEVEN, 28),\
|
||||
FOREACH (JACKPOT, 29)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
@ -399,6 +405,7 @@ struct itemroulette_t
|
|||
tic_t elapsed;
|
||||
|
||||
boolean eggman;
|
||||
boolean ringbox;
|
||||
};
|
||||
|
||||
// enum for bot item priorities
|
||||
|
|
|
|||
36
src/k_hud.c
36
src/k_hud.c
|
|
@ -114,6 +114,7 @@ static patch_t *kp_wantedsplit;
|
|||
static patch_t *kp_wantedreticle;
|
||||
|
||||
static patch_t *kp_itembg[4];
|
||||
static patch_t *kp_ringbg[4];
|
||||
static patch_t *kp_itemtimer[2];
|
||||
static patch_t *kp_itemmulsticker[2];
|
||||
static patch_t *kp_itemx;
|
||||
|
|
@ -142,6 +143,12 @@ static patch_t *kp_kitchensink[2];
|
|||
static patch_t *kp_droptarget[2];
|
||||
static patch_t *kp_gardentop[2];
|
||||
static patch_t *kp_gachabom[2];
|
||||
static patch_t *kp_bar[2];
|
||||
static patch_t *kp_doublebar[2];
|
||||
static patch_t *kp_triplebar[2];
|
||||
static patch_t *kp_slotring[2];
|
||||
static patch_t *kp_seven[2];
|
||||
static patch_t *kp_jackpot[2];
|
||||
|
||||
static patch_t *kp_check[6];
|
||||
|
||||
|
|
@ -443,6 +450,9 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_itemmulsticker[0], "K_ITMUL");
|
||||
HU_UpdatePatch(&kp_itemx, "K_ITX");
|
||||
|
||||
HU_UpdatePatch(&kp_ringbg[0], "K_RBBG");
|
||||
HU_UpdatePatch(&kp_ringbg[1], "K_SBBG");
|
||||
|
||||
HU_UpdatePatch(&kp_sadface[0], "K_ITSAD");
|
||||
HU_UpdatePatch(&kp_sneaker[0], "K_ITSHOE");
|
||||
HU_UpdatePatch(&kp_rocketsneaker[0], "K_ITRSHE");
|
||||
|
|
@ -478,6 +488,12 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG");
|
||||
HU_UpdatePatch(&kp_gardentop[0], "K_ITGTOP");
|
||||
HU_UpdatePatch(&kp_gachabom[0], "K_ITGBOM");
|
||||
HU_UpdatePatch(&kp_bar[0], "K_RBBAR");
|
||||
HU_UpdatePatch(&kp_doublebar[0], "K_RBBAR2");
|
||||
HU_UpdatePatch(&kp_triplebar[0], "K_RBBAR3");
|
||||
HU_UpdatePatch(&kp_slotring[0], "K_RBRING");
|
||||
HU_UpdatePatch(&kp_seven[0], "K_RBSEV");
|
||||
HU_UpdatePatch(&kp_jackpot[0], "K_RBJACK");
|
||||
|
||||
sprintf(buffer, "FSMFGxxx");
|
||||
for (i = 0; i < 104; i++)
|
||||
|
|
@ -531,6 +547,12 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG");
|
||||
HU_UpdatePatch(&kp_gardentop[1], "K_ISGTOP");
|
||||
HU_UpdatePatch(&kp_gachabom[1], "K_ISGBOM");
|
||||
HU_UpdatePatch(&kp_bar[1], "K_SBBAR");
|
||||
HU_UpdatePatch(&kp_doublebar[1], "K_SBBAR2");
|
||||
HU_UpdatePatch(&kp_triplebar[1], "K_SBBAR3");
|
||||
HU_UpdatePatch(&kp_slotring[1], "K_SBRING");
|
||||
HU_UpdatePatch(&kp_seven[1], "K_SBSEV");
|
||||
HU_UpdatePatch(&kp_jackpot[1], "K_SBJACK");
|
||||
|
||||
sprintf(buffer, "FSMFSxxx");
|
||||
for (i = 0; i < 104; i++)
|
||||
|
|
@ -844,6 +866,12 @@ static patch_t *K_GetCachedItemPatch(INT32 item, UINT8 offset)
|
|||
kp_droptarget,
|
||||
kp_gardentop,
|
||||
kp_gachabom,
|
||||
kp_bar,
|
||||
kp_doublebar,
|
||||
kp_triplebar,
|
||||
kp_slotring,
|
||||
kp_seven,
|
||||
kp_jackpot,
|
||||
};
|
||||
|
||||
if (item == KITEM_SAD || (item > KITEM_NONE && item < NUMKARTITEMS))
|
||||
|
|
@ -1211,6 +1239,12 @@ static void K_drawKartItem(void)
|
|||
vector2_t rouletteCrop = {7, 7};
|
||||
INT32 i;
|
||||
|
||||
if (stplyr->itemRoulette.ringbox)
|
||||
{
|
||||
// Todo: owl
|
||||
localbg = offset ? kp_ringbg[1] : kp_ringbg[0];
|
||||
}
|
||||
|
||||
if (stplyr->itemRoulette.itemListLen > 0)
|
||||
{
|
||||
// Init with item roulette stuff.
|
||||
|
|
@ -4943,7 +4977,7 @@ static void K_drawDistributionDebugger(void)
|
|||
return;
|
||||
}
|
||||
|
||||
K_FillItemRouletteData(stplyr, &rouletteData);
|
||||
K_FillItemRouletteData(stplyr, &rouletteData, false);
|
||||
|
||||
for (i = 0; i < rouletteData.itemListLen; i++)
|
||||
{
|
||||
|
|
|
|||
42
src/k_kart.c
42
src/k_kart.c
|
|
@ -11430,6 +11430,48 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
K_UpdateHnextList(player, false);
|
||||
}
|
||||
break;
|
||||
case KITEM_BAR:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 10, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_DOUBLEBAR:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 20, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_TRIPLEBAR:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 30, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_SLOTRING:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 50, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_SEVEN:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 77, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_JACKPOT:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
{
|
||||
K_AwardPlayerRings(player, 150, true);
|
||||
player->itemamount--;
|
||||
}
|
||||
break;
|
||||
case KITEM_SAD:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO
|
||||
&& !player->sadtimer)
|
||||
|
|
|
|||
|
|
@ -100,6 +100,12 @@ static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
|||
{ 3, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target
|
||||
{ 0, 0, 0, 1, 2, 2, 0, 0 }, // Garden Top
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Gachabom
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Bar
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Double Bar
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Bar
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Slot Ring
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Seven
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Jackpot
|
||||
{ 0, 0, 2, 3, 3, 1, 0, 0 }, // Sneaker x2
|
||||
{ 0, 0, 0, 0, 4, 4, 4, 0 }, // Sneaker x3
|
||||
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3
|
||||
|
|
@ -134,6 +140,12 @@ static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS-1][2] =
|
|||
{ 2, 0 }, // Drop Target
|
||||
{ 4, 0 }, // Garden Top
|
||||
{ 0, 0 }, // Gachabom
|
||||
{ 0, 0 }, // Bar
|
||||
{ 0, 0 }, // Double Bar
|
||||
{ 0, 0 }, // Triple Bar
|
||||
{ 0, 0 }, // Slot Ring
|
||||
{ 0, 0 }, // Seven
|
||||
{ 0, 0 }, // Jackpot
|
||||
{ 0, 0 }, // Sneaker x2
|
||||
{ 0, 1 }, // Sneaker x3
|
||||
{ 0, 0 }, // Banana x3
|
||||
|
|
@ -168,6 +180,12 @@ static UINT8 K_KartItemOddsSpecial[NUMKARTRESULTS-1][4] =
|
|||
{ 0, 0, 0, 0 }, // Drop Target
|
||||
{ 0, 0, 0, 0 }, // Garden Top
|
||||
{ 0, 0, 0, 0 }, // Gachabom
|
||||
{ 0, 0, 0, 0 }, // Bar
|
||||
{ 0, 0, 0, 0 }, // Double Bar
|
||||
{ 0, 0, 0, 0 }, // Triple Bar
|
||||
{ 0, 0, 0, 0 }, // Slot Ring
|
||||
{ 0, 0, 0, 0 }, // Seven
|
||||
{ 0, 0, 0, 0 }, // Jackpot
|
||||
{ 0, 1, 1, 0 }, // Sneaker x2
|
||||
{ 0, 0, 1, 1 }, // Sneaker x3
|
||||
{ 0, 0, 0, 0 }, // Banana x3
|
||||
|
|
@ -218,6 +236,17 @@ static kartitems_t K_KartItemReelBoss[] =
|
|||
KITEM_NONE
|
||||
};
|
||||
|
||||
static kartitems_t K_KartItemReelRingBox[] =
|
||||
{
|
||||
KITEM_BAR,
|
||||
KITEM_DOUBLEBAR,
|
||||
KITEM_TRIPLEBAR,
|
||||
KITEM_SLOTRING,
|
||||
KITEM_SEVEN,
|
||||
KITEM_JACKPOT,
|
||||
KITEM_NONE
|
||||
};
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_ItemEnabled(kartitems_t item)
|
||||
|
||||
|
|
@ -1052,6 +1081,7 @@ static void K_InitRoulette(itemroulette_t *const roulette)
|
|||
|
||||
roulette->active = true;
|
||||
roulette->eggman = false;
|
||||
roulette->ringbox = false;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
|
|
@ -1257,7 +1287,7 @@ static void K_CalculateRouletteSpeed(itemroulette_t *const roulette)
|
|||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette)
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette, boolean ringbox)
|
||||
{
|
||||
UINT32 spawnChance[NUMKARTRESULTS] = {0};
|
||||
UINT32 totalSpawnChance = 0;
|
||||
|
|
@ -1284,6 +1314,22 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet
|
|||
return;
|
||||
}
|
||||
|
||||
// SPECIAL CASE No. 1.5:
|
||||
// If this is being invoked by a Ring Box, it should literally never produce items.
|
||||
if (ringbox)
|
||||
{
|
||||
kartitems_t *presetlist = K_KartItemReelRingBox;
|
||||
|
||||
roulette->ringbox = true;
|
||||
|
||||
for (i = 0; presetlist[i] != KITEM_NONE; i++)
|
||||
{
|
||||
K_PushToRouletteItemList(roulette, presetlist[i]);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// SPECIAL CASE No. 2:
|
||||
// Use a special, pre-determined item reel for Time Attack / Free Play / End of Sealed Stars
|
||||
if (specialstageinfo.valid)
|
||||
|
|
@ -1412,12 +1458,12 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet
|
|||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
void K_StartItemRoulette(player_t *const player)
|
||||
void K_StartItemRoulette(player_t *const player, boolean ringbox)
|
||||
{
|
||||
itemroulette_t *const roulette = &player->itemRoulette;
|
||||
size_t i;
|
||||
|
||||
K_FillItemRouletteData(player, roulette);
|
||||
K_FillItemRouletteData(player, roulette, ringbox);
|
||||
|
||||
if (K_PlayerUsesBotMovement(player) == true)
|
||||
{
|
||||
|
|
@ -1444,7 +1490,7 @@ void K_StartItemRoulette(player_t *const player)
|
|||
void K_StartEggmanRoulette(player_t *const player)
|
||||
{
|
||||
itemroulette_t *const roulette = &player->itemRoulette;
|
||||
K_StartItemRoulette(player);
|
||||
K_StartItemRoulette(player, false);
|
||||
roulette->eggman = true;
|
||||
}
|
||||
|
||||
|
|
@ -1603,7 +1649,10 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
|
|||
|
||||
if (P_IsDisplayPlayer(player) && !demo.freecam)
|
||||
{
|
||||
S_StartSound(NULL, sfx_itrol1 + roulette->sound);
|
||||
if (roulette->ringbox)
|
||||
S_StartSound(NULL, sfx_s240);
|
||||
else
|
||||
S_StartSound(NULL, sfx_itrol1 + roulette->sound);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ INT32 K_KartGetItemOdds(const player_t *player, itemroulette_t *const roulette,
|
|||
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette);
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette, boolean ringbox);
|
||||
|
||||
Fills out the item roulette struct when it is
|
||||
initially created. This function needs to be
|
||||
|
|
@ -109,16 +109,17 @@ INT32 K_KartGetItemOdds(const player_t *player, itemroulette_t *const roulette,
|
|||
player - The player this roulette data is for.
|
||||
Can be NULL for generic use.
|
||||
roulette - The roulette data struct to fill out.
|
||||
ringbox - Is this roulette fill triggered by a just-respawned Ring Box?
|
||||
|
||||
Return:-
|
||||
N/A
|
||||
--------------------------------------------------*/
|
||||
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette);
|
||||
void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette, boolean ringbox);
|
||||
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_StartItemRoulette(player_t *const player);
|
||||
void K_StartItemRoulette(player_t *const player, boolean ringbox);
|
||||
|
||||
Starts the item roulette sequence for a player.
|
||||
This stage can only be used by gameplay, thus
|
||||
|
|
@ -126,12 +127,13 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet
|
|||
|
||||
Input Arguments:-
|
||||
player - The player to start the item roulette for.
|
||||
ringbox - Is this roulette being started from a just-respawned Ring Box?
|
||||
|
||||
Return:-
|
||||
N/A
|
||||
--------------------------------------------------*/
|
||||
|
||||
void K_StartItemRoulette(player_t *const player);
|
||||
void K_StartItemRoulette(player_t *const player, boolean ringbox);
|
||||
|
||||
|
||||
/*--------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -102,6 +102,8 @@ void Obj_RandomItemVisuals(mobj_t *mobj)
|
|||
ItemBoxBob(mobj);
|
||||
ItemBoxScaling(mobj);
|
||||
item_vfxtimer(mobj)++;
|
||||
if (mobj->fuse == 0)
|
||||
mobj->extravalue1++;
|
||||
}
|
||||
|
||||
boolean Obj_RandomItemSpawnIn(mobj_t *mobj)
|
||||
|
|
@ -116,6 +118,7 @@ boolean Obj_RandomItemSpawnIn(mobj_t *mobj)
|
|||
}
|
||||
else
|
||||
{
|
||||
// Spawn a battle monitor in your place and Fucking Die
|
||||
mobj_t *paperspawner = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PAPERITEMSPOT);
|
||||
paperspawner->spawnpoint = mobj->spawnpoint;
|
||||
mobj->spawnpoint->mobj = paperspawner;
|
||||
|
|
|
|||
|
|
@ -13006,9 +13006,14 @@ void A_ItemPop(mobj_t *actor)
|
|||
}
|
||||
else if (locvar1 == 0)
|
||||
{
|
||||
K_StartItemRoulette(actor->target->player);
|
||||
if (actor->extravalue1 >= TICRATE)
|
||||
K_StartItemRoulette(actor->target->player, false);
|
||||
else
|
||||
K_StartItemRoulette(actor->target->player, true);
|
||||
}
|
||||
|
||||
actor->extravalue1 = 0;
|
||||
|
||||
// Here at mapload in battle?
|
||||
if (!(gametyperules & GTR_CIRCUIT) && (actor->flags2 & MF2_BOSSNOTRAP))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -434,7 +434,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
if (special->fuse || !P_CanPickupItem(player, 1))
|
||||
return;
|
||||
|
||||
K_StartItemRoulette(player);
|
||||
K_StartItemRoulette(player, false);
|
||||
|
||||
// Karma fireworks
|
||||
/*for (i = 0; i < 5; i++)
|
||||
|
|
|
|||
|
|
@ -9731,6 +9731,7 @@ static boolean P_FuseThink(mobj_t *mobj)
|
|||
|
||||
// Transfer flags2 (strongbox, objectflip, bossnotrap)
|
||||
newmobj->flags2 = mobj->flags2;
|
||||
newmobj->extravalue1 = 0;
|
||||
}
|
||||
|
||||
P_RemoveMobj(mobj); // make sure they disappear
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue