X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=b1a10ea8ba434ccaf0394d86b186678309e2ffaa;hb=54de73776fff070d5c24b38ac996cd02e76fca61;hp=5f7674fad60b3b38dd537cdfe88b24c5e92ede81;hpb=a7ab3742313f79cefd688def25534d692dc7346c;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 5f7674f..b1a10ea 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -66,7 +66,7 @@ type WeaponSwitch: Byte; WeaponPreferences: Array[WP_FIRST..WP_LAST+1] of Byte; SwitchToEmpty: Byte; - SwitchToFist: Byte; + SkipFist: Byte; end; TMegaWADInfo = record @@ -350,6 +350,7 @@ var gWeaponAction: Array [0..1, WP_FACT..WP_LACT] of Boolean; // [player, weapon_action] gSelectWeapon: Array [0..1, WP_FIRST..WP_LAST] of Boolean; // [player, weapon] gInterReadyCount: Integer = 0; + gMaxBots: Integer = 127; g_dbg_ignore_bounds: Boolean = false; r_smallmap_h: Integer = 0; // 0: left; 1: center; 2: right @@ -4354,6 +4355,7 @@ begin gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; g_Console_Add(Format(_lc[I_PLAYER_JOIN], [gPlayer1.Name]), True); if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer1.UID); @@ -4387,6 +4389,7 @@ begin gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; g_Console_Add(Format(_lc[I_PLAYER_JOIN], [gPlayer2.Name]), True); if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer2.UID); @@ -4505,6 +4508,7 @@ begin gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; nPl := 1; // Ñîçäàíèå âòîðîãî èãðîêà, åñëè åñòü: @@ -4523,6 +4527,7 @@ begin gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; Inc(nPl); end; @@ -4605,6 +4610,7 @@ begin gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; Inc(nPl); end; @@ -4624,6 +4630,7 @@ begin gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; Inc(nPl); end; @@ -4714,6 +4721,7 @@ begin gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; end; if nPlayers >= 2 then @@ -4732,6 +4740,7 @@ begin gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; end; g_Game_SetLoadingText(_lc[I_LOAD_HOST], 0, False); @@ -4845,12 +4854,6 @@ begin begin if (NetEvent.kind = ENET_EVENT_TYPE_RECEIVE) then begin - if (NetEvent.channelID = NET_CHAN_DOWNLOAD_EX) then - begin - // ignore all download packets, they're processed by separate code - enet_packet_destroy(NetEvent.packet); - continue; - end; Ptr := NetEvent.packet^.data; if not InMsg.Init(Ptr, NetEvent.packet^.dataLength, True) then begin @@ -4913,6 +4916,7 @@ begin gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; gPlayer1.UID := NetPlrUID1; gPlayer1.Reset(True); @@ -4949,8 +4953,7 @@ begin end; end; - ProcessLoading(true); - + ProcessLoading(True); if g_Net_UserRequestExit() then begin State := 0; @@ -5153,6 +5156,11 @@ begin if NetMode = NET_SERVER then begin + // reset full state flags + if NetClients <> nil then + for I := 0 to High(NetClients) do + NetClients[I].FullUpdateSent := False; + MH_SEND_GameEvent(NET_EV_MAPSTART, gGameSettings.GameMode, Map); // Ìàñòåðñåðâåð @@ -5692,7 +5700,7 @@ begin begin if Length(p) = 2 then begin - a := Max(0, StrToInt(p[1])); + a := Max(0, StrToIntDef(p[1], 0)); g_GFX_SetMax(a) end else if Length(p) = 1 then @@ -5708,7 +5716,7 @@ begin begin if Length(p) = 2 then begin - a := Max(0, StrToInt(p[1])); + a := Max(0, StrToIntDef(p[1], 0)); g_Shells_SetMax(a) end else if Length(p) = 1 then @@ -5724,7 +5732,7 @@ begin begin if Length(p) = 2 then begin - a := Max(0, StrToInt(p[1])); + a := Max(0, StrToIntDef(p[1], 0)); g_Gibs_SetMax(a) end else if Length(p) = 1 then @@ -5740,7 +5748,7 @@ begin begin if Length(p) = 2 then begin - a := Max(0, StrToInt(p[1])); + a := Max(0, StrToIntDef(p[1], 0)); g_Corpses_SetMax(a) end else if Length(p) = 1 then @@ -5798,6 +5806,12 @@ begin (gsTimeLimit div 60) mod 60, gsTimeLimit mod 60])); end + else if cmd = 'g_max_bots' then + begin + if Length(P) > 1 then + gMaxBots := nclamp(StrToIntDef(P[1], gMaxBots), 0, 127); + g_Console_Add('g_max_bots = ' + IntToStr(gMaxBots)); + end else if cmd = 'g_maxlives' then begin if Length(P) > 1 then @@ -5969,6 +5983,16 @@ begin if (Length(P) = 2) then gPlayer2Settings.SwitchToEmpty := EnsureRange(StrTointDef(P[1], 0), 0, 1); end; + 'p1_skip_fist': + begin + if (Length(P) = 2) then + gPlayer1Settings.SkipFist := EnsureRange(StrTointDef(P[1], 0), 0, 1); + end; + 'p2_skip_fist': + begin + if (Length(P) = 2) then + gPlayer2Settings.SkipFist := EnsureRange(StrTointDef(P[1], 0), 0, 1); + end; 'p1_priority_kastet': begin if (Length(P) = 2) then @@ -6957,6 +6981,34 @@ begin end else g_Console_Add(_lc[I_MSG_GM_UNAVAIL]); end + else if (cmd = 'an') or (cmd = 'announce') then + begin + if g_Game_IsNet then + begin + if Length(P) > 1 then + begin + for a := 1 to High(P) do + chstr := chstr + P[a] + ' '; + + if Length(chstr) > 200 then SetLength(chstr, 200); + + if Length(chstr) < 1 then + begin + g_Console_Add('announce '); + Exit; + end; + + chstr := 'centerprint 100 ' + b_Text_Format(chstr); + if g_Game_IsClient then + MC_SEND_RCONCommand(chstr) + else + g_Console_Process(chstr, True); + end + else + g_Console_Add('announce '); + end else + g_Console_Add(_lc[I_MSG_GM_UNAVAIL]); + end else if cmd = 'game' then begin if gGameSettings.GameType <> GT_NONE then @@ -7413,7 +7465,7 @@ begin begin if Length(p) = 2 then begin - a := WP_FIRST + StrToInt(p[1]) - 1; + a := WP_FIRST + StrToIntDef(p[1], 0) - 1; if (a >= WP_FIRST) and (a <= WP_LAST) then gSelectWeapon[0, a] := True end @@ -7432,7 +7484,7 @@ begin begin if Length(p) = 2 then begin - a := WP_FIRST + StrToInt(p[1]) - 1; + a := WP_FIRST + StrToIntDef(p[1], 0) - 1; b := ord(cmd[2]) - ord('1'); if (a >= WP_FIRST) and (a <= WP_LAST) then gSelectWeapon[b, a] := True @@ -7756,7 +7808,7 @@ begin name := e_CatPath(dir, Filename + '.png'); s := createDiskFile(name); try - e_MakeScreenshot(s, gScreenWidth, gScreenHeight); + e_MakeScreenshot(s, gWinSizeX, gWinSizeY); s.Free; g_Console_Add(Format(_lc[I_CONSOLE_SCREENSHOT], [name])) except @@ -8249,8 +8301,7 @@ begin end; g_ActiveWindow := nil; - - ProcessLoading(true); + ProcessLoading(True); end; procedure g_Game_StepLoading(Value: Integer = -1); @@ -8264,10 +8315,11 @@ begin end else CurValue := Value; + if (ShowCount > LOADING_SHOW_STEP) or (Value > -1) then begin ShowCount := 0; - ProcessLoading(); + ProcessLoading(False); end; end; end;