Lots of little fixes

Gameplay seems to work (besides the addplayer & client config stuff), but visuals (mostly sprites, but a little bit of HUD) are really messed up
This commit is contained in:
Sally Coolatta 2020-08-16 00:29:04 -04:00
parent 5e13555727
commit a251c3909b
18 changed files with 250 additions and 92 deletions

View file

@ -605,7 +605,6 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i)
for (j = 0; j < NUMKARTSTUFF; ++j)
rsp->kartstuff[j] = LONG(players[i].kartstuff[j]);
rsp->frameangle = (angle_t)LONG(players[i].frameangle);
rsp->airtime = (tic_t)LONG(players[i].airtime);
// respawnvars_t
@ -751,7 +750,6 @@ static void resynch_read_player(resynch_pak *rsp)
for (j = 0; j < NUMKARTSTUFF; ++j)
players[i].kartstuff[j] = LONG(rsp->kartstuff[j]);
players[i].frameangle = (angle_t)LONG(rsp->frameangle);
players[i].airtime = (tic_t)LONG(rsp->airtime);
// respawnvars_t

View file

@ -281,7 +281,6 @@ typedef struct
// SRB2kart
INT32 kartstuff[NUMKARTSTUFF];
angle_t frameangle;
tic_t airtime;
// respawnvars_t

View file

@ -1795,7 +1795,7 @@ void D_SendPlayerConfig(void)
for (i = 0; i <= splitscreen; i++)
{
UINT8 buf[4];
UINT8 *buf_p = buf;
UINT8 *p = buf;
SendNameAndColor(i);
SendWeaponPref(i);
@ -1803,17 +1803,17 @@ void D_SendPlayerConfig(void)
if (i > 0)
{
// Splitscreen players have invalid powerlevel
WRITEUINT16(buf_p, 0);
WRITEUINT16(buf_p, 0);
WRITEUINT16(p, 0);
WRITEUINT16(p, 0);
}
else
{
// Send it over
WRITEUINT16(buf_p, vspowerlevel[PWRLV_RACE]);
WRITEUINT16(buf_p, vspowerlevel[PWRLV_BATTLE]);
WRITEUINT16(p, vspowerlevel[PWRLV_RACE]);
WRITEUINT16(p, vspowerlevel[PWRLV_BATTLE]);
}
SendNetXCmdForPlayer(i, XD_POWERLEVEL, buf, 4);
SendNetXCmdForPlayer(i, XD_POWERLEVEL, buf, p-buf);
}
}

View file

@ -505,7 +505,6 @@ typedef struct player_s
// SRB2kart stuff
INT32 kartstuff[NUMKARTSTUFF];
INT32 karthud[NUMKARTHUD];
angle_t frameangle; // for the player add the ability to have the sprite only face other angles
INT16 lturn_max[MAXPREDICTTICS]; // What's the expected turn value for full-left for a number of frames back (to account for netgame latency)?
INT16 rturn_max[MAXPREDICTTICS]; // Ditto but for full-right
UINT32 distancetofinish;

View file

@ -11531,12 +11531,10 @@ struct {
{"V_90TRANS",V_90TRANS},
{"V_HUDTRANSHALF",V_HUDTRANSHALF},
{"V_HUDTRANS",V_HUDTRANS},
{"V_AUTOFADEOUT",V_AUTOFADEOUT},
{"V_RETURN8",V_RETURN8},
{"V_OFFSET",V_OFFSET},
{"V_ALLOWLOWERCASE",V_ALLOWLOWERCASE},
{"V_FLIP",V_FLIP},
{"V_CENTERNAMETAG",V_CENTERNAMETAG},
{"V_SNAPTOTOP",V_SNAPTOTOP},
{"V_SNAPTOBOTTOM",V_SNAPTOBOTTOM},
{"V_SNAPTOLEFT",V_SNAPTOLEFT},

View file

@ -1440,7 +1440,7 @@ void G_PreviewRewind(tic_t previewtime)
#undef TWEEN
P_SetThingPosition(players[i].mo);
players[i].frameangle = info->playerinfo[i].player.frameangle + FixedMul((INT32) (next_info->playerinfo[i].player.frameangle - info->playerinfo[i].player.frameangle), tweenvalue);
players[i].drawangle = info->playerinfo[i].player.drawangle + FixedMul((INT32) (next_info->playerinfo[i].player.drawangle - info->playerinfo[i].player.drawangle), tweenvalue);
players[i].mo->sprite = info->playerinfo[i].mobj.sprite;
players[i].mo->frame = info->playerinfo[i].mobj.frame;

View file

@ -881,7 +881,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
player_t *player = &players[g_localplayers[forplayer]];
camera_t *thiscam = &camera[forplayer];
angle_t *lang = &localangle[forplayer];
angle_t *myangle = &localangle[forplayer];
INT32 *laim = &localaiming[forplayer];
INT32 *th = &turnheld[forplayer];
INT32 *kbl = &keyboard_look[forplayer];
@ -1147,17 +1147,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
cmd->angleturn *= realtics;
*lang += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(*lang >> 16);
cmd->latency = modeattacking ? 0 : (leveltime & 0xFF); // Send leveltime when this tic was generated to the server for control lag calculations
if (!hu_stopped)
{
*lang += (cmd->angleturn<<16);
*myangle += (cmd->angleturn<<16);
}
cmd->angleturn = (INT16)(*lang >> 16);
cmd->latency = modeattacking ? 0 : (leveltime & 0xFF); // Send leveltime when this tic was generated to the server for control lag calculations
/* Lua: Allow this hook to overwrite ticcmd.
@ -4544,7 +4538,7 @@ char *G_BuildMapTitle(INT32 mapnum)
sprintf(title, "%s", mapheaderinfo[mapnum-1]->lvlttl);
if (zonetext) sprintf(title + strlen(title), " %s", zonetext);
if (actnum) sprintf(title + strlen(title), " %d", actnum);
if (actnum > 0) sprintf(title + strlen(title), " %d", actnum);
}
return title;

View file

@ -1823,7 +1823,6 @@ static void HU_DrawCEcho(void)
INT32 pnumlines = 0;
UINT32 realflags = cechoflags|V_SPLITSCREEN; // requested as part of splitscreen's stuff
INT32 realalpha = (INT32)((cechoflags & V_ALPHAMASK) >> V_ALPHASHIFT);
char *line;
char *echoptr;
@ -1843,15 +1842,6 @@ static void HU_DrawCEcho(void)
return;
}
// Automatic fadeout
if (realflags & V_AUTOFADEOUT)
{
UINT32 tempalpha = (UINT32)max((INT32)(10 - cechotimer), realalpha);
realflags &= ~V_ALPHASHIFT;
realflags |= (tempalpha << V_ALPHASHIFT);
}
strcpy(temp, cechotext);
echoptr = &temp[0];

View file

@ -519,25 +519,216 @@ char sprnames[NUMSPRITES + 1][5] =
"GWLR",
//SRB2kart Sprites (sort later)
"RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF",
"WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ","SSMN",
"KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE",
"FLMS","FLMD","FLMP","FLML","FLMF",
"SINK","SITR",
"KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB",
"CHOM","SACO","CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA",
"ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2",
"HIT3","RETI","AIDU","KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT",
"SBUS","MARB","FUFO","RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB",
"SGVC","PGTR","PGF1","PGF2","PGF3","PGBH","DPLR","SPTL","ENM1","GARU",
"MARR","REAP","JITB","CDMO","CDBU","DPIN","PPLR","DPPT","AATR","COCO",
"BDST","FROG","CBRA","HOLE","BBRA","EGFG","SMKP","MTYM","THWP","SNOB",
"ICEB","ECND","DOCH","DUCK","GTRE","CHES","CHIM","DRGN","LZMN","PGSS",
"ZTCH","MKMA","MKMP","RTCH","BOWL","BOWH","BRRL","BRRR","HRSE","TOAH",
"BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN",
"RNDM", // Random Item Box
"RPOP", // Random Item Box Pop
"SGNS", // Signpost sparkle
"FAST", // Speed boost trail
"DSHR", // Speed boost dust release
"BOST", // Sneaker booster flame
"BOSM", // Sneaker booster smoke
"KFRE", // Sneaker fire trail
"KINV", // Invincibility sparkle trail
"KINF", // Invincibility flash
"WIPD", // Wipeout dust trail
"DRIF", // Drift Sparks
"BDRF", // Brake drift sparks
"DRWS", // Drift dust sparks
"FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL",
"FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC","DBST",
// Kart Items
"RSHE", // Rocket sneaker
"FITM", // Eggman Monitor
"BANA", // Banana Peel
"ORBN", // Orbinaut
"JAWZ", // Jawz
"SSMN", // SS Mine
"KRBM", // SS Mine BOOM
"BHOG", // Ballhog
"BHBM", // Ballhog BOOM
"SPBM", // Self-Propelled Bomb
"THNS", // Thunder Shield
"BUBS", // Bubble Shield (not Bubs)
"BWVE", // Bubble Shield waves
"FLMS", // Flame Shield
"FLMD", // Flame Shield dash
"FLMP", // Flame Shield paper sprites
"FLML", // Flame Shield speed lines
"FLMF", // Flame Shield flash
"SINK", // Kitchen Sink
"SITR", // Kitchen Sink Trail
"KBLN", // Battle Mode Bumper
"DEZL", // DEZ Laser respawn
// Additional Kart Objects
"POKE", // Pokey
"AUDI", // Audience members
"DECO", // Old 1.0 Kart Decoratives + New misc ones
"DOOD", // All the old D00Dkart objects
"SNES", // Sprites for SNES remake maps
"GBAS", // Sprites for GBA remake maps
"SPRS", // Sapphire Coast Spring Shell
"BUZB", // Sapphire Coast Buzz Mk3
"CHOM", // Sapphire Coast Chomper
"SACO", // Sapphire Coast Fauna
"CRAB", // Crystal Abyss mobs
"BRNG", // Chaotix Big Ring
"BUMP", // Player/shell bump
"FLEN", // Shell hit graphics stuff
"CLAS", // items clash
"PSHW", // thrown indicator
"ISTA", // instashield layer A
"ISTB", // instashield layer B
"ARRO", // player arrows
"ITEM",
"ITMO",
"ITMI",
"ITMN",
"WANT",
"PBOM", // player bomb
"HIT1", // battle points
"HIT2", // battle points
"HIT3", // battle points
"RETI", // player reticule
"AIDU",
"KSPK", // Spark radius for the lightning shield
"LZI1", // Lightning that falls on the player for lightning shield
"LZI2", // ditto
"KLIT", // You have a twisted mind. But this actually is for the diagonal lightning.
"FZSM", // F-Zero NO CONTEST explosion
"FZBM",
// Various plants
"SBUS",
"MARB", // Marble Zone sprites
"FUFO", // CD Special Stage UFO (don't ask me why it begins with an F)
"RUST", // Rusty Rig sprites
"VAPE", // Volcanic Valley
// Hill Top Zone
"HTZA",
"HTZB",
// Ports of gardens
"SGVA",
"SGVB",
"SGVC",
"PGTR",
"PGF1",
"PGF2",
"PGF3",
"PGBH",
"DPLR",
// Midnight Channel stuff:
"SPTL", // Spotlight
"ENM1", // Shadows (Roaming and static)
"GARU", // Wind attack roaming shadows use.
"MARR", // Mayonaka Arrow
//Mementos stuff:
"REAP",
"JITB", // Jack In The Box
// Color Drive stuff:
"CDMO",
"CDBU",
// Daytona Speedway
"DPIN",
// Egg Zeppelin
"PPLR",
// Desert Palace
"DPPT",
// Aurora Atoll
"AATR",
"COCO",
// Barren Badlands
"BDST",
"FROG",
"CBRA",
"HOLE",
"BBRA",
// Eerie Grove
"EGFG",
// SMK ports
"SMKP",
"MTYM",
"THWP",
"SNOB",
"ICEB",
// Ezo's maps - many single-use sprites!
"ECND",
"DOCH",
"DUCK",
"GTRE",
"CHES",
"CHIM",
"DRGN",
"LZMN",
"PGSS",
"ZTCH",
"MKMA",
"MKMP",
"RTCH",
"BOWL",
"BOWH",
"BRRL",
"BRRR",
"HRSE",
"TOAH",
"BFRT",
"OFRT",
"RFRT",
"PFRT",
"ASPK",
"HBST",
"HBSO",
"HBSF",
"WBLZ",
"WBLN",
"FWRK",
"MXCL",
"RGSP",
"DRAF",
"GRES",
"OTFG",
"DBOS", // Drift boost flame
"EGOO",
"WTRL", // Water Trail
"GCHA", // follower: generic chao
"CHEZ", // follower: cheese
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
"VIEW",
"DBCL", // Drift boost clip
"DBNC", // Drift boost clip's sparks
"DBST", // Drift boost plume
};
char spr2names[NUMPLAYERSPRITES][5] =

View file

@ -3442,7 +3442,7 @@ static void K_drawKartFirstPerson(void)
if (stplyr->mo)
{
UINT8 driftcolor = K_DriftSparkColor(stplyr, stplyr->kartstuff[k_driftcharge]);
const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->frameangle;
const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->drawangle;
// yes, the following is correct. no, you do not need to swap the x and y.
fixed_t xoffs = -P_ReturnThrustY(stplyr->mo, ang, (BASEVIDWIDTH<<(FRACBITS-2))/2);
fixed_t yoffs = -(P_ReturnThrustX(stplyr->mo, ang, 4*FRACUNIT) - 4*FRACUNIT);
@ -3453,7 +3453,7 @@ static void K_drawKartFirstPerson(void)
xoffs -= (tn)*scale;
xoffs -= (dr)*scale;
if (stplyr->frameangle == stplyr->mo->angle)
if (stplyr->drawangle == stplyr->mo->angle)
{
const fixed_t mag = FixedDiv(stplyr->speed, 10*stplyr->mo->scale);

View file

@ -3434,7 +3434,7 @@ void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent)
I_Assert(!P_MobjWasRemoved(mo));
if (mo->player)
aoff = (mo->player->frameangle + ANGLE_180);
aoff = (mo->player->drawangle + ANGLE_180);
else
aoff = (mo->angle + ANGLE_180);
@ -3483,7 +3483,7 @@ void K_SpawnDraftDust(mobj_t *mo)
{
UINT8 leniency = (3*TICRATE)/4 + ((mo->player->kartweight-1) * (TICRATE/4));
ang = mo->player->frameangle;
ang = mo->player->drawangle;
if (mo->player->kartstuff[k_drift] != 0)
{
@ -3559,7 +3559,7 @@ void K_DriftDustHandling(mobj_t *spawner)
{
if (spawner->player->pflags & PF_WPNDOWN)
{
anglediff = abs((signed)(spawner->angle - spawner->player->frameangle));
anglediff = abs((signed)(spawner->angle - spawner->player->drawangle));
if (leveltime % 6 == 0)
S_StartSound(spawner, sfx_screec); // repeated here because it doesn't always happen to be within the range when this is the case
}
@ -5001,7 +5001,7 @@ static void K_MoveHeldObjects(player_t *player)
#if 1
{
angle_t input = player->frameangle - cur->angle;
angle_t input = player->drawangle - cur->angle;
boolean invert = (input > ANGLE_180);
if (invert)
input = InvAngle(input);
@ -5013,7 +5013,7 @@ static void K_MoveHeldObjects(player_t *player)
cur->angle = cur->angle + input;
}
#else
cur->angle = player->frameangle;
cur->angle = player->drawangle;
#endif
angoffset = ANGLE_90 + (ANGLE_180 * num);

View file

@ -334,7 +334,7 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
}
// Set angle, regardless of if we're done or not
player->frameangle = R_PointToAngle2(
player->drawangle = R_PointToAngle2(
player->mo->x, player->mo->y,
dest.x, dest.y
);
@ -383,7 +383,7 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
);
// Move toward the respawn point
player->frameangle = stepha;
player->drawangle = stepha;
step.x = FixedMul(FixedMul(FINECOSINE(stepha >> ANGLETOFINESHIFT), stepamt), FINECOSINE(stepva >> ANGLETOFINESHIFT));
step.y = FixedMul(FixedMul(FINESINE(stepha >> ANGLETOFINESHIFT), stepamt), FINECOSINE(stepva >> ANGLETOFINESHIFT));

View file

@ -213,8 +213,6 @@ static int player_get(lua_State *L)
LUA_PushUserdata(L, plr->powers, META_POWERS);
else if (fastcmp(field,"kartstuff"))
LUA_PushUserdata(L, plr->kartstuff, META_KARTSTUFF);
else if (fastcmp(field,"frameangle"))
lua_pushangle(L, plr->frameangle);
else if (fastcmp(field,"airtime"))
lua_pushinteger(L, plr->airtime);
else if (fastcmp(field,"pflags"))
@ -499,8 +497,6 @@ static int player_set(lua_State *L)
// SRB2kart
else if (fastcmp(field,"kartstuff"))
return NOSET;
else if (fastcmp(field,"frameangle"))
plr->frameangle = luaL_checkangle(L, 3);
else if (fastcmp(field,"airtime"))
plr->airtime = (tic_t)luaL_checkinteger(L, 3);
else if (fastcmp(field,"kartspeed"))

View file

@ -1177,7 +1177,7 @@ void Command_ObjectPlace_f(void)
if (!COM_CheckParm("-silent"))
{
HU_SetCEchoFlags(V_RETURN8|V_MONOSPACE|V_AUTOFADEOUT);
HU_SetCEchoFlags(V_RETURN8|V_MONOSPACE);
HU_SetCEchoDuration(10);
HU_DoCEcho(va(M_GetText(
"\\\\\\\\\\\\\\\\\\\\\\\\\x82"

View file

@ -253,7 +253,6 @@ static void P_NetArchivePlayers(void)
WRITEINT16(save_p, players[i].rturn_max[j]);
}
WRITEANGLE(save_p, players[i].frameangle);
WRITEUINT32(save_p, players[i].distancetofinish);
WRITEUINT32(save_p, K_GetWaypointHeapIndex(players[i].nextwaypoint));
WRITEUINT32(save_p, players[i].airtime);
@ -447,7 +446,6 @@ static void P_NetUnArchivePlayers(void)
players[i].rturn_max[j] = READINT16(save_p);
}
players[i].frameangle = READANGLE(save_p);
players[i].distancetofinish = READUINT32(save_p);
players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save_p);
players[i].airtime = READUINT32(save_p);

View file

@ -31,7 +31,7 @@
#include "p_polyobj.h"
#include "p_slopes.h"
#include "hu_stuff.h"
#include "v_video.h" // V_AUTOFADEOUT|V_ALLOWLOWERCASE
#include "v_video.h" // V_ALLOWLOWERCASE
#include "m_misc.h"
#include "m_cond.h" //unlock triggers
#include "lua_hook.h" // LUAh_LinedefExecute

View file

@ -2183,7 +2183,7 @@ void P_MovePlayer(player_t *player)
else if (player->pflags & PF_SLIDING)
{
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
player->frameangle -= ANGLE_22h;
player->drawangle -= ANGLE_22h;
}
else if (player->kartstuff[k_spinouttimer] > 0)
{
@ -2191,19 +2191,19 @@ void P_MovePlayer(player_t *player)
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
if (speed == 1 && abs((signed)(player->mo->angle - player->frameangle)) < ANGLE_22h)
player->frameangle = player->mo->angle; // Face forward at the end of the animation
if (speed == 1 && abs((signed)(player->mo->angle - player->drawangle)) < ANGLE_22h)
player->drawangle = player->mo->angle; // Face forward at the end of the animation
else
player->frameangle -= (ANGLE_11hh * speed);
player->drawangle -= (ANGLE_11hh * speed);
}
else if (player->powers[pw_nocontrol] && player->pflags & PF_WPNDOWN)
{
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
if (((player->powers[pw_nocontrol] + 5) % 20) < 10)
player->frameangle += ANGLE_11hh;
player->drawangle += ANGLE_11hh;
else
player->frameangle -= ANGLE_11hh;
player->drawangle -= ANGLE_11hh;
}
else
{
@ -2211,16 +2211,16 @@ void P_MovePlayer(player_t *player)
if (player->kartstuff[k_pogospring])
{
player->frameangle += ANGLE_22h;
player->drawangle += ANGLE_22h;
}
else
{
player->frameangle = player->mo->angle;
player->drawangle = player->mo->angle;
if (player->kartstuff[k_drift] != 0)
{
INT32 a = (ANGLE_45 / 5) * player->kartstuff[k_drift];
player->frameangle += a;
player->drawangle += a;
}
}
}
@ -2497,7 +2497,7 @@ static void P_DoZoomTube(player_t *player)
}
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
player->frameangle -= ANGLE_22h;
player->drawangle -= ANGLE_22h;
}
#if 0
@ -4147,7 +4147,7 @@ static void P_HandleFollower(player_t *player)
if (player->kartstuff[k_spinouttimer] || player->mo->state == &states[S_KART_SPINOUT] || player->mo->health <= 0)
{
player->follower->movecount = 0; // cancel hit confirm.
player->follower->angle = player->frameangle; // spin out
player->follower->angle = player->drawangle; // spin out
if (player->follower->extravalue1 != 2)
{
player->follower->extravalue1 = 2;

View file

@ -1118,25 +1118,20 @@ void R_SetupFrame(player_t *player)
{
camera_t *thiscam = &camera[0];
boolean chasecam = false;
UINT8 i = 0;
UINT8 i;
if (r_splitscreen)
for (i = 0; i <= r_splitscreen; i++)
{
for (i = 1; i <= r_splitscreen; i++)
if (player == &players[displayplayers[i]])
{
if (player == &players[displayplayers[i]])
{
thiscam = &camera[i];
chasecam = (cv_chasecam[i].value != 0);
break;
}
}
if (i > r_splitscreen)
{
i = 0;
thiscam = &camera[i];
chasecam = (cv_chasecam[i].value != 0);
break;
}
}
if (i > r_splitscreen)
return; // shouldn't be possible, but just in case
if (player->playerstate == PST_DEAD || gamestate == GS_TITLESCREEN || tutorialmode)
chasecam = true; // force chasecam on