diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index 6cd897c6d6992237ceedbab3105922cd0f5b2e65..9e6f4d5de4776bd505e2499b4a384cfff3a6862a 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
interface
uses
- wadreader; // for SArray
+ utils; // for SSArray
procedure g_Console_Init ();
procedure g_Console_Update ();
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;
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;
TAlias = record
name: AnsiString;
- commands: SArray;
+ commands: SSArray;
end;
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;
// ////////////////////////////////////////////////////////////////////////// //
// <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;
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
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
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;
cp.proc := nil;
cp.procEx := boolVarHandler;
cp.help := ahelp;
- cp.hidden := false;
+ cp.hidden := ahidden;
cp.ptr := pvar;
cp.msg := amsg;
cp.cheat := acheat;
end;
-procedure singleVarHandler (me: PCommand; p: SArray);
+procedure singleVarHandler (me: PCommand; p: SSArray);
var
pv: PVarSingle;
nv: Single;
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);
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;
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;
cp.proc := nil;
cp.procEx := singleVarHandler;
cp.help := ahelp;
- cp.hidden := false;
+ cp.hidden := ahidden;
cp.ptr := pv;
cp.msg := amsg;
cp.cheat := acheat;
end;
end;
-function ParseAlias(Str: AnsiString): SArray;
+function ParseAlias(Str: AnsiString): SSArray;
begin
Result := nil;
end;
end;
-procedure ConsoleCommands(p: SArray);
+procedure ConsoleCommands(p: SSArray);
var
cmd, s: AnsiString;
a, b: Integer;
cp.cheat := acheat;
end;
+
+procedure segfault (p: SSArray);
+var
+ pp: PByte = nil;
+begin
+ pp^ := 0;
+end;
+
+
procedure g_Console_Init();
var
a: Integer;
Time := 0;
end;
+ AddCommand('segfault', segfault, 'make segfault');
+
AddCommand('clear', ConsoleCommands, 'clear console');
AddCommand('clearhistory', ConsoleCommands);
AddCommand('showhistory', ConsoleCommands);
AddCommand('d_health', DebugCommands);
AddCommand('d_player', DebugCommands);
AddCommand('d_joy', DebugCommands);
+ AddCommand('d_mem', DebugCommands);
AddCommand('p1_name', GameCVars);
AddCommand('p2_name', GameCVars);
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;
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
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
end;
end;
-function ParseString(Str: AnsiString): SArray;
+function ParseString(Str: AnsiString): SSArray;
begin
Result := nil;
function g_Console_CommandBlacklisted(C: AnsiString): Boolean;
var
- Arr: SArray;
+ Arr: SSArray;
i: Integer;
begin
Result := True;
procedure g_Console_Process(L: AnsiString; quiet: Boolean = False);
var
- Arr: SArray;
+ Arr: SSArray;
i: Integer;
begin
Arr := nil;
g_Console_Add(Format(_lc[I_CONSOLE_UNKNOWN], [Arr[0]]));
end;
+
end.