DEADSOFTWARE

bye-bye, bineditor, we won't miss you
[d2df-sdl.git] / src / game / g_game.pas
index 6a26b044dc0aed035326e0e24f0fd61009f8b426..daec002afce309a4120acfbfcb4c574e38689d30 100644 (file)
@@ -19,8 +19,10 @@ unit g_game;
 interface
 
 uses
-  g_basic, g_player, e_graphics, Classes, g_res_downloader,
-  SysUtils, g_sound, g_gui, MAPDEF, wadreader, md5, xprofiler;
+  SysUtils, Classes,
+  MAPDEF,
+  g_basic, g_player, e_graphics, g_res_downloader,
+  g_sound, g_gui, wadreader, md5, xprofiler;
 
 type
   TGameSettings = record
@@ -324,8 +326,6 @@ var
   g_rlayer_water: Boolean = true;
   g_rlayer_fore: Boolean = true;
 
-  g_dbg_scale: Single = 1.0;
-
 
 procedure g_ResetDynlights ();
 procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
@@ -337,11 +337,11 @@ function conIsCheatsEnabled (): Boolean;
 implementation
 
 uses
-  g_textures, g_main, g_window, g_menu,
+  e_texture, 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, g_monsters, e_sound, CONFIG,
-  BinEditor, g_language, g_net, SDL,
+  g_language, g_net, SDL,
   ENet, e_msg, g_netmsg, g_netmaster, GL, GLExt,
   utils, sfs, g_holmes;
 
@@ -2750,17 +2750,17 @@ begin
   (*
    * light rendering: (INVALID!)
    *   glStencilFunc(GL_EQUAL, 0, $ff);
-   *   clear depth buffer
-   *   renderAmbientQuad()
    *   for each light:
+   *     glClear(GL_STENCIL_BUFFER_BIT);
    *     glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
    *     draw shadow volume into stencil buffer
    *     glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // modify color buffer
    *     glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // don't modify stencil buffer
    *     turn off blending
-   *     draw quad with light alpha
+   *     draw color-less quad with light alpha (WARNING! don't touch color!)
    *     glEnable(GL_BLEND);
-   *     gl.glBlendFunc(GL_DST_ALPHA, GL_ONE);
+   *     glBlendFunc(GL_DST_ALPHA, GL_ONE);
+   *     draw all geometry up to and including walls (with alpha-testing, probably) -- this does lighting
    *)
 
   wassc := (glIsEnabled(GL_SCISSOR_TEST) <> 0);
@@ -2912,6 +2912,7 @@ begin
 
   if setTransMatrix then
   begin
+    //if (g_dbg_scale <> 1.0) then glTranslatef(0.0, -0.375/2, 0);
     glScalef(g_dbg_scale, g_dbg_scale, 1.0);
     glTranslatef(-sX, -sY, 0);
   end;
@@ -2940,6 +2941,7 @@ begin
   drawOther('corpses', @g_Player_DrawCorpses);
   drawPanelType('*wall', PANEL_WALL, g_rlayer_wall);
   drawOther('monsters', @g_Monsters_Draw);
+  drawOther('itemdrop', @g_Items_DrawDrop);
   drawPanelType('*door', PANEL_CLOSEDOOR, g_rlayer_door);
   drawOther('gfx', @g_GFX_Draw);
   drawOther('flags', @g_Map_DrawFlags);
@@ -5166,6 +5168,19 @@ begin
   end;
 end;
 
+procedure PrintHeapStats();
+var
+  hs: TFPCHeapStatus;
+begin
+  hs := GetFPCHeapStatus();
+  e_LogWriteLn ('v===== heap status =====v');
+  e_LogWriteFln('max heap size = %d k', [hs.MaxHeapSize div 1024]);
+  e_LogWriteFln('max heap used = %d k', [hs.MaxHeapUsed div 1024]);
+  e_LogWriteFln('cur heap size = %d k', [hs.CurrHeapSize div 1024]);
+  e_LogWriteFln('cur heap used = %d k', [hs.CurrHeapUsed div 1024]);
+  e_LogWriteFln('cur heap free = %d k', [hs.CurrHeapFree div 1024]);
+  e_LogWriteLn ('^=======================^');
+end;
 
 procedure DebugCommands(P: SArray);
 var
@@ -5239,6 +5254,7 @@ begin
           g_Console_Add('ID | Name');
           for b := MONSTER_DEMON to MONSTER_MAN do
             g_Console_Add(Format('%2d | %s', [b, g_Mons_NameByTypeId(b)]));
+          conwriteln('behav.   num'#10'normal    0'#10'killer    1'#10'maniac    2'#10'insane    3'#10'cannibal  4'#10'good      5');
         end else
         begin
           a := StrToIntDef(P[1], 0);
@@ -5257,7 +5273,17 @@ begin
                      gPlayer1.Direction, True);
               end;
               if (Length(P) > 2) and (mon <> nil) then
-                mon.MonsterBehaviour := Min(Max(StrToIntDef(P[2], BH_NORMAL), BH_NORMAL), BH_GOOD);
+              begin
+                     if (CompareText(P[2], 'normal') = 0) then mon.MonsterBehaviour := BH_NORMAL
+                else if (CompareText(P[2], 'killer') = 0) then mon.MonsterBehaviour := BH_KILLER
+                else if (CompareText(P[2], 'maniac') = 0) then mon.MonsterBehaviour := BH_MANIAC
+                else if (CompareText(P[2], 'insane') = 0) then mon.MonsterBehaviour := BH_INSANE
+                else if (CompareText(P[2], 'cannibal') = 0) then mon.MonsterBehaviour := BH_CANNIBAL
+                else if (CompareText(P[2], 'good') = 0) then mon.MonsterBehaviour := BH_GOOD
+                else if (CompareText(P[2], 'friend') = 0) then mon.MonsterBehaviour := BH_GOOD
+                else if (CompareText(P[2], 'friendly') = 0) then mon.MonsterBehaviour := BH_GOOD
+                else mon.MonsterBehaviour := Min(Max(StrToIntDef(P[2], BH_NORMAL), BH_NORMAL), BH_GOOD);
+              end;
             end;
         end;
     end
@@ -5281,6 +5307,10 @@ begin
     begin
       for a := 1 to 8 do
         g_Console_Add(e_JoystickStateToString(a));
+    end
+    else if (cmd = 'd_mem') then
+    begin
+      PrintHeapStats();
     end;
   end
     else
@@ -7168,5 +7198,5 @@ begin
 
   conRegVar('dbg_holmes', @g_holmes_enabled, 'enable/disable Holmes', 'Holmes', true);
 
-  conRegVar('dbg_scale', @g_dbg_scale, 0.01, 5.0, 'experimental deBUG scale mode', '',  true);
+  conRegVar('dbg_scale', @g_dbg_scale, 0.01, 100.0, 'experimental deBUG scale mode', '',  false);
 end.