Add Garden Top related states

MT_GARDENTOP
S_GARDENTOP
KITEM_GARDENTOP
KSHIELD_TOP
This commit is contained in:
James R 2022-08-24 21:57:51 -07:00
parent d66b82605b
commit 7b301452cc
8 changed files with 113 additions and 5 deletions

View file

@ -383,6 +383,7 @@ consvar_t cv_pogospring = CVAR_INIT ("pogospring", "On", CV_NETVAR, CV_OnOf
consvar_t cv_superring = CVAR_INIT ("superring", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_superring = CVAR_INIT ("superring", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_kitchensink = CVAR_INIT ("kitchensink", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_kitchensink = CVAR_INIT ("kitchensink", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_droptarget = CVAR_INIT ("droptarget", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_droptarget = CVAR_INIT ("droptarget", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_gardentop = CVAR_INIT ("gardentop", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_dualsneaker = CVAR_INIT ("dualsneaker", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_dualsneaker = CVAR_INIT ("dualsneaker", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_triplesneaker = CVAR_INIT ("triplesneaker", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_triplesneaker = CVAR_INIT ("triplesneaker", "On", CV_NETVAR, CV_OnOff, NULL);

View file

@ -93,7 +93,8 @@ extern consvar_t
cv_pogospring, cv_pogospring,
cv_superring, cv_superring,
cv_kitchensink, cv_kitchensink,
cv_droptarget; cv_droptarget,
cv_gardentop;
extern consvar_t extern consvar_t
cv_dualsneaker, cv_dualsneaker,

View file

@ -159,7 +159,8 @@ Run this macro, then #undef FOREACH afterward
FOREACH (POGOSPRING, 18),\ FOREACH (POGOSPRING, 18),\
FOREACH (SUPERRING, 19),\ FOREACH (SUPERRING, 19),\
FOREACH (KITCHENSINK, 20),\ FOREACH (KITCHENSINK, 20),\
FOREACH (DROPTARGET, 21) FOREACH (DROPTARGET, 21),\
FOREACH (GARDENTOP, 22)
typedef enum typedef enum
{ {
@ -187,6 +188,7 @@ typedef enum
KSHIELD_LIGHTNING = 1, KSHIELD_LIGHTNING = 1,
KSHIELD_BUBBLE = 2, KSHIELD_BUBBLE = 2,
KSHIELD_FLAME = 3, KSHIELD_FLAME = 3,
KSHIELD_TOP = 4,
NUMKARTSHIELDS NUMKARTSHIELDS
} kartshields_t; } kartshields_t;

View file

@ -3740,6 +3740,14 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_FLAMESHIELDLINE3", "S_FLAMESHIELDLINE3",
"S_FLAMESHIELDFLASH", "S_FLAMESHIELDFLASH",
// Marble Garden Zone Spinning Top
"S_GARDENTOP_FLOATING",
"S_GARDENTOP_SINKING1",
"S_GARDENTOP_SINKING2",
"S_GARDENTOP_SINKING3",
"S_GARDENTOP_DEAD",
"S_GARDENTOPSPARK",
// Caked-Up Booty-Sheet Ghost // Caked-Up Booty-Sheet Ghost
"S_HYUDORO", "S_HYUDORO",
@ -5346,6 +5354,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_FLAMESHIELDUNDERLAY", "MT_FLAMESHIELDUNDERLAY",
"MT_FLAMESHIELDPAPER", "MT_FLAMESHIELDPAPER",
"MT_BUBBLESHIELDTRAP", "MT_BUBBLESHIELDTRAP",
"MT_GARDENTOP",
"MT_GARDENTOPSPARK",
"MT_HYUDORO", "MT_HYUDORO",
"MT_HYUDORO_CENTER", "MT_HYUDORO_CENTER",
@ -6668,6 +6678,7 @@ struct int_const_s const INT_CONST[] = {
{"KSHIELD_LIGHTNING",KSHIELD_LIGHTNING}, {"KSHIELD_LIGHTNING",KSHIELD_LIGHTNING},
{"KSHIELD_BUBBLE",KSHIELD_BUBBLE}, {"KSHIELD_BUBBLE",KSHIELD_BUBBLE},
{"KSHIELD_FLAME",KSHIELD_FLAME}, {"KSHIELD_FLAME",KSHIELD_FLAME},
{"KSHIELD_TOP",KSHIELD_TOP},
{"NUMKARTSHIELDS",NUMKARTSHIELDS}, {"NUMKARTSHIELDS",NUMKARTSHIELDS},
// kartspinoutflags_t // kartspinoutflags_t

View file

@ -4320,6 +4320,13 @@ state_t states[NUMSTATES] =
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|14, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE3 {SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|14, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE3
{SPR_FLMF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDFLASH {SPR_FLMF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDFLASH
{SPR_GTOP, FF_ANIMATE, -1, {NULL}, 5, 1, S_NULL}, // S_GARDENTOP_FLOATING
{SPR_GTOP, 0, 1, {NULL}, 5, 1, S_GARDENTOP_SINKING2}, // S_GARDENTOP_SINKING1
{SPR_GTOP, 2, 1, {NULL}, 5, 1, S_GARDENTOP_SINKING3}, // S_GARDENTOP_SINKING2
{SPR_GTOP, 4, 1, {NULL}, 5, 1, S_GARDENTOP_SINKING1}, // S_GARDENTOP_SINKING3
{SPR_GTOP, FF_ANIMATE, 100, {A_Scream}, 5, 1, S_NULL}, // S_GARDENTOP_DEAD
{SPR_BDRF, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 5, 2, S_NULL}, // S_GARDENTOPSPARK
{SPR_HYUU, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_HYUDORO {SPR_HYUU, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_HYUDORO
{SPR_GRWP, FF_FULLBRIGHT|FF_ANIMATE, 13, {NULL}, 7, 1, S_NULL}, // S_GROW_PARTICLE {SPR_GRWP, FF_FULLBRIGHT|FF_ANIMATE, 13, {NULL}, 7, 1, S_NULL}, // S_GROW_PARTICLE
@ -24065,6 +24072,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_GARDENTOP
-1, // doomednum
S_GARDENTOP_FLOATING, // spawnstate
8, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
4, // reactiontime
sfx_s3k8b, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_GARDENTOP_DEAD, // deathstate
S_NULL, // xdeathstate
sfx_s3k7a, // deathsound
40*FRACUNIT, // speed
30*FRACUNIT, // radius
68*FRACUNIT, // height
-1, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_GARDENTOPSPARK
-1, // doomednum
S_GARDENTOPSPARK, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
8, // speed
8*FRACUNIT, // radius
8*FRACUNIT, // height
1, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP|MF_NOSQUISH, // flags
S_NULL // raisestate
},
{ // MT_HYUDORO { // MT_HYUDORO
-1, // doomednum -1, // doomednum
S_HYUDORO, // spawnstate S_HYUDORO, // spawnstate

View file

@ -4750,6 +4750,14 @@ typedef enum state
S_FLAMESHIELDLINE3, S_FLAMESHIELDLINE3,
S_FLAMESHIELDFLASH, S_FLAMESHIELDFLASH,
// Marble Garden Zone Spinning Top
S_GARDENTOP_FLOATING,
S_GARDENTOP_SINKING1,
S_GARDENTOP_SINKING2,
S_GARDENTOP_SINKING3,
S_GARDENTOP_DEAD,
S_GARDENTOPSPARK,
// Caked-Up Booty-Sheet Ghost // Caked-Up Booty-Sheet Ghost
S_HYUDORO, S_HYUDORO,
@ -6392,6 +6400,8 @@ typedef enum mobj_type
MT_FLAMESHIELDUNDERLAY, MT_FLAMESHIELDUNDERLAY,
MT_FLAMESHIELDPAPER, MT_FLAMESHIELDPAPER,
MT_BUBBLESHIELDTRAP, MT_BUBBLESHIELDTRAP,
MT_GARDENTOP,
MT_GARDENTOPSPARK,
MT_HYUDORO, MT_HYUDORO,
MT_HYUDORO_CENTER, MT_HYUDORO_CENTER,

View file

@ -133,6 +133,7 @@ static patch_t *kp_pogospring[2];
static patch_t *kp_superring[2]; static patch_t *kp_superring[2];
static patch_t *kp_kitchensink[2]; static patch_t *kp_kitchensink[2];
static patch_t *kp_droptarget[2]; static patch_t *kp_droptarget[2];
static patch_t *kp_gardentop[2];
static patch_t *kp_check[6]; static patch_t *kp_check[6];
@ -423,6 +424,7 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_superring[0], "K_ITRING"); HU_UpdatePatch(&kp_superring[0], "K_ITRING");
HU_UpdatePatch(&kp_kitchensink[0], "K_ITSINK"); HU_UpdatePatch(&kp_kitchensink[0], "K_ITSINK");
HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG"); HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG");
HU_UpdatePatch(&kp_gardentop[0], "K_ITGTOP");
sprintf(buffer, "FSMFGxxx"); sprintf(buffer, "FSMFGxxx");
for (i = 0; i < 104; i++) for (i = 0; i < 104; i++)
@ -474,6 +476,7 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_superring[1], "K_ISRING"); HU_UpdatePatch(&kp_superring[1], "K_ISRING");
HU_UpdatePatch(&kp_kitchensink[1], "K_ISSINK"); HU_UpdatePatch(&kp_kitchensink[1], "K_ISSINK");
HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG"); HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG");
HU_UpdatePatch(&kp_gardentop[1], "K_ISGTOP");
sprintf(buffer, "FSMFSxxx"); sprintf(buffer, "FSMFSxxx");
for (i = 0; i < 104; i++) for (i = 0; i < 104; i++)
@ -686,6 +689,8 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
return (tiny ? "K_ISSINK" : "K_ITSINK"); return (tiny ? "K_ISSINK" : "K_ITSINK");
case KITEM_DROPTARGET: case KITEM_DROPTARGET:
return (tiny ? "K_ISDTRG" : "K_ITDTRG"); return (tiny ? "K_ISDTRG" : "K_ITDTRG");
case KITEM_GARDENTOP:
return (tiny ? "K_ISGTOP" : "K_ITGTOP");
case KRITEM_TRIPLEORBINAUT: case KRITEM_TRIPLEORBINAUT:
return (tiny ? "K_ISORBN" : "K_ITORB3"); return (tiny ? "K_ISORBN" : "K_ITORB3");
case KRITEM_QUADORBINAUT: case KRITEM_QUADORBINAUT:
@ -721,6 +726,7 @@ static patch_t *K_GetCachedItemPatch(INT32 item, UINT8 offset)
kp_superring, kp_superring,
kp_kitchensink, kp_kitchensink,
kp_droptarget, kp_droptarget,
kp_gardentop,
}; };
if (item == KITEM_SAD || (item > KITEM_NONE && item < NUMKARTITEMS)) if (item == KITEM_SAD || (item > KITEM_NONE && item < NUMKARTITEMS))
@ -4456,6 +4462,7 @@ static void K_drawDistributionDebugger(void)
kp_superring[1], kp_superring[1],
kp_kitchensink[1], kp_kitchensink[1],
kp_droptarget[1], kp_droptarget[1],
kp_gardentop[1],
kp_sneaker[1], kp_sneaker[1],
kp_sneaker[1], kp_sneaker[1],

View file

@ -230,6 +230,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_superring); CV_RegisterVar(&cv_superring);
CV_RegisterVar(&cv_kitchensink); CV_RegisterVar(&cv_kitchensink);
CV_RegisterVar(&cv_droptarget); CV_RegisterVar(&cv_droptarget);
CV_RegisterVar(&cv_gardentop);
CV_RegisterVar(&cv_dualsneaker); CV_RegisterVar(&cv_dualsneaker);
CV_RegisterVar(&cv_triplesneaker); CV_RegisterVar(&cv_triplesneaker);
@ -336,6 +337,7 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
&cv_superring, &cv_superring,
&cv_kitchensink, &cv_kitchensink,
&cv_droptarget, &cv_droptarget,
&cv_gardentop,
&cv_dualsneaker, &cv_dualsneaker,
&cv_triplesneaker, &cv_triplesneaker,
&cv_triplebanana, &cv_triplebanana,
@ -372,6 +374,7 @@ static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
{ 2, 1, 1, 0, 0, 0, 0, 0 }, // Super Ring { 2, 1, 1, 0, 0, 0, 0, 0 }, // Super Ring
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink { 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink
{ 3, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target { 3, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Garden Top
{ 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2 { 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2
{ 0, 0, 0, 1, 6, 9, 5, 0 }, // Sneaker x3 { 0, 0, 0, 1, 6, 9, 5, 0 }, // Sneaker x3
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3 { 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3
@ -405,6 +408,7 @@ static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
{ 0, 0 }, // Super Ring { 0, 0 }, // Super Ring
{ 0, 0 }, // Kitchen Sink { 0, 0 }, // Kitchen Sink
{ 2, 0 }, // Drop Target { 2, 0 }, // Drop Target
{ 0, 0 }, // Garden Top
{ 0, 0 }, // Sneaker x2 { 0, 0 }, // Sneaker x2
{ 0, 1 }, // Sneaker x3 { 0, 1 }, // Sneaker x3
{ 0, 0 }, // Banana x3 { 0, 0 }, // Banana x3
@ -442,6 +446,7 @@ INT32 K_GetShieldFromItem(INT32 item)
case KITEM_LIGHTNINGSHIELD: return KSHIELD_LIGHTNING; case KITEM_LIGHTNINGSHIELD: return KSHIELD_LIGHTNING;
case KITEM_BUBBLESHIELD: return KSHIELD_BUBBLE; case KITEM_BUBBLESHIELD: return KSHIELD_BUBBLE;
case KITEM_FLAMESHIELD: return KSHIELD_FLAME; case KITEM_FLAMESHIELD: return KSHIELD_FLAME;
case KITEM_GARDENTOP: return KSHIELD_TOP;
default: return KSHIELD_NONE; default: return KSHIELD_NONE;
} }
} }
@ -715,10 +720,20 @@ INT32 K_KartGetItemOdds(
if (players[i].exiting) if (players[i].exiting)
pexiting++; pexiting++;
if (shieldtype != KSHIELD_NONE && shieldtype == K_GetShieldFromItem(players[i].itemtype)) switch (shieldtype)
{ {
// Don't allow more than one of each shield type at a time case KSHIELD_NONE:
return 0; /* Marble Garden Top is not REALLY
a Sonic 3 shield */
case KSHIELD_TOP:
break;
default:
if (shieldtype == K_GetShieldFromItem(players[i].itemtype))
{
// Don't allow more than one of each shield type at a time
return 0;
}
} }
if (players[i].position == 1) if (players[i].position == 1)