diff --git a/src/game/g_options.pas b/src/game/g_options.pas
index 493e07cb48c9475bd4043c04ddbc253a1756cf3b..979fe4510cd9d9144e8e3faff46a47a44cc6fe41 100644 (file)
--- a/src/game/g_options.pas
+++ b/src/game/g_options.pas
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
uses
g_language, g_weapons;
-type
- TPlayerControl = record
- KeyRight: Word;
- KeyLeft: Word;
- KeyUp: Word;
- KeyDown: Word;
- KeyFire: Word;
- KeyJump: Word;
- KeyNextWeapon: Word;
- KeyPrevWeapon: Word;
- KeyOpen: Word;
- KeyStrafe: Word;
- KeyWeapon: array [WP_FIRST..WP_LAST] of Word;
-
- KeyRight2: Word;
- KeyLeft2: Word;
- KeyUp2: Word;
- KeyDown2: Word;
- KeyFire2: Word;
- KeyJump2: Word;
- KeyNextWeapon2: Word;
- KeyPrevWeapon2: Word;
- KeyOpen2: Word;
- KeyStrafe2: Word;
- KeyWeapon2: array [WP_FIRST..WP_LAST] of Word;
- end;
-
- TGameControls = record
- TakeScreenshot: Word;
- Stat: Word;
- Chat: Word;
- TeamChat: Word;
- end;
-
- TControls = record
- GameControls: TGameControls;
- P1Control: TPlayerControl;
- P2Control: TPlayerControl;
- end;
+function GenPlayerName (n: Integer): String;
procedure g_Options_SetDefault();
procedure g_Options_Read(FileName: String);
const DF_Default_Megawad_Start = 'megawads/DOOM2D.WAD:\MAP01';
var
- gGameControls: TControls;
+// gGameControls: TControls;
gScreenWidth: Word;
gScreenHeight: Word;
gWinRealPosX: Integer;
uses
{$INCLUDE ../nogl/noGLuses.inc}
- e_log, e_input, g_window, g_sound, g_gfx, g_player, Math,
+ e_log, e_input, g_console, g_window, g_sound, g_gfx, g_player, Math,
g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_texture,
- g_items, wadreader, e_graphics, g_touch, SDL2;
+ g_items, wadreader, e_graphics, g_touch, SDL2, envvars;
+
+ var
+ machine: Integer;
+
+ function GenPlayerName (n: Integer): String;
+ begin
+ ASSERT(n >= 1);
+ Result := GetUserName;
+ if Result = '' then
+ Result := 'Player' + IntToStr(machine MOD 10000);
+ if n = 1 then
+ Result := Copy(Result, 1, 12) + ' '
+ else
+ Result := Copy(Result, 1, 10) + ' ' + IntToStr(n)
+ end;
procedure g_Options_SetDefaultVideo;
-{$IF DEFINED(ANDROID)}
var
- display: TSDL_DisplayMode;
-{$ENDIF}
+ target, closest, display: TSDL_DisplayMode;
+ percentage: Integer;
begin
+ (* Display 0 = Primary display *)
+ SDL_GetDesktopDisplayMode(0, @display);
{$IF DEFINED(ANDROID)}
- (* On android set max screen size *)
- SDL_GetCurrentDisplayMode(0, @display);
gScreenWidth := display.w;
gScreenHeight := display.h;
- gWinRealPosX := 0;
- gWinRealPosY := 0;
- gWinMaximized := False;
- gFullScreen := False; (* if True then rotation not allowed *)
+ //gBPP := SDL_BITSPERPIXEL(dispaly.format);
gBPP := 32;
- gVSync := True;
- gTextureFilter := True;
- glLegacyNPOT := False;
+ gFullScreen := True; (* rotation not allowed? *)
{$ELSE}
- (* On other systems use default 800x600 *)
- gScreenWidth := 800;
- gScreenHeight := 600;
- gWinRealPosX := 0;
- gWinRealPosY := 0;
- gWinMaximized := False;
- gFullScreen := False;
+ (* Window must be smaller than display *)
+ closest.w := display.w;
+ closest.h := display.h;
+ percentage := 75;
+ while (display.w - closest.w < 48) or (display.h - closest.h < 48) do
+ begin
+ if percentage < 25 then
+ begin
+ closest.w := display.w * 75 div 100;
+ closest.h := display.h * 75 div 100;
+ break;
+ end;
+ target.w := display.w * percentage div 100;
+ target.h := display.h * percentage div 100;
+ target.format := 0; (* didn't care *)
+ target.refresh_rate := 0; (* didn't care *)
+ target.driverdata := nil; (* init *)
+ SDL_GetClosestDisplayMode(0, @target, @closest);
+ Dec(percentage);
+ end;
+ gScreenWidth := closest.w;
+ gScreenHeight := closest.h;
+ //gBPP := SDL_BITSPERPIXEL(closest.format); (* Resolution list didn't work for some reason *)
gBPP := 32;
- gVSync := True;
- gTextureFilter := True;
- glLegacyNPOT := False;
+ gFullScreen := False;
{$ENDIF}
+ (* Must be positioned on primary display *)
+ gWinRealPosX := SDL_WINDOWPOS_CENTERED;
+ gWinRealPosY := SDL_WINDOWPOS_CENTERED;
+ gWinMaximized := False;
+ gVSync := True;
+ gTextureFilter := True;
+ glLegacyNPOT := False;
e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gScreenWidth) + ' h = ' + IntToStr(gScreenHeight));
+ g_Console_ResetBinds;
end;
procedure g_Options_SetDefault();
g_Sound_SetupAllVolumes(gSoundLevel, gMusicLevel);
- (* section GameControls *)
- with gGameControls.GameControls do
- begin
- TakeScreenshot := SDL_SCANCODE_F12;
- Stat := SDL_SCANCODE_TAB;
- Chat := SDL_SCANCODE_T;
- TeamChat := SDL_SCANCODE_Y;
- end;
-
- (* section Player1 *)
- with gGameControls.P1Control do
- begin
- KeyRight := SDL_SCANCODE_KP_6;
- KeyLeft := SDL_SCANCODE_KP_4;
- KeyUp := SDL_SCANCODE_KP_8;
- KeyDown := SDL_SCANCODE_KP_5;
- KeyFire := SDL_SCANCODE_SLASH;
- KeyJump := SDL_SCANCODE_RCTRL;
- KeyNextWeapon := SDL_SCANCODE_KP_9;
- KeyPrevWeapon := SDL_SCANCODE_KP_7;
- KeyOpen := SDL_SCANCODE_RSHIFT;
- KeyStrafe := SDL_SCANCODE_PERIOD;
-
- for i := 0 to 9 do
- begin
- KeyWeapon[i] := SDL_SCANCODE_1 + i (* 1, ..., 9, 0 *)
- end;
- KeyWeapon[10] := SDL_SCANCODE_MINUS;
- for i := 11 to High(KeyWeapon) do
- begin
- KeyWeapon[i] := 0
- end;
-
- KeyRight2 := VK_RIGHT;
- KeyLeft2 := VK_LEFT;
- KeyUp2 := VK_UP;
- KeyDown2 := VK_DOWN;
- KeyFire2 := VK_FIRE;
- KeyJump2 := VK_JUMP;
- KeyNextWeapon2 := VK_NEXT;
- KeyPrevWeapon2 := VK_PREV;
- KeyOpen2 := VK_OPEN;
- KeyStrafe2 := VK_STRAFE;
-
- for i := 0 to High(KeyWeapon2) do
- begin
- KeyWeapon2[i] := VK_0 + i
- end;
- end;
-
with gPlayer1Settings do
begin
- Name := 'Player1';
+ Name := GenPlayerName(1);
Model := STD_PLAYER_MODEL;
Color.R := PLAYER1_DEF_COLOR.R;
Color.G := PLAYER1_DEF_COLOR.G;
Team := TEAM_RED;
end;
- (* section Player2 *)
- with gGameControls.P2Control do
- begin
- KeyRight := SDL_SCANCODE_D;
- KeyLeft := SDL_SCANCODE_A;
- KeyUp := SDL_SCANCODE_W;
- KeyDown := SDL_SCANCODE_S;
- KeyFire := SDL_SCANCODE_G;
- KeyJump := SDL_SCANCODE_SPACE;
- KeyNextWeapon := SDL_SCANCODE_E;
- KeyPrevWeapon := SDL_SCANCODE_Q;
- KeyOpen := SDL_SCANCODE_F;
- KeyStrafe := SDL_SCANCODE_LSHIFT;
- for i := 0 to High(KeyWeapon) do
- begin
- KeyWeapon[i] := 0
- end;
-
- KeyRight2 := 0;
- KeyLeft2 := 0;
- KeyUp2 := 0;
- KeyDown2 := 0;
- KeyFire2 := 0;
- KeyJump2 := 0;
- KeyNextWeapon2 := 0;
- KeyPrevWeapon2 := 0;
- KeyOpen2 := 0;
- KeyStrafe2 := 0;
-
- for i := 0 to High(KeyWeapon2) do
- begin
- KeyWeapon2[i] := 0;
- end
- end;
-
with gPlayer2Settings do
begin
- Name := 'Player2';
+ Name := GenPlayerName(2);
Model := STD_PLAYER_MODEL;
Color.R := PLAYER2_DEF_COLOR.R;
Color.G := PLAYER2_DEF_COLOR.G;
e_JoystickDeadzones[i] := 8192
end;
- (* section Touch *)
- g_touch_size := 1.0;
- g_touch_fire := True;
- g_touch_offset := 50;
- g_touch_alt := False;
-
(* section Game *)
g_GFX_SetMax(2000);
g_Shells_SetMax(300);
ReadInteger(gsSDLSampleRate, 'SDLSampleRate', 11025, 96000);
ReadInteger(gsSDLBufferSize, 'SDLBufferSize', 64, 16384);
- section := 'GameControls';
- with gGameControls.GameControls do
- begin
- ReadInteger(TakeScreenshot, 'TakeScreenshot');
- ReadInteger(Stat, 'Stat');
- ReadInteger(Chat, 'Chat');
- ReadInteger(TeamChat, 'TeamChat');
- end;
-
- section := 'Player1';
- with gGameControls.P1Control do
- begin
- ReadInteger(KeyRight, 'KeyRight');
- ReadInteger(KeyLeft, 'KeyLeft');
- ReadInteger(KeyUp, 'KeyUp');
- ReadInteger(KeyDown, 'KeyDown');
- ReadInteger(KeyFire, 'KeyFire');
- ReadInteger(KeyJump, 'KeyJump');
- ReadInteger(KeyNextWeapon, 'KeyNextWeapon');
- ReadInteger(KeyPrevWeapon, 'KeyPrevWeapon');
- ReadInteger(KeyOpen, 'KeyOpen');
- ReadInteger(KeyStrafe, 'KeyStrafe');
-
- for i := 0 to High(KeyWeapon) do
- begin
- ReadInteger(KeyWeapon[i], 'KeyWeapon' + IntToStr(i))
- end;
-
- ReadInteger(KeyRight2, 'KeyRight2');
- ReadInteger(KeyLeft2, 'KeyLeft2');
- ReadInteger(KeyUp2, 'KeyUp2');
- ReadInteger(KeyDown2, 'KeyDown2');
- ReadInteger(KeyFire2, 'KeyFire2');
- ReadInteger(KeyJump2, 'KeyJump2');
- ReadInteger(KeyNextWeapon2, 'KeyNextWeapon2');
- ReadInteger(KeyPrevWeapon2, 'KeyPrevWeapon2');
- ReadInteger(KeyOpen2, 'KeyOpen2');
- ReadInteger(KeyStrafe2, 'KeyStrafe2');
-
- for i := 0 to High(KeyWeapon2) do
- begin
- ReadInteger(KeyWeapon2[i], 'KeyWeapon2' + IntToStr(i))
- end;
- end;
-
section := 'Player1';
with gPlayer1Settings do
begin
Team := TEAM_RED;
end;
- section := 'Player2';
- with gGameControls.P2Control do
- begin
- ReadInteger(KeyRight, 'KeyRight');
- ReadInteger(KeyLeft, 'KeyLeft');
- ReadInteger(KeyUp, 'KeyUp');
- ReadInteger(KeyDown, 'KeyDown');
- ReadInteger(KeyFire, 'KeyFire');
- ReadInteger(KeyJump, 'KeyJump');
- ReadInteger(KeyNextWeapon, 'KeyNextWeapon');
- ReadInteger(KeyPrevWeapon, 'KeyPrevWeapon');
- ReadInteger(KeyOpen, 'KeyOpen');
- ReadInteger(KeyStrafe, 'KeyStrafe');
-
- for i := 0 to High(KeyWeapon) do
- begin
- ReadInteger(KeyWeapon[i], 'KeyWeapon' + IntToStr(i))
- end;
-
- ReadInteger(KeyRight2, 'KeyRight2');
- ReadInteger(KeyLeft2, 'KeyLeft2');
- ReadInteger(KeyUp2, 'KeyUp2');
- ReadInteger(KeyDown2, 'KeyDown2');
- ReadInteger(KeyFire2, 'KeyFire2');
- ReadInteger(KeyJump2, 'KeyJump2');
- ReadInteger(KeyNextWeapon2, 'KeyNextWeapon2');
- ReadInteger(KeyPrevWeapon2, 'KeyPrevWeapon2');
- ReadInteger(KeyOpen2, 'KeyOpen2');
- ReadInteger(KeyStrafe2, 'KeyStrafe2');
-
- for i := 0 to High(KeyWeapon2) do
- begin
- ReadInteger(KeyWeapon2[i], 'KeyWeapon2' + IntToStr(i))
- end;
- end;
-
section := 'Player2';
with gPlayer2Settings do
begin
ReadInteger(e_JoystickDeadzones[i], 'Deadzone' + IntToStr(i))
end;
- section := 'Touch';
- i := Trunc(g_touch_size * 10); ReadInteger(i, 'Size', 0); g_touch_size := i / 10;
- ReadBoolean(g_touch_fire, 'Fire');
- i := Round(g_touch_offset); ReadInteger(i, 'Offset', 0, 100); g_touch_offset := i;
- ReadBoolean(g_touch_alt, 'Alt');
-
section := 'Game';
- ReadInteger(i, 'MaxParticles', 1000, 50000); g_GFX_SetMax(i);
- ReadInteger(i, 'MaxShells', 300, 600); g_Shells_SetMax(i);
- ReadInteger(i, 'MaxGibs', 150, 500); g_Gibs_SetMax(i);
- ReadInteger(i, 'MaxCorpses', 20, 100); g_Corpses_SetMax(i);
+ ReadInteger(i, 'MaxParticles', 0, 50000); g_GFX_SetMax(i);
+ ReadInteger(i, 'MaxShells', 0, 600); g_Shells_SetMax(i);
+ ReadInteger(i, 'MaxGibs', 0, 500); g_Gibs_SetMax(i);
+ ReadInteger(i, 'MaxCorpses', 0, 100); g_Corpses_SetMax(i);
ReadInteger(i, 'GibsCount');
case i of
0: gGibsCount := 0;
config.WriteInt('Sound', 'SDLSampleRate', gsSDLSampleRate);
config.WriteInt('Sound', 'SDLBufferSize', gsSDLBufferSize);
- with config, gGameControls.GameControls do
- begin
- WriteInt('GameControls', 'TakeScreenshot', TakeScreenshot);
- WriteInt('GameControls', 'Stat', Stat);
- WriteInt('GameControls', 'Chat', Chat);
- WriteInt('GameControls', 'TeamChat', TeamChat);
- end;
-
- with config, gGameControls.P1Control, gPlayer1Settings do
+ with config, gPlayer1Settings do
begin
- WriteInt('Player1', 'KeyRight', KeyRight);
- WriteInt('Player1', 'KeyLeft', KeyLeft);
- WriteInt('Player1', 'KeyUp', KeyUp);
- WriteInt('Player1', 'KeyDown', KeyDown);
- WriteInt('Player1', 'KeyFire', KeyFire);
- WriteInt('Player1', 'KeyJump', KeyJump);
- WriteInt('Player1', 'KeyNextWeapon', KeyNextWeapon);
- WriteInt('Player1', 'KeyPrevWeapon', KeyPrevWeapon);
- WriteInt('Player1', 'KeyOpen', KeyOpen);
- WriteInt('Player1', 'KeyStrafe', KeyStrafe);
- for i := 0 to High(KeyWeapon) do
- WriteInt('Player1', 'KeyWeapon' + IntToStr(i), KeyWeapon[i]);
-
- WriteInt('Player1', 'KeyRight2', KeyRight2);
- WriteInt('Player1', 'KeyLeft2', KeyLeft2);
- WriteInt('Player1', 'KeyUp2', KeyUp2);
- WriteInt('Player1', 'KeyDown2', KeyDown2);
- WriteInt('Player1', 'KeyFire2', KeyFire2);
- WriteInt('Player1', 'KeyJump2', KeyJump2);
- WriteInt('Player1', 'KeyNextWeapon2', KeyNextWeapon2);
- WriteInt('Player1', 'KeyPrevWeapon2', KeyPrevWeapon2);
- WriteInt('Player1', 'KeyOpen2', KeyOpen2);
- WriteInt('Player1', 'KeyStrafe2', KeyStrafe2);
- for i := 0 to High(KeyWeapon2) do
- WriteInt('Player1', 'KeyWeapon2' + IntToStr(i), KeyWeapon2[i]);
-
WriteStr('Player1', 'Name', Name);
WriteStr('Player1', 'model', Model);
WriteInt('Player1', 'red', Color.R);
WriteInt('Player1', 'team', Team);
end;
- with config, gGameControls.P2Control, gPlayer2Settings do
+ with config, gPlayer2Settings do
begin
- WriteInt('Player2', 'KeyRight', KeyRight);
- WriteInt('Player2', 'KeyLeft', KeyLeft);
- WriteInt('Player2', 'KeyUp', KeyUp);
- WriteInt('Player2', 'KeyDown', KeyDown);
- WriteInt('Player2', 'KeyFire', KeyFire);
- WriteInt('Player2', 'KeyJump', KeyJump);
- WriteInt('Player2', 'KeyNextWeapon', KeyNextWeapon);
- WriteInt('Player2', 'KeyPrevWeapon', KeyPrevWeapon);
- WriteInt('Player2', 'KeyOpen', KeyOpen);
- WriteInt('Player2', 'KeyStrafe', KeyStrafe);
- for i := 0 to High(KeyWeapon) do
- WriteInt('Player2', 'KeyWeapon' + IntToStr(i), KeyWeapon[i]);
-
- WriteInt('Player2', 'KeyRight2', KeyRight2);
- WriteInt('Player2', 'KeyLeft2', KeyLeft2);
- WriteInt('Player2', 'KeyUp2', KeyUp2);
- WriteInt('Player2', 'KeyDown2', KeyDown2);
- WriteInt('Player2', 'KeyFire2', KeyFire2);
- WriteInt('Player2', 'KeyJump2', KeyJump2);
- WriteInt('Player2', 'KeyNextWeapon2', KeyNextWeapon2);
- WriteInt('Player2', 'KeyPrevWeapon2', KeyPrevWeapon2);
- WriteInt('Player2', 'KeyOpen2', KeyOpen2);
- WriteInt('Player2', 'KeyStrafe2', KeyStrafe2);
- for i := 0 to High(KeyWeapon2) do
- WriteInt('Player2', 'KeyWeapon2' + IntToStr(i), KeyWeapon2[i]);
-
WriteStr('Player2', 'Name', Name);
WriteStr('Player2', 'model', Model);
WriteInt('Player2', 'red', Color.R);
for i := 0 to e_MaxJoys-1 do
config.WriteInt('Joysticks', 'Deadzone' + IntToStr(i), e_JoystickDeadzones[i]);
- config.WriteInt('Touch', 'Size', Round(g_touch_size * 10));
- config.WriteBool('Touch', 'Fire', g_touch_fire);
- config.WriteInt('Touch', 'Offset', Round(g_touch_offset));
- config.WriteBool('Touch', 'Alt', g_touch_alt);
-
with config do
case gGibsCount of
0: config.WriteInt('Game', 'GibsCount', 0);
config.WriteBool('Video', 'Fullscreen', gFullscreen);
config.WriteBool('Video', 'Maximized', gWinMaximized);
+ config.WriteStr('Player1', 'Name', gPlayer1Settings.Name);
+ config.WriteStr('Player2', 'Name', gPlayer2Settings.Name);
+
config.SaveFile(FileName);
config.Free();
end;
config.Free();
end;
+initialization
+ Randomize;
+ machine := Random(10000)
end.