mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 12:31:54 +00:00
Merge branch 'capsule-jank' into 'master'
Improve Item Capsule spawning See merge request KartKrew/Kart!1281
This commit is contained in:
commit
37efa6782a
4 changed files with 75 additions and 20 deletions
55
src/k_kart.c
55
src/k_kart.c
|
|
@ -104,6 +104,60 @@ void K_TimerReset(void)
|
||||||
g_pointlimit = 0;
|
g_pointlimit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_SpawnItemCapsules(void)
|
||||||
|
{
|
||||||
|
mapthing_t *mt = mapthings;
|
||||||
|
size_t i = SIZE_MAX;
|
||||||
|
|
||||||
|
for (i = 0; i < nummapthings; i++, mt++)
|
||||||
|
{
|
||||||
|
boolean isRingCapsule = false;
|
||||||
|
INT32 modeFlags = 0;
|
||||||
|
|
||||||
|
if (mt->type != mobjinfo[MT_ITEMCAPSULE].doomednum)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
isRingCapsule = (mt->args[0] < 1 || mt->args[0] == KITEM_SUPERRING || mt->args[0] >= NUMKARTITEMS);
|
||||||
|
if (isRingCapsule == true && ((gametyperules & GTR_SPHERES) || (modeattacking & ATTACKING_SPB)))
|
||||||
|
{
|
||||||
|
// don't spawn ring capsules in ringless gametypes
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
modeFlags = mt->args[3];
|
||||||
|
if (modeFlags == TMICM_DEFAULT)
|
||||||
|
{
|
||||||
|
if (isRingCapsule == true)
|
||||||
|
{
|
||||||
|
modeFlags = TMICM_MULTIPLAYER|TMICM_TIMEATTACK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
modeFlags = TMICM_MULTIPLAYER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (K_CapsuleTimeAttackRules() == true)
|
||||||
|
{
|
||||||
|
if ((modeFlags & TMICM_TIMEATTACK) == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((modeFlags & TMICM_MULTIPLAYER) == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
P_SpawnMapThing(mt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void K_TimerInit(void)
|
void K_TimerInit(void)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
@ -199,6 +253,7 @@ void K_TimerInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
K_SpawnItemCapsules();
|
||||||
K_BattleInit(domodeattack);
|
K_BattleInit(domodeattack);
|
||||||
|
|
||||||
timelimitintics = K_TimeLimitForGametype();
|
timelimitintics = K_TimeLimitForGametype();
|
||||||
|
|
|
||||||
17
src/p_mobj.c
17
src/p_mobj.c
|
|
@ -4426,7 +4426,7 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj)
|
||||||
color = SKINCOLOR_GOLD;
|
color = SKINCOLOR_GOLD;
|
||||||
newRenderFlags |= RF_SEMIBRIGHT;
|
newRenderFlags |= RF_SEMIBRIGHT;
|
||||||
}
|
}
|
||||||
else if (mobj->args[2] & TMICF_INVERTTIMEATTACK)
|
else if (mobj->args[3] & TMICM_TIMEATTACK)
|
||||||
color = SKINCOLOR_SAPPHIRE;
|
color = SKINCOLOR_SAPPHIRE;
|
||||||
else if (itemType == KITEM_SPB)
|
else if (itemType == KITEM_SPB)
|
||||||
color = SKINCOLOR_JET;
|
color = SKINCOLOR_JET;
|
||||||
|
|
@ -12180,21 +12180,6 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
|
||||||
{
|
{
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case MT_ITEMCAPSULE:
|
|
||||||
{
|
|
||||||
boolean isRingCapsule = (mthing->args[0] < 1 || mthing->args[0] == KITEM_SUPERRING || mthing->args[0] >= NUMKARTITEMS);
|
|
||||||
|
|
||||||
// don't spawn ring capsules in GTR_SPHERES gametypes
|
|
||||||
if (isRingCapsule && ((gametyperules & GTR_SPHERES) || (modeattacking & ATTACKING_SPB)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// in record attack, only spawn ring capsules
|
|
||||||
// (behavior can be inverted with the Extra flag, i.e. item capsule spawns and ring capsule does not)
|
|
||||||
if (K_CapsuleTimeAttackRules() == true
|
|
||||||
&& (!(mthing->args[2] & TMICF_INVERTTIMEATTACK) == !isRingCapsule))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MT_RING:
|
case MT_RING:
|
||||||
if (modeattacking & ATTACKING_SPB)
|
if (modeattacking & ATTACKING_SPB)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -758,8 +758,11 @@ static void P_SpawnMapThings(boolean spawnemblems)
|
||||||
continue; // These were already spawned
|
continue; // These were already spawned
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mt->type == mobjinfo[MT_BATTLECAPSULE].doomednum)
|
if (mt->type == mobjinfo[MT_BATTLECAPSULE].doomednum
|
||||||
continue; // This will spawn later
|
|| mt->type == mobjinfo[MT_ITEMCAPSULE].doomednum)
|
||||||
|
{
|
||||||
|
continue; // These will spawn later
|
||||||
|
}
|
||||||
|
|
||||||
if (!spawnemblems && mt->type == mobjinfo[MT_EMBLEM].doomednum)
|
if (!spawnemblems && mt->type == mobjinfo[MT_EMBLEM].doomednum)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -7081,7 +7084,12 @@ static void P_ConvertBinaryThingTypes(void)
|
||||||
|
|
||||||
if (mapthings[i].options & MTF_EXTRA)
|
if (mapthings[i].options & MTF_EXTRA)
|
||||||
{
|
{
|
||||||
mapthings[i].args[2] |= TMICF_INVERTTIMEATTACK;
|
// was advertised as an "invert time attack" flag, actually was an "all gamemodes" flag
|
||||||
|
mapthings[i].args[3] = TMICM_MULTIPLAYER|TMICM_TIMEATTACK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mapthings[i].args[3] = TMICM_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapthings[i].options & MTF_AMBUSH)
|
if (mapthings[i].options & MTF_AMBUSH)
|
||||||
|
|
|
||||||
|
|
@ -143,10 +143,17 @@ typedef enum
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TMICF_INVERTTIMEATTACK = 1,
|
//TMICF_UNUSED = 1,
|
||||||
TMICF_INVERTSIZE = 1<<1,
|
TMICF_INVERTSIZE = 1<<1,
|
||||||
} textmapitemcapsuleflags_t;
|
} textmapitemcapsuleflags_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TMICM_DEFAULT = 0, // Time Attack only has rings, multiplayer has everything
|
||||||
|
TMICM_MULTIPLAYER = 1,
|
||||||
|
TMICM_TIMEATTACK = 1<<1,
|
||||||
|
} textmapitemcapsulemodes_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TMMA_WARN = 1,
|
TMMA_WARN = 1,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue