X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=bffbcebd729077018f5b1ad41ef34148cd80fdc7;hb=3566fbf25b72db352365ab8c71ca440368a3caae;hp=e84d82965bcc48850e4d971a28234fb4adbf7a18;hpb=228d34465e847f7953a4b2a9e6a32c3b5d2316ae;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index e84d829..bffbceb 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -110,6 +110,7 @@ const NET_EV_KILLCOMBO = 17; NET_EV_PLAYER_TOUCH = 18; NET_EV_SECRET = 19; + NET_EV_INTER_READY = 20; NET_VE_STARTED = 1; NET_VE_PASSED = 2; @@ -125,6 +126,7 @@ const NET_CHEAT_SUICIDE = 1; NET_CHEAT_SPECTATE = 2; + NET_CHEAT_READY = 3; NET_MAX_DIFFTIME = 5000 div 36; @@ -511,6 +513,21 @@ begin else Pl.Spectate; end; + NET_CHEAT_READY: + begin + if gState <> STATE_INTERCUSTOM then Exit; + Pl.FReady := not Pl.FReady; + if Pl.FReady then + begin + MH_SEND_GameEvent(NET_EV_INTER_READY, Pl.UID, 'Y'); + Inc(gInterReadyCount); + end + else + begin + MH_SEND_GameEvent(NET_EV_INTER_READY, Pl.UID, 'N'); + Dec(gInterReadyCount); + end; + end; end; end; @@ -1842,6 +1859,11 @@ begin end; end; + NET_EV_INTER_READY: + begin + pl := g_Player_Get(EvNum); + if pl <> nil then pl.FReady := (EvStr = 'Y'); + end; end; end; @@ -2560,7 +2582,7 @@ begin begin gMusic.SetByName(MName); gMusic.Play(True); - gMusic.SetPosition(MPos); + // gMusic.SetPosition(MPos); gMusic.SpecPause := MPaused; end else @@ -2787,6 +2809,7 @@ var Predict: Boolean; strafeDir: Byte; WeaponSelect: Word = 0; + i: Integer; begin if not gGameOn then Exit; if gPlayers = nil then Exit; @@ -2811,13 +2834,17 @@ begin if gPlayerAction[0, ACTION_STRAFE] then begin // new strafe mechanics - if (strafeDir = 0) then strafeDir := P1MoveButton; // start strafing + if (strafeDir = 0) then + strafeDir := P1MoveButton; // start strafing // now set direction according to strafe (reversed) - if (strafeDir = 2) then gPlayer1.SetDirection(TDirection.D_LEFT) - else if (strafeDir = 1) then gPlayer1.SetDirection(TDirection.D_RIGHT); + if (strafeDir = 2) then + gPlayer1.SetDirection(TDirection.D_LEFT) + else if (strafeDir = 1) then + gPlayer1.SetDirection(TDirection.D_RIGHT) end else begin + strafeDir := 0; // not strafing anymore if (P1MoveButton = 2) and gPlayerAction[0, ACTION_MOVELEFT] then gPlayer1.SetDirection(TDirection.D_LEFT) else if (P1MoveButton = 1) and gPlayerAction[0, ACTION_MOVERIGHT] then @@ -2857,10 +2884,16 @@ begin if gPlayerAction[0, ACTION_WEAPNEXT] then kByte := kByte or NET_KEY_NW; if gPlayerAction[0, ACTION_WEAPPREV] then kByte := kByte or NET_KEY_PW; - if gSelectWeapon[0] >= 0 then + gPlayerAction[0, ACTION_WEAPNEXT] := False; // HACK, remove after readyweaon&pendinweapon implementation + gPlayerAction[0, ACTION_WEAPPREV] := False; // HACK, remove after readyweaon&pendinweapon implementation + + for i := WP_FIRST to WP_LAST do begin - WeaponSelect := gSelectWeapon[0]; - //gSelectWeapon[0] := -1 + if gSelectWeapon[0, i] then + begin + WeaponSelect := WeaponSelect or Word(1 shl i); + gSelectWeapon[0, i] := False + end end; // fix movebutton state