diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 833baf5d45d6cd544cf5f3d86af065869779b715..302b952af4b10f88b81c89e2537faf706921b2b9 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
uses
g_basic, g_player, e_graphics, Classes, g_res_downloader,
- SysUtils, g_sound, g_gui, MAPSTRUCT, wadreader, md5, xprofiler;
+ SysUtils, g_sound, g_gui, MAPDEF, wadreader, md5, xprofiler;
type
TGameSettings = record
THearPoint = record
Active: Boolean;
- Coords: TPoint;
+ Coords: TDFPoint;
end;
function g_Game_IsNet(): Boolean;
procedure GameCommands(P: SArray);
procedure GameCheats(P: SArray);
procedure DebugCommands(P: SArray);
-procedure ProfilerCommands(P: SArray);
procedure g_Game_Process_Params;
procedure g_Game_SetLoadingText(Text: String; Max: Integer; reWrite: Boolean);
procedure g_Game_StepLoading();
gPlayer1Settings: TPlayerSettings;
gPlayer2Settings: TPlayerSettings;
gGameOn: Boolean;
- gPlayerScreenSize: TPoint;
- gPlayer1ScreenCoord: TPoint;
- gPlayer2ScreenCoord: TPoint;
+ gPlayerScreenSize: TDFPoint;
+ gPlayer1ScreenCoord: TDFPoint;
+ gPlayer2ScreenCoord: TDFPoint;
gPlayer1: TPlayer = nil;
gPlayer2: TPlayer = nil;
gPlayerDrawn: TPlayer = nil;
g_profile_los: Boolean = false;
g_profile_history_size: Integer = 1000;
+ g_rlayer_back: Boolean = true;
+ g_rlayer_step: Boolean = true;
+ g_rlayer_wall: Boolean = true;
+ g_rlayer_door: Boolean = true;
+ g_rlayer_acid1: Boolean = true;
+ g_rlayer_acid2: Boolean = true;
+ g_rlayer_water: Boolean = true;
+ g_rlayer_fore: Boolean = true;
+
+ g_dbg_scale_05: Boolean = false;
+
procedure g_ResetDynlights ();
procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
procedure g_DynLightExplosion (x, y, radius: Integer; r, g, b: Single);
+function conIsCheatsEnabled (): Boolean;
+
implementation
g_textures, g_main, g_window, g_menu,
e_input, e_log, g_console, g_items, g_map, g_panel,
g_playermodel, g_gfx, g_options, g_weapons, Math,
- g_triggers, MAPDEF, g_monsters, e_sound, CONFIG,
+ g_triggers, g_monsters, e_sound, CONFIG,
BinEditor, g_language, g_net, SDL,
ENet, e_msg, g_netmsg, g_netmaster, GL, GLExt,
utils, sfs, g_holmes;
+// ////////////////////////////////////////////////////////////////////////// //
+function conIsCheatsEnabled (): Boolean;
+begin
+ result := false;
+ if (not gGameOn) or (not gCheats) or ((gGameSettings.GameType <> GT_SINGLE) and
+ (gGameSettings.GameMode <> GM_COOP) and (not gDebugMode)) or g_Game_IsNet then exit;
+ result := true;
+end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
var
profileFrameDraw: TProfiler = nil;
if (y < 0) then y := gScreenHeight-(hgt-1)+y;
// background
//e_DrawFillQuad(x, y, x+wdt-1, y+hgt-1, 255, 255, 255, 200, B_BLEND);
- e_DrawFillQuad(x, y, x+wdt-1, y+hgt-1, 20, 20, 20, 0, B_NONE);
+ //e_DrawFillQuad(x, y, x+wdt-1, y+hgt-1, 20, 20, 20, 0, B_NONE);
+ e_DarkenQuadWH(x, y, wdt, hgt, 150);
// title
yy := y+2;
for ii := 0 to High(prof.bars) do
gExit := 0;
end;
+procedure drawTime(X, Y: Integer); inline;
+begin
+ e_TextureFontPrint(x, y,
+ Format('%d:%.2d:%.2d', [
+ gTime div 1000 div 3600,
+ (gTime div 1000 div 60) mod 60,
+ gTime div 1000 mod 60
+ ]),
+ gStdFont);
+end;
+
procedure DrawStat();
var
pc, x, y, w, h: Integer;
e_DrawFillQuad(x, y, x+w-1, y+h-1, 64, 64, 64, 32);
e_DrawQuad(x, y, x+w-1, y+h-1, 255, 127, 0);
+ drawTime(x+w-78, y+8);
+
wad := g_ExtractWadNameNoPath(gMapInfo.Map);
map := g_ExtractFileName(gMapInfo.Map);
mapstr := wad + ':\' + map + ' - ' + gMapInfo.Name;
UPSTime := Time;
end;
- if gGameOn then g_Weapon_AddDynLights();
+ if gGameOn then
+ begin
+ g_Weapon_AddDynLights();
+ g_Items_AddDynLights();
+ end;
end;
procedure g_Game_LoadData();
g_Texture_CreateWADEx('TEXTURE_PLAYER_HUDJET', GameWAD+':TEXTURES\JETBAR');
g_Texture_CreateWADEx('TEXTURE_PLAYER_HUDBG', GameWAD+':TEXTURES\HUDBG');
g_Texture_CreateWADEx('TEXTURE_PLAYER_ARMORHUD', GameWAD+':TEXTURES\ARMORHUD');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG', GameWAD+':TEXTURES\FLAGHUD_RB');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_S', GameWAD+':TEXTURES\FLAGHUD_RS');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_D', GameWAD+':TEXTURES\FLAGHUD_RD');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG', GameWAD+':TEXTURES\FLAGHUD_BB');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_S', GameWAD+':TEXTURES\FLAGHUD_BS');
- g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_D', GameWAD+':TEXTURES\FLAGHUD_BD');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG', GameWAD+':TEXTURES\FLAGHUD_RB', GameWAD+':TEXTURES\FLAGHUD_R_BASE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_S', GameWAD+':TEXTURES\FLAGHUD_RS', GameWAD+':TEXTURES\FLAGHUD_R_STOLEN');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_D', GameWAD+':TEXTURES\FLAGHUD_RD', GameWAD+':TEXTURES\FLAGHUD_R_DROP');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG', GameWAD+':TEXTURES\FLAGHUD_BB', GameWAD+':TEXTURES\FLAGHUD_B_BASE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_S', GameWAD+':TEXTURES\FLAGHUD_BS', GameWAD+':TEXTURES\FLAGHUD_B_STOLEN');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_D', GameWAD+':TEXTURES\FLAGHUD_BD', GameWAD+':TEXTURES\FLAGHUD_B_DROP');
g_Texture_CreateWADEx('TEXTURE_PLAYER_TALKBUBBLE', GameWAD+':TEXTURES\TALKBUBBLE');
g_Texture_CreateWADEx('TEXTURE_PLAYER_INVULPENTA', GameWAD+':TEXTURES\PENTA');
g_Frames_CreateWAD(nil, 'FRAMES_TELEPORT', GameWAD+':TEXTURES\TELEPORT', 64, 64, 10, False);
if ly-sY-lrad >= gPlayerScreenSize.Y then continue;
// set scissor to optimize drawing
+ //FIXME: broken for splitscreen mode
glScissor((lx-sX)-lrad+2, gPlayerScreenSize.Y-(ly-sY)-lrad-1+2, lrad*2-4, lrad*2-4);
// no need to clear stencil buffer, light blitting will do it for us
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
@@ -2716,7 +2757,7 @@ procedure renderMapInternal (backXOfs, backYOfs: Integer; transX, transY: Intege
type
TDrawCB = procedure ();
- procedure drawPanelType (profname: AnsiString; panType: DWord);
+ procedure drawPanelType (profname: AnsiString; panType: DWord; doDraw: Boolean);
var
tagmask: Integer;
pan: TPanel;
if gdbg_map_use_accel_render then
begin
tagmask := panelTypeToTag(panType);
- {$IF TRUE}
while (gDrawPanelList.count > 0) do
begin
pan := TPanel(gDrawPanelList.front());
if ((pan.tag and tagmask) = 0) then break;
- pan.Draw();
+ if doDraw then pan.Draw();
gDrawPanelList.popFront();
end;
- {$ELSE}
- e_WriteLog(Format('=== PANELS: %d ===', [gDrawPanelList.count]), MSG_NOTIFY);
- while (gDrawPanelList.count > 0) do
- begin
- pan := TPanel(gDrawPanelList.front());
- e_WriteLog(Format('tagmask: 0x%04x; pan.tag: 0x%04x; pan.arrIdx: %d', [tagmask, pan.tag, pan.arrIdx]), MSG_NOTIFY);
- pan.Draw();
- gDrawPanelList.popFront();
- end;
- {$ENDIF}
end
else
begin
- g_Map_DrawPanels(panType);
+ if doDraw then g_Map_DrawPanels(panType);
end;
profileFrameDraw.sectionEnd();
end;
profileFrameDraw.sectionBegin('collect');
if gdbg_map_use_accel_render then
begin
- g_Map_CollectDrawPanels(sX, sY, sWidth, sHeight);
+ if g_dbg_scale_05 then
+ begin
+ g_Map_CollectDrawPanels(sX, sY, sWidth*2, sHeight*2);
+ end
+ else
+ begin
+ g_Map_CollectDrawPanels(sX, sY, sWidth, sHeight);
+ end;
end;
profileFrameDraw.sectionEnd();
g_Map_DrawBack(backXOfs, backYOfs);
profileFrameDraw.sectionEnd();
- if (setTransMatrix) then glTranslatef(transX, transY, 0);
+ if (setTransMatrix) then
+ begin
+ if g_dbg_scale_05 then
+ begin
+ glScalef(0.5, 0.5, 1.0);
+ glTranslatef(transX, transY, 0);
+ end
+ else
+ begin
+ glTranslatef(transX, transY, 0);
+ end;
+ end;
- drawPanelType('*back', PANEL_BACK);
- drawPanelType('*step', PANEL_STEP);
+ drawPanelType('*back', PANEL_BACK, g_rlayer_back);
+ drawPanelType('*step', PANEL_STEP, g_rlayer_step);
drawOther('items', @g_Items_Draw);
drawOther('weapons', @g_Weapon_Draw);
drawOther('shells', @g_Player_DrawShells);
drawOther('drawall', @g_Player_DrawAll);
drawOther('corpses', @g_Player_DrawCorpses);
- drawPanelType('*wall', PANEL_WALL);
+ drawPanelType('*wall', PANEL_WALL, g_rlayer_wall);
drawOther('monsters', @g_Monsters_Draw);
- drawPanelType('*door', PANEL_CLOSEDOOR);
+ drawPanelType('*door', PANEL_CLOSEDOOR, g_rlayer_door);
drawOther('gfx', @g_GFX_Draw);
drawOther('flags', @g_Map_DrawFlags);
- drawPanelType('*acid1', PANEL_ACID1);
- drawPanelType('*acid2', PANEL_ACID2);
- drawPanelType('*water', PANEL_WATER);
+ drawPanelType('*acid1', PANEL_ACID1, g_rlayer_acid1);
+ drawPanelType('*acid2', PANEL_ACID2, g_rlayer_acid2);
+ drawPanelType('*water', PANEL_WATER, g_rlayer_water);
drawOther('dynlights', @renderDynLightsInternal);
- drawPanelType('*fore', PANEL_FORE);
+ drawPanelType('*fore', PANEL_FORE, g_rlayer_fore);
if g_debug_HealthBar then
begin
var
px, py, a, b, c, d: Integer;
//R: TRect;
-
begin
if (p = nil) or (p.FDummy) then
begin
glPushMatrix();
px := p.GameX + PLAYER_RECT_CX;
- py := p.GameY + PLAYER_RECT_CY;
+ py := p.GameY + PLAYER_RECT_CY+p.Obj.slopeUpLeft;
if px > (gPlayerScreenSize.X div 2) then a := -px+(gPlayerScreenSize.X div 2) else a := 0;
if py > (gPlayerScreenSize.Y div 2) then b := -py+(gPlayerScreenSize.Y div 2) else b := 0;
if px > gMapInfo.Width-(gPlayerScreenSize.X div 2) then a := -gMapInfo.Width+gPlayerScreenSize.X;
if py > gMapInfo.Height-(gPlayerScreenSize.Y div 2) then b := -gMapInfo.Height+gPlayerScreenSize.Y;
- if gMapInfo.Width <= gPlayerScreenSize.X then a := 0;
- if gMapInfo.Height <= gPlayerScreenSize.Y then b := 0;
+ if (gMapInfo.Width = gPlayerScreenSize.X) then a := 0
+ else if (gMapInfo.Width < gPlayerScreenSize.X) then
+ begin
+ // hcenter
+ a := (gPlayerScreenSize.X-gMapInfo.Width) div 2;
+ end;
+
+ if (gMapInfo.Height = gPlayerScreenSize.Y) then b := 0
+ else if (gMapInfo.Height < gPlayerScreenSize.Y) then
+ begin
+ // vcenter
+ b := (gPlayerScreenSize.Y-gMapInfo.Height) div 2;
+ end;
if p.IncCam <> 0 then
begin
p.viewPortW := sWidth;
p.viewPortH := sHeight;
+ if (p = gPlayer1) then
+ begin
+ g_Holmes_plrView(p.viewPortX, p.viewPortY, p.viewPortW, p.viewPortH);
+ end;
+
renderMapInternal(-c, -d, a, b+p.IncCam, true);
if p.FSpectator then
if gPause and gGameOn and (g_ActiveWindow = nil) then
begin
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
e_CharFont_GetSize(gMenuFont, _lc[I_MENU_PAUSE], w, h);
e_CharFont_Print(gMenuFont, (gScreenWidth div 2)-(w div 2),
else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
end;
if g_ActiveWindow <> nil then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
if gState = STATE_FOLD then
+ begin
e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 0, 0, 0, EndingGameCounter);
+ end;
if gState = STATE_INTERCUSTOM then
begin
DrawCustomStat();
if g_ActiveWindow <> nil then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
if gState = STATE_INTERSINGLE then
begin
if EndingGameCounter > 0 then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 0, 0, 0, EndingGameCounter)
+ begin
+ e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 0, 0, 0, EndingGameCounter);
+ end
else
begin
back := 'INTER';
DrawSingleStat();
if g_ActiveWindow <> nil then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
end;
e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
if g_ActiveWindow <> nil then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
if gState = STATE_SLIST then
if g_Texture_Get('MENU_BACKGROUND', ID) then
begin
e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight);
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
end;
g_Serverlist_Draw(slCurrent);
end;
if g_ActiveWindow <> nil then
begin
if gGameOn then
- e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
g_ActiveWindow.Draw();
end;
// draw inspector
- g_Holmes_Draw();
+ if (g_holmes_enabled) then g_Holmes_Draw();
g_Console_Draw();
end;
if gGameOn and gShowTime and (gGameSettings.GameType in [GT_CUSTOM, GT_SERVER, GT_CLIENT]) then
- e_TextureFontPrint(gScreenWidth-72, 0,
- Format('%d:%.2d:%.2d', [gTime div 1000 div 3600, (gTime div 1000 div 60) mod 60, gTime div 1000 mod 60]),
- gStdFont);
+ drawTime(gScreenWidth-72, gScreenHeight-16);
if gGameOn then drawProfilers();
+
+ g_Holmes_DrawUI();
end;
procedure g_Game_Quit();
end;
end;
-// profiler console commands
-procedure ProfilerCommands (P: SArray);
-var
- cmd: string;
-
- function getBool (idx: Integer): Integer;
- begin
- if (idx < 0) or (idx > High(P)) then begin result := -1; exit; end;
- result := 0;
- if (P[idx] = '1') or (P[idx] = 'on') or (P[idx] = 'true') or (P[idx] = 'tan') then result := 1;
- end;
-
- procedure binaryFlag (var flag: Boolean; msg: string);
- begin
- if (Length(p) > 2) then
- begin
- g_Console_Add('too many arguments to '''+P[0]+'''');
- end
- else
- begin
- case getBool(1) of
- -1: begin end;
- 0: flag := false;
- 1: flag := true;
- end;
- if flag then g_Console_Add(msg+': tan') else g_Console_Add(msg+': ona');
- end;
- end;
-
-begin
- //if not gDebugMode then exit;
- cmd := LowerCase(P[0]);
-
- if (cmd = 'pf_draw_frame') then begin binaryFlag(g_profile_frame_draw, 'render profiles'); exit; end;
- if (cmd = 'pf_update_frame') then begin binaryFlag(g_profile_frame_update, 'update profiles (not yet)'); exit; end;
- if (cmd = 'pf_coldet') then begin binaryFlag(g_profile_collision, 'coldet profiles'); exit; end;
- if (cmd = 'pf_los') then begin binaryFlag(g_profile_los, 'monster LOS profiles'); exit; end;
- if (cmd = 'r_sq_draw') then begin binaryFlag(gdbg_map_use_accel_render, 'accelerated rendering'); exit; end;
- if (cmd = 'cd_sq_enabled') then begin binaryFlag(gdbg_map_use_accel_coldet, 'accelerated map coldet'); exit; end;
- if (cmd = 'mon_sq_enabled') then begin binaryFlag(gmon_debug_use_sqaccel, 'accelerated monster coldet'); exit; end;
- if (cmd = 'wtrace_sq_enabled') then begin binaryFlag(gwep_debug_fast_trace, 'accelerated weapon hitscan'); exit; end;
- if (cmd = 'pr_enabled') then begin binaryFlag(gpart_dbg_enabled, 'particles'); exit; end;
- if (cmd = 'pr_phys_enabled') then begin binaryFlag(gpart_dbg_phys_enabled, 'particle physics'); exit; end;
- if (cmd = 'los_enabled') then begin binaryFlag(gmon_dbg_los_enabled, 'LOS calculations'); exit; end;
- if (cmd = 'mon_think') then begin binaryFlag(gmon_debug_think, 'monster thinking'); exit; end;
-end;
-
procedure DebugCommands(P: SArray);
var
a, b: Integer;
cmd: string;
- //pt: TPoint;
+ //pt: TDFPoint;
mon: TMonster;
begin
// Êîìàíäû îòëàäî÷íîãî ðåæèìà:
begin
g_Console_Add('player left the map');
gExitByTrigger := True;
- g_Game_ExitLevel(gTriggers[a].Data.MapName);
+ //g_Game_ExitLevel(gTriggers[a].Data.MapName);
+ g_Game_ExitLevel(gTriggers[a].trigData.trigMapName);
break;
end;
end;
if gTriggers[a].TriggerType = TRIGGER_EXIT then
begin
gExitByTrigger := True;
- gNextMap := gTriggers[a].Data.MapName;
+ //gNextMap := gTriggers[a].Data.MapName;
+ gNextMap := gTriggers[a].trigData.trigMapName;
Break;
end;
// Èùåì ñëåäóþùóþ êàðòó â WAD ôàéëå
with gTriggers[i] do
if (TriggerType = TRIGGER_SOUND) and
(Sound <> nil) and
- (Data.Local) and
+ (trigData.trigLocal) and
Sound.IsPlaying() then
begin
if ((gPlayer1 <> nil) and g_CollidePoint(gPlayer1.GameX, gPlayer1.GameY, X, Y, Width, Height)) or
((gPlayer2 <> nil) and g_CollidePoint(gPlayer2.GameX, gPlayer2.GameY, X, Y, Width, Height)) then
begin
- Sound.SetPan(0.5 - Data.Pan/255.0);
- Sound.SetVolume(Data.Volume/255.0);
+ Sound.SetPan(0.5 - trigData.trigPan/255.0);
+ Sound.SetVolume(trigData.trigVolume/255.0);
end
else
- Sound.SetCoords(X+(Width div 2), Y+(Height div 2), Data.Volume/255.0);
+ Sound.SetCoords(X+(Width div 2), Y+(Height div 2), trigData.trigVolume/255.0);
end;
end;
SetLength(pars, 0);
end;
+begin
+ conRegVar('pf_draw_frame', @g_profile_frame_draw, 'draw frame rendering profiles', 'render profiles');
+ //conRegVar('pf_update_frame', @g_profile_frame_update, 'draw frame updating profiles', 'update profiles');
+ conRegVar('pf_coldet', @g_profile_collision, 'draw collision detection profiles', 'coldet profiles');
+ conRegVar('pf_los', @g_profile_los, 'draw monster LOS profiles', 'monster LOS profiles');
+
+ conRegVar('r_sq_draw', @gdbg_map_use_accel_render, 'accelerated spatial queries in rendering', 'accelerated rendering');
+ conRegVar('cd_sq_enabled', @gdbg_map_use_accel_coldet, 'accelerated spatial queries in map coldet', 'accelerated map coldet');
+ conRegVar('mon_sq_enabled', @gmon_debug_use_sqaccel, 'accelerated spatial queries for monsters', 'accelerated monster coldet');
+ conRegVar('wtrace_sq_enabled', @gwep_debug_fast_trace, 'accelerated spatial queries for weapon hitscan trace', 'accelerated weapon hitscan');
+
+ conRegVar('pr_enabled', @gpart_dbg_enabled, 'enable/disable particles', 'particles');
+ conRegVar('pr_phys_enabled', @gpart_dbg_phys_enabled, 'enable/disable particle physics', 'particle physics');
+
+ conRegVar('los_enabled', @gmon_dbg_los_enabled, 'enable/disable monster LOS calculations', 'monster LOS', true);
+ conRegVar('mon_think', @gmon_debug_think, 'enable/disable monster thinking', 'monster thinking', true);
+
+ conRegVar('dbg_holmes', @g_holmes_enabled, 'enable/disable Holmes', 'Holmes', true);
+
+ conRegVar('dbg_scale_half', @g_dbg_scale_05, 'experimental deBUG scale*0.5 mode', 'Scale0.5', true);
end.