DEADSOFTWARE

renamed `SArray` type to `SSArray`, and moved it to "utils.pas"
[d2df-sdl.git] / src / game / g_console.pas
index b62a7e186c920d98b873e8c6eaebcd6f26d0292c..9e6f4d5de4776bd505e2499b4a384cfff3a6862a 100644 (file)
@@ -19,7 +19,7 @@ unit g_console;
 interface
 
 uses
-  wadreader; // for SArray
+  utils; // for SSArray
 
 procedure g_Console_Init ();
 procedure g_Console_Update ();
@@ -36,12 +36,12 @@ procedure conwriteln (const s: AnsiString; show: Boolean=false);
 procedure conwritefln (const s: AnsiString; args: array of const; show: Boolean=false);
 
 // <0: no arg; 0/1: true/false
-function conGetBoolArg (p: SArray; idx: Integer): Integer;
+function conGetBoolArg (p: SSArray; idx: Integer): Integer;
 
 procedure g_Console_Chat_Switch (team: Boolean=false);
 
-procedure conRegVar (const conname: AnsiString; pvar: PBoolean; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false); overload;
-procedure conRegVar (const conname: AnsiString; pvar: PSingle; amin, amax: Single; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false); overload;
+procedure conRegVar (const conname: AnsiString; pvar: PBoolean; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload;
+procedure conRegVar (const conname: AnsiString; pvar: PSingle; amin, amax: Single; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload;
 
 // poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks
 function conParseFloat (var res: Single; const s: AnsiString): Boolean;
@@ -61,14 +61,14 @@ implementation
 uses
   g_textures, g_main, e_graphics, e_input, g_game,
   SysUtils, g_basic, g_options, Math,
-  g_menu, g_language, g_net, g_netmsg, e_log, conbuf, utils;
+  g_menu, g_language, g_net, g_netmsg, e_log, conbuf;
 
 
 type
   PCommand = ^TCommand;
 
-  TCmdProc = procedure (p: SArray);
-  TCmdProcEx = procedure (me: PCommand; p: SArray);
+  TCmdProc = procedure (p: SSArray);
+  TCmdProcEx = procedure (me: PCommand; p: SSArray);
 
   TCommand = record
     cmd: AnsiString;
@@ -83,7 +83,7 @@ type
 
   TAlias = record
     name: AnsiString;
-    commands: SArray;
+    commands: SSArray;
   end;
 
 
@@ -103,9 +103,9 @@ var
   Cons_Shown: Boolean; // Ðèñîâàòü ëè êîíñîëü?
   Line: AnsiString;
   CPos: Word;
-  //ConsoleHistory: SArray;
-  CommandHistory: SArray;
-  Whitelist: SArray;
+  //ConsoleHistory: SSArray;
+  CommandHistory: SSArray;
+  Whitelist: SSArray;
   commands: Array of TCommand = nil;
   Aliases: Array of TAlias = nil;
   CmdIndex: Word;
@@ -157,7 +157,7 @@ end;
 
 // ////////////////////////////////////////////////////////////////////////// //
 // <0: no arg; 0/1: true/false; 666: toggle
-function conGetBoolArg (p: SArray; idx: Integer): Integer;
+function conGetBoolArg (p: SSArray; idx: Integer): Integer;
 begin
   if (idx < 0) or (idx > High(p)) then begin result := -1; exit; end;
   result := 0;
@@ -168,7 +168,7 @@ begin
 end;
 
 
-procedure boolVarHandler (me: PCommand; p: SArray);
+procedure boolVarHandler (me: PCommand; p: SSArray);
   procedure binaryFlag (var flag: Boolean; msg: AnsiString);
   begin
     if (Length(p) > 2) then
@@ -183,7 +183,8 @@ procedure boolVarHandler (me: PCommand; p: SArray);
          1: if not me.cheat or conIsCheatsEnabled then flag := true else begin conwriteln('not available'); exit; end;
          666: if not me.cheat or conIsCheatsEnabled then flag := not flag else begin conwriteln('not available'); exit; end;
       end;
-      if flag then conwritefln('%s: tan', [msg]) else conwritefln('%s: ona', [msg]);
+      if (Length(msg) = 0) then msg := p[0] else msg += ':';
+      if flag then conwritefln('%s tan', [msg]) else conwritefln('%s ona', [msg]);
     end;
   end;
 begin
@@ -191,7 +192,7 @@ begin
 end;
 
 
-procedure conRegVar (const conname: AnsiString; pvar: PBoolean; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false); overload;
+procedure conRegVar (const conname: AnsiString; pvar: PBoolean; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload;
 var
   f: Integer;
   cp: PCommand;
@@ -203,7 +204,7 @@ begin
   cp.proc := nil;
   cp.procEx := boolVarHandler;
   cp.help := ahelp;
-  cp.hidden := false;
+  cp.hidden := ahidden;
   cp.ptr := pvar;
   cp.msg := amsg;
   cp.cheat := acheat;
@@ -219,7 +220,7 @@ type
   end;
 
 
-procedure singleVarHandler (me: PCommand; p: SArray);
+procedure singleVarHandler (me: PCommand; p: SSArray);
 var
   pv: PVarSingle;
   nv: Single;
@@ -227,7 +228,7 @@ var
 begin
   if (Length(p) > 2) then
   begin
-    conwritefln('too many arguments to ''%s''', [p[0]]);
+    conwritefln('too many arguments to ''%s''', [me.cmd]);
     exit;
   end;
   pv := PVarSingle(me.ptr);
@@ -244,7 +245,7 @@ begin
     begin
       if not conParseFloat(nv, p[1]) then
       begin
-        conwritefln('%s: ''%s'' doesn''t look like a floating number', [p[0], p[1]]);
+        conwritefln('%s: ''%s'' doesn''t look like a floating number', [me.cmd, p[1]]);
         exit;
       end;
       if (nv < pv.min) then nv := pv.min;
@@ -253,12 +254,12 @@ begin
     end;
   end;
   msg := me.msg;
-  if (Length(msg) = 0) then msg := p[0] else msg += ':';
+  if (Length(msg) = 0) then msg := me.cmd else msg += ':';
   conwritefln('%s %s', [msg, pv.val^]);
 end;
 
 
-procedure conRegVar (const conname: AnsiString; pvar: PSingle; amin, amax: Single; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false); overload;
+procedure conRegVar (const conname: AnsiString; pvar: PSingle; amin, amax: Single; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload;
 var
   f: Integer;
   cp: PCommand;
@@ -276,7 +277,7 @@ begin
   cp.proc := nil;
   cp.procEx := singleVarHandler;
   cp.help := ahelp;
-  cp.hidden := false;
+  cp.hidden := ahidden;
   cp.ptr := pv;
   cp.msg := amsg;
   cp.cheat := acheat;
@@ -299,7 +300,7 @@ begin
     end;
 end;
 
-function ParseAlias(Str: AnsiString): SArray;
+function ParseAlias(Str: AnsiString): SSArray;
 begin
   Result := nil;
 
@@ -315,7 +316,7 @@ begin
   end;
 end;
 
-procedure ConsoleCommands(p: SArray);
+procedure ConsoleCommands(p: SSArray);
 var
   cmd, s: AnsiString;
   a, b: Integer;
@@ -562,7 +563,7 @@ begin
 end;
 
 
-procedure segfault (p: SArray);
+procedure segfault (p: SSArray);
 var
   pp: PByte = nil;
 begin
@@ -612,6 +613,7 @@ begin
   AddCommand('d_health', DebugCommands);
   AddCommand('d_player', DebugCommands);
   AddCommand('d_joy', DebugCommands);
+  AddCommand('d_mem', DebugCommands);
 
   AddCommand('p1_name', GameCVars);
   AddCommand('p2_name', GameCVars);
@@ -953,16 +955,15 @@ begin
     g_Console_Add('');
     for i := 0 to High(commands) do
     begin
-      if not commands[i].hidden then
+      // hidden commands are hidden when cheats aren't enabled
+      if commands[i].hidden and not conIsCheatsEnabled then continue;
+      if (Length(commands[i].help) > 0) then
       begin
-        if (Length(commands[i].help) > 0) then
-        begin
-          g_Console_Add('  '+commands[i].cmd+' -- '+commands[i].help);
-        end
-        else
-        begin
-          g_Console_Add('  '+commands[i].cmd);
-        end;
+        g_Console_Add('  '+commands[i].cmd+' -- '+commands[i].help);
+      end
+      else
+      begin
+        g_Console_Add('  '+commands[i].cmd);
       end;
     end;
     exit;
@@ -976,7 +977,8 @@ begin
     ll := Copy(ll, 0, Length(ll)-1);
     for i := 0 to High(commands) do
     begin
-      if commands[i].hidden then continue;
+      // hidden commands are hidden when cheats aren't enabled
+      if commands[i].hidden and not conIsCheatsEnabled then continue;
       if (commands[i].cmd = ll) then
       begin
         if (Length(commands[i].help) > 0) then
@@ -992,7 +994,8 @@ begin
   tused := 0;
   for i := 0 to High(commands) do
   begin
-    if commands[i].hidden then continue;
+    // hidden commands are hidden when cheats aren't enabled
+    if commands[i].hidden and not conIsCheatsEnabled then continue;
     cmd := commands[i].cmd;
     if (Length(cmd) >= Length(ll)) and (ll = Copy(cmd, 0, Length(ll))) then
     begin
@@ -1165,7 +1168,7 @@ begin
     end;
 end;
 
-function ParseString(Str: AnsiString): SArray;
+function ParseString(Str: AnsiString): SSArray;
 begin
   Result := nil;
 
@@ -1316,7 +1319,7 @@ end;
 
 function g_Console_CommandBlacklisted(C: AnsiString): Boolean;
 var
-  Arr: SArray;
+  Arr: SSArray;
   i: Integer;
 begin
   Result := True;
@@ -1337,7 +1340,7 @@ end;
 
 procedure g_Console_Process(L: AnsiString; quiet: Boolean = False);
 var
-  Arr: SArray;
+  Arr: SSArray;
   i: Integer;
 begin
   Arr := nil;