From 935ed9a1e12d78a0c4ef4a9e9f9bf858fd2c2b56 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Sun, 31 Mar 2019 01:09:14 +0300 Subject: [PATCH] added bind command + autoexec.cfg + dfconfig.cfg --- src/game/g_console.pas | 268 ++++++++++++++++++++++++++++++++++------- src/game/g_game.pas | 95 ++++++++++++++- src/game/g_window.pas | 6 +- 3 files changed, 321 insertions(+), 48 deletions(-) diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 7b68cce..ecc6677 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -21,6 +21,35 @@ interface uses utils; // for SSArray + const + ACTION_MOVEUP = 1; + ACTION_MOVEDOWN = 2; + ACTION_MOVELEFT = 3; + ACTION_MOVERIGHT = 4; + ACTION_SPEED = 5; + ACTION_SCORES = 6; + ACTION_LOOKDOWN = 7; + ACTION_LOOKUP = 8; + ACTION_ATTACK = 9; + ACTION_ACTIVATE = 10; + ACTION_STRAFE = 11; + ACTION_WEAPNEXT = 12; + ACTION_WEAPPREV = 13; + ACTION_WEAP1 = 14; + ACTION_WEAP2 = 15; + ACTION_WEAP3 = 16; + ACTION_WEAP4 = 17; + ACTION_WEAP5 = 18; + ACTION_WEAP6 = 19; + ACTION_WEAP7 = 20; + ACTION_WEAP8 = 21; + ACTION_WEAP9 = 22; + ACTION_WEAP10 = 23; + ACTION_WEAP11 = 24; + + LAST_ACTION = ACTION_WEAP11; + MAX_ACTION_WEAP = ACTION_WEAP11 - ACTION_WEAP1 + 1; + procedure g_Console_Init (); procedure g_Console_Update (); procedure g_Console_Draw (); @@ -31,6 +60,9 @@ procedure g_Console_Process (L: AnsiString; quiet: Boolean=false); procedure g_Console_Add (L: AnsiString; show: Boolean=false); procedure g_Console_Clear (); function g_Console_CommandBlacklisted (C: AnsiString): Boolean; +procedure g_Console_ReadConfig (filename: String); + +procedure g_Console_ProcessBind (key: Integer; down: Boolean); procedure conwriteln (const s: AnsiString; show: Boolean=false); procedure conwritefln (const s: AnsiString; args: array of const; show: Boolean=false); @@ -55,7 +87,7 @@ var gAllowConsoleMessages: Boolean = true; gChatEnter: Boolean = true; gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó - + gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action] implementation @@ -115,6 +147,10 @@ var Msg: AnsiString; Time: Word; end; + gInputBinds: Array [0..e_MaxInputKeys - 1] of record + cmd: AnsiString + end; + bindDown, bindProcess: Boolean; // poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks @@ -375,7 +411,7 @@ procedure ConsoleCommands(p: SSArray); var cmd, s: AnsiString; a, b: Integer; - F: TextFile; + (* F: TextFile; *) begin cmd := LowerCase(p[0]); s := ''; @@ -477,48 +513,10 @@ begin if cmd = 'exec' then begin // exec - if Length(p) > 1 then + if Length(p) = 2 then begin - s := GameDir+'/'+p[1]; - - {$I-} - AssignFile(F, s); - Reset(F); - if IOResult <> 0 then - begin - g_Console_Add(Format(_lc[I_CONSOLE_ERROR_READ], [s])); - CloseFile(F); - Exit; - end; - g_Console_Add(Format(_lc[I_CONSOLE_EXEC], [s])); - - while not EOF(F) do - begin - ReadLn(F, s); - if IOResult <> 0 then - begin - g_Console_Add(Format(_lc[I_CONSOLE_ERROR_READ], [s])); - CloseFile(F); - Exit; - end; - if Pos('#', s) <> 1 then // script comment - begin - // prevents endless loops - Inc(RecursionDepth); - RecursionLimitHit := (RecursionDepth > MaxScriptRecursion) or RecursionLimitHit; - if not RecursionLimitHit then - g_Console_Process(s, True); - Dec(RecursionDepth); - end; - end; - if (RecursionDepth = 0) and RecursionLimitHit then - begin - g_Console_Add(Format(_lc[I_CONSOLE_ERROR_CALL], [s])); - RecursionLimitHit := False; - end; - - CloseFile(F); - {$I+} + s := GameDir + '/' + p[1]; + g_Console_ReadConfig(s); end else g_Console_Add('exec