DEADSOFTWARE

no more old-styled map structured; sadly, most triggers aren't working; also, save...
[d2df-sdl.git] / src / game / g_game.pas
index f5b1903db7cde1fe171408dd13c7052329becc36..302b952af4b10f88b81c89e2537faf706921b2b9 100644 (file)
@@ -20,7 +20,7 @@ interface
 
 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
@@ -63,7 +63,7 @@ type
 
   THearPoint = record
     Active: Boolean;
-    Coords: TPoint;
+    Coords: TDFPoint;
   end;
 
 function  g_Game_IsNet(): Boolean;
@@ -209,9 +209,9 @@ var
   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;
@@ -324,6 +324,8 @@ var
   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);
@@ -338,7 +340,7 @@ uses
   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;
@@ -1990,7 +1992,11 @@ begin
     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();
@@ -2005,12 +2011,12 @@ begin
   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);
@@ -2790,7 +2796,14 @@ begin
   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();
 
@@ -2798,7 +2811,18 @@ begin
   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, g_rlayer_back);
   drawPanelType('*step', PANEL_STEP, g_rlayer_step);
@@ -2853,7 +2877,6 @@ procedure DrawPlayer(p: TPlayer);
 var
   px, py, a, b, c, d: Integer;
   //R: TRect;
-
 begin
   if (p = nil) or (p.FDummy) then
   begin
@@ -2871,7 +2894,7 @@ 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;
@@ -3337,6 +3360,8 @@ begin
     drawTime(gScreenWidth-72, gScreenHeight-16);
 
   if gGameOn then drawProfilers();
+
+  g_Holmes_DrawUI();
 end;
 
 procedure g_Game_Quit();
@@ -5011,7 +5036,7 @@ procedure DebugCommands(P: SArray);
 var
   a, b: Integer;
   cmd: string;
-  //pt: TPoint;
+  //pt: TDFPoint;
   mon: TMonster;
 begin
 // Êîìàíäû îòëàäî÷íîãî ðåæèìà:
@@ -5173,7 +5198,8 @@ 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;
@@ -6042,7 +6068,8 @@ begin
             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 ôàéëå
@@ -6433,17 +6460,17 @@ begin
       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;
 
@@ -7005,4 +7032,6 @@ begin
   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.