mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Hardcode Joypolis trick balloons
This commit is contained in:
parent
0f468c4634
commit
61db93db0c
8 changed files with 310 additions and 2 deletions
|
|
@ -4899,6 +4899,38 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
// MT_EMFAUCET_PARTICLE
|
||||
"S_EMFAUCET_PARTICLE",
|
||||
|
||||
// MT_TRICKBALLOON_RED
|
||||
"S_TRICKBALLOON_RED1",
|
||||
"S_TRICKBALLOON_RED2",
|
||||
"S_TRICKBALLOON_RED_POP1",
|
||||
"S_TRICKBALLOON_RED_POP2",
|
||||
"S_TRICKBALLOON_RED_POP3",
|
||||
"S_TRICKBALLOON_RED_GONE",
|
||||
"S_TRICKBALLOON_RED_INFLATE1",
|
||||
"S_TRICKBALLOON_RED_INFLATE2",
|
||||
"S_TRICKBALLOON_RED_INFLATE3",
|
||||
"S_TRICKBALLOON_RED_INFLATE4",
|
||||
"S_TRICKBALLOON_RED_INFLATE5",
|
||||
|
||||
// MT_TRICKBALLOON_RED_POINT
|
||||
"S_TRICKBALLOON_RED_POINT1",
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW
|
||||
"S_TRICKBALLOON_YELLOW1",
|
||||
"S_TRICKBALLOON_YELLOW2",
|
||||
"S_TRICKBALLOON_YELLOW_POP1",
|
||||
"S_TRICKBALLOON_YELLOW_POP2",
|
||||
"S_TRICKBALLOON_YELLOW_POP3",
|
||||
"S_TRICKBALLOON_YELLOW_GONE",
|
||||
"S_TRICKBALLOON_YELLOW_INFLATE1",
|
||||
"S_TRICKBALLOON_YELLOW_INFLATE2",
|
||||
"S_TRICKBALLOON_YELLOW_INFLATE3",
|
||||
"S_TRICKBALLOON_YELLOW_INFLATE4",
|
||||
"S_TRICKBALLOON_YELLOW_INFLATE5",
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW_POINT
|
||||
"S_TRICKBALLOON_YELLOW_POINT1",
|
||||
};
|
||||
|
||||
// RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1",
|
||||
|
|
@ -6161,6 +6193,11 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_EMFAUCET_DRIP",
|
||||
"MT_EMFAUCET_PARTICLE",
|
||||
"MT_EMRAINGEN",
|
||||
|
||||
"MT_TRICKBALLOON_RED",
|
||||
"MT_TRICKBALLOON_RED_POINT",
|
||||
"MT_TRICKBALLOON_YELLOW",
|
||||
"MT_TRICKBALLOON_YELLOW_POINT",
|
||||
};
|
||||
|
||||
const char *const MOBJFLAG_LIST[] = {
|
||||
|
|
|
|||
140
src/info.c
140
src/info.c
|
|
@ -1015,6 +1015,10 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"EMR3",
|
||||
"EMFC",
|
||||
|
||||
// Joypolis Trick Balloons
|
||||
"TKBR",
|
||||
"TKBY",
|
||||
|
||||
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
||||
"VIEW",
|
||||
};
|
||||
|
|
@ -5774,6 +5778,38 @@ state_t states[NUMSTATES] =
|
|||
|
||||
// MT_EMFAUCET_PARTICLE
|
||||
{SPR_EMFC, 2, -1, {NULL}, 0, 0, S_EMFAUCET_PARTICLE}, // S_EMFAUCET_PARTICLE
|
||||
|
||||
// MT_TRICKBALLOON_RED
|
||||
{SPR_TKBR, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED2}, // S_TRICKBALLOON_RED1
|
||||
{SPR_TKBR, 1, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED1},
|
||||
{SPR_TKBR, 2, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_POP2}, // S_TRICKBALLOON_RED_POP1
|
||||
{SPR_TKBR, 3, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_POP3},
|
||||
{SPR_TKBR, 4, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_GONE},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_INFLATE1}, // S_TRICKBALLOON_RED_GONE
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_INFLATE2}, // S_TRICKBALLOON_RED_INFLATE1
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_INFLATE3},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_INFLATE4},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED_INFLATE5},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_RED1},
|
||||
|
||||
// MT_TRICKBALLOON_RED_POINT
|
||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_TRICKBALLOON_RED_POINT1}, // S_TRICKBALLOON_RED_POINT1
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW
|
||||
{SPR_TKBY, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW2}, // S_TRICKBALLOON_YELLOW1
|
||||
{SPR_TKBY, 1, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW1},
|
||||
{SPR_TKBY, 2, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_POP2}, // S_TRICKBALLOON_YELLOW_POP1
|
||||
{SPR_TKBY, 3, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_POP3},
|
||||
{SPR_TKBY, 4, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_GONE},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_INFLATE1}, // S_TRICKBALLOON_YELLOW_GONE
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_INFLATE2}, // S_TRICKBALLOON_YELLOW_INFLATE1
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_INFLATE3},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_INFLATE4},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_INFLATE5},
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW1},
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW_POINT
|
||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_POINT1}, // S_TRICKBALLOON_YELLOW_POINT1
|
||||
};
|
||||
|
||||
mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||
|
|
@ -33052,6 +33088,110 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
MF_NOGRAVITY|MF_NOBLOCKMAP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
{ // MT_TRICKBALLOON_RED
|
||||
2764, // doomednum
|
||||
S_TRICKBALLOON_RED1, // spawnstate
|
||||
1, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_s3k77, // deathsound
|
||||
0, // speed
|
||||
96*FRACUNIT, // radius
|
||||
128*FRACUNIT, // height
|
||||
0, // dispoffset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
{ // MT_TRICKBALLOON_RED_POINT
|
||||
-1, // doomednum
|
||||
S_TRICKBALLOON_RED_POINT1, // spawnstate
|
||||
1, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
32*FRACUNIT, // radius
|
||||
64*FRACUNIT, // height
|
||||
0, // dispoffset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
{ // MT_TRICKBALLOON_YELLOW
|
||||
2765, // doomednum
|
||||
S_TRICKBALLOON_YELLOW1, // spawnstate
|
||||
1, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_s3k77, // deathsound
|
||||
0, // speed
|
||||
96*FRACUNIT, // radius
|
||||
128*FRACUNIT, // height
|
||||
0, // dispoffset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
{ // MT_TRICKBALLOON_YELLOW_POINT
|
||||
-1, // doomednum
|
||||
S_TRICKBALLOON_YELLOW_POINT1, // spawnstate
|
||||
1, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
32*FRACUNIT, // radius
|
||||
64*FRACUNIT, // height
|
||||
0, // dispoffset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
41
src/info.h
41
src/info.h
|
|
@ -1569,6 +1569,10 @@ typedef enum sprite
|
|||
SPR_EMR3,
|
||||
SPR_EMFC,
|
||||
|
||||
// Joypolis Trick Balloon
|
||||
SPR_TKBR,
|
||||
SPR_TKBY,
|
||||
|
||||
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
||||
SPR_VIEW,
|
||||
|
||||
|
|
@ -6199,6 +6203,38 @@ typedef enum state
|
|||
// MT_EMFAUCET_PARTICLE
|
||||
S_EMFAUCET_PARTICLE,
|
||||
|
||||
// MT_TRICKBALLOON_RED
|
||||
S_TRICKBALLOON_RED1,
|
||||
S_TRICKBALLOON_RED2,
|
||||
S_TRICKBALLOON_RED_POP1,
|
||||
S_TRICKBALLOON_RED_POP2,
|
||||
S_TRICKBALLOON_RED_POP3,
|
||||
S_TRICKBALLOON_RED_GONE,
|
||||
S_TRICKBALLOON_RED_INFLATE1,
|
||||
S_TRICKBALLOON_RED_INFLATE2,
|
||||
S_TRICKBALLOON_RED_INFLATE3,
|
||||
S_TRICKBALLOON_RED_INFLATE4,
|
||||
S_TRICKBALLOON_RED_INFLATE5,
|
||||
|
||||
// MT_TRICKBALLOON_RED_POINT
|
||||
S_TRICKBALLOON_RED_POINT1,
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW
|
||||
S_TRICKBALLOON_YELLOW1,
|
||||
S_TRICKBALLOON_YELLOW2,
|
||||
S_TRICKBALLOON_YELLOW_POP1,
|
||||
S_TRICKBALLOON_YELLOW_POP2,
|
||||
S_TRICKBALLOON_YELLOW_POP3,
|
||||
S_TRICKBALLOON_YELLOW_GONE,
|
||||
S_TRICKBALLOON_YELLOW_INFLATE1,
|
||||
S_TRICKBALLOON_YELLOW_INFLATE2,
|
||||
S_TRICKBALLOON_YELLOW_INFLATE3,
|
||||
S_TRICKBALLOON_YELLOW_INFLATE4,
|
||||
S_TRICKBALLOON_YELLOW_INFLATE5,
|
||||
|
||||
// MT_TRICKBALLOON_YELLOW_POINT
|
||||
S_TRICKBALLOON_YELLOW_POINT1,
|
||||
|
||||
S_FIRSTFREESLOT,
|
||||
S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1,
|
||||
NUMSTATES
|
||||
|
|
@ -7481,6 +7517,11 @@ typedef enum mobj_type
|
|||
MT_EMFAUCET_PARTICLE,
|
||||
MT_EMRAINGEN,
|
||||
|
||||
MT_TRICKBALLOON_RED,
|
||||
MT_TRICKBALLOON_RED_POINT,
|
||||
MT_TRICKBALLOON_YELLOW,
|
||||
MT_TRICKBALLOON_YELLOW_POINT,
|
||||
|
||||
MT_FIRSTFREESLOT,
|
||||
MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1,
|
||||
NUMMOBJTYPES
|
||||
|
|
|
|||
|
|
@ -354,6 +354,10 @@ void Obj_EMZFaucetThink(mobj_t *mo);
|
|||
void Obj_EMZDripDeath(mobj_t *mo);
|
||||
void Obj_EMZRainGenerator(mobj_t *mo);
|
||||
|
||||
/* Joypolis Trick Balloons */
|
||||
void Obj_TrickBalloonMobjSpawn(mobj_t* mobj);
|
||||
void Obj_TrickBalloonTouchSpecial(mobj_t* special, mobj_t* toucher);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
fuel.cpp
|
||||
rocks.cpp
|
||||
emz-faucet.cpp
|
||||
trick-balloon.c
|
||||
)
|
||||
|
||||
add_subdirectory(versus)
|
||||
|
|
|
|||
76
src/objects/trick-balloon.c
Normal file
76
src/objects/trick-balloon.c
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
// DR. ROBOTNIK'S RING RACERS
|
||||
//-------------------------------
|
||||
// Copyright (C) 2024 by Kart Krew
|
||||
//
|
||||
// This program is free software distributed under the
|
||||
// terms of the GNU General Public License, version 2.
|
||||
// See the 'LICENSE' file for more details.
|
||||
//-----------------------------------------------------------------------------
|
||||
/// \brief Joypolis Trick Balloons
|
||||
|
||||
#include "../info.h"
|
||||
#include "../doomdef.h"
|
||||
#include "../g_game.h"
|
||||
#include "../p_local.h"
|
||||
#include "../k_kart.h"
|
||||
#include "../k_objects.h"
|
||||
#include "../s_sound.h"
|
||||
|
||||
void Obj_TrickBalloonMobjSpawn(mobj_t* mobj)
|
||||
{
|
||||
mobjtype_t spawntype;
|
||||
switch (mobj->type)
|
||||
{
|
||||
case MT_TRICKBALLOON_RED:
|
||||
spawntype = MT_TRICKBALLOON_RED_POINT;
|
||||
break;
|
||||
case MT_TRICKBALLOON_YELLOW:
|
||||
spawntype = MT_TRICKBALLOON_YELLOW_POINT;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
P_SpawnMobj(mobj->x, mobj->y, mobj->z, spawntype);
|
||||
}
|
||||
|
||||
void Obj_TrickBalloonTouchSpecial(mobj_t* special, mobj_t* toucher)
|
||||
{
|
||||
|
||||
if (special->state == &states[S_TRICKBALLOON_RED1] || special->state == &states[S_TRICKBALLOON_RED2])
|
||||
{
|
||||
fixed_t vspeed = 32 << FRACBITS;
|
||||
|
||||
if (toucher->player && toucher->player)
|
||||
{
|
||||
toucher->player->trickpanel = 1;
|
||||
toucher->player->pflags |= PF_TRICKDELAY;
|
||||
toucher->player->tricktime = 0;
|
||||
}
|
||||
|
||||
K_DoPogoSpring(toucher, vspeed, 0);
|
||||
P_InstaThrust(toucher, toucher->angle, 42 * special->scale);
|
||||
|
||||
S_StartSound(special, special->info->deathsound);
|
||||
P_SetMobjState(special, S_TRICKBALLOON_RED_POP1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (special->state == &states[S_TRICKBALLOON_YELLOW1] || special->state == &states[S_TRICKBALLOON_YELLOW2])
|
||||
{
|
||||
fixed_t vspeed = 16 << FRACBITS;
|
||||
|
||||
if (toucher->player && toucher->player)
|
||||
{
|
||||
toucher->player->trickpanel = 1;
|
||||
toucher->player->pflags |= PF_TRICKDELAY;
|
||||
toucher->player->tricktime = 0;
|
||||
}
|
||||
|
||||
K_DoPogoSpring(toucher, vspeed, 0);
|
||||
P_InstaThrust(toucher, toucher->angle, 42 * special->scale);
|
||||
|
||||
S_StartSound(special, special->info->deathsound);
|
||||
P_SetMobjState(special, S_TRICKBALLOON_YELLOW_POP1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1015,6 +1015,11 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
return;
|
||||
}
|
||||
|
||||
case MT_TRICKBALLOON_RED:
|
||||
case MT_TRICKBALLOON_YELLOW:
|
||||
Obj_TrickBalloonTouchSpecial(special, toucher);
|
||||
return;
|
||||
|
||||
default: // SOC or script pickup
|
||||
P_SetTarget(&special->target, toucher);
|
||||
break;
|
||||
|
|
@ -1154,7 +1159,7 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
UINT16 bonustime = 10*TICRATE;
|
||||
INT16 clamptime = 0; // Don't allow reserve time past this value (by much)...
|
||||
INT16 mintime = 5*TICRATE; // But give SOME reward for every hit. (This value used for Normal)
|
||||
|
||||
|
||||
if (grandprixinfo.gp)
|
||||
{
|
||||
if (grandprixinfo.masterbots)
|
||||
|
|
@ -3200,7 +3205,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
// Reduce the value of subsequent invinc extensions
|
||||
kinvextend = kinvextend / (1 + source->player->invincibilityextensions); // 50%, 33%, 25%[...]
|
||||
kinvextend = max(kinvextend, TICRATE);
|
||||
|
||||
|
||||
source->player->invincibilityextensions++;
|
||||
|
||||
source->player->invincibilitytimer += kinvextend;
|
||||
|
|
|
|||
|
|
@ -11838,6 +11838,10 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
case MT_EMROCKS:
|
||||
Obj_LinkRocks(mobj);
|
||||
break;
|
||||
case MT_TRICKBALLOON_RED:
|
||||
case MT_TRICKBALLOON_YELLOW:
|
||||
Obj_TrickBalloonMobjSpawn(mobj);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue