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);

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
@ -524,8 +528,12 @@ typedef struct player_s
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;
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

@ -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,20 +7946,45 @@ 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));
// debug shit
//CONS_Printf("%d\n", player->mo->momz / mapobjectscale);
if (player->trickdelay <= 0)
{
if (cmd->turning > 0)
{
P_InstaThrust(player->mo, player->mo->angle + lr, speed*2);
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;
}
else if (cmd->turning < 0)
{
P_InstaThrust(player->mo, player->mo->angle - lr, speed*2);
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)
{
@ -7966,8 +7993,16 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->mo->momz = 0;
}
P_InstaThrust(player->mo, player->mo->angle, speed*3);
P_InstaThrust(player->mo, player->mo->angle, max(basespeed, speed*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)
{
@ -7983,10 +8018,29 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
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

@ -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);

View file

@ -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);
@ -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