diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas
index 1b80ddd13aba6f9a9d031aa5ff3a172ed3002c92..a0fb6eda640681ee89637144f95dc148f2f0595c 100644 (file)
--- a/src/game/g_netmsg.pas
+++ b/src/game/g_netmsg.pas
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*)
-{$MODE DELPHI}
+{$INCLUDE ../shared/a_modes.inc}
unit g_netmsg;
interface
function MH_RECV_PlayerPos(C: pTNetClient; P: Pointer): Word;
var
- Dir: Byte;
+ Dir, i: Byte;
+ WeaponSelect: Word;
PID: Word;
kByte: Word;
Pl: TPlayer;
NetTime := GT;
kByte := e_Raw_Read_Word(P);
Dir := e_Raw_Read_Byte(P);
+ WeaponSelect := e_Raw_Read_Word(P);
+ //e_WriteLog(Format('R:ws=%d', [WeaponSelect]), MSG_WARNING);
if Direction <> TDirection(Dir) then
JustTeleported := False;
+
SetDirection(TDirection(Dir));
ReleaseKeys;
if LongBool(kByte and NET_KEY_OPEN) then PressKey(KEY_OPEN, 10000);
if LongBool(kByte and NET_KEY_NW) then PressKey(KEY_NEXTWEAPON, 10000);
if LongBool(kByte and NET_KEY_PW) then PressKey(KEY_PREVWEAPON, 10000);
+
+ for i := 0 to 15 do
+ begin
+ if (WeaponSelect and Word(1 shl i)) <> 0 then
+ begin
+ //e_WriteLog(Format(' R:wn=%d', [i]), MSG_WARNING);
+ QueueWeaponSwitch(i);
+ end;
+ end;
end;
// MH_SEND_PlayerPos(False, PID, C^.ID);
e_Buffer_Write(@NetOut, Lives);
e_Buffer_Write(@NetOut, Team);
- for I := WEAPON_KASTET to WEAPON_SUPERPULEMET do
+ for I := WP_FIRST to WP_LAST do
e_Buffer_Write(@NetOut, Byte(FWeapon[I]));
- for I := A_BULLETS to A_CELLS do
+ for I := A_BULLETS to A_HIGH do
e_Buffer_Write(@NetOut, FAmmo[I]);
- for I := A_BULLETS to A_CELLS do
+ for I := A_BULLETS to A_HIGH do
e_Buffer_Write(@NetOut, FMaxAmmo[I]);
for I := MR_SUIT to MR_MAX do
e_Buffer_Write(@NetOut, Byte(FPhysics));
e_Buffer_Write(@NetOut, Byte(FNoRespawn));
e_Buffer_Write(@NetOut, Byte(FJetpack));
+ e_Buffer_Write(@NetOut, FFireTime);
end;
g_Net_Host_Send(ID, True, NET_CHAN_PLAYER);
e_Buffer_Write(@NetOut, MonsterAmmo);
e_Buffer_Write(@NetOut, MonsterPain);
e_Buffer_Write(@NetOut, Byte(AnimIsReverse));
+ e_Buffer_Write(@NetOut, FFireTime);
end;
g_Net_Host_Send(ID, True, NET_CHAN_MONSTER);
Lives := e_Raw_Read_Byte(P);
NewTeam := e_Raw_Read_Byte(P);
- for I := WEAPON_KASTET to WEAPON_SUPERPULEMET do
+ for I := WP_FIRST to WP_LAST do
FWeapon[I] := (e_Raw_Read_Byte(P) <> 0);
- for I := A_BULLETS to A_CELLS do
+ for I := A_BULLETS to A_HIGH do
FAmmo[I] := e_Raw_Read_Word(P);
- for I := A_BULLETS to A_CELLS do
+ for I := A_BULLETS to A_HIGH do
FMaxAmmo[I] := e_Raw_Read_Word(P);
for I := MR_SUIT to MR_MAX do
FNoRespawn := e_Raw_Read_Byte(P) <> 0;
OldJet := FJetpack;
FJetpack := e_Raw_Read_Byte(P) <> 0;
+ FFireTime := e_Raw_Read_LongInt(P);
if OldJet and not FJetpack then
JetpackOff
else if not OldJet and FJetpack then
else
if gItems[ID].ItemType in [ITEM_WEAPON_SAW, ITEM_WEAPON_PISTOL, ITEM_WEAPON_SHOTGUN1, ITEM_WEAPON_SHOTGUN2,
ITEM_WEAPON_CHAINGUN, ITEM_WEAPON_ROCKETLAUNCHER, ITEM_WEAPON_PLASMA,
- ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_AMMO_BACKPACK] then
+ ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_WEAPON_FLAMETHROWER,
+ ITEM_AMMO_BACKPACK] then
g_Sound_PlayExAt('SOUND_ITEM_GETWEAPON',
gItems[ID].Obj.X, gItems[ID].Obj.Y)
else
else
if gItems[ID].ItemType in [ITEM_WEAPON_SAW, ITEM_WEAPON_PISTOL, ITEM_WEAPON_SHOTGUN1, ITEM_WEAPON_SHOTGUN2,
ITEM_WEAPON_CHAINGUN, ITEM_WEAPON_ROCKETLAUNCHER, ITEM_WEAPON_PLASMA,
- ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET] then
+ ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_WEAPON_FLAMETHROWER] then
g_Sound_PlayExAt('SOUND_ITEM_GETWEAPON',
gItems[ID].Obj.X, gItems[ID].Obj.Y)
else
MonsterAmmo := e_Raw_Read_LongInt(P);
MonsterPain := e_Raw_Read_LongInt(P);
AnimRevert := e_Raw_Read_Byte(P) <> 0;
+ FFireTime := e_Raw_Read_LongInt(P);
RevertAnim(AnimRevert);
if MonsterState <> MState then
kByte: Word;
Predict: Boolean;
strafeDir: Byte;
+ WeaponSelect: Word = 0;
+ I: Integer;
begin
if not gGameOn then Exit;
if gPlayers = nil then Exit;
begin
// new strafe mechanics
if (strafeDir = 0) then strafeDir := P1MoveButton; // start strafing
- // now set direction according to strafe
- if (strafeDir = 1) then gPlayer1.SetDirection(D_LEFT)
- else if (strafeDir = 2) then gPlayer1.SetDirection(D_RIGHT)
- else gPlayer1.SetDirection(TDirection(P1MoveButton-1));
+ // now set direction according to strafe (reversed)
+ if (strafeDir = 2) then gPlayer1.SetDirection(D_LEFT)
+ else if (strafeDir = 1) then gPlayer1.SetDirection(D_RIGHT);
end
else
begin
if isKeyPressed(KeyOpen, KeyOpen2) then kByte := kByte or NET_KEY_OPEN;
if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then kByte := kByte or NET_KEY_NW;
if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then kByte := kByte or NET_KEY_PW;
+ for I := 0 to High(KeyWeapon) do
+ if isKeyPressed(KeyWeapon[I], KeyWeapon2[I]) then
+ WeaponSelect := WeaponSelect or Word(1 shl I);
end;
// fix movebutton state
P1MoveButton := P1MoveButton or (strafeDir shl 4);
e_Buffer_Write(@NetOut, gTime);
e_Buffer_Write(@NetOut, kByte);
e_Buffer_Write(@NetOut, Byte(gPlayer1.Direction));
+ e_Buffer_Write(@NetOut, WeaponSelect);
+ //e_WriteLog(Format('S:ws=%d', [WeaponSelect]), MSG_WARNING);
g_Net_Client_Send(True, NET_CHAN_PLAYERPOS);
//kBytePrev := kByte;