mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-23 14:01:14 +00:00
Merge branch 'catholic-vfx' into 'master'
Trick Panel FX/gameplay pass See merge request KartKrew/Kart!1626
This commit is contained in:
commit
658cd7c170
25 changed files with 1379 additions and 193 deletions
|
|
@ -2540,7 +2540,7 @@ void CL_ClearPlayer(INT32 playernum)
|
|||
}
|
||||
|
||||
#define PlayerPointerRemove(field) \
|
||||
if (field) \
|
||||
if (P_MobjWasRemoved(field) == false) \
|
||||
{ \
|
||||
P_RemoveMobj(field); \
|
||||
P_SetTarget(&field, NULL); \
|
||||
|
|
@ -2550,7 +2550,8 @@ void CL_ClearPlayer(INT32 playernum)
|
|||
PlayerPointerRemove(players[playernum].mo);
|
||||
PlayerPointerRemove(players[playernum].followmobj);
|
||||
PlayerPointerRemove(players[playernum].stumbleIndicator);
|
||||
PlayerPointerRemove(players[playernum].sliptideZipIndicator);
|
||||
PlayerPointerRemove(players[playernum].wavedashIndicator);
|
||||
PlayerPointerRemove(players[playernum].trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
|
|
|
|||
|
|
@ -2429,13 +2429,16 @@ static void Command_Map_f(void)
|
|||
// Let's just guess so we don't have to specify the gametype EVERY time...
|
||||
newgametype = G_GuessGametypeByTOL(mapheaderinfo[newmapnum-1]->typeoflevel);
|
||||
|
||||
if (newgametype == -1)
|
||||
if (!option_force && newgametype == -1)
|
||||
{
|
||||
CONS_Alert(CONS_WARNING, M_GetText("%s (%s) doesn't support any known gametype!\n"), realmapname, G_BuildMapName(newmapnum));
|
||||
Z_Free(realmapname);
|
||||
Z_Free(mapname);
|
||||
return;
|
||||
}
|
||||
|
||||
if (newgametype == -1)
|
||||
newgametype = GT_RACE; // sensible default
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -267,6 +267,16 @@ typedef enum
|
|||
TRIPWIRE_BLASTER,
|
||||
} tripwirepass_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TRICKSTATE_NONE = 0,
|
||||
TRICKSTATE_READY,
|
||||
TRICKSTATE_FORWARD,
|
||||
TRICKSTATE_RIGHT,
|
||||
TRICKSTATE_LEFT,
|
||||
TRICKSTATE_BACK,
|
||||
} trickstate_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// Unsynced, HUD or clientsided effects
|
||||
|
|
@ -644,6 +654,7 @@ struct player_t
|
|||
respawnvars_t respawn; // Respawn info
|
||||
mobj_t *ringShooter; // DEZ respawner object
|
||||
tic_t airtime; // Used to track just air time, but has evolved over time into a general "karted" timer. Rename this variable?
|
||||
tic_t lastairtime;
|
||||
UINT8 startboost; // (0 to 125) - Boost you get from start of race
|
||||
UINT8 dropdashboost; // Boost you get when holding A while respawning
|
||||
|
||||
|
|
@ -757,7 +768,7 @@ struct player_t
|
|||
UINT8 confirmVictim; // Player ID that you dealt damage to
|
||||
UINT8 confirmVictimDelay; // Delay before playing the sound
|
||||
|
||||
UINT8 trickpanel; // Trick panel state
|
||||
UINT8 trickpanel; // Trick panel state - see trickstate_t
|
||||
UINT8 tricktime; // Increases while you're tricking. You can't input any trick until it's reached a certain threshold
|
||||
fixed_t trickboostpower; // Save the rough speed multiplier. Used for upwards tricks.
|
||||
UINT8 trickboostdecay; // used to know how long you've waited
|
||||
|
|
@ -902,14 +913,19 @@ struct player_t
|
|||
|
||||
UINT8 tripwireReboundDelay; // When failing Tripwire, brieftly lock out speed-based tripwire pass (anti-cheese)
|
||||
|
||||
UINT16 sliptideZip; // How long is our chained sliptide? Grant a proportional boost when it's over.
|
||||
UINT8 sliptideZipDelay; // How long since the last sliptide? Only boost once you've been straightened out for a bit.
|
||||
UINT16 sliptideZipBoost; // The actual boost granted from sliptideZip.
|
||||
UINT16 wavedash; // How long is our chained sliptide? Grant a proportional boost when it's over.
|
||||
UINT8 wavedashdelay; // How long since the last sliptide? Only boost once you've been straightened out for a bit.
|
||||
UINT16 wavedashboost; // The actual boost granted from wavedash.
|
||||
|
||||
UINT16 trickcharge; // Landed normally from a trick panel? Get the benefits package!
|
||||
|
||||
UINT16 infinitether; // Generic infinitether time, used for infinitether leniency.
|
||||
|
||||
UINT8 lastsafelap;
|
||||
|
||||
mobj_t *stumbleIndicator;
|
||||
mobj_t *sliptideZipIndicator;
|
||||
mobj_t *wavedashIndicator;
|
||||
mobj_t *trickIndicator;
|
||||
mobj_t *whip;
|
||||
mobj_t *hand;
|
||||
mobj_t *flickyAttacker;
|
||||
|
|
@ -927,6 +943,7 @@ struct player_t
|
|||
INT16 incontrol; // -1 to -175 when spinning out or tumbling, 1 to 175 when not. Use to check for combo hits or emergency inputs.
|
||||
|
||||
boolean markedfordeath;
|
||||
boolean dotrickfx;
|
||||
|
||||
UINT8 ringboxdelay; // Delay until Ring Box auto-activates
|
||||
UINT8 ringboxaward; // Where did we stop?
|
||||
|
|
|
|||
|
|
@ -3314,7 +3314,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_MAGICIANBOXTOP",
|
||||
"S_MAGICIANBOXBOTTOM",
|
||||
|
||||
"S_SLIPTIDEZIP",
|
||||
"S_WAVEDASH",
|
||||
|
||||
"S_INSTAWHIP",
|
||||
"S_INSTAWHIP_RECHARGE1",
|
||||
|
|
@ -3325,6 +3325,13 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_BLOCKRING",
|
||||
"S_BLOCKBODY",
|
||||
|
||||
"S_CHARGEAURA",
|
||||
"S_CHARGEFALL",
|
||||
"S_CHARGEFLICKER",
|
||||
"S_CHARGESPARK",
|
||||
"S_CHARGERELEASE",
|
||||
"S_CHARGEEXTRA",
|
||||
|
||||
"S_SERVANTHAND",
|
||||
|
||||
"S_HORNCODE",
|
||||
|
|
@ -3892,6 +3899,16 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
"S_SMOOTHLANDING",
|
||||
|
||||
"S_TRICKINDICATOR_OVERLAY",
|
||||
"S_TRICKINDICATOR_UNDERLAY",
|
||||
"S_TRICKINDICATOR_OVERLAY_ARROW",
|
||||
"S_TRICKINDICATOR_UNDERLAY_ARROW",
|
||||
"S_TRICKINDICATOR_UNDERLAY_ARROW2",
|
||||
|
||||
"S_SIDETRICK",
|
||||
"S_BACKTRICK",
|
||||
"S_FORWARDTRICK",
|
||||
|
||||
// DEZ Ring Shooter
|
||||
"S_TIREGRABBER",
|
||||
"S_RINGSHOOTER_SIDE",
|
||||
|
|
@ -5538,7 +5555,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_MONITOR_SHARD",
|
||||
"MT_MAGICIANBOX",
|
||||
|
||||
"MT_SLIPTIDEZIP",
|
||||
"MT_WAVEDASH",
|
||||
|
||||
"MT_INSTAWHIP",
|
||||
"MT_INSTAWHIP_RECHARGE",
|
||||
|
|
@ -5546,6 +5563,13 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_BLOCKRING",
|
||||
"MT_BLOCKBODY",
|
||||
|
||||
"MT_CHARGEAURA",
|
||||
"MT_CHARGEFALL",
|
||||
"MT_CHARGEFLICKER",
|
||||
"MT_CHARGESPARK",
|
||||
"MT_CHARGERELEASE",
|
||||
"MT_CHARGEEXTRA",
|
||||
|
||||
"MT_SERVANTHAND",
|
||||
|
||||
"MT_HORNCODE",
|
||||
|
|
@ -5649,6 +5673,9 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_TRIPWIREBOOST",
|
||||
|
||||
"MT_SMOOTHLANDING",
|
||||
"MT_TRICKINDICATOR",
|
||||
"MT_SIDETRICK",
|
||||
"MT_FORWARDTRICK",
|
||||
|
||||
"MT_TIREGRABBER",
|
||||
"MT_RINGSHOOTER",
|
||||
|
|
|
|||
|
|
@ -2234,7 +2234,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
K_RemoveFollower(&players[player]);
|
||||
|
||||
#define PlayerPointerRemove(field) \
|
||||
if (field) \
|
||||
if (P_MobjWasRemoved(field) == false) \
|
||||
{ \
|
||||
P_RemoveMobj(field); \
|
||||
P_SetTarget(&field, NULL); \
|
||||
|
|
@ -2243,7 +2243,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
// These are mostly subservient to the player, and may not clean themselves up.
|
||||
PlayerPointerRemove(players[player].followmobj);
|
||||
PlayerPointerRemove(players[player].stumbleIndicator);
|
||||
PlayerPointerRemove(players[player].sliptideZipIndicator);
|
||||
PlayerPointerRemove(players[player].wavedashIndicator);
|
||||
PlayerPointerRemove(players[player].trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
|
|
|
|||
284
src/info.c
284
src/info.c
|
|
@ -558,7 +558,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"IMDB", // Item Monitor Small Shard (Debris)
|
||||
"MTWK", // Item Monitor Glass Twinkle
|
||||
|
||||
"SLPT", // Sliptide zip indicator
|
||||
"SLPT", // Wavedash indicator
|
||||
"TRBS", // Trickdash indicator
|
||||
|
||||
"IWHP", // Instawhip
|
||||
"WPRE", // Instawhip Recharge
|
||||
|
|
@ -566,6 +567,12 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"GRNG", // Guard ring
|
||||
"GBDY", // Guard body
|
||||
|
||||
"TRC1", // Charge aura
|
||||
"TRC2", // Charge fall
|
||||
"TRC3", // Charge flicker/sparks
|
||||
"TRC4", // Charge release
|
||||
"TRC5", // Charge extra
|
||||
|
||||
"DHND", // Servant Hand
|
||||
|
||||
"HORN", // Horncode
|
||||
|
|
@ -631,6 +638,15 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"TWBT", // Tripwire BLASTER
|
||||
"SMLD", // Smooth landing
|
||||
|
||||
// Trick Effects
|
||||
"TRK1",
|
||||
"TRK2",
|
||||
"TRK3",
|
||||
"TRK4",
|
||||
"TRK5",
|
||||
"TRK6",
|
||||
"TRK7",
|
||||
|
||||
"TIRG", // Tire grabbers
|
||||
"RSHT", // DEZ Ring Shooter
|
||||
|
||||
|
|
@ -4118,7 +4134,7 @@ state_t states[NUMSTATES] =
|
|||
{SPR_MGBT, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_TOP
|
||||
{SPR_MGBB, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_BOTTOM
|
||||
|
||||
{SPR_SLPT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_SLIPTIDEZIP
|
||||
{SPR_SLPT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_WAVEDASH
|
||||
|
||||
{SPR_IWHP, FF_FLOORSPRITE|FF_ANIMATE|0, -1, {NULL}, 6, 2, S_NULL}, // S_INSTAWHIP
|
||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_INSTAWHIP_RECHARGE2}, // S_INSTAWHIP_RECHARGE1
|
||||
|
|
@ -4129,6 +4145,13 @@ state_t states[NUMSTATES] =
|
|||
{SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
|
||||
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
||||
|
||||
{SPR_TRC1, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_CHARGEAURA
|
||||
{SPR_TRC2, FF_FULLBRIGHT|FF_ANIMATE|0, 20, {NULL}, 19, 1, S_NULL}, // S_CHARGEFALL
|
||||
{SPR_TRC3, FF_FULLBRIGHT|FF_ADD|0, 2, {NULL}, 0, 0, S_NULL}, // S_CHARGEFLICKER
|
||||
{SPR_TRC3, FF_FULLBRIGHT|FF_ADD|1, 2, {NULL}, 0, 0, S_NULL}, // S_CHARGESPARK
|
||||
{SPR_TRC4, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|0, -1, {NULL}, 4, 1, S_NULL}, // S_CHARGERELEASE
|
||||
{SPR_TRC5, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|0, -1, {NULL}, 4, 1, S_NULL}, // S_CHARGEEXTRA
|
||||
|
||||
{SPR_DHND, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SERVANTHAND
|
||||
|
||||
{SPR_HORN, 0, -1, {NULL}, 0, 0, S_NULL}, // S_HORNCODE
|
||||
|
|
@ -4662,6 +4685,16 @@ state_t states[NUMSTATES] =
|
|||
|
||||
{SPR_SMLD, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE, -1, {NULL}, 7, 2, S_NULL}, // S_SMOOTHLANDING
|
||||
|
||||
{SPR_TRK1, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE|FF_ADD, -1, {NULL}, 3, 3, S_NULL}, // S_TRICKINDICATOR_OVERLAY,
|
||||
{SPR_TRK2, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 3, 3, S_NULL}, // S_TRICKINDICATOR_UNDERLAY,
|
||||
{SPR_TRK3, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE|FF_ADD, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_OVERLAY_ARROW,
|
||||
{SPR_NULL, 0, 1, {NULL}, 12, 1, S_TRICKINDICATOR_UNDERLAY_ARROW2}, // S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
{SPR_TRK4, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||
|
||||
{SPR_TRK5, FF_FULLBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_SIDETRICK,
|
||||
{SPR_TRK6, FF_FULLBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_BACKTRICK,
|
||||
{SPR_TRK7, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 6, 1, S_NULL}, // S_FORWARDTRICK,
|
||||
|
||||
{SPR_TIRG, FF_ANIMATE, -1, {NULL}, 1, 1, S_NULL}, // S_TIREGRABBER
|
||||
{SPR_RSHT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_SIDE
|
||||
{SPR_RSHT, FF_SEMIBRIGHT|FF_PAPERSPRITE|2, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_NIPPLES
|
||||
|
|
@ -23061,9 +23094,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SLIPTIDEZIP
|
||||
{ // MT_WAVEDASH
|
||||
-1, // doomednum
|
||||
S_SLIPTIDEZIP, // spawnstate
|
||||
S_WAVEDASH, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
|
@ -23223,6 +23256,168 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEAURA
|
||||
-1, // doomednum
|
||||
S_CHARGEAURA, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEFALL
|
||||
-1, // doomednum
|
||||
S_CHARGEFALL, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEFLICKER
|
||||
-1, // doomednum
|
||||
S_CHARGEFLICKER, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGESPARK
|
||||
-1, // doomednum
|
||||
S_CHARGESPARK, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGERELEASE
|
||||
-1, // doomednum
|
||||
S_CHARGERELEASE, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CHARGEEXTRA
|
||||
-1, // doomednum
|
||||
S_CHARGEEXTRA, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
67*FRACUNIT, // radius
|
||||
67*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SERVANTHAND
|
||||
-1, // doomednum
|
||||
S_SERVANTHAND, // spawnstate
|
||||
|
|
@ -25329,6 +25524,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TRICKINDICATOR
|
||||
-1, // doomednum
|
||||
S_INVISIBLE, // 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
|
||||
0, // speed
|
||||
128*FRACUNIT, // radius
|
||||
128*FRACUNIT, // height
|
||||
-1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SIDETRICK
|
||||
-1, // doomednum
|
||||
S_SIDETRICK, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
36*FRACUNIT, // radius
|
||||
40*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FORWARDTRICK
|
||||
-1, // doomednum
|
||||
S_FORWARDTRICK, // 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_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
60*FRACUNIT, // radius
|
||||
86*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TIREGRABBER
|
||||
-1, // doomednum
|
||||
S_TIREGRABBER, // spawnstate
|
||||
|
|
|
|||
49
src/info.h
49
src/info.h
|
|
@ -1115,7 +1115,8 @@ typedef enum sprite
|
|||
SPR_IMDB, // Item Monitor Small Shard (Debris)
|
||||
SPR_MTWK, // Item Monitor Glass Twinkle
|
||||
|
||||
SPR_SLPT, // Sliptide zip indicator
|
||||
SPR_SLPT, // Wavedash indicator
|
||||
SPR_TRBS, // Trickdash indicator
|
||||
|
||||
SPR_IWHP, // Instawhip
|
||||
SPR_WPRE, // Instawhip Recharge
|
||||
|
|
@ -1123,6 +1124,12 @@ typedef enum sprite
|
|||
SPR_GRNG, // Guard ring
|
||||
SPR_GBDY, // Guard body
|
||||
|
||||
SPR_TRC1, // Charge aura
|
||||
SPR_TRC2, // Charge fall
|
||||
SPR_TRC3, // Charge flicker/sparks
|
||||
SPR_TRC4, // Charge release
|
||||
SPR_TRC5, // Charge extra
|
||||
|
||||
SPR_DHND, // Servant Hand
|
||||
|
||||
SPR_HORN, // Horncode
|
||||
|
|
@ -1188,6 +1195,15 @@ typedef enum sprite
|
|||
SPR_TWBT, // Tripwire BLASTER
|
||||
SPR_SMLD, // Smooth landing
|
||||
|
||||
// Trick Effects
|
||||
SPR_TRK1,
|
||||
SPR_TRK2,
|
||||
SPR_TRK3,
|
||||
SPR_TRK4,
|
||||
SPR_TRK5,
|
||||
SPR_TRK6,
|
||||
SPR_TRK7,
|
||||
|
||||
SPR_TIRG, // Tire grabbers
|
||||
SPR_RSHT, // DEZ Ring Shooter
|
||||
|
||||
|
|
@ -4529,7 +4545,7 @@ typedef enum state
|
|||
S_MAGICIANBOX_TOP,
|
||||
S_MAGICIANBOX_BOTTOM,
|
||||
|
||||
S_SLIPTIDEZIP,
|
||||
S_WAVEDASH,
|
||||
|
||||
S_INSTAWHIP,
|
||||
S_INSTAWHIP_RECHARGE1,
|
||||
|
|
@ -4540,6 +4556,13 @@ typedef enum state
|
|||
S_BLOCKRING,
|
||||
S_BLOCKBODY,
|
||||
|
||||
S_CHARGEAURA,
|
||||
S_CHARGEFALL,
|
||||
S_CHARGEFLICKER,
|
||||
S_CHARGESPARK,
|
||||
S_CHARGERELEASE,
|
||||
S_CHARGEEXTRA,
|
||||
|
||||
S_SERVANTHAND,
|
||||
|
||||
S_HORNCODE,
|
||||
|
|
@ -5106,6 +5129,16 @@ typedef enum state
|
|||
|
||||
S_SMOOTHLANDING,
|
||||
|
||||
S_TRICKINDICATOR_OVERLAY,
|
||||
S_TRICKINDICATOR_UNDERLAY,
|
||||
S_TRICKINDICATOR_OVERLAY_ARROW,
|
||||
S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||
|
||||
S_SIDETRICK,
|
||||
S_BACKTRICK,
|
||||
S_FORWARDTRICK,
|
||||
|
||||
// DEZ Ring Shooter
|
||||
S_TIREGRABBER,
|
||||
S_RINGSHOOTER_SIDE,
|
||||
|
|
@ -6791,7 +6824,7 @@ typedef enum mobj_type
|
|||
MT_MONITOR_PART,
|
||||
MT_MONITOR_SHARD,
|
||||
MT_MAGICIANBOX,
|
||||
MT_SLIPTIDEZIP,
|
||||
MT_WAVEDASH,
|
||||
|
||||
MT_INSTAWHIP,
|
||||
MT_INSTAWHIP_RECHARGE,
|
||||
|
|
@ -6799,6 +6832,13 @@ typedef enum mobj_type
|
|||
MT_BLOCKRING,
|
||||
MT_BLOCKBODY,
|
||||
|
||||
MT_CHARGEAURA,
|
||||
MT_CHARGEFALL,
|
||||
MT_CHARGEFLICKER,
|
||||
MT_CHARGESPARK,
|
||||
MT_CHARGERELEASE,
|
||||
MT_CHARGEEXTRA,
|
||||
|
||||
MT_SERVANTHAND,
|
||||
|
||||
MT_HORNCODE,
|
||||
|
|
@ -6902,6 +6942,9 @@ typedef enum mobj_type
|
|||
MT_TRIPWIREBOOST,
|
||||
|
||||
MT_SMOOTHLANDING,
|
||||
MT_TRICKINDICATOR,
|
||||
MT_SIDETRICK,
|
||||
MT_FORWARDTRICK,
|
||||
|
||||
MT_TIREGRABBER,
|
||||
MT_RINGSHOOTER,
|
||||
|
|
|
|||
|
|
@ -1109,7 +1109,7 @@ static void K_BotTrick(player_t *player, ticcmd_t *cmd, const botcontroller_t *b
|
|||
return;
|
||||
}
|
||||
|
||||
if (player->trickpanel == 1)
|
||||
if (player->trickpanel == TRICKSTATE_READY)
|
||||
{
|
||||
switch (botController->trick)
|
||||
{
|
||||
|
|
@ -1521,7 +1521,7 @@ static void K_BuildBotTiccmdNormal(player_t *player, ticcmd_t *cmd)
|
|||
|
||||
// Actual gameplay behaviors below this block!
|
||||
const botcontroller_t *botController = K_GetBotController(player->mo);
|
||||
if (player->trickpanel != 0)
|
||||
if (player->trickpanel != TRICKSTATE_NONE)
|
||||
{
|
||||
K_BotTrick(player, cmd, botController);
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ private:
|
|||
|
||||
bool can_change() const
|
||||
{
|
||||
if (viewplayer()->trickpanel > 0)
|
||||
if (viewplayer()->trickpanel != TRICKSTATE_NONE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
622
src/k_kart.c
622
src/k_kart.c
File diff suppressed because it is too large
Load diff
|
|
@ -119,9 +119,11 @@ angle_t K_StumbleSlope(angle_t angle, angle_t pitch, angle_t roll);
|
|||
void K_StumblePlayer(player_t *player);
|
||||
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir);
|
||||
void K_InitStumbleIndicator(player_t *player);
|
||||
void K_InitSliptideZipIndicator(player_t *player);
|
||||
void K_InitWavedashIndicator(player_t *player);
|
||||
void K_InitTrickIndicator(player_t *player);
|
||||
void K_UpdateStumbleIndicator(player_t *player);
|
||||
void K_UpdateSliptideZipIndicator(player_t *player);
|
||||
void K_UpdateWavedashIndicator(player_t *player);
|
||||
void K_UpdateTrickIndicator(player_t *player);
|
||||
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||
void K_GiveBumpersToPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||
|
|
|
|||
|
|
@ -126,6 +126,11 @@ void Obj_BlockRingThink(mobj_t *ring);
|
|||
void Obj_BlockBodyThink(mobj_t *body);
|
||||
void Obj_GuardBreakThink(mobj_t *fx);
|
||||
|
||||
void Obj_ChargeAuraThink(mobj_t *aura);
|
||||
void Obj_ChargeFallThink(mobj_t *charge);
|
||||
void Obj_ChargeReleaseThink(mobj_t *release);
|
||||
void Obj_ChargeExtraThink(mobj_t *extra);
|
||||
|
||||
/* Ring Shooter */
|
||||
boolean Obj_RingShooterThinker(mobj_t *mo);
|
||||
boolean Obj_PlayerRingShooterFreeze(player_t *const player);
|
||||
|
|
|
|||
|
|
@ -156,7 +156,9 @@ void K_DoIngameRespawn(player_t *player)
|
|||
player->ringboost = 0;
|
||||
player->driftboost = player->strongdriftboost = 0;
|
||||
player->gateBoost = 0;
|
||||
player->sliptideZip = player->sliptideZipBoost = player->sliptideZipDelay = 0;
|
||||
player->trickcharge = 0;
|
||||
player->infinitether = 0;
|
||||
player->wavedash = player->wavedashboost = player->wavedashdelay = 0;
|
||||
|
||||
K_TumbleInterrupt(player);
|
||||
P_ResetPlayer(player);
|
||||
|
|
|
|||
|
|
@ -485,8 +485,6 @@ void K_ProcessTerrainEffect(mobj_t *mo)
|
|||
fixed_t speed = FixedHypot(mo->momx, mo->momy);
|
||||
fixed_t upwards = 16 * terrain->trickPanel;
|
||||
|
||||
player->trickpanel = 1;
|
||||
player->pflags |= PF_TRICKDELAY;
|
||||
K_DoPogoSpring(mo, upwards, 1);
|
||||
|
||||
// Reduce speed
|
||||
|
|
@ -551,7 +549,7 @@ void K_ProcessTerrainEffect(mobj_t *mo)
|
|||
P_InstaThrust(player->mo, thrustAngle, max(thrustSpeed, 2*playerSpeed));
|
||||
|
||||
player->dashpadcooldown = TICRATE/3;
|
||||
player->trickpanel = 0;
|
||||
player->trickpanel = TRICKSTATE_NONE;
|
||||
player->floorboost = 2;
|
||||
|
||||
S_StartSound(player->mo, sfx_cdfm62);
|
||||
|
|
|
|||
|
|
@ -233,6 +233,8 @@ static int player_get(lua_State *L)
|
|||
lua_pushinteger(L, plr->lastpickuptype);
|
||||
else if (fastcmp(field,"airtime"))
|
||||
lua_pushinteger(L, plr->airtime);
|
||||
else if (fastcmp(field,"lastairtime"))
|
||||
lua_pushinteger(L, plr->lastairtime);
|
||||
else if (fastcmp(field,"flashing"))
|
||||
lua_pushinteger(L, plr->flashing);
|
||||
else if (fastcmp(field,"spinouttimer"))
|
||||
|
|
@ -255,6 +257,8 @@ static int player_get(lua_State *L)
|
|||
lua_pushboolean(L, plr->flipDI);
|
||||
else if (fastcmp(field,"markedfordeath"))
|
||||
lua_pushboolean(L, plr->markedfordeath);
|
||||
else if (fastcmp(field,"dotrickfx"))
|
||||
lua_pushboolean(L, plr->dotrickfx);
|
||||
else if (fastcmp(field,"ringboxdelay"))
|
||||
lua_pushinteger(L, plr->ringboxdelay);
|
||||
else if (fastcmp(field,"ringboxaward"))
|
||||
|
|
@ -325,12 +329,16 @@ static int player_get(lua_State *L)
|
|||
lua_pushinteger(L, plr->tripwireLeniency);
|
||||
else if (fastcmp(field,"tripwireReboundDelay"))
|
||||
lua_pushinteger(L, plr->tripwireReboundDelay);
|
||||
else if (fastcmp(field,"sliptideZip"))
|
||||
lua_pushinteger(L, plr->sliptideZip);
|
||||
else if (fastcmp(field,"sliptideZipDelay"))
|
||||
lua_pushinteger(L, plr->sliptideZipDelay);
|
||||
else if (fastcmp(field,"sliptideZipBoost"))
|
||||
lua_pushinteger(L, plr->sliptideZipBoost);
|
||||
else if (fastcmp(field,"wavedash"))
|
||||
lua_pushinteger(L, plr->wavedash);
|
||||
else if (fastcmp(field,"wavedashdelay"))
|
||||
lua_pushinteger(L, plr->wavedashdelay);
|
||||
else if (fastcmp(field,"wavedashboost"))
|
||||
lua_pushinteger(L, plr->wavedashboost);
|
||||
else if (fastcmp(field,"trickcharge"))
|
||||
lua_pushinteger(L, plr->trickcharge);
|
||||
else if (fastcmp(field,"infinitether"))
|
||||
lua_pushinteger(L, plr->infinitether);
|
||||
else if (fastcmp(field,"lastsafelap"))
|
||||
lua_pushinteger(L, plr->lastsafelap);
|
||||
else if (fastcmp(field,"instaWhipCharge"))
|
||||
|
|
@ -721,6 +729,8 @@ static int player_set(lua_State *L)
|
|||
plr->airtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"airtime"))
|
||||
plr->airtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"lastairtime"))
|
||||
plr->lastairtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"flashing"))
|
||||
plr->flashing = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"spinouttimer"))
|
||||
|
|
@ -743,6 +753,8 @@ static int player_set(lua_State *L)
|
|||
plr->flipDI = luaL_checkboolean(L, 3);
|
||||
else if (fastcmp(field,"markedfordeath"))
|
||||
plr->markedfordeath = luaL_checkboolean(L, 3);
|
||||
else if (fastcmp(field,"dotrickfx"))
|
||||
plr->dotrickfx = luaL_checkboolean(L, 3);
|
||||
else if (fastcmp(field,"ringboxdelay"))
|
||||
plr->ringboxdelay = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"ringboxaward"))
|
||||
|
|
@ -813,12 +825,16 @@ static int player_set(lua_State *L)
|
|||
plr->tripwireLeniency = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"tripwireReboundDelay"))
|
||||
plr->tripwireReboundDelay = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"sliptideZip"))
|
||||
plr->sliptideZip = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"sliptideZipDelay"))
|
||||
plr->sliptideZipDelay = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"sliptideZipBoost"))
|
||||
plr->sliptideZipBoost = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"wavedash"))
|
||||
plr->wavedash = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"wavedashdelay"))
|
||||
plr->wavedashdelay = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"wavedashboost"))
|
||||
plr->wavedashboost = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"trickcharge"))
|
||||
plr->trickcharge = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"infinitether"))
|
||||
plr->infinitether = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"lastsafelap"))
|
||||
plr->lastsafelap = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"instaWhipCharge"))
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
wpzothers.c
|
||||
shadow.cpp
|
||||
ball-switch.cpp
|
||||
charge.c
|
||||
)
|
||||
|
||||
add_subdirectory(versus)
|
||||
|
|
|
|||
147
src/objects/charge.c
Normal file
147
src/objects/charge.c
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
#include "../doomdef.h"
|
||||
#include "../info.h"
|
||||
#include "../k_objects.h"
|
||||
#include "../p_local.h"
|
||||
#include "../k_kart.h"
|
||||
#include "../k_powerup.h"
|
||||
#include "../m_random.h"
|
||||
|
||||
#define CHARGEAURA_BURSTTIME (9)
|
||||
#define CHARGEAURA_SPARKRADIUS (40)
|
||||
|
||||
// xval1: destruction timer
|
||||
// xval2: master (spawns other visuals)
|
||||
// cvmem: spawn time (used to offset flash)
|
||||
void Obj_ChargeAuraThink (mobj_t *aura)
|
||||
{
|
||||
if (P_MobjWasRemoved(aura->target) || !aura->target->player || (aura->extravalue1 >= CHARGEAURA_BURSTTIME))
|
||||
{
|
||||
P_RemoveMobj(aura);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = aura->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
// Follow player
|
||||
aura->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(aura, mo->x, mo->y, mo->z + mo->height/2);
|
||||
aura->flags |= MF_NOCLIPTHING;
|
||||
aura->color = mo->color;
|
||||
|
||||
aura->renderflags &= ~RF_DONTDRAW;
|
||||
|
||||
fixed_t baseScale = 12*mo->scale/10;
|
||||
|
||||
if (aura->extravalue1 || !player->trickcharge)
|
||||
{
|
||||
aura->extravalue1++;
|
||||
baseScale += (mo->scale / 3) * aura->extravalue1;
|
||||
aura->renderflags &= ~RF_TRANSMASK;
|
||||
aura->renderflags |= (aura->extravalue1)<<RF_TRANSSHIFT;
|
||||
if (aura->extravalue1 % 2)
|
||||
aura->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
||||
P_SetScale(aura, baseScale);
|
||||
|
||||
// Twirl
|
||||
aura->angle = aura->angle - ANG1*(player->trickcharge/TICRATE + 4);
|
||||
// Visuals
|
||||
aura->renderflags |= RF_PAPERSPRITE|RF_ADD;
|
||||
|
||||
// fuck
|
||||
boolean forceinvisible = !!!((leveltime - aura->cvmem) % 4);
|
||||
if (aura->extravalue1 || !(player->driftcharge > K_GetKartDriftSparkValueForStage(player, 3)))
|
||||
forceinvisible = false;
|
||||
|
||||
if (forceinvisible)
|
||||
aura->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (aura->extravalue2)
|
||||
{
|
||||
if (player->driftcharge)
|
||||
{
|
||||
mobj_t *spark = P_SpawnMobjFromMobj(aura,
|
||||
FRACUNIT*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
FRACUNIT*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
FRACUNIT*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
MT_CHARGESPARK);
|
||||
spark->frame = P_RandomRange(PR_DECORATION, 1, 5);
|
||||
spark->renderflags |= RF_FULLBRIGHT|RF_ADD;
|
||||
P_SetTarget(&spark->target, aura);
|
||||
P_SetScale(spark, 15*aura->scale/10);
|
||||
}
|
||||
|
||||
if (forceinvisible)
|
||||
{
|
||||
mobj_t *flicker = P_SpawnMobjFromMobj(aura, 0, 0, 0, MT_CHARGEFLICKER);
|
||||
P_SetTarget(&flicker->target, aura);
|
||||
P_SetScale(flicker, aura->scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Obj_ChargeFallThink (mobj_t *charge)
|
||||
{
|
||||
if (P_MobjWasRemoved(charge->target) || !charge->target->player)
|
||||
{
|
||||
P_RemoveMobj(charge);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj_t *mo = charge->target;
|
||||
|
||||
// Follow player
|
||||
charge->flags &= ~(MF_NOCLIPTHING);
|
||||
P_MoveOrigin(charge, mo->x, mo->y, mo->z);
|
||||
charge->flags |= MF_NOCLIPTHING;
|
||||
charge->color = mo->color;
|
||||
charge->angle = mo->angle + ANGLE_45 + (ANGLE_90 * charge->extravalue1);
|
||||
|
||||
if (!P_IsObjectOnGround(mo))
|
||||
charge->renderflags |= RF_DONTDRAW;
|
||||
else
|
||||
charge->renderflags &= ~RF_DONTDRAW;
|
||||
|
||||
fixed_t baseScale = 12*mo->scale/10;
|
||||
P_SetScale(charge, baseScale);
|
||||
|
||||
charge->renderflags &= ~RF_TRANSMASK;
|
||||
if (charge->tics < 10)
|
||||
charge->renderflags |= (9 - charge->tics)<<RF_TRANSSHIFT;
|
||||
|
||||
// Visuals
|
||||
charge->renderflags |= RF_PAPERSPRITE|RF_ADD;
|
||||
}
|
||||
}
|
||||
|
||||
// xval1: lifetime (used to offset from tracked player)
|
||||
void Obj_ChargeReleaseThink (mobj_t *release)
|
||||
{
|
||||
release->renderflags &= ~RF_TRANSMASK;
|
||||
if (release->tics < 36)
|
||||
release->renderflags |= (9 - release->tics/4)<<RF_TRANSSHIFT;
|
||||
release->rollangle += ANG15/2;
|
||||
|
||||
if (P_MobjWasRemoved(release->target) || !release->target->player)
|
||||
return;
|
||||
|
||||
release->extravalue1++;
|
||||
|
||||
fixed_t off = 8 * release->extravalue1 * release->target->scale;
|
||||
angle_t ang = K_MomentumAngle(release->target) + ANGLE_180;
|
||||
fixed_t xoff = FixedMul(off, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
fixed_t yoff = FixedMul(off, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
|
||||
P_MoveOrigin(release, release->target->x + xoff, release->target->y + yoff, release->target->z + release->target->height/2);
|
||||
}
|
||||
|
||||
void Obj_ChargeExtraThink (mobj_t *extra)
|
||||
{
|
||||
extra->renderflags &= ~RF_TRANSMASK;
|
||||
if (extra->tics < 18)
|
||||
extra->renderflags |= (9 - extra->tics/2)<<RF_TRANSSHIFT;
|
||||
extra->rollangle += ANG30;
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ void Obj_RainbowDashRingSpawn(mobj_t *mobj)
|
|||
|
||||
void Obj_DashRingSetup(mobj_t *mobj, mapthing_t *mthing)
|
||||
{
|
||||
static const UINT8 numColors = sizeof(rainbow_colors) / sizeof(skincolornum_t);
|
||||
static const UINT8 numColors = sizeof(ring_colors) / sizeof(skincolornum_t);
|
||||
const UINT8 additionalThrust = mthing->thing_args[1];
|
||||
statenum_t ringState, overlayState;
|
||||
|
||||
|
|
@ -199,8 +199,6 @@ static void RegularDashRingLaunch(player_t *player, mobj_t *ring)
|
|||
static void RainbowDashRingLaunch(player_t *player, mobj_t *ring)
|
||||
{
|
||||
player->mo->eflags &= ~MFE_SPRUNG;
|
||||
player->trickpanel = 1;
|
||||
player->pflags |= PF_TRICKDELAY;
|
||||
K_DoPogoSpring(player->mo, 0, 0);
|
||||
DashRingLaunch(player, ring);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1693,7 +1693,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
target->player->roundscore = 0;
|
||||
}
|
||||
|
||||
target->player->trickpanel = 0;
|
||||
target->player->trickpanel = TRICKSTATE_NONE;
|
||||
|
||||
ACS_RunPlayerDeathScript(target->player);
|
||||
}
|
||||
|
|
@ -2612,10 +2612,18 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
|
||||
P_SetPlayerMobjState(player->mo, player->mo->info->deathstate);
|
||||
|
||||
if (player->sliptideZipIndicator && !P_MobjWasRemoved(player->sliptideZipIndicator))
|
||||
P_RemoveMobj(player->sliptideZipIndicator);
|
||||
if (player->stumbleIndicator && !P_MobjWasRemoved(player->stumbleIndicator))
|
||||
P_RemoveMobj(player->stumbleIndicator);
|
||||
#define PlayerPointerRemove(field) \
|
||||
if (P_MobjWasRemoved(field) == false) \
|
||||
{ \
|
||||
P_RemoveMobj(field); \
|
||||
P_SetTarget(&field, NULL); \
|
||||
}
|
||||
|
||||
PlayerPointerRemove(player->stumbleIndicator);
|
||||
PlayerPointerRemove(player->wavedashIndicator);
|
||||
PlayerPointerRemove(player->trickIndicator);
|
||||
|
||||
#undef PlayerPointerRemove
|
||||
|
||||
if (type == DMG_TIMEOVER)
|
||||
{
|
||||
|
|
|
|||
14
src/p_map.c
14
src/p_map.c
|
|
@ -427,12 +427,8 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
|||
{
|
||||
if (spring->reactiontime == 0)
|
||||
{
|
||||
object->player->tricktime = 0; // Reset post-hitlag timer
|
||||
// Setup the boost for potential upwards trick, at worse, make it your regular max speed. (boost = curr speed*1.25)
|
||||
object->player->trickboostpower = max(FixedDiv(object->player->speed, K_GetKartSpeed(object->player, false, false)) - FRACUNIT, 0)*125/100;
|
||||
//CONS_Printf("Got boost: %d%\n", mo->player->trickboostpower*100 / FRACUNIT);
|
||||
object->player->trickpanel = 1;
|
||||
object->player->pflags |= PF_TRICKDELAY;
|
||||
object->eflags &= ~MFE_SPRUNG; // needed to permit the following
|
||||
K_DoPogoSpring(object, -vertispeed, 0); // negative so momz isn't modified
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -512,12 +508,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
|
|||
|
||||
if (spring->thing_args[1])
|
||||
{
|
||||
if (object->player)
|
||||
{
|
||||
object->player->trickpanel = 1;
|
||||
object->player->pflags |= PF_TRICKDELAY;
|
||||
}
|
||||
|
||||
K_DoPogoSpring(object, 32<<FRACBITS, 0);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
195
src/p_mobj.c
195
src/p_mobj.c
|
|
@ -1149,7 +1149,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
P_PlayerFlip(mo);
|
||||
}
|
||||
|
||||
if (mo->player->trickpanel >= 2)
|
||||
if (mo->player->trickpanel > TRICKSTATE_READY)
|
||||
{
|
||||
gravityadd = (5*gravityadd)/2;
|
||||
}
|
||||
|
|
@ -8395,10 +8395,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
return true;
|
||||
}
|
||||
|
||||
mobj->extravalue1 += 1;
|
||||
|
||||
mobj->angle += ANG1*mobj->extravalue1;
|
||||
P_SetScale(mobj, mobj->target->scale);
|
||||
mobj->extravalue1 += 1;
|
||||
P_InstaScale(mobj, mobj->target->scale);
|
||||
|
||||
destx = mobj->target->x;
|
||||
desty = mobj->target->y;
|
||||
|
|
@ -8407,6 +8406,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
{
|
||||
destx += FixedMul(mobj->radius*2, FINECOSINE((mobj->angle+ANGLE_90) >> ANGLETOFINESHIFT));
|
||||
desty += FixedMul(mobj->radius*2, FINESINE((mobj->angle+ANGLE_90) >> ANGLETOFINESHIFT));
|
||||
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
mobj->flags2 = (mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP);
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
zoff += mobj->target->height - mobj->height;
|
||||
}
|
||||
else if (mobj->state == &states[S_MAGICIANBOX_TOP]) // top
|
||||
{
|
||||
|
|
@ -8416,6 +8421,150 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
// Necessary to "ride" on Garden Top
|
||||
zoff += mobj->target->sprzoff;
|
||||
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
{
|
||||
P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
mobj->old_angle = mobj->angle;
|
||||
mobj->flags2 &= ~MF2_AMBUSH;
|
||||
}
|
||||
else
|
||||
{
|
||||
P_MoveOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MT_SIDETRICK:
|
||||
{
|
||||
fixed_t destx, desty;
|
||||
fixed_t zoff = 0;
|
||||
|
||||
if (!mobj->target
|
||||
|| !mobj->target->health
|
||||
|| !mobj->target->player
|
||||
|| mobj->target->player->trickpanel <= TRICKSTATE_FORWARD)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Flicker every other frame from first visibility
|
||||
if (mobj->flags2 & MF2_BOSSDEAD)
|
||||
{
|
||||
mobj->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->renderflags &= ~RF_DONTDRAW;
|
||||
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
|
||||
}
|
||||
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
mobj->flags2 = ((mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP)) ^ MF2_BOSSDEAD;
|
||||
|
||||
fixed_t scale = mobj->target->scale;
|
||||
|
||||
// sweeping effect
|
||||
if (mobj->target->player->trickpanel == TRICKSTATE_BACK)
|
||||
{
|
||||
const fixed_t saferange = (20*FRACUNIT)/21;
|
||||
if (mobj->threshold < -saferange)
|
||||
{
|
||||
mobj->threshold = -saferange;
|
||||
mobj->flags2 |= MF2_AMBUSH;
|
||||
}
|
||||
else while (mobj->threshold > saferange)
|
||||
{
|
||||
mobj->threshold -= 2*saferange;
|
||||
mobj->flags2 |= MF2_AMBUSH;
|
||||
}
|
||||
|
||||
scale = P_ReturnThrustX(mobj, FixedAngle(90*mobj->threshold), scale);
|
||||
|
||||
// This funny dealie is to make it so default
|
||||
// scale is placed as standard,
|
||||
// but variant threshold shifts upwards
|
||||
fixed_t extraoffset = FixedMul(mobj->info->height, mobj->target->scale - scale);
|
||||
if (mobj->threshold < 0)
|
||||
extraoffset /= 2;
|
||||
|
||||
// And this makes it swooce across the object.
|
||||
extraoffset += FixedMul(mobj->threshold, mobj->target->height);
|
||||
|
||||
zoff += P_MobjFlip(mobj) * extraoffset;
|
||||
|
||||
mobj->threshold += (saferange/8);
|
||||
}
|
||||
|
||||
mobj->angle += mobj->movedir;
|
||||
P_InstaScale(mobj, scale);
|
||||
|
||||
destx = mobj->target->x;
|
||||
desty = mobj->target->y;
|
||||
|
||||
destx += P_ReturnThrustX(mobj, mobj->angle - ANGLE_90, mobj->radius*2);
|
||||
desty += P_ReturnThrustY(mobj, mobj->angle - ANGLE_90, mobj->radius*2);
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
zoff += mobj->target->height - mobj->height;
|
||||
|
||||
// Necessary to "ride" on Garden Top
|
||||
zoff += mobj->target->sprzoff;
|
||||
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
{
|
||||
P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
mobj->old_angle = mobj->angle;
|
||||
mobj->flags2 &= ~MF2_AMBUSH;
|
||||
}
|
||||
else
|
||||
{
|
||||
P_MoveOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MT_FORWARDTRICK:
|
||||
{
|
||||
fixed_t destx, desty;
|
||||
fixed_t zoff = 0;
|
||||
|
||||
if (!mobj->target
|
||||
|| !mobj->target->health
|
||||
|| !mobj->target->player
|
||||
|| mobj->target->player->trickpanel != TRICKSTATE_FORWARD)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return false;
|
||||
}
|
||||
|
||||
mobj->renderflags &= ~RF_DONTDRAW;
|
||||
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
|
||||
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
mobj->flags2 = ((mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP)) ^ MF2_BOSSDEAD;
|
||||
|
||||
// sweeping effect
|
||||
P_InstaScale(mobj, (6*mobj->target->scale)/5);
|
||||
|
||||
const fixed_t sweep = FixedMul(FRACUNIT - (mobj->threshold * 2), mobj->radius);
|
||||
|
||||
destx = mobj->target->x;
|
||||
desty = mobj->target->y;
|
||||
|
||||
destx += P_ReturnThrustX(mobj, mobj->movedir, sweep);
|
||||
desty += P_ReturnThrustY(mobj, mobj->movedir, sweep);
|
||||
|
||||
const fixed_t sideways = P_ReturnThrustY(mobj, mobj->angle - mobj->movedir, mobj->radius);
|
||||
destx += P_ReturnThrustX(mobj, mobj->movedir + ANGLE_90, sideways);
|
||||
desty += P_ReturnThrustY(mobj, mobj->movedir + ANGLE_90, sideways);
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
zoff += mobj->target->height - (mobj->height + 18*mobj->target->scale);
|
||||
else
|
||||
zoff += 18*mobj->target->scale;
|
||||
|
||||
// Necessary to "ride" on Garden Top
|
||||
zoff += mobj->target->sprzoff;
|
||||
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
{
|
||||
P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
|
|
@ -8425,6 +8574,20 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
{
|
||||
P_MoveOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
}
|
||||
|
||||
mobj->threshold += FRACUNIT/6;
|
||||
if (mobj->threshold > FRACUNIT)
|
||||
{
|
||||
mobj_t *puff = P_SpawnGhostMobj(mobj);
|
||||
if (puff)
|
||||
{
|
||||
puff->renderflags = (puff->renderflags & ~RF_TRANSMASK)|RF_ADD;
|
||||
}
|
||||
|
||||
mobj->threshold -= FRACUNIT;
|
||||
mobj->flags2 |= MF2_AMBUSH;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MT_LIGHTNINGSHIELD:
|
||||
|
|
@ -8673,6 +8836,26 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
Obj_BlockBodyThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEAURA:
|
||||
{
|
||||
Obj_ChargeAuraThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEFALL:
|
||||
{
|
||||
Obj_ChargeFallThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGERELEASE:
|
||||
{
|
||||
Obj_ChargeReleaseThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEEXTRA:
|
||||
{
|
||||
Obj_ChargeExtraThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_GUARDBREAK:
|
||||
{
|
||||
Obj_GuardBreakThink(mobj);
|
||||
|
|
@ -12409,8 +12592,8 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
p->griefValue = 0;
|
||||
|
||||
K_InitStumbleIndicator(p);
|
||||
|
||||
K_InitSliptideZipIndicator(p);
|
||||
K_InitWavedashIndicator(p);
|
||||
K_InitTrickIndicator(p);
|
||||
|
||||
if (gametyperules & GTR_ITEMARROWS)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ savedata_cup_t cupsavedata;
|
|||
#define ARCHIVEBLOCK_RNG 0x7FAAB5BD
|
||||
|
||||
// Note: This cannot be bigger
|
||||
// than an UINT16
|
||||
// than an UINT16 (for now)
|
||||
typedef enum
|
||||
{
|
||||
AWAYVIEW = 0x0001,
|
||||
|
|
@ -75,12 +75,13 @@ typedef enum
|
|||
SKYBOXCENTER = 0x0010,
|
||||
HOVERHYUDORO = 0x0020,
|
||||
STUMBLE = 0x0040,
|
||||
SLIPTIDEZIP = 0x0080,
|
||||
WAVEDASH = 0x0080,
|
||||
RINGSHOOTER = 0x0100,
|
||||
WHIP = 0x0200,
|
||||
HAND = 0x0400,
|
||||
FLICKYATTACKER = 0x0800,
|
||||
FLICKYCONTROLLER = 0x1000,
|
||||
TRICKINDICATOR = 0x2000,
|
||||
} player_saveflags;
|
||||
|
||||
static inline void P_ArchivePlayer(savebuffer_t *save)
|
||||
|
|
@ -310,8 +311,11 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
if (players[i].stumbleIndicator)
|
||||
flags |= STUMBLE;
|
||||
|
||||
if (players[i].sliptideZipIndicator)
|
||||
flags |= SLIPTIDEZIP;
|
||||
if (players[i].wavedashIndicator)
|
||||
flags |= WAVEDASH;
|
||||
|
||||
if (players[i].trickIndicator)
|
||||
flags |= TRICKINDICATOR;
|
||||
|
||||
if (players[i].whip)
|
||||
flags |= WHIP;
|
||||
|
|
@ -348,8 +352,11 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
if (flags & STUMBLE)
|
||||
WRITEUINT32(save->p, players[i].stumbleIndicator->mobjnum);
|
||||
|
||||
if (flags & SLIPTIDEZIP)
|
||||
WRITEUINT32(save->p, players[i].sliptideZipIndicator->mobjnum);
|
||||
if (flags & WAVEDASH)
|
||||
WRITEUINT32(save->p, players[i].wavedashIndicator->mobjnum);
|
||||
|
||||
if (flags & TRICKINDICATOR)
|
||||
WRITEUINT32(save->p, players[i].trickIndicator->mobjnum);
|
||||
|
||||
if (flags & WHIP)
|
||||
WRITEUINT32(save->p, players[i].whip->mobjnum);
|
||||
|
|
@ -394,6 +401,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].currentwaypoint));
|
||||
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].nextwaypoint));
|
||||
WRITEUINT32(save->p, players[i].airtime);
|
||||
WRITEUINT32(save->p, players[i].lastairtime);
|
||||
WRITEUINT8(save->p, players[i].startboost);
|
||||
WRITEUINT8(save->p, players[i].dropdashboost);
|
||||
|
||||
|
|
@ -536,9 +544,12 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
|
||||
WRITEUINT8(save->p, players[i].tripwireReboundDelay);
|
||||
|
||||
WRITEUINT16(save->p, players[i].sliptideZip);
|
||||
WRITEUINT8(save->p, players[i].sliptideZipDelay);
|
||||
WRITEUINT16(save->p, players[i].sliptideZipBoost);
|
||||
WRITEUINT16(save->p, players[i].wavedash);
|
||||
WRITEUINT8(save->p, players[i].wavedashdelay);
|
||||
WRITEUINT16(save->p, players[i].wavedashboost);
|
||||
WRITEUINT16(save->p, players[i].trickcharge);
|
||||
|
||||
WRITEUINT16(save->p, players[i].infinitether);
|
||||
|
||||
WRITEUINT8(save->p, players[i].lastsafelap);
|
||||
|
||||
|
|
@ -556,6 +567,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEINT16(save->p, players[i].incontrol);
|
||||
|
||||
WRITEUINT8(save->p, players[i].markedfordeath);
|
||||
WRITEUINT8(save->p, players[i].dotrickfx);
|
||||
|
||||
WRITEUINT8(save->p, players[i].ringboxdelay);
|
||||
WRITEUINT8(save->p, players[i].ringboxaward);
|
||||
|
|
@ -878,8 +890,11 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
if (flags & STUMBLE)
|
||||
players[i].stumbleIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
if (flags & SLIPTIDEZIP)
|
||||
players[i].sliptideZipIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
if (flags & WAVEDASH)
|
||||
players[i].wavedashIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
if (flags & TRICKINDICATOR)
|
||||
players[i].trickIndicator = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
||||
if (flags & WHIP)
|
||||
players[i].whip = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
|
|
@ -925,6 +940,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].currentwaypoint = (waypoint_t *)(size_t)READUINT32(save->p);
|
||||
players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save->p);
|
||||
players[i].airtime = READUINT32(save->p);
|
||||
players[i].lastairtime = READUINT32(save->p);
|
||||
players[i].startboost = READUINT8(save->p);
|
||||
players[i].dropdashboost = READUINT8(save->p);
|
||||
|
||||
|
|
@ -1067,9 +1083,12 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
|
||||
players[i].tripwireReboundDelay = READUINT8(save->p);
|
||||
|
||||
players[i].sliptideZip = READUINT16(save->p);
|
||||
players[i].sliptideZipDelay = READUINT8(save->p);
|
||||
players[i].sliptideZipBoost = READUINT16(save->p);
|
||||
players[i].wavedash = READUINT16(save->p);
|
||||
players[i].wavedashdelay = READUINT8(save->p);
|
||||
players[i].wavedashboost = READUINT16(save->p);
|
||||
players[i].trickcharge = READUINT16(save->p);
|
||||
|
||||
players[i].infinitether = READUINT16(save->p);
|
||||
|
||||
players[i].lastsafelap = READUINT8(save->p);
|
||||
|
||||
|
|
@ -1087,6 +1106,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].incontrol = READINT16(save->p);
|
||||
|
||||
players[i].markedfordeath = READUINT8(save->p);
|
||||
players[i].dotrickfx = READUINT8(save->p);
|
||||
|
||||
players[i].ringboxdelay = READUINT8(save->p);
|
||||
players[i].ringboxaward = READUINT8(save->p);
|
||||
|
|
@ -5674,12 +5694,19 @@ static void P_RelinkPointers(void)
|
|||
if (!P_SetTarget(&players[i].stumbleIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "stumbleIndicator not found on player %d\n", i);
|
||||
}
|
||||
if (players[i].sliptideZipIndicator)
|
||||
if (players[i].wavedashIndicator)
|
||||
{
|
||||
temp = (UINT32)(size_t)players[i].sliptideZipIndicator;
|
||||
players[i].sliptideZipIndicator = NULL;
|
||||
if (!P_SetTarget(&players[i].sliptideZipIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "sliptideZipIndicator not found on player %d\n", i);
|
||||
temp = (UINT32)(size_t)players[i].wavedashIndicator;
|
||||
players[i].wavedashIndicator = NULL;
|
||||
if (!P_SetTarget(&players[i].wavedashIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "wavedashIndicator not found on player %d\n", i);
|
||||
}
|
||||
if (players[i].trickIndicator)
|
||||
{
|
||||
temp = (UINT32)(size_t)players[i].trickIndicator;
|
||||
players[i].trickIndicator = NULL;
|
||||
if (!P_SetTarget(&players[i].trickIndicator, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "trickIndicator not found on player %d\n", i);
|
||||
}
|
||||
if (players[i].whip)
|
||||
{
|
||||
|
|
|
|||
27
src/p_user.c
27
src/p_user.c
|
|
@ -478,7 +478,7 @@ void P_ResetPlayer(player_t *player)
|
|||
player->onconveyor = 0;
|
||||
|
||||
//player->drift = player->driftcharge = 0;
|
||||
player->trickpanel = 0;
|
||||
player->trickpanel = TRICKSTATE_NONE;
|
||||
player->glanceDir = 0;
|
||||
player->fastfall = 0;
|
||||
|
||||
|
|
@ -1109,6 +1109,7 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj)
|
|||
P_SetTarget(&ghost->target, mobj);
|
||||
|
||||
P_SetScale(ghost, mobj->scale);
|
||||
ghost->scalespeed = mobj->scalespeed;
|
||||
ghost->destscale = mobj->scale;
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
|
|
@ -1163,6 +1164,7 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj)
|
|||
ghost->old_angle = (mobj->player ? mobj->player->old_drawangle2 : mobj->old_angle2);
|
||||
ghost->old_pitch = mobj->old_pitch2;
|
||||
ghost->old_roll = mobj->old_roll2;
|
||||
ghost->old_scale = mobj->old_scale2;
|
||||
|
||||
K_ReduceVFX(ghost, mobj->player);
|
||||
|
||||
|
|
@ -2468,18 +2470,21 @@ void P_MovePlayer(player_t *player)
|
|||
}
|
||||
else
|
||||
{
|
||||
K_KartMoveAnimation(player);
|
||||
|
||||
if (player->trickpanel == 2)
|
||||
if (player->trickpanel > TRICKSTATE_READY)
|
||||
{
|
||||
player->drawangle += ANGLE_22h;
|
||||
}
|
||||
else if (player->trickpanel >= 3)
|
||||
{
|
||||
player->drawangle -= ANGLE_22h;
|
||||
if (player->trickpanel <= TRICKSTATE_RIGHT) // right/forward
|
||||
{
|
||||
player->drawangle += ANGLE_22h;
|
||||
}
|
||||
else //if (player->trickpanel >= TRICKSTATE_LEFT) // left/back
|
||||
{
|
||||
player->drawangle -= ANGLE_22h;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
K_KartMoveAnimation(player);
|
||||
|
||||
player->drawangle = player->mo->angle;
|
||||
|
||||
if (player->aizdriftturn)
|
||||
|
|
@ -4056,7 +4061,8 @@ void P_PlayerThink(player_t *player)
|
|||
|
||||
PlayerPointerErase(player->followmobj);
|
||||
PlayerPointerErase(player->stumbleIndicator);
|
||||
PlayerPointerErase(player->sliptideZipIndicator);
|
||||
PlayerPointerErase(player->wavedashIndicator);
|
||||
PlayerPointerErase(player->trickIndicator);
|
||||
PlayerPointerErase(player->whip);
|
||||
PlayerPointerErase(player->hand);
|
||||
PlayerPointerErase(player->ringShooter);
|
||||
|
|
@ -4078,6 +4084,7 @@ void P_PlayerThink(player_t *player)
|
|||
if (P_IsObjectOnGround(player->mo)
|
||||
&& !P_PlayerInPain(player)) // This isn't airtime, but it's control loss all the same.
|
||||
{
|
||||
player->lastairtime = player->airtime;
|
||||
player->airtime = 0;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1119,6 +1119,10 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"fshld2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flame Shield burst"},
|
||||
{"fshld3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flame Shield cooldown"},
|
||||
|
||||
// RR - Trick Panel
|
||||
{"trick0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Trick confirm"},
|
||||
{"trick1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Trick"},
|
||||
|
||||
// RR - Ballhog Charge
|
||||
{"bhog00", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, "Ballhog charging"},
|
||||
{"bhog01", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, "Ballhog charging"},
|
||||
|
|
|
|||
|
|
@ -1187,6 +1187,10 @@ typedef enum
|
|||
sfx_fshld2,
|
||||
sfx_fshld3,
|
||||
|
||||
// RR - Trick panels
|
||||
sfx_trick0,
|
||||
sfx_trick1,
|
||||
|
||||
// RR - Ballhog Charge
|
||||
sfx_bhog00,
|
||||
sfx_bhog01,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue