- merged the bit fields in Blood's packet structure.

Whatever this was for it made that thing extremely unwieldy.
With these merged the resulting structure doesn't look much different from Duke's anymore.
This commit is contained in:
Christoph Oelckers 2020-08-26 16:48:33 +02:00
parent b76168f673
commit 3fc79940f2
9 changed files with 165 additions and 207 deletions

View file

@ -4749,7 +4749,7 @@ void MoveDude(spritetype *pSprite)
if (pPlayer) {
pPlayer->posture = 0;
pPlayer->bubbleTime = 0;
if (!pPlayer->cantJump && pPlayer->input.buttonFlags.jump) {
if (!pPlayer->cantJump && pPlayer->input.syncFlags.jump) {
zvel[nSprite] = -0x6aaaa;
pPlayer->cantJump = 1;
}

View file

@ -525,11 +525,10 @@ void ProcessFrame(void)
char buffer[128];
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
gPlayer[i].input.buttonFlags = gFifoInput[gNetFifoTail&255][i].buttonFlags;
gPlayer[i].input.keyFlags.word |= gFifoInput[gNetFifoTail&255][i].keyFlags.word;
gPlayer[i].input.useFlags.byte |= gFifoInput[gNetFifoTail&255][i].useFlags.byte;
if (gFifoInput[gNetFifoTail&255][i].newWeapon)
gPlayer[i].input.newWeapon = gFifoInput[gNetFifoTail&255][i].newWeapon;
gPlayer[i].input.syncFlags.value &= ~flag_buttonmask;
gPlayer[i].input.syncFlags.value |= gFifoInput[gNetFifoTail & 255][i].syncFlags.value;
if (gFifoInput[gNetFifoTail&255][i].syncFlags.newWeapon)
gPlayer[i].newWeapon = gFifoInput[gNetFifoTail&255][i].syncFlags.newWeapon;
gPlayer[i].input.forward = gFifoInput[gNetFifoTail&255][i].forward;
gPlayer[i].input.q16turn = gFifoInput[gNetFifoTail&255][i].q16turn;
gPlayer[i].input.strafe = gFifoInput[gNetFifoTail&255][i].strafe;
@ -539,9 +538,9 @@ void ProcessFrame(void)
for (int i = connecthead; i >= 0; i = connectpoint2[i])
{
if (gPlayer[i].input.keyFlags.quit)
if (gPlayer[i].input.syncFlags.quit)
{
gPlayer[i].input.keyFlags.quit = 0;
gPlayer[i].input.syncFlags.quit = 0;
netBroadcastPlayerLogoff(i);
if (i == myconnectindex)
{
@ -553,15 +552,15 @@ void ProcessFrame(void)
return;
}
}
if (gPlayer[i].input.keyFlags.restart)
if (gPlayer[i].input.syncFlags.restart)
{
gPlayer[i].input.keyFlags.restart = 0;
gPlayer[i].input.syncFlags.restart = 0;
levelRestart();
return;
}
if (gPlayer[i].input.keyFlags.pause)
if (gPlayer[i].input.syncFlags.pause)
{
gPlayer[i].input.keyFlags.pause = 0;
gPlayer[i].input.syncFlags.pause = 0;
if (paused && gGameOptions.nGameType > 0 && numplayers > 1)
{
sprintf(buffer,"%s paused the game",gProfile[i].name);

View file

@ -45,8 +45,7 @@ bool bSilentAim = false;
int iTurnCount = 0;
static int WeaponToSend;
static KEYFLAGS BitsToSend;
static USEFLAGS UsesToSend;
static SYNCFLAGS BitsToSend;
void ctrlInit(void)
{
@ -128,7 +127,7 @@ void ctrlGetInput(void)
if (paused != prevPauseState)
{
gInput.keyFlags.pause = 1;
gInput.syncFlags.pause = 1;
}
if (paused)
@ -137,7 +136,7 @@ void ctrlGetInput(void)
GINPUT input = {};
bool mouseaim = in_mousemode || buttonMap.ButtonDown(gamefunc_Mouse_Aiming);
if (!mouseaim) gInput.keyFlags.lookCenter = 1;
if (!mouseaim) gInput.syncFlags.lookCenter = 1;
if (numplayers == 1)
{
@ -148,15 +147,13 @@ void ctrlGetInput(void)
CONTROL_GetInput(&info);
if (gQuitRequest)
gInput.keyFlags.quit = 1;
gInput.syncFlags.quit = 1;
gInput.keyFlags.word |= BitsToSend.word;
gInput.useFlags.byte |= UsesToSend.byte;
gInput.syncFlags.value |= BitsToSend.value;
if (WeaponToSend != 0)
gInput.newWeapon = WeaponToSend;
gInput.syncFlags.newWeapon = WeaponToSend;
BitsToSend.word = 0;
UsesToSend.byte = 0;
BitsToSend.value = 0;
WeaponToSend = 0;
if (buttonMap.ButtonDown(gamefunc_Shrink_Screen))
@ -188,32 +185,32 @@ void ctrlGetInput(void)
}
if (buttonMap.ButtonDown(gamefunc_Jump))
gInput.buttonFlags.jump = 1;
gInput.syncFlags.jump = 1;
if (buttonMap.ButtonDown(gamefunc_Crouch))
gInput.buttonFlags.crouch = 1;
gInput.syncFlags.crouch = 1;
if (buttonMap.ButtonDown(gamefunc_Fire))
gInput.buttonFlags.shoot = 1;
gInput.syncFlags.shoot = 1;
if (buttonMap.ButtonDown(gamefunc_Alt_Fire))
gInput.buttonFlags.shoot2 = 1;
gInput.syncFlags.shoot2 = 1;
if (buttonMap.ButtonDown(gamefunc_Open))
{
buttonMap.ClearButton(gamefunc_Open);
gInput.keyFlags.action = 1;
gInput.syncFlags.action = 1;
}
gInput.buttonFlags.lookUp |= buttonMap.ButtonDown(gamefunc_Look_Up);
gInput.buttonFlags.lookDown |= buttonMap.ButtonDown(gamefunc_Look_Down);
gInput.syncFlags.lookUp |= buttonMap.ButtonDown(gamefunc_Look_Up);
gInput.syncFlags.lookDown |= buttonMap.ButtonDown(gamefunc_Look_Down);
if (buttonMap.ButtonDown(gamefunc_Look_Up) || buttonMap.ButtonDown(gamefunc_Look_Down))
gInput.keyFlags.lookCenter = 1;
gInput.syncFlags.lookCenter = 1;
else
{
gInput.buttonFlags.lookUp |= buttonMap.ButtonDown(gamefunc_Aim_Up);
gInput.buttonFlags.lookDown |= buttonMap.ButtonDown(gamefunc_Aim_Down);
gInput.syncFlags.lookUp |= buttonMap.ButtonDown(gamefunc_Aim_Up);
gInput.syncFlags.lookDown |= buttonMap.ButtonDown(gamefunc_Aim_Down);
}
int const run = G_CheckAutorun(buttonMap.ButtonDown(gamefunc_Run));
@ -369,14 +366,14 @@ void registerinputcommands()
C_RegisterFunction("pause", nullptr, [](CCmdFuncPtr)->int { BitsToSend.pause = 1; sendPause = true; return CCMD_OK; });
C_RegisterFunction("proximitybombs", nullptr, [](CCmdFuncPtr)->int { WeaponToSend = 11; return CCMD_OK; });
C_RegisterFunction("remotebombs", nullptr, [](CCmdFuncPtr)->int { WeaponToSend = 12; return CCMD_OK; });
C_RegisterFunction("jumpboots", nullptr, [](CCmdFuncPtr)->int { UsesToSend.useJumpBoots = 1; return CCMD_OK; });
C_RegisterFunction("medkit", nullptr, [](CCmdFuncPtr)->int { UsesToSend.useMedKit = 1; return CCMD_OK; });
C_RegisterFunction("jumpboots", nullptr, [](CCmdFuncPtr)->int { BitsToSend.useJumpBoots = 1; return CCMD_OK; });
C_RegisterFunction("medkit", nullptr, [](CCmdFuncPtr)->int { BitsToSend.useMedKit = 1; return CCMD_OK; });
C_RegisterFunction("centerview", nullptr, [](CCmdFuncPtr)->int { BitsToSend.lookCenter = 1; return CCMD_OK; });
C_RegisterFunction("holsterweapon", nullptr, [](CCmdFuncPtr)->int { BitsToSend.holsterWeapon = 1; return CCMD_OK; });
C_RegisterFunction("invprev", nullptr, [](CCmdFuncPtr)->int { BitsToSend.prevItem = 1; return CCMD_OK; });
C_RegisterFunction("invnext", nullptr, [](CCmdFuncPtr)->int { BitsToSend.nextItem = 1; return CCMD_OK; });
C_RegisterFunction("crystalball", nullptr, [](CCmdFuncPtr)->int { UsesToSend.useCrystalBall = 1; return CCMD_OK; });
C_RegisterFunction("beastvision", nullptr, [](CCmdFuncPtr)->int { UsesToSend.useBeastVision = 1; return CCMD_OK; });
C_RegisterFunction("crystalball", nullptr, [](CCmdFuncPtr)->int { BitsToSend.useCrystalBall = 1; return CCMD_OK; });
C_RegisterFunction("beastvision", nullptr, [](CCmdFuncPtr)->int { BitsToSend.useBeastVision = 1; return CCMD_OK; });
C_RegisterFunction("turnaround", nullptr, [](CCmdFuncPtr)->int { BitsToSend.spin180 = 1; return CCMD_OK; });
C_RegisterFunction("invuse", nullptr, [](CCmdFuncPtr)->int { BitsToSend.useItem = 1; return CCMD_OK; });
}
@ -385,8 +382,7 @@ void registerinputcommands()
void GameInterface::clearlocalinputstate()
{
WeaponToSend = 0;
BitsToSend.word = 0;
UsesToSend.byte = 0;
BitsToSend.value = 0;
}

View file

@ -26,25 +26,24 @@ BEGIN_BLD_NS
#pragma pack(push, 1)
union BUTTONFLAGS
enum
{
int8_t byte;
flag_buttonmask = 127,
flag_buttonmask_norun = 126
};
union SYNCFLAGS
{
uint32_t value;
struct
{
unsigned int run : 1;
unsigned int jump : 1;
unsigned int crouch : 1;
unsigned int shoot : 1;
unsigned int shoot2 : 1;
unsigned int lookUp : 1;
unsigned int lookDown : 1;
};
};
union KEYFLAGS
{
int16_t word;
struct
{
unsigned int action : 1;
unsigned int jab : 1;
unsigned int prevItem : 1;
@ -60,44 +59,19 @@ union KEYFLAGS
unsigned int pause : 1;
unsigned int quit : 1;
unsigned int restart : 1;
};
};
union USEFLAGS
{
uint8_t byte;
struct
{
unsigned int useBeastVision : 1;
unsigned int useCrystalBall : 1;
unsigned int useJumpBoots : 1;
unsigned int useMedKit : 1;
};
};
union SYNCFLAGS
{
uint8_t byte;
struct
{
unsigned int buttonChange : 1;
unsigned int keyChange : 1;
unsigned int useChange : 1;
unsigned int weaponChange : 1;
unsigned int mlookChange : 1;
unsigned int run : 1;
unsigned int newWeapon : 4;
};
};
struct GINPUT
{
SYNCFLAGS syncFlags;
int16_t forward;
fix16_t q16turn;
int16_t strafe;
BUTTONFLAGS buttonFlags;
KEYFLAGS keyFlags;
USEFLAGS useFlags;
uint8_t newWeapon;
fix16_t q16turn;
fix16_t q16mlook;
};

View file

@ -1350,7 +1350,7 @@ void trPlayerCtrlStopScene(PLAYER* pPlayer) {
// restore weapon
if (pPlayer->pXSprite->health > 0) {
int oldWeapon = (pXSource && pXSource->dropMsg != 0) ? pXSource->dropMsg : 1;
pPlayer->input.newWeapon = pPlayer->curWeapon = oldWeapon;
pPlayer->newWeapon = pPlayer->curWeapon = oldWeapon;
WeaponRaise(pPlayer);
}
}
@ -1590,7 +1590,7 @@ void trPlayerCtrlGiveStuff(XSPRITE* pXSource, PLAYER* pPlayer, TRPLAYERCTRL* pCt
XSPRITE* pXScene = &xsprite[sprite[pCtrl->qavScene.index].extra];
pXScene->dropMsg = weapon;
} else if (pPlayer->curWeapon != weapon) {
pPlayer->input.newWeapon = weapon;
pPlayer->newWeapon = weapon;
WeaponRaise(pPlayer);
}
}
@ -1990,7 +1990,7 @@ void usePropertiesChanger(XSPRITE* pXSource, short objType, int objIndex) {
xsprite[pSpr->extra].medium = kMediumNormal;
if (pPlayer) {
pPlayer->posture = (!pPlayer->input.buttonFlags.crouch) ? kPostureStand : kPostureCrouch;
pPlayer->posture = (!pPlayer->input.syncFlags.crouch) ? kPostureStand : kPostureCrouch;
pPlayer->nWaterPal = 0;
}
@ -2087,7 +2087,7 @@ void useTeleportTarget(XSPRITE* pXSource, spritetype* pSprite) {
xsprite[pSprite->extra].medium = kMediumNormal;
if (pPlayer) {
pPlayer->posture = (!pPlayer->input.buttonFlags.crouch) ? kPostureStand : kPostureCrouch;
pPlayer->posture = (!pPlayer->input.syncFlags.crouch) ? kPostureStand : kPostureCrouch;
pPlayer->nWaterPal = 0;
}
@ -2889,10 +2889,10 @@ bool condCheckPlayer(XSPRITE* pXCond, int cmpOp, bool PUSH) {
case 2: return (pPlayer->input.forward < 0); // backward
case 3: return (pPlayer->input.strafe > 0); // left
case 4: return (pPlayer->input.strafe < 0); // right
case 5: return (pPlayer->input.buttonFlags.jump); // jump
case 6: return (pPlayer->input.buttonFlags.crouch); // crouch
case 7: return (pPlayer->input.buttonFlags.shoot); // normal fire weapon
case 8: return (pPlayer->input.buttonFlags.shoot2); // alt fire weapon
case 5: return (pPlayer->input.syncFlags.jump); // jump
case 6: return (pPlayer->input.syncFlags.crouch); // crouch
case 7: return (pPlayer->input.syncFlags.shoot); // normal fire weapon
case 8: return (pPlayer->input.syncFlags.shoot2); // alt fire weapon
default:
condError(pXCond, "Player conditions:\nSpecify a correct key!");
break;

View file

@ -318,7 +318,7 @@ char powerupActivate(PLAYER *pPlayer, int nPowerUp)
pPlayer->damageControl[1]++;
break;
case kItemTwoGuns:
pPlayer->input.newWeapon = pPlayer->curWeapon;
pPlayer->newWeapon = pPlayer->curWeapon;
WeaponRaise(pPlayer);
break;
}
@ -369,7 +369,7 @@ void powerupDeactivate(PLAYER *pPlayer, int nPowerUp)
pPlayer->damageControl[1]--;
break;
case kItemTwoGuns:
pPlayer->input.newWeapon = pPlayer->curWeapon;
pPlayer->newWeapon = pPlayer->curWeapon;
WeaponRaise(pPlayer);
break;
}
@ -749,12 +749,10 @@ void playerStart(int nPlayer, int bNewLevel)
pPlayer->nextWeapon = 0;
xvel[pSprite->index] = yvel[pSprite->index] = zvel[pSprite->index] = 0;
pInput->q16turn = 0;
pInput->keyFlags.word = 0;
pInput->syncFlags.value = 0;
pInput->forward = 0;
pInput->strafe = 0;
pInput->q16mlook = 0;
pInput->buttonFlags.byte = 0;
pInput->useFlags.byte = 0;
pPlayer->flickerEffect = 0;
pPlayer->quakeEffect = 0;
pPlayer->tiltEffect = 0;
@ -822,7 +820,7 @@ void playerReset(PLAYER *pPlayer)
pPlayer->hasWeapon[1] = 1;
pPlayer->curWeapon = 0;
pPlayer->qavCallback = -1;
pPlayer->input.newWeapon = 1;
pPlayer->newWeapon = 1;
for (int i = 0; i < 14; i++)
{
pPlayer->weaponOrder[0][i] = dword_136400[i];
@ -1311,7 +1309,7 @@ void ProcessInput(PLAYER *pPlayer)
}
pPlayer->isRunning = pInput->syncFlags.run;
if (pInput->buttonFlags.byte || pInput->forward || pInput->strafe || pInput->q16turn)
if ((pInput->syncFlags.value & flag_buttonmask_norun) || pInput->forward || pInput->strafe || pInput->q16turn)
pPlayer->restTime = 0;
else if (pPlayer->restTime >= 0)
pPlayer->restTime += 4;
@ -1333,8 +1331,8 @@ void ProcessInput(PLAYER *pPlayer)
pPlayer->q16horiz = mulscale16(0x8000-(Cos(ClipHigh(pPlayer->deathTime*8, 1024))>>15), fix16_from_int(120));
}
if (pPlayer->curWeapon)
pInput->newWeapon = pPlayer->curWeapon;
if (pInput->keyFlags.action)
pInput->syncFlags.newWeapon = pPlayer->curWeapon;
if (pInput->syncFlags.action)
{
if (bSeqStat)
{
@ -1350,12 +1348,12 @@ void ProcessInput(PLAYER *pPlayer)
playerReset(pPlayer);
if (gGameOptions.nGameType == 0 && numplayers == 1)
{
pInput->keyFlags.restart = 1;
pInput->syncFlags.restart = 1;
}
else
playerStart(pPlayer->nPlayer);
}
pInput->keyFlags.action = 0;
pInput->syncFlags.action = 0;
}
return;
}
@ -1412,11 +1410,11 @@ void ProcessInput(PLAYER *pPlayer)
}
if (pInput->q16turn)
pPlayer->q16ang = (pPlayer->q16ang+pInput->q16turn)&0x7ffffff;
if (pInput->keyFlags.spin180)
if (pInput->syncFlags.spin180)
{
if (!pPlayer->spin)
pPlayer->spin = -1024;
pInput->keyFlags.spin180 = 0;
pInput->syncFlags.spin180 = 0;
}
if (pPlayer->spin < 0)
{
@ -1434,22 +1432,22 @@ void ProcessInput(PLAYER *pPlayer)
gViewAngleAdjust += float(pSprite->ang - pPlayer->angold);
pPlayer->q16ang = (pPlayer->q16ang+fix16_from_int(pSprite->ang-pPlayer->angold))&0x7ffffff;
pPlayer->angold = pSprite->ang = fix16_to_int(pPlayer->q16ang);
if (!pInput->buttonFlags.jump)
if (!pInput->syncFlags.jump)
pPlayer->cantJump = 0;
switch (pPlayer->posture) {
case 1:
if (pInput->buttonFlags.jump)
if (pInput->syncFlags.jump)
zvel[nSprite] -= pPosture->normalJumpZ;//0x5b05;
if (pInput->buttonFlags.crouch)
if (pInput->syncFlags.crouch)
zvel[nSprite] += pPosture->normalJumpZ;//0x5b05;
break;
case 2:
if (!pInput->buttonFlags.crouch)
if (!pInput->syncFlags.crouch)
pPlayer->posture = 0;
break;
default:
if (!pPlayer->cantJump && pInput->buttonFlags.jump && pXSprite->height == 0) {
if (!pPlayer->cantJump && pInput->syncFlags.jump && pXSprite->height == 0) {
#ifdef NOONE_EXTENSIONS
if ((packItemActive(pPlayer, 4) && pPosture->pwupJumpZ != 0) || pPosture->normalJumpZ != 0)
#endif
@ -1460,11 +1458,11 @@ void ProcessInput(PLAYER *pPlayer)
pPlayer->cantJump = 1;
}
if (pInput->buttonFlags.crouch)
if (pInput->syncFlags.crouch)
pPlayer->posture = 2;
break;
}
if (pInput->keyFlags.action)
if (pInput->syncFlags.action)
{
int a2, a3;
int hit = ActionScan(pPlayer, &a2, &a3);
@ -1537,24 +1535,24 @@ void ProcessInput(PLAYER *pPlayer)
zvel[pSprite2->index] = zvel[nSprite];
pPlayer->hand = 0;
}
pInput->keyFlags.action = 0;
pInput->syncFlags.action = 0;
}
if (bVanilla)
{
if (pInput->keyFlags.lookCenter && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookCenter && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown)
{
if (pPlayer->q16look < 0)
pPlayer->q16look = fix16_min(pPlayer->q16look+fix16_from_int(4), fix16_from_int(0));
if (pPlayer->q16look > 0)
pPlayer->q16look = fix16_max(pPlayer->q16look-fix16_from_int(4), fix16_from_int(0));
if (!pPlayer->q16look)
pInput->keyFlags.lookCenter = 0;
pInput->syncFlags.lookCenter = 0;
}
else
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
pPlayer->q16look = fix16_min(pPlayer->q16look+fix16_from_int(4), fix16_from_int(60));
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
pPlayer->q16look = fix16_max(pPlayer->q16look-fix16_from_int(4), fix16_from_int(-60));
}
pPlayer->q16look = fix16_clamp(pPlayer->q16look+pInput->q16mlook, fix16_from_int(-60), fix16_from_int(60));
@ -1571,33 +1569,33 @@ void ProcessInput(PLAYER *pPlayer)
int downAngle = -347;
double lookStepUp = 4.0*upAngle/60.0;
double lookStepDown = -4.0*downAngle/60.0;
if (pInput->keyFlags.lookCenter && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookCenter && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown)
{
if (pPlayer->q16look < 0)
pPlayer->q16look = fix16_min(pPlayer->q16look+fix16_from_dbl(lookStepDown), fix16_from_int(0));
if (pPlayer->q16look > 0)
pPlayer->q16look = fix16_max(pPlayer->q16look-fix16_from_dbl(lookStepUp), fix16_from_int(0));
if (!pPlayer->q16look)
pInput->keyFlags.lookCenter = 0;
pInput->syncFlags.lookCenter = 0;
}
else
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
pPlayer->q16look = fix16_min(pPlayer->q16look+fix16_from_dbl(lookStepUp), fix16_from_int(upAngle));
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
pPlayer->q16look = fix16_max(pPlayer->q16look-fix16_from_dbl(lookStepDown), fix16_from_int(downAngle));
}
if (pPlayer == gMe && numplayers == 1)
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
{
gViewLookAdjust += float(lookStepUp);
}
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
{
gViewLookAdjust -= float(lookStepDown);
}
gViewLookRecenter = pInput->keyFlags.lookCenter && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown;
gViewLookRecenter = pInput->syncFlags.lookCenter && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown;
}
pPlayer->q16look = fix16_clamp(pPlayer->q16look+(pInput->q16mlook<<3), fix16_from_int(downAngle), fix16_from_int(upAngle));
pPlayer->q16horiz = fix16_from_float(100.f*tanf(fix16_to_float(pPlayer->q16look)*fPI/1024.f));
@ -1629,49 +1627,49 @@ void ProcessInput(PLAYER *pPlayer)
pPlayer->q16slopehoriz = 0;
}
pPlayer->slope = (-fix16_to_int(pPlayer->q16horiz))<<7;
if (pInput->keyFlags.prevItem)
if (pInput->syncFlags.prevItem)
{
pInput->keyFlags.prevItem = 0;
pInput->syncFlags.prevItem = 0;
packPrevItem(pPlayer);
}
if (pInput->keyFlags.nextItem)
if (pInput->syncFlags.nextItem)
{
pInput->keyFlags.nextItem = 0;
pInput->syncFlags.nextItem = 0;
packNextItem(pPlayer);
}
if (pInput->keyFlags.useItem)
if (pInput->syncFlags.useItem)
{
pInput->keyFlags.useItem = 0;
pInput->syncFlags.useItem = 0;
if (pPlayer->packSlots[pPlayer->packItemId].curAmount > 0)
packUseItem(pPlayer, pPlayer->packItemId);
}
if (pInput->useFlags.useBeastVision)
if (pInput->syncFlags.useBeastVision)
{
pInput->useFlags.useBeastVision = 0;
pInput->syncFlags.useBeastVision = 0;
if (pPlayer->packSlots[3].curAmount > 0)
packUseItem(pPlayer, 3);
}
if (pInput->useFlags.useCrystalBall)
if (pInput->syncFlags.useCrystalBall)
{
pInput->useFlags.useCrystalBall = 0;
pInput->syncFlags.useCrystalBall = 0;
if (pPlayer->packSlots[2].curAmount > 0)
packUseItem(pPlayer, 2);
}
if (pInput->useFlags.useJumpBoots)
if (pInput->syncFlags.useJumpBoots)
{
pInput->useFlags.useJumpBoots = 0;
pInput->syncFlags.useJumpBoots = 0;
if (pPlayer->packSlots[4].curAmount > 0)
packUseItem(pPlayer, 4);
}
if (pInput->useFlags.useMedKit)
if (pInput->syncFlags.useMedKit)
{
pInput->useFlags.useMedKit = 0;
pInput->syncFlags.useMedKit = 0;
if (pPlayer->packSlots[0].curAmount > 0)
packUseItem(pPlayer, 0);
}
if (pInput->keyFlags.holsterWeapon)
if (pInput->syncFlags.holsterWeapon)
{
pInput->keyFlags.holsterWeapon = 0;
pInput->syncFlags.holsterWeapon = 0;
if (pPlayer->curWeapon)
{
WeaponLower(pPlayer);
@ -2178,7 +2176,7 @@ void PlayerSurvive(int, int nXSprite)
sprintf(buffer, "%s lives again!", gProfile[pPlayer->nPlayer].name);
viewSetMessage(buffer);
}
pPlayer->input.newWeapon = 1;
pPlayer->newWeapon = 1;
}
}
}

View file

@ -87,15 +87,7 @@ struct PLAYER
XSPRITE* pXSprite;
DUDEINFO* pDudeInfo;
GINPUT input;
//short input; // INPUT
//char moveFunc; // forward
//short at11; // turn
//char hearDist; // strafe
//int bobV; // buttonFlags
//unsigned int bobH; // keyFlags
//char swayV; // useFlags;
//char swayH; // newWeapon
//char at21; // mlook
uint8_t newWeapon;
int used1; // something related to game checksum
int weaponQav;
int qavCallback;

View file

@ -66,7 +66,7 @@ void viewInitializePrediction(void)
predict.at6f = gMe->cantJump;
predict.at70 = gMe->isRunning;
predict.at72 = gMe->isUnderwater;
predict.at71 = gMe->input.buttonFlags.jump;
predict.at71 = gMe->input.syncFlags.jump;
predict.at50 = gMe->pSprite->x;
predict.at54 = gMe->pSprite->y;
predict.at58 = gMe->pSprite->z;
@ -78,7 +78,7 @@ void viewInitializePrediction(void)
predict.at6a = gMe->pXSprite->height;
predict.at48 = gMe->posture;
predict.at4c = gMe->spin;
predict.at6e = gMe->input.keyFlags.lookCenter;
predict.at6e = gMe->input.syncFlags.lookCenter;
memcpy(&predict.at75,&gSpriteHit[gMe->pSprite->extra],sizeof(SPRITEHIT));
predict.at0 = gMe->bobPhase;
predict.at4 = gMe->bobAmp;
@ -136,8 +136,7 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
}
predict.at70 = pInput->syncFlags.run;
predict.at70 = 0;
predict.at71 = pInput->buttonFlags.jump;
predict.at71 = pInput->syncFlags.jump;
if (predict.at48 == 1)
{
int x = Cos(fix16_to_int(predict.at30));
@ -191,7 +190,7 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
}
if (pInput->q16turn)
predict.at30 = (predict.at30+pInput->q16turn)&0x7ffffff;
if (pInput->keyFlags.spin180)
if (pInput->syncFlags.spin180)
if (!predict.at4c)
predict.at4c = -1024;
if (predict.at4c < 0)
@ -216,11 +215,11 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
case 1:
if (predict.at71)
predict.at64 -= pPosture->normalJumpZ;//0x5b05;
if (pInput->buttonFlags.crouch)
if (pInput->syncFlags.crouch)
predict.at64 += pPosture->normalJumpZ;//0x5b05;
break;
case 2:
if (!pInput->buttonFlags.crouch)
if (!pInput->syncFlags.crouch)
predict.at48 = 0;
break;
default:
@ -229,12 +228,12 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
else predict.at64 = pPosture->normalJumpZ;//-0xbaaaa;
predict.at6f = 1;
}
if (pInput->buttonFlags.crouch)
if (pInput->syncFlags.crouch)
predict.at48 = 2;
break;
}
#if 0
if (predict.at6e && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown)
if (predict.at6e && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown)
{
if (predict.at20 < 0)
predict.at20 = fix16_min(predict.at20+fix16_from_int(4), fix16_from_int(0));
@ -245,9 +244,9 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
}
else
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
predict.at20 = fix16_min(predict.at20+fix16_from_int(4), fix16_from_int(60));
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
predict.at20 = fix16_max(predict.at20-fix16_from_int(4), fix16_from_int(-60));
}
predict.at20 = fix16_clamp(predict.at20+pInput->q16mlook, fix16_from_int(-60), fix16_from_int(60));
@ -263,7 +262,7 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
int downAngle = -347;
double lookStepUp = 4.0*upAngle/60.0;
double lookStepDown = -4.0*downAngle/60.0;
if (predict.at6e && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown)
if (predict.at6e && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown)
{
if (predict.at20 < 0)
predict.at20 = fix16_min(predict.at20+fix16_from_dbl(lookStepDown), fix16_from_int(0));
@ -274,22 +273,22 @@ static void fakeProcessInput(PLAYER *pPlayer, GINPUT *pInput)
}
else
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
predict.at20 = fix16_min(predict.at20+fix16_from_dbl(lookStepUp), fix16_from_int(upAngle));
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
predict.at20 = fix16_max(predict.at20-fix16_from_dbl(lookStepDown), fix16_from_int(downAngle));
}
if (numplayers > 1 && gPrediction)
{
if (pInput->buttonFlags.lookUp)
if (pInput->syncFlags.lookUp)
{
gViewLookAdjust += float(lookStepUp);
}
if (pInput->buttonFlags.lookDown)
if (pInput->syncFlags.lookDown)
{
gViewLookAdjust -= float(lookStepDown);
}
gViewLookRecenter = predict.at6e && !pInput->buttonFlags.lookUp && !pInput->buttonFlags.lookDown;
gViewLookRecenter = predict.at6e && !pInput->syncFlags.lookUp && !pInput->syncFlags.lookDown;
}
predict.at20 = fix16_clamp(predict.at20+(pInput->q16mlook<<3), fix16_from_int(downAngle), fix16_from_int(upAngle));
predict.at24 = fix16_from_float(100.f*tanf(fix16_to_float(predict.at20)*fPI/1024.f));

View file

@ -469,8 +469,8 @@ void WeaponRaise(PLAYER *pPlayer)
{
dassert(pPlayer != NULL);
int prevWeapon = pPlayer->curWeapon;
pPlayer->curWeapon = pPlayer->input.newWeapon;
pPlayer->input.newWeapon = 0;
pPlayer->curWeapon = pPlayer->newWeapon;
pPlayer->newWeapon = 0;
pPlayer->weaponAmmo = weaponModes[pPlayer->curWeapon].at4;
switch (pPlayer->curWeapon)
{
@ -641,21 +641,21 @@ void WeaponLower(PLAYER *pPlayer)
case 4:
pPlayer->weaponState = 1;
StartQAV(pPlayer, 11, -1, 0);
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
WeaponLower(pPlayer);
break;
case 3:
if (pPlayer->input.newWeapon == 6)
if (pPlayer->newWeapon == 6)
{
pPlayer->weaponState = 2;
StartQAV(pPlayer, 11, -1, 0);
return;
}
else if (pPlayer->input.newWeapon == 7)
else if (pPlayer->newWeapon == 7)
{
pPlayer->weaponState = 1;
StartQAV(pPlayer, 11, -1, 0);
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
WeaponLower(pPlayer);
}
else
@ -676,7 +676,7 @@ void WeaponLower(PLAYER *pPlayer)
WeaponRaise(pPlayer);
break;
case 3:
if (pPlayer->input.newWeapon == 7)
if (pPlayer->newWeapon == 7)
{
pPlayer->weaponState = 2;
StartQAV(pPlayer, 17, -1, 0);
@ -1767,17 +1767,17 @@ char sub_4F0E0(PLAYER *pPlayer)
switch (pPlayer->weaponState)
{
case 5:
if (!pPlayer->input.buttonFlags.shoot2)
if (!pPlayer->input.syncFlags.shoot2)
pPlayer->weaponState = 6;
return 1;
case 6:
if (pPlayer->input.buttonFlags.shoot2)
if (pPlayer->input.syncFlags.shoot2)
{
pPlayer->weaponState = 3;
pPlayer->fuseTime = pPlayer->weaponTimer;
StartQAV(pPlayer, 13, nClientDropCan, 0);
}
else if (pPlayer->input.buttonFlags.shoot)
else if (pPlayer->input.syncFlags.shoot)
{
pPlayer->weaponState = 7;
pPlayer->fuseTime = 0;
@ -1787,7 +1787,7 @@ char sub_4F0E0(PLAYER *pPlayer)
case 7:
{
pPlayer->throwPower = ClipHigh(divscale16(gFrameClock-pPlayer->throwTime,240), 65536);
if (!pPlayer->input.buttonFlags.shoot)
if (!pPlayer->input.syncFlags.shoot)
{
if (!pPlayer->fuseTime)
pPlayer->fuseTime = pPlayer->weaponTimer;
@ -1805,17 +1805,17 @@ char sub_4F200(PLAYER *pPlayer)
switch (pPlayer->weaponState)
{
case 4:
if (!pPlayer->input.buttonFlags.shoot2)
if (!pPlayer->input.syncFlags.shoot2)
pPlayer->weaponState = 5;
return 1;
case 5:
if (pPlayer->input.buttonFlags.shoot2)
if (pPlayer->input.syncFlags.shoot2)
{
pPlayer->weaponState = 1;
pPlayer->fuseTime = pPlayer->weaponTimer;
StartQAV(pPlayer, 22, nClientDropBundle, 0);
}
else if (pPlayer->input.buttonFlags.shoot)
else if (pPlayer->input.syncFlags.shoot)
{
pPlayer->weaponState = 6;
pPlayer->fuseTime = 0;
@ -1825,7 +1825,7 @@ char sub_4F200(PLAYER *pPlayer)
case 6:
{
pPlayer->throwPower = ClipHigh(divscale16(gFrameClock-pPlayer->throwTime,240), 65536);
if (!pPlayer->input.buttonFlags.shoot)
if (!pPlayer->input.syncFlags.shoot)
{
if (!pPlayer->fuseTime)
pPlayer->fuseTime = pPlayer->weaponTimer;
@ -1845,7 +1845,7 @@ char sub_4F320(PLAYER *pPlayer)
case 9:
pPlayer->throwPower = ClipHigh(divscale16(gFrameClock-pPlayer->throwTime,240), 65536);
pPlayer->weaponTimer = 0;
if (!pPlayer->input.buttonFlags.shoot)
if (!pPlayer->input.syncFlags.shoot)
{
pPlayer->weaponState = 8;
StartQAV(pPlayer, 29, nClientThrowProx, 0);
@ -1861,7 +1861,7 @@ char sub_4F3A0(PLAYER *pPlayer)
{
case 13:
pPlayer->throwPower = ClipHigh(divscale16(gFrameClock-pPlayer->throwTime,240), 65536);
if (!pPlayer->input.buttonFlags.shoot)
if (!pPlayer->input.syncFlags.shoot)
{
pPlayer->weaponState = 11;
StartQAV(pPlayer, 39, nClientThrowRemote, 0);
@ -1880,7 +1880,7 @@ char sub_4F414(PLAYER *pPlayer)
StartQAV(pPlayer, 114, nClientFireLifeLeech, 1);
return 1;
case 6:
if (!pPlayer->input.buttonFlags.shoot2)
if (!pPlayer->input.syncFlags.shoot2)
{
pPlayer->weaponState = 2;
StartQAV(pPlayer, 118, -1, 0);
@ -1907,7 +1907,7 @@ char sub_4F484(PLAYER *pPlayer)
StartQAV(pPlayer, 77, nClientFireTesla, 1);
return 1;
case 5:
if (!pPlayer->input.buttonFlags.shoot)
if (!pPlayer->input.syncFlags.shoot)
{
pPlayer->weaponState = 2;
if (sub_4B2C8(pPlayer, 7, 10) && powerupCheck(pPlayer, kPwUpTwoGuns))
@ -1968,8 +1968,8 @@ void WeaponProcess(PLAYER *pPlayer) {
WeaponPlay(pPlayer);
UpdateAimVector(pPlayer);
pPlayer->weaponTimer -= 4;
char bShoot = pPlayer->input.buttonFlags.shoot;
char bShoot2 = pPlayer->input.buttonFlags.shoot2;
char bShoot = pPlayer->input.syncFlags.shoot;
char bShoot2 = pPlayer->input.syncFlags.shoot2;
if (pPlayer->qavLoop && pPlayer->pXSprite->health > 0)
{
if (bShoot && CheckAmmo(pPlayer, pPlayer->weaponAmmo, 1))
@ -2023,12 +2023,12 @@ void WeaponProcess(PLAYER *pPlayer) {
{
sfxKill3DSound(pPlayer->pSprite, -1, 441);
pPlayer->weaponState = 0;
pPlayer->input.newWeapon = pPlayer->nextWeapon;
pPlayer->newWeapon = pPlayer->nextWeapon;
pPlayer->nextWeapon = 0;
}
if (pPlayer->input.keyFlags.nextWeapon)
if (pPlayer->input.syncFlags.nextWeapon)
{
pPlayer->input.keyFlags.nextWeapon = 0;
pPlayer->input.syncFlags.nextWeapon = 0;
pPlayer->weaponState = 0;
pPlayer->nextWeapon = 0;
int t;
@ -2040,11 +2040,11 @@ void WeaponProcess(PLAYER *pPlayer) {
pPlayer->nextWeapon = weapon;
return;
}
pPlayer->input.newWeapon = weapon;
pPlayer->newWeapon = weapon;
}
if (pPlayer->input.keyFlags.prevWeapon)
if (pPlayer->input.syncFlags.prevWeapon)
{
pPlayer->input.keyFlags.prevWeapon = 0;
pPlayer->input.syncFlags.prevWeapon = 0;
pPlayer->weaponState = 0;
pPlayer->nextWeapon = 0;
int t;
@ -2056,7 +2056,7 @@ void WeaponProcess(PLAYER *pPlayer) {
pPlayer->nextWeapon = weapon;
return;
}
pPlayer->input.newWeapon = weapon;
pPlayer->newWeapon = weapon;
}
if (pPlayer->weaponState == -1)
{
@ -2070,54 +2070,54 @@ void WeaponProcess(PLAYER *pPlayer) {
pPlayer->nextWeapon = weapon;
return;
}
pPlayer->input.newWeapon = weapon;
pPlayer->newWeapon = weapon;
}
if (pPlayer->input.newWeapon)
if (pPlayer->newWeapon)
{
if (pPlayer->input.newWeapon == 6)
if (pPlayer->newWeapon == 6)
{
if (pPlayer->curWeapon == 6)
{
if (sub_4B2C8(pPlayer, 10, 1))
pPlayer->input.newWeapon = 11;
pPlayer->newWeapon = 11;
else if (sub_4B2C8(pPlayer, 11, 1))
pPlayer->input.newWeapon = 12;
pPlayer->newWeapon = 12;
}
else if (pPlayer->curWeapon == 11)
{
if (sub_4B2C8(pPlayer, 11, 1))
pPlayer->input.newWeapon = 12;
pPlayer->newWeapon = 12;
else if (sub_4B2C8(pPlayer, 5, 1) && pPlayer->isUnderwater == 0)
pPlayer->input.newWeapon = 6;
pPlayer->newWeapon = 6;
}
else if (pPlayer->curWeapon == 12)
{
if (sub_4B2C8(pPlayer, 5, 1) && pPlayer->isUnderwater == 0)
pPlayer->input.newWeapon = 6;
pPlayer->newWeapon = 6;
else if (sub_4B2C8(pPlayer, 10, 1))
pPlayer->input.newWeapon = 11;
pPlayer->newWeapon = 11;
}
else
{
if (sub_4B2C8(pPlayer, 5, 1) && pPlayer->isUnderwater == 0)
pPlayer->input.newWeapon = 6;
pPlayer->newWeapon = 6;
else if (sub_4B2C8(pPlayer, 10, 1))
pPlayer->input.newWeapon = 11;
pPlayer->newWeapon = 11;
else if (sub_4B2C8(pPlayer, 11, 1))
pPlayer->input.newWeapon = 12;
pPlayer->newWeapon = 12;
}
}
if (pPlayer->pXSprite->health == 0 || pPlayer->hasWeapon[pPlayer->input.newWeapon] == 0)
if (pPlayer->pXSprite->health == 0 || pPlayer->hasWeapon[pPlayer->newWeapon] == 0)
{
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
return;
}
if (pPlayer->isUnderwater && BannedUnderwater(pPlayer->input.newWeapon) && !sub_4B1A4(pPlayer))
if (pPlayer->isUnderwater && BannedUnderwater(pPlayer->newWeapon) && !sub_4B1A4(pPlayer))
{
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
return;
}
int nWeapon = pPlayer->input.newWeapon;
int nWeapon = pPlayer->newWeapon;
int v4c = weaponModes[nWeapon].at0;
if (!pPlayer->curWeapon)
{
@ -2126,7 +2126,7 @@ void WeaponProcess(PLAYER *pPlayer) {
{
if (CheckAmmo(pPlayer, nAmmoType, 1) || nAmmoType == 11)
WeaponRaise(pPlayer);
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
}
else
{
@ -2144,14 +2144,14 @@ void WeaponProcess(PLAYER *pPlayer) {
pPlayer->nextWeapon = weapon;
return;
}
pPlayer->input.newWeapon = weapon;
pPlayer->newWeapon = weapon;
}
}
return;
}
if (nWeapon == pPlayer->curWeapon && v4c <= 1)
{
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
return;
}
int i = 0;
@ -2167,7 +2167,7 @@ void WeaponProcess(PLAYER *pPlayer) {
return;
}
}
pPlayer->input.newWeapon = 0;
pPlayer->newWeapon = 0;
return;
}
if (pPlayer->curWeapon && !CheckAmmo(pPlayer, pPlayer->weaponAmmo, 1) && pPlayer->weaponAmmo != 11)