X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=9ec96396134f776058e72cb7616103bd7a116501;hb=bab60f8ad58f03e8a35dbb44aba77bb9ff9201f9;hp=a22912b8a896018200aa87ede17ac202d8644b3d;hpb=ff152ddb08bd84058c4162fcee523a2864a26368;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index a22912b..9ec9639 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -70,7 +70,7 @@ function g_Game_IsNet(): Boolean; function g_Game_IsServer(): Boolean; function g_Game_IsClient(): Boolean; procedure g_Game_Init(); -procedure g_Game_Free(); +procedure g_Game_Free (freeTextures: Boolean=true); procedure g_Game_LoadData(); procedure g_Game_FreeData(); procedure g_Game_Update(); @@ -95,7 +95,7 @@ procedure g_Game_RestartLevel(); procedure g_Game_RestartRound(NoMapRestart: Boolean = False); procedure g_Game_ClientWAD(NewWAD: String; WHash: TMD5Digest); procedure g_Game_SaveOptions(); -function g_Game_StartMap(Map: String; Force: Boolean = False): Boolean; +function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean; procedure g_Game_ChangeMap(MapPath: String); procedure g_Game_ExitLevel(Map: Char16); function g_Game_GetFirstMap(WAD: String): String; @@ -324,6 +324,8 @@ 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); @@ -1297,12 +1299,12 @@ begin end; end; -procedure g_Game_Free(); +procedure g_Game_Free(freeTextures: Boolean=true); begin if NetMode = NET_CLIENT then g_Net_Disconnect(); if NetMode = NET_SERVER then g_Net_Host_Die(); - g_Map_Free(); + g_Map_Free(freeTextures); g_Player_Free(); g_Player_RemoveAllCorpses(); @@ -2794,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 <> 1.0) then + begin + g_Map_CollectDrawPanels(sX, sY, round(sWidth/g_dbg_scale)+1, round(sHeight/g_dbg_scale)+1); + end + else + begin + g_Map_CollectDrawPanels(sX, sY, sWidth, sHeight); + end; end; profileFrameDraw.sectionEnd(); @@ -2802,7 +2811,11 @@ begin g_Map_DrawBack(backXOfs, backYOfs); profileFrameDraw.sectionEnd(); - if (setTransMatrix) then glTranslatef(transX, transY, 0); + if setTransMatrix then + begin + glScalef(g_dbg_scale, g_dbg_scale, 1.0); + glTranslatef(transX, transY, 0); + end; drawPanelType('*back', PANEL_BACK, g_rlayer_back); drawPanelType('*step', PANEL_STEP, g_rlayer_step); @@ -3210,16 +3223,26 @@ begin begin if (gState = STATE_MENU) then begin - if ((g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '')) then + if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then begin - if g_Texture_Get('MENU_BACKGROUND', ID) then - e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight) + if g_Texture_Get('MENU_BACKGROUND', ID) then e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight) else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0); end; - if g_ActiveWindow <> nil then + // F3 at menu will show game loading dialog + if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true); + if (g_ActiveWindow <> nil) then begin //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180); e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150); + end + else + begin + // F3 at titlepic will show game loading dialog + if e_KeyPressed(IK_F3) then + begin + g_Menu_Show_LoadMenu(true); + if (g_ActiveWindow <> nil) then e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150); + end; end; end; @@ -3970,7 +3993,7 @@ begin end; end; - ProcessLoading(); + ProcessLoading(true); e_PollInput(); @@ -4030,15 +4053,15 @@ begin MessageTime := 0; gGameOn := False; g_Game_ClearLoading(); - g_Game_StartMap(Map, True); + g_Game_StartMap(Map, True, gCurrentMapFileName); end; -function g_Game_StartMap(Map: String; Force: Boolean = False): Boolean; +function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean; var NewWAD, ResName: String; I: Integer; begin - g_Map_Free(); + g_Map_Free((Map <> gCurrentMapFileName) and (oldMapPath <> gCurrentMapFileName)); g_Player_RemoveAllCorpses(); if (not g_Game_IsClient) and @@ -5178,7 +5201,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; @@ -6047,7 +6071,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 ôàéëå @@ -6438,17 +6463,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; @@ -6736,7 +6761,7 @@ begin g_ActiveWindow := nil; - ProcessLoading; + ProcessLoading(true); end; procedure g_Game_StepLoading(); @@ -6748,7 +6773,7 @@ begin if (ShowCount > LOADING_SHOW_STEP) then begin ShowCount := 0; - ProcessLoading; + ProcessLoading(); end; end; end; @@ -7010,4 +7035,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', @g_dbg_scale, 0.01, 5.0, 'experimental deBUG scale mode', '', true); end.