mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'sphere-boxes' into 'master'
Blue Sphere boxes in Battle See merge request KartKrew/Kart!494
This commit is contained in:
commit
809c766c99
10 changed files with 135 additions and 17 deletions
|
|
@ -3476,6 +3476,9 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_RANDOMITEM12",
|
"S_RANDOMITEM12",
|
||||||
"S_DEADRANDOMITEM",
|
"S_DEADRANDOMITEM",
|
||||||
|
|
||||||
|
// Sphere Box (for Battle)
|
||||||
|
"S_SPHEREBOX",
|
||||||
|
|
||||||
// Random Item Pop
|
// Random Item Pop
|
||||||
"S_RANDOMITEMPOP1",
|
"S_RANDOMITEMPOP1",
|
||||||
"S_RANDOMITEMPOP2",
|
"S_RANDOMITEMPOP2",
|
||||||
|
|
|
||||||
42
src/info.c
42
src/info.c
|
|
@ -526,6 +526,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
|
|
||||||
//SRB2kart Sprites (sort later)
|
//SRB2kart Sprites (sort later)
|
||||||
"RNDM", // Random Item Box
|
"RNDM", // Random Item Box
|
||||||
|
"SBOX", // Sphere Box (for Battle)
|
||||||
"RPOP", // Random Item Box Pop
|
"RPOP", // Random Item Box Pop
|
||||||
"SGNS", // Signpost sparkle
|
"SGNS", // Signpost sparkle
|
||||||
"FAST", // Speed boost trail
|
"FAST", // Speed boost trail
|
||||||
|
|
@ -4061,6 +4062,20 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_RNDM, 22|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_RANDOMITEM1}, // S_RANDOMITEM12
|
{SPR_RNDM, 22|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_RANDOMITEM1}, // S_RANDOMITEM12
|
||||||
{SPR_NULL, 0, 0, {A_ItemPop}, 0, 0, S_NULL}, // S_DEADRANDOMITEM
|
{SPR_NULL, 0, 0, {A_ItemPop}, 0, 0, S_NULL}, // S_DEADRANDOMITEM
|
||||||
|
|
||||||
|
{SPR_SBOX, FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX2}, // S_SPHEREBOX1
|
||||||
|
{SPR_SBOX, 2|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX3}, // S_SPHEREBOX2
|
||||||
|
{SPR_SBOX, 4|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX4}, // S_SPHEREBOX3
|
||||||
|
{SPR_SBOX, 6|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX5}, // S_SPHEREBOX4
|
||||||
|
{SPR_SBOX, 8|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX6}, // S_SPHEREBOX5
|
||||||
|
{SPR_SBOX, 10|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX7}, // S_SPHEREBOX6
|
||||||
|
{SPR_SBOX, 12|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX8}, // S_SPHEREBOX7
|
||||||
|
{SPR_SBOX, 14|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX9}, // S_SPHEREBOX8
|
||||||
|
{SPR_SBOX, 16|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX10}, // S_SPHEREBOX9
|
||||||
|
{SPR_SBOX, 18|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX11}, // S_SPHEREBOX10
|
||||||
|
{SPR_SBOX, 20|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX12}, // S_SPHEREBOX11
|
||||||
|
{SPR_SBOX, 22|FF_FULLBRIGHT|FF_ANIMATE|FF_GLOBALANIM, 4, {NULL}, 1, 1, S_SPHEREBOX1}, // S_SPHEREBOX12
|
||||||
|
{SPR_NULL, 0, 0, {A_ItemPop}, 1, 0, S_NULL}, // S_DEADSPHEREBOX
|
||||||
|
|
||||||
{SPR_RPOP, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_RANDOMITEMPOP2}, // S_RANDOMITEMPOP1
|
{SPR_RPOP, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_RANDOMITEMPOP2}, // S_RANDOMITEMPOP1
|
||||||
{SPR_RPOP, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_RANDOMITEMPOP3}, // S_RANDOMITEMPOP2
|
{SPR_RPOP, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_RANDOMITEMPOP3}, // S_RANDOMITEMPOP2
|
||||||
{SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3
|
{SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3
|
||||||
|
|
@ -23017,6 +23032,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_SPHEREBOX
|
||||||
|
-1, // doomednum
|
||||||
|
S_SPHEREBOX1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_DEADSPHEREBOX, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_kc2e, // deathsound
|
||||||
|
60*FRACUNIT, // speed
|
||||||
|
48*FRACUNIT, // radius
|
||||||
|
48*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
MT_RANDOMITEMPOP, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_SLIDEME|MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_RANDOMITEMPOP
|
{ // MT_RANDOMITEMPOP
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_INVISIBLE, // spawnstate
|
S_INVISIBLE, // spawnstate
|
||||||
|
|
|
||||||
17
src/info.h
17
src/info.h
|
|
@ -1070,6 +1070,7 @@ typedef enum sprite
|
||||||
|
|
||||||
// SRB2Kart
|
// SRB2Kart
|
||||||
SPR_RNDM, // Random Item Box
|
SPR_RNDM, // Random Item Box
|
||||||
|
SPR_SBOX, // Sphere Box (for Battle)
|
||||||
SPR_RPOP, // Random Item Box Pop
|
SPR_RPOP, // Random Item Box Pop
|
||||||
SPR_SGNS, // Signpost sparkle
|
SPR_SGNS, // Signpost sparkle
|
||||||
SPR_FAST, // Speed boost trail
|
SPR_FAST, // Speed boost trail
|
||||||
|
|
@ -4453,6 +4454,21 @@ typedef enum state
|
||||||
S_RANDOMITEM12,
|
S_RANDOMITEM12,
|
||||||
S_DEADRANDOMITEM,
|
S_DEADRANDOMITEM,
|
||||||
|
|
||||||
|
// Sphere Box (for Battle)
|
||||||
|
S_SPHEREBOX1,
|
||||||
|
S_SPHEREBOX2,
|
||||||
|
S_SPHEREBOX3,
|
||||||
|
S_SPHEREBOX4,
|
||||||
|
S_SPHEREBOX5,
|
||||||
|
S_SPHEREBOX6,
|
||||||
|
S_SPHEREBOX7,
|
||||||
|
S_SPHEREBOX8,
|
||||||
|
S_SPHEREBOX9,
|
||||||
|
S_SPHEREBOX10,
|
||||||
|
S_SPHEREBOX11,
|
||||||
|
S_SPHEREBOX12,
|
||||||
|
S_DEADSPHEREBOX,
|
||||||
|
|
||||||
// Random Item Pop
|
// Random Item Pop
|
||||||
S_RANDOMITEMPOP1,
|
S_RANDOMITEMPOP1,
|
||||||
S_RANDOMITEMPOP2,
|
S_RANDOMITEMPOP2,
|
||||||
|
|
@ -6465,6 +6481,7 @@ typedef enum mobj_type
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
MT_RANDOMITEM,
|
MT_RANDOMITEM,
|
||||||
|
MT_SPHEREBOX,
|
||||||
MT_RANDOMITEMPOP,
|
MT_RANDOMITEMPOP,
|
||||||
MT_FLOATINGITEM,
|
MT_FLOATINGITEM,
|
||||||
MT_ITEMCAPSULE,
|
MT_ITEMCAPSULE,
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,28 @@ mobj_t *K_SpawnChaosEmerald(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT
|
||||||
return emerald;
|
return emerald;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mobj_t *K_SpawnSphereBox(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 amount)
|
||||||
|
{
|
||||||
|
mobj_t *drop = P_SpawnMobj(x, y, z, MT_SPHEREBOX);
|
||||||
|
|
||||||
|
(void)amount;
|
||||||
|
|
||||||
|
drop->angle = angle;
|
||||||
|
P_Thrust(drop,
|
||||||
|
FixedAngle(P_RandomFixed() * 180) + angle,
|
||||||
|
P_RandomRange(4, 12) * mapobjectscale);
|
||||||
|
|
||||||
|
drop->momz = flip * 12 * mapobjectscale;
|
||||||
|
if (drop->eflags & MFE_UNDERWATER)
|
||||||
|
drop->momz = (117 * drop->momz) / 200;
|
||||||
|
|
||||||
|
drop->flags &= ~(MF_NOGRAVITY|MF_NOCLIPHEIGHT);
|
||||||
|
|
||||||
|
drop->extravalue1 = amount;
|
||||||
|
|
||||||
|
return drop;
|
||||||
|
}
|
||||||
|
|
||||||
void K_DropEmeraldsFromPlayer(player_t *player, UINT32 emeraldType)
|
void K_DropEmeraldsFromPlayer(player_t *player, UINT32 emeraldType)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
@ -359,6 +381,12 @@ void K_RunPaperItemSpawners(void)
|
||||||
FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip,
|
FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip,
|
||||||
0, 0
|
0, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
K_SpawnSphereBox(
|
||||||
|
battleovertime.x, battleovertime.y, battleovertime.z + (128 * mapobjectscale * flip),
|
||||||
|
FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip,
|
||||||
|
10
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -441,6 +469,14 @@ void K_RunPaperItemSpawners(void)
|
||||||
firstUnspawnedEmerald
|
firstUnspawnedEmerald
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else if (P_RandomChance(FRACUNIT/3))
|
||||||
|
{
|
||||||
|
drop = K_SpawnSphereBox(
|
||||||
|
spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale * flip),
|
||||||
|
FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip,
|
||||||
|
10
|
||||||
|
);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
drop = K_CreatePaperItem(
|
drop = K_CreatePaperItem(
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount);
|
||||||
void K_CheckBumpers(void);
|
void K_CheckBumpers(void);
|
||||||
void K_CheckEmeralds(player_t *player);
|
void K_CheckEmeralds(player_t *player);
|
||||||
mobj_t *K_SpawnChaosEmerald(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT32 emeraldType);
|
mobj_t *K_SpawnChaosEmerald(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT32 emeraldType);
|
||||||
|
mobj_t *K_SpawnSphereBox(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 amount);
|
||||||
void K_DropEmeraldsFromPlayer(player_t *player, UINT32 emeraldType);
|
void K_DropEmeraldsFromPlayer(player_t *player, UINT32 emeraldType);
|
||||||
UINT8 K_NumEmeralds(player_t *player);
|
UINT8 K_NumEmeralds(player_t *player);
|
||||||
void K_RunPaperItemSpawners(void);
|
void K_RunPaperItemSpawners(void);
|
||||||
|
|
|
||||||
|
|
@ -13254,6 +13254,8 @@ void A_ChangeHeight(mobj_t *actor)
|
||||||
|
|
||||||
void A_ItemPop(mobj_t *actor)
|
void A_ItemPop(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
INT32 locvar1 = var1;
|
||||||
|
|
||||||
mobj_t *remains;
|
mobj_t *remains;
|
||||||
mobjtype_t explode;
|
mobjtype_t explode;
|
||||||
|
|
||||||
|
|
@ -13308,7 +13310,9 @@ void A_ItemPop(mobj_t *actor)
|
||||||
if (actor->info->deathsound)
|
if (actor->info->deathsound)
|
||||||
S_StartSound(remains, actor->info->deathsound);
|
S_StartSound(remains, actor->info->deathsound);
|
||||||
|
|
||||||
if (!((gametyperules & GTR_BUMPERS) && actor->target->player->bumpers <= 0))
|
if (locvar1 == 1)
|
||||||
|
P_GivePlayerSpheres(actor->target->player, actor->extravalue1);
|
||||||
|
else if (locvar1 == 0)
|
||||||
actor->target->player->itemroulette = 1;
|
actor->target->player->itemroulette = 1;
|
||||||
|
|
||||||
remains->flags2 &= ~MF2_AMBUSH;
|
remains->flags2 &= ~MF2_AMBUSH;
|
||||||
|
|
|
||||||
|
|
@ -268,12 +268,14 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
if (!P_CanPickupItem(player, 1))
|
if (!P_CanPickupItem(player, 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((gametyperules & GTR_BUMPERS) && player->bumpers <= 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
special->momx = special->momy = special->momz = 0;
|
special->momx = special->momy = special->momz = 0;
|
||||||
|
P_SetTarget(&special->target, toucher);
|
||||||
|
P_KillMobj(special, toucher, toucher, DMG_NORMAL);
|
||||||
|
break;
|
||||||
|
case MT_SPHEREBOX:
|
||||||
|
if (player->bumpers <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
P_SetTarget(&special->target, toucher);
|
P_SetTarget(&special->target, toucher);
|
||||||
P_KillMobj(special, toucher, toucher, DMG_NORMAL);
|
P_KillMobj(special, toucher, toucher, DMG_NORMAL);
|
||||||
break;
|
break;
|
||||||
|
|
@ -510,16 +512,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
if (!(P_CanPickupItem(player, 0)))
|
if (!(P_CanPickupItem(player, 0)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Reached the cap, don't waste 'em!
|
P_GivePlayerSpheres(player, 1);
|
||||||
if (player->spheres >= 40)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Not alive
|
|
||||||
if ((gametyperules & GTR_BUMPERS) && (player->bumpers <= 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
special->momx = special->momy = special->momz = 0;
|
|
||||||
player->spheres++;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Secret emblem thingy
|
// Secret emblem thingy
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ void P_RestoreMusic(player_t *player);
|
||||||
boolean P_EndingMusic(player_t *player);
|
boolean P_EndingMusic(player_t *player);
|
||||||
mobj_t *P_SpawnGhostMobj(mobj_t *mobj);
|
mobj_t *P_SpawnGhostMobj(mobj_t *mobj);
|
||||||
INT32 P_GivePlayerRings(player_t *player, INT32 num_rings);
|
INT32 P_GivePlayerRings(player_t *player, INT32 num_rings);
|
||||||
void P_GivePlayerSpheres(player_t *player, INT32 num_spheres);
|
INT32 P_GivePlayerSpheres(player_t *player, INT32 num_spheres);
|
||||||
void P_GivePlayerLives(player_t *player, INT32 numlives);
|
void P_GivePlayerLives(player_t *player, INT32 numlives);
|
||||||
UINT8 P_GetNextEmerald(void);
|
UINT8 P_GetNextEmerald(void);
|
||||||
void P_GiveEmerald(boolean spawnObj);
|
void P_GiveEmerald(boolean spawnObj);
|
||||||
|
|
|
||||||
|
|
@ -8606,6 +8606,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MT_RANDOMITEM:
|
case MT_RANDOMITEM:
|
||||||
|
case MT_SPHEREBOX:
|
||||||
if (gametype == GT_BATTLE && mobj->threshold == 70)
|
if (gametype == GT_BATTLE && mobj->threshold == 70)
|
||||||
{
|
{
|
||||||
mobj->color = K_RainbowColor(leveltime);
|
mobj->color = K_RainbowColor(leveltime);
|
||||||
|
|
@ -9386,6 +9387,7 @@ static void P_DefaultMobjShadowScale(mobj_t *thing)
|
||||||
thing->shadowscale = 12*FRACUNIT/5;
|
thing->shadowscale = 12*FRACUNIT/5;
|
||||||
break;
|
break;
|
||||||
case MT_RANDOMITEM:
|
case MT_RANDOMITEM:
|
||||||
|
case MT_SPHEREBOX:
|
||||||
thing->shadowscale = FRACUNIT/2;
|
thing->shadowscale = FRACUNIT/2;
|
||||||
thing->whiteshadow = false;
|
thing->whiteshadow = false;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
20
src/p_user.c
20
src/p_user.c
|
|
@ -500,6 +500,26 @@ INT32 P_GivePlayerRings(player_t *player, INT32 num_rings)
|
||||||
return num_rings;
|
return num_rings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT32 P_GivePlayerSpheres(player_t *player, INT32 num_spheres)
|
||||||
|
{
|
||||||
|
num_spheres += player->spheres;
|
||||||
|
|
||||||
|
// Not alive
|
||||||
|
if ((gametyperules & GTR_BUMPERS) && (player->bumpers <= 0))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (num_spheres > 40) // Reached the cap, don't waste 'em!
|
||||||
|
num_spheres = 40;
|
||||||
|
else if (num_spheres < 0)
|
||||||
|
num_spheres = 0;
|
||||||
|
|
||||||
|
num_spheres -= player->spheres;
|
||||||
|
|
||||||
|
player->spheres += num_spheres;
|
||||||
|
|
||||||
|
return num_spheres;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_GivePlayerLives
|
// P_GivePlayerLives
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue