diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index cba96c630a3a271f6f533a1a43c916785664fb50..a22912b8a896018200aa87ede17ac202d8644b3d 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;
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;
+
procedure g_ResetDynlights ();
procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
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;
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);
@@ -2741,7 +2755,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;
if (setTransMatrix) then glTranslatef(transX, transY, 0);
- 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;
drawTime(gScreenWidth-72, gScreenHeight-16);
if gGameOn then drawProfilers();
+
+ g_Holmes_DrawUI();
end;
procedure g_Game_Quit();
var
a, b: Integer;
cmd: string;
- //pt: TPoint;
+ //pt: TDFPoint;
mon: TMonster;
begin
// Êîìàíäû îòëàäî÷íîãî ðåæèìà: