New trick panel shit (but only the gameplay part)

This commit is contained in:
Latapostrophe 2021-01-06 21:20:28 +01:00
parent 74a39837bb
commit fe4d9ce889
10 changed files with 142 additions and 53 deletions

View file

@ -617,7 +617,10 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i)
rsp->airtime = (tic_t)LONG(players[i].airtime);
rsp->trickpanel = (UINT8)players[i].trickpanel;
rsp->trickdelay = (tic_t)LONG(players[i].trickdelay);
rsp->trickdelay = (boolean)players[i].trickdelay;
rsp->trickmomx = (fixed_t)LONG(players[i].trickmomx);
rsp->trickmomy = (fixed_t)LONG(players[i].trickmomy);
rsp->trickmomz = (fixed_t)LONG(players[i].trickmomz);
rsp->bumpers = players[i].bumpers;
rsp->karmadelay = SHORT(players[i].karmadelay);
@ -767,7 +770,10 @@ static void resynch_read_player(resynch_pak *rsp)
players[i].airtime = (tic_t)LONG(rsp->airtime);
players[i].trickpanel = (UINT8)rsp->trickpanel;
players[i].trickdelay = (tic_t)LONG(rsp->trickdelay);
players[i].trickdelay = (boolean)rsp->trickdelay;
players[i].trickmomx = (fixed_t)LONG(rsp->trickmomx);
players[i].trickmomy = (fixed_t)LONG(rsp->trickmomy);
players[i].trickmomz = (fixed_t)LONG(rsp->trickmomz);
players[i].bumpers = rsp->bumpers;
players[i].karmadelay = SHORT(rsp->karmadelay);
@ -1260,7 +1266,7 @@ static inline void CL_DrawConnectionStatus(void)
cltext = M_GetText("Server full, waiting for a slot...");
else
cltext = M_GetText("Requesting to join...");
break;
#ifdef HAVE_CURL
case CL_PREPAREHTTPFILES:
@ -2129,7 +2135,7 @@ void CL_UpdateServerList (void)
static void M_ConfirmConnect(event_t *ev)
{
#ifndef NONET
#ifndef NONET
if (ev->type == ev_keydown)
{
if (ev->data1 == ' ' || ev->data1 == 'y' || ev->data1 == KEY_ENTER || ev->data1 == gamecontrol[0][gc_accelerate][0] || ev->data1 == gamecontrol[0][gc_accelerate][1])
@ -2152,7 +2158,7 @@ static void M_ConfirmConnect(event_t *ev)
}
else
cl_mode = CL_LOADFILES;
M_ClearMenus(true);
}
else if (ev->data1 == 'n' || ev->data1 == KEY_ESCAPE|| ev->data1 == gamecontrol[0][gc_brake][0] || ev->data1 == gamecontrol[0][gc_brake][1])
@ -2400,7 +2406,7 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
{
boolean waitmore;
INT32 i;
#ifdef NONET
(void)tmpsave;
#endif
@ -2437,7 +2443,7 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
{
curl_transfers++;
}
cl_mode = CL_DOWNLOADHTTPFILES;
}
break;

View file

@ -282,7 +282,10 @@ typedef struct
INT32 kartstuff[NUMKARTSTUFF];
tic_t airtime;
UINT8 trickpanel;
tic_t trickdelay;
boolean trickdelay;
fixed_t trickmomx;
fixed_t trickmomy;
fixed_t trickmomz;
UINT8 bumpers;
INT16 karmadelay;

View file

@ -449,6 +449,10 @@ typedef enum
// QUICKLY GET RING TOTAL, INCLUDING RINGS CURRENTLY IN THE PICKUP ANIMATION
#define RINGTOTAL(p) (p->rings + p->kartstuff[k_pickuprings])
// CONSTANTS FOR TRICK PANELS
#define TRICKMOMZRAMP (30)
#define TRICKLAG (9)
//}
// player_t struct for all respawn variables
@ -523,9 +527,13 @@ typedef struct player_s
UINT32 distancetofinish;
waypoint_t *nextwaypoint;
respawnvars_t respawn; // Respawn info
tic_t airtime; // Keep track of how long you've been in the air
UINT8 trickpanel; // Trick panel state
tic_t trickdelay;
tic_t airtime; // Keep track of how long you've been in the air
UINT8 trickpanel; // Trick panel state
boolean trickdelay; // Prevent tricks until control stick is neutral
fixed_t trickmomx;
fixed_t trickmomy;
fixed_t trickmomz; // Instead of stupid auxiliary variables let's... just make some ourselves.
UINT8 bumpers;
INT16 karmadelay;

View file

@ -2052,7 +2052,7 @@ INT16 K_GetSpindashChargeTime(player_t *player)
{
// more charge time for higher speed
// Tails = 2s, Mighty = 3s, Fang = 4s, Metal = 4s
return (player->kartspeed + 4) * (TICRATE/3);
return (player->kartspeed + 4) * (TICRATE/3);
}
fixed_t K_GetSpindashChargeSpeed(player_t *player)
@ -4209,6 +4209,8 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
{
thrust = FixedMul(thrust, 9*FRACUNIT/8);
}
mo->player->trickmomx = mo->player->trickmomy = mo->player->trickmomz = 0; // Reset post-hitlag momentums.
}
mo->momz = FixedMul(thrust, vscale);
@ -7830,7 +7832,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
K_PlayBoostTaunt(player->mo);
K_DoPogoSpring(player->mo, 32<<FRACBITS, 2);
player->trickpanel = 1;
player->trickdelay = TICRATE/2;
player->trickdelay = 1;
player->kartstuff[k_itemamount]--;
}
break;
@ -7944,49 +7946,101 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->mo->drawflags &= ~(MFD_TRANSMASK|MFD_BRIGHTMASK);
}
if (player->trickpanel == 1 && player->trickdelay <= 0)
if (player->trickpanel == 1)
{
const angle_t lr = ANGLE_45;
fixed_t speed = P_AproxDistance(player->mo->momx, player->mo->momy);
fixed_t momz = FixedDiv(player->mo->momz, mapobjectscale); // bring momz back to scale...
fixed_t speedmult = max(0, FRACUNIT - abs(momz)/TRICKMOMZRAMP); // TRICKMOMZRAMP momz is minimum speed (Should be 20)
fixed_t basespeed = P_AproxDistance(player->mo->momx, player->mo->momy); // at WORSE, keep your normal speed when tricking.
fixed_t speed = FixedMul(speedmult, P_AproxDistance(player->mo->momx, player->mo->momy));
if (cmd->turning > 0)
// debug shit
//CONS_Printf("%d\n", player->mo->momz / mapobjectscale);
if (player->trickdelay <= 0)
{
P_InstaThrust(player->mo, player->mo->angle + lr, speed*2);
player->trickpanel = 2;
}
else if (cmd->turning < 0)
{
P_InstaThrust(player->mo, player->mo->angle - lr, speed*2);
player->trickpanel = 3;
}
else if (player->kartstuff[k_throwdir] == 1)
{
if (player->mo->momz * P_MobjFlip(player->mo) > 0)
if (cmd->turning > 0)
{
P_InstaThrust(player->mo, player->mo->angle + lr, max(basespeed, speed*2));
player->trickmomx = player->mo->momx;
player->trickmomy = player->mo->momy;
player->trickmomz = player->mo->momz;
P_InstaThrust(player->mo, 0, 0); // Sike, you have no speed :)
player->mo->momz = 0;
player->trickpanel = 2;
player->mo->hitlag = TRICKLAG;
}
P_InstaThrust(player->mo, player->mo->angle, speed*3);
player->trickpanel = 2;
}
else if (player->kartstuff[k_throwdir] == -1)
{
boolean relative = true;
player->mo->momx /= 3;
player->mo->momy /= 3;
if (player->mo->momz * P_MobjFlip(player->mo) <= 0)
else if (cmd->turning < 0)
{
relative = false;
P_InstaThrust(player->mo, player->mo->angle - lr, max(basespeed, speed*2));
player->trickmomx = player->mo->momx;
player->trickmomy = player->mo->momy;
player->trickmomz = player->mo->momz;
P_InstaThrust(player->mo, 0, 0); // Sike, you have no speed :)
player->mo->momz = 0;
player->trickpanel = 3;
player->mo->hitlag = TRICKLAG;
}
else if (player->kartstuff[k_throwdir] == 1)
{
if (player->mo->momz * P_MobjFlip(player->mo) > 0)
{
player->mo->momz = 0;
}
P_SetObjectMomZ(player->mo, 48*FRACUNIT, relative);
P_InstaThrust(player->mo, player->mo->angle, max(basespeed, speed*3));
player->trickpanel = 3;
player->trickmomx = player->mo->momx;
player->trickmomy = player->mo->momy;
player->trickmomz = player->mo->momz;
P_InstaThrust(player->mo, 0, 0); // Sike, you have no speed :)
player->mo->momz = 0;
player->trickpanel = 2;
player->mo->hitlag = TRICKLAG;
}
else if (player->kartstuff[k_throwdir] == -1)
{
boolean relative = true;
player->mo->momx /= 3;
player->mo->momy /= 3;
if (player->mo->momz * P_MobjFlip(player->mo) <= 0)
{
relative = false;
}
P_SetObjectMomZ(player->mo, 48*FRACUNIT, relative);
player->trickmomx = player->mo->momx;
player->trickmomy = player->mo->momy;
player->trickmomz = player->mo->momz;
P_InstaThrust(player->mo, 0, 0); // Sike, you have no speed :)
player->mo->momz = 0;
player->trickpanel = 3;
player->mo->hitlag = TRICKLAG;
}
}
}
// After hitlag, we will get here and will be able to apply the desired momentums!
else if (player->trickmomx || player->trickmomy || player->trickmomz)
{
player->mo->momx = player->trickmomx;
player->mo->momy = player->trickmomy;
player->mo->momz = player->trickmomz;
player->trickmomx = player->trickmomy = player->trickmomz = 0;
}
// Wait until we let go off the control stick to remove the delay
if (player->trickdelay > 0)
{
player->trickdelay--;

View file

@ -218,6 +218,12 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->trickpanel);
else if (fastcmp(field,"trickdelay"))
lua_pushinteger(L, plr->trickdelay);
else if (fastcmp(field,"trickmomx"))
lua_pushfixed(L, plr->trickmomx);
else if (fastcmp(field,"trickmomy"))
lua_pushfixed(L, plr->trickmomy);
else if (fastcmp(field,"trickmomz"))
lua_pushfixed(L, plr->trickmomz);
else if (fastcmp(field,"pflags"))
lua_pushinteger(L, plr->pflags);
else if (fastcmp(field,"panim"))
@ -511,6 +517,12 @@ static int player_set(lua_State *L)
plr->trickpanel = luaL_checkinteger(L, 3);
else if (fastcmp(field,"trickdelay"))
plr->trickdelay = (tic_t)luaL_checkinteger(L, 3);
else if (fastcmp(field,"trickmomx"))
plr->trickmomx = (fixed_t)luaL_checkfixed(L, 3);
else if (fastcmp(field,"trickmomy"))
plr->trickmomy = (fixed_t)luaL_checkfixed(L, 3);
else if (fastcmp(field,"trickmomz"))
plr->trickmomz = (fixed_t)luaL_checkfixed(L, 3);
else if (fastcmp(field,"kartspeed"))
plr->kartspeed = (UINT8)luaL_checkinteger(L, 3);
else if (fastcmp(field,"kartweight"))

View file

@ -30,7 +30,7 @@
#include "f_finale.h"
// SRB2kart
#include "k_kart.h"
#include "k_kart.h"
#include "k_battle.h"
#include "k_pwrlv.h"
#include "k_grandprix.h"

View file

@ -449,7 +449,7 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
if (object->player)
{
object->player->trickpanel = 1;
object->player->trickdelay = TICRATE/2;
object->player->trickdelay = 1;
}
K_DoPogoSpring(object, 32<<FRACBITS, 0);
@ -2291,7 +2291,7 @@ boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam)
{
subsector_t *s = R_PointInSubsector(x, y);
boolean retval = true;
UINT8 i;
floatok = false;

View file

@ -6625,7 +6625,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
mobj->color = K_RainbowColor(
(SKINCOLOR_PURPLE - SKINCOLOR_PINK) // Smoothly transition into the other state
+ ((mobj->fuse - 32) * 2) // Make the color flashing slow down while it runs out
);
);
switch (mobj->extravalue1)
{
@ -10243,7 +10243,7 @@ void P_SpawnPlayer(INT32 playernum)
/*
if (bonusgame || specialstage)
{
// Bots should avoid
// Bots should avoid
p->spectator = true;
}
*/
@ -10357,7 +10357,7 @@ void P_SpawnPlayer(INT32 playernum)
if ((leveltime < starttime) || (pcount <= 1)) // Start of the map?
{
// Reset those bumpers!
p->bumpers = K_StartingBumperCount();
p->bumpers = K_StartingBumperCount();
}
if (p->bumpers)

View file

@ -235,7 +235,7 @@ static void P_NetArchivePlayers(void)
if (flags & FOLLOWITEM)
WRITEUINT32(save_p, players[i].followmobj->mobjnum);
WRITEUINT32(save_p, (UINT32)players[i].followitem);
WRITEUINT32(save_p, players[i].charflags);
@ -257,7 +257,10 @@ static void P_NetArchivePlayers(void)
WRITEUINT32(save_p, K_GetWaypointHeapIndex(players[i].nextwaypoint));
WRITEUINT32(save_p, players[i].airtime);
WRITEUINT8(save_p, players[i].trickpanel);
WRITEUINT32(save_p, players[i].trickdelay);
WRITEUINT8(save_p, players[i].trickdelay);
WRITEUINT32(save_p, players[i].trickmomx);
WRITEUINT32(save_p, players[i].trickmomy);
WRITEUINT32(save_p, players[i].trickmomz);
WRITEUINT8(save_p, players[i].bumpers);
WRITEINT16(save_p, players[i].karmadelay);
@ -426,7 +429,7 @@ static void P_NetUnArchivePlayers(void)
if (flags & FOLLOWITEM)
players[i].followmobj = (mobj_t *)(size_t)READUINT32(save_p);
players[i].followitem = (mobjtype_t)READUINT32(save_p);
//SetPlayerSkinByNum(i, players[i].skin);
@ -449,7 +452,10 @@ static void P_NetUnArchivePlayers(void)
players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save_p);
players[i].airtime = READUINT32(save_p);
players[i].trickpanel = READUINT8(save_p);
players[i].trickdelay = READUINT32(save_p);
players[i].trickdelay = READUINT8(save_p);
players[i].trickmomx = READUINT32(save_p);
players[i].trickmomy = READUINT32(save_p);
players[i].trickmomz = READUINT32(save_p);
players[i].bumpers = READUINT8(save_p);
players[i].karmadelay = READINT16(save_p);

View file

@ -4618,7 +4618,7 @@ DoneSection2:
}
player->trickpanel = 1;
player->trickdelay = TICRATE/2;
player->trickdelay = 1;
K_DoPogoSpring(player->mo, upwards, 1);
// Reduce speed