X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=e5cd723488af9bec0802f13af252346ec73b9e6a;hb=c98b33270a7b8f65385b754ff17f5f2338fa39e2;hp=58b008f1d0edd09769d4a06c69d8c27d49c0a39e;hpb=3349a0b38bc1fae71b758cb1686d4f6d0bf4f926;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 58b008f..e5cd723 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -2770,10 +2770,18 @@ begin g_Net_Client_Send(True, NET_CHAN_CHAT); end; +function isKeyPressed (key1: Word; key2: Word): Boolean; +begin + if (key1 <> 0) and e_KeyPressed(key1) then begin result := true; exit; end; + if (key2 <> 0) and e_KeyPressed(key2) then begin result := true; exit; end; + result := false; +end; + procedure MC_SEND_PlayerPos(); var kByte: Word; Predict: Boolean; + strafeDir: Byte; begin if not gGameOn then Exit; if gPlayers = nil then Exit; @@ -2783,25 +2791,31 @@ begin Predict := NetPredictSelf; // and (not NetGotKeys); if (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then + begin + strafeDir := P1MoveButton shr 4; + P1MoveButton := P1MoveButton and $0F; with gGameControls.P1Control do begin - if e_KeyPressed(KeyLeft) and (not e_KeyPressed(KeyRight)) then - P1MoveButton := 1 - else - if (not e_KeyPressed(KeyLeft)) and e_KeyPressed(KeyRight) then - P1MoveButton := 2 - else - if (not e_KeyPressed(KeyLeft)) and (not e_KeyPressed(KeyRight)) then - P1MoveButton := 0; + if isKeyPressed(KeyLeft, KeyLeft2) and (not isKeyPressed(KeyRight, KeyRight2)) then P1MoveButton := 1 + else if (not isKeyPressed(KeyLeft, KeyLeft2)) and isKeyPressed(KeyRight, KeyRight2) then P1MoveButton := 2 + else if (not isKeyPressed(KeyLeft, KeyLeft2)) and (not isKeyPressed(KeyRight, KeyRight2)) then P1MoveButton := 0; - if (P1MoveButton = 2) and e_KeyPressed(KeyLeft) then - gPlayer1.SetDirection(D_LEFT) + // strafing + if isKeyPressed(KeyStrafe, KeyStrafe2) then + 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 if P1MoveButton <> 0 then gPlayer1.SetDirection(TDirection(P1MoveButton-1)); + end else - if (P1MoveButton = 1) and e_KeyPressed(KeyRight) then - gPlayer1.SetDirection(D_RIGHT) - else - if P1MoveButton <> 0 then - gPlayer1.SetDirection(TDirection(P1MoveButton-1)); + begin + if (P1MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then gPlayer1.SetDirection(D_LEFT) + else if (P1MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then gPlayer1.SetDirection(D_RIGHT) + else if P1MoveButton <> 0 then gPlayer1.SetDirection(TDirection(P1MoveButton-1)); + end; gPlayer1.ReleaseKeys; if P1MoveButton = 1 then @@ -2814,26 +2828,29 @@ begin kByte := kByte or NET_KEY_RIGHT; if Predict then gPlayer1.PressKey(KEY_RIGHT, 10000); end; - if e_KeyPressed(KeyUp) then + if isKeyPressed(KeyUp, KeyUp2) then begin kByte := kByte or NET_KEY_UP; gPlayer1.PressKey(KEY_UP, 10000); end; - if e_KeyPressed(KeyDown) then + if isKeyPressed(KeyDown, KeyDown2) then begin kByte := kByte or NET_KEY_DOWN; gPlayer1.PressKey(KEY_DOWN, 10000); end; - if e_KeyPressed(KeyJump) then + if isKeyPressed(KeyJump, KeyJump2) then begin kByte := kByte or NET_KEY_JUMP; // gPlayer1.PressKey(KEY_JUMP, 10000); // TODO: Make a prediction option end; - if e_KeyPressed(KeyFire) then kByte := kByte or NET_KEY_FIRE; - if e_KeyPressed(KeyOpen) then kByte := kByte or NET_KEY_OPEN; - if e_KeyPressed(KeyNextWeapon) then kByte := kByte or NET_KEY_NW; - if e_KeyPressed(KeyPrevWeapon) then kByte := kByte or NET_KEY_PW; - end + if isKeyPressed(KeyFire, KeyFire2) then kByte := kByte or NET_KEY_FIRE; + 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; + end; + // fix movebutton state + P1MoveButton := P1MoveButton or (strafeDir shl 4); + end else kByte := NET_KEY_CHAT;