X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=5822952a5e8383595a747ebfd831ac19bdc4e06c;hp=7674db9b76dc9cf841172af8daa03b5ae4b466b2;hb=51998d817120cd3833df7bae3d355642fd4abde5;hpb=88999196d89648a7ba4f6367e2a882e0d56bc5b5 diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 7674db9..5822952 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -62,8 +62,11 @@ type Model: String; Color: TRGB; Team: Byte; + // ones below are sent only to the server WeaponSwitch: Byte; WeaponPreferences: Array[WP_FIRST..WP_LAST+1] of Byte; + SwitchToEmpty: Byte; + SkipFist: Byte; end; TMegaWADInfo = record @@ -347,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 @@ -4348,6 +4352,10 @@ begin else begin gPlayer1.Name := gPlayer1Settings.Name; + 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); @@ -4378,6 +4386,10 @@ begin else begin gPlayer2.Name := gPlayer2Settings.Name; + 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); @@ -4493,6 +4505,10 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; nPl := 1; // Ñîçäàíèå âòîðîãî èãðîêà, åñëè åñòü: @@ -4508,6 +4524,10 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; Inc(nPl); end; @@ -4587,6 +4607,10 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; Inc(nPl); end; @@ -4603,6 +4627,10 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + gPlayer2.WeapSwitchMode := gPlayer2Settings.WeaponSwitch; + gPlayer2.setWeaponPrefs(gPlayer2Settings.WeaponPreferences); + gPlayer2.SwitchToEmpty := gPlayer2Settings.SwitchToEmpty; + gPlayer2.SkipFist := gPlayer2Settings.SkipFist; Inc(nPl); end; @@ -4690,6 +4718,10 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; end; if nPlayers >= 2 then @@ -4705,6 +4737,10 @@ begin end; gPlayer2.Name := gPlayer2Settings.Name; + 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); @@ -4883,6 +4919,10 @@ begin end; gPlayer1.Name := gPlayer1Settings.Name; + gPlayer1.WeapSwitchMode := gPlayer1Settings.WeaponSwitch; + gPlayer1.setWeaponPrefs(gPlayer1Settings.WeaponPreferences); + gPlayer1.SwitchToEmpty := gPlayer1Settings.SwitchToEmpty; + gPlayer1.SkipFist := gPlayer1Settings.SkipFist; gPlayer1.UID := NetPlrUID1; gPlayer1.Reset(True); @@ -5662,7 +5702,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 @@ -5678,7 +5718,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 @@ -5694,7 +5734,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 @@ -5710,7 +5750,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 @@ -5768,6 +5808,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 @@ -5929,6 +5975,26 @@ begin if (Length(P) = 2) then gPlayer2Settings.WeaponSwitch := EnsureRange(StrTointDef(P[1], 0), 0, 2); end; + 'p1_switch_empty': + begin + if (Length(P) = 2) then + gPlayer1Settings.SwitchToEmpty := EnsureRange(StrTointDef(P[1], 0), 0, 1); + end; + 'p2_switch_empty': + 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 @@ -6917,6 +6983,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 @@ -7373,7 +7467,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 @@ -7392,12 +7486,20 @@ 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 end end + else if (cmd = 'p1_weapbest') or (cmd = 'p2_weapbest') then + begin + b := ord(cmd[2]) - ord('1'); + if b = 0 then + gSelectWeapon[b, gPlayer1.GetMorePrefered()] := True + else + gSelectWeapon[b, gPlayer2.GetMorePrefered()] := True; + end else if (cmd = 'dropflag') then begin if g_Game_IsServer then @@ -7708,7 +7810,7 @@ begin name := e_CatPath(dir, Filename + '.png'); s := createDiskFile(name); try - e_MakeScreenshot(s, gScreenWidth, gScreenHeight); + e_MakeScreenshot(s, gWinSizeX, gWinSizeX); s.Free; g_Console_Add(Format(_lc[I_CONSOLE_SCREENSHOT], [name])) except