mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
New trick panel shit (but only the gameplay part)
This commit is contained in:
parent
74a39837bb
commit
fe4d9ce889
10 changed files with 142 additions and 53 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
66
src/k_kart.c
66
src/k_kart.c
|
|
@ -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--;
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -4618,7 +4618,7 @@ DoneSection2:
|
|||
}
|
||||
|
||||
player->trickpanel = 1;
|
||||
player->trickdelay = TICRATE/2;
|
||||
player->trickdelay = 1;
|
||||
K_DoPogoSpring(player->mo, upwards, 1);
|
||||
|
||||
// Reduce speed
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue