mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 12:30:46 +00:00
- transition weapon selection in SW.
Thanks to the macro insanity for trivial operations in this code base this turned out to be a lot more troublesome than Duke...
This commit is contained in:
parent
e768a2bf24
commit
c7e667a17a
8 changed files with 18 additions and 29 deletions
|
@ -113,16 +113,6 @@ union SYNCFLAGS
|
|||
// NETWORK - REDEFINABLE SHARED (SYNC) KEYS BIT POSITIONS
|
||||
//
|
||||
|
||||
// weapons takes up 4 bits
|
||||
#define SK_WEAPON_BIT0 0
|
||||
#define SK_WEAPON_BIT1 1
|
||||
#define SK_WEAPON_BIT2 2
|
||||
#define SK_WEAPON_BIT3 3
|
||||
#define SK_WEAPON_MASK (BIT(SK_WEAPON_BIT0)| \
|
||||
BIT(SK_WEAPON_BIT1)| \
|
||||
BIT(SK_WEAPON_BIT2)| \
|
||||
BIT(SK_WEAPON_BIT3)) // 16 possible numbers 0-15
|
||||
|
||||
#define SK_INV_HOTKEY_BIT0 4
|
||||
#define SK_INV_HOTKEY_BIT1 5
|
||||
#define SK_INV_HOTKEY_BIT2 6
|
||||
|
|
|
@ -664,8 +664,7 @@ static void processInputBits(player_struct *p, ControlInfo &info)
|
|||
if (buttonMap.ButtonDown(gamefunc_Dpad_Select) && info.dz > 0) j = 11;
|
||||
if (buttonMap.ButtonDown(gamefunc_Dpad_Select) && info.dz < 0) j = 12;
|
||||
|
||||
if (j && (loc.actions & SB_WEAPONMASK_BITS) == 0)
|
||||
loc.SetNewWeapon(j);
|
||||
if (j) loc.SetNewWeapon(j);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1002,6 +1002,7 @@ struct PLAYERstruct
|
|||
|
||||
PLAYER_ACTION_FUNCp DoPlayerAction;
|
||||
int Flags, Flags2;
|
||||
ESyncBits KeyPressBits;
|
||||
int KeyPressFlags;
|
||||
|
||||
SECTOR_OBJECTp sop_control; // sector object pointer
|
||||
|
|
|
@ -343,8 +343,7 @@ getinput(InputPacket *loc, SWBOOL tied)
|
|||
|
||||
if (WeaponToSend > 0)
|
||||
{
|
||||
loc->bits &= ~SK_WEAPON_MASK;
|
||||
loc->bits |= WeaponToSend;
|
||||
loc->SetNewWeapon(WeaponToSend);
|
||||
WeaponToSend = 0;
|
||||
}
|
||||
else if (WeaponToSend == -1)
|
||||
|
|
|
@ -84,6 +84,7 @@ typedef struct
|
|||
fix16_t q16ang;
|
||||
fix16_t q16horz;
|
||||
int32_t bits;
|
||||
ESyncBits actions;
|
||||
} SW_AVERAGE_PACKET;
|
||||
|
||||
int MovesPerPacket = 1;
|
||||
|
@ -204,8 +205,12 @@ UpdateInputs(void)
|
|||
AveragePacket.q16ang = Player[myconnectindex].camq16ang;
|
||||
AveragePacket.q16horz = Player[myconnectindex].camq16horiz;
|
||||
SET(AveragePacket.bits, loc.bits);
|
||||
SET(AveragePacket.actions, loc.actions);
|
||||
// The above would or the weapon numbers together. Undo that now. The last one should win.
|
||||
AveragePacket.actions &= ~SB_WEAPONMASK_BITS;
|
||||
AveragePacket.actions |= ESyncBits::FromInt(loc.getNewWeapon()) & SB_WEAPONMASK_BITS;
|
||||
|
||||
Bmemset(&loc, 0, sizeof(loc));
|
||||
memset(&loc, 0, sizeof(loc));
|
||||
|
||||
pp = Player + myconnectindex;
|
||||
|
||||
|
@ -226,6 +231,7 @@ UpdateInputs(void)
|
|||
loc.q16ang = AveragePacket.q16ang;
|
||||
loc.q16horz = AveragePacket.q16horz;
|
||||
loc.bits = AveragePacket.bits;
|
||||
loc.actions = AveragePacket.actions;
|
||||
|
||||
memset(&AveragePacket, 0, sizeof(AveragePacket));
|
||||
|
||||
|
|
|
@ -191,15 +191,8 @@ void pToggleCrosshair(void)
|
|||
void DoPlayerChooseYell(PLAYERp pp)
|
||||
{
|
||||
int choose_snd = 0;
|
||||
short weapon;
|
||||
|
||||
weapon = TEST(pp->input.bits, SK_WEAPON_MASK);
|
||||
|
||||
if (weapon == WPN_FIST)
|
||||
{
|
||||
if (RANDOM_RANGE(1000) < 900) return;
|
||||
}
|
||||
else if (RANDOM_RANGE(1000) < 990) return;
|
||||
if (RANDOM_RANGE(1000) < 990) return;
|
||||
|
||||
choose_snd = STD_RANDOM_RANGE(MAX_YELLSOUNDS);
|
||||
|
||||
|
@ -487,13 +480,13 @@ int WeaponOperate(PLAYERp pp)
|
|||
}
|
||||
}
|
||||
|
||||
weapon = TEST(pp->input.bits, SK_WEAPON_MASK);
|
||||
weapon = pp->input.getNewWeapon();
|
||||
|
||||
if (weapon)
|
||||
{
|
||||
if (FLAG_KEY_PRESSED(pp, SK_WEAPON_BIT0))
|
||||
if (pp->KeyPressBits & SB_FIRST_WEAPON_BIT)
|
||||
{
|
||||
FLAG_KEY_RELEASE(pp, SK_WEAPON_BIT0);
|
||||
pp->KeyPressBits &= ~SB_FIRST_WEAPON_BIT;
|
||||
|
||||
weapon -= 1;
|
||||
|
||||
|
@ -640,7 +633,7 @@ int WeaponOperate(PLAYERp pp)
|
|||
}
|
||||
else
|
||||
{
|
||||
FLAG_KEY_RESET(pp, SK_WEAPON_BIT0);
|
||||
pp->KeyPressBits |= SB_FIRST_WEAPON_BIT;
|
||||
}
|
||||
|
||||
// Shut that computer chick up if weapon has changed!
|
||||
|
|
|
@ -7806,6 +7806,7 @@ InitAllPlayers(void)
|
|||
|
||||
pp->WpnGotOnceFlags = 0;
|
||||
pp->DoPlayerAction = DoPlayerBeginRun;
|
||||
pp->KeyPressBits = ESyncBits::FromInt(0xFFFFFFFF);
|
||||
pp->KeyPressFlags = 0xFFFFFFFF;
|
||||
memset(pp->KilledPlayer,0,sizeof(pp->KilledPlayer));
|
||||
|
||||
|
|
|
@ -83,12 +83,13 @@ DoPrediction(PLAYERp ppp)
|
|||
|
||||
// get rid of input bits so it doesn't go into other code branches that would
|
||||
// get it out of sync
|
||||
ppp->input.actions &= ~(SB_WEAPONMASK_BITS);
|
||||
ppp->KeyPressBits |= (SB_WEAPONMASK_BITS);
|
||||
RESET(ppp->input.bits,
|
||||
BIT(SK_SHOOT)|BIT(SK_OPERATE)|BIT(SK_INV_LEFT)|BIT(SK_INV_RIGHT)|
|
||||
BIT(SK_INV_USE)|BIT(SK_HIDE_WEAPON)|
|
||||
BIT(SK_AUTO_AIM)|
|
||||
BIT(SK_CENTER_VIEW)|
|
||||
SK_WEAPON_MASK|
|
||||
SK_INV_HOTKEY_MASK
|
||||
);
|
||||
|
||||
|
@ -97,7 +98,6 @@ DoPrediction(PLAYERp ppp)
|
|||
BIT(SK_INV_USE)|BIT(SK_HIDE_WEAPON)|
|
||||
BIT(SK_AUTO_AIM)|
|
||||
BIT(SK_CENTER_VIEW)|
|
||||
SK_WEAPON_MASK|
|
||||
SK_INV_HOTKEY_MASK
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in a new issue