X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=03c029f6404dad7c884a4647d9752216b9ab6482;hb=b36923c380a9760c74967bc8c850517c386747db;hp=92da4f4b9121206d5dd0d0576735be5ed5746bcf;hpb=46a80085210de073e82948959f872b0e93c22135;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 92da4f4..03c029f 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -20,7 +20,7 @@ interface uses SysUtils, Classes, mempool, - g_base, r_graphics, g_basic, MAPDEF, g_textures, + g_base, g_basic, MAPDEF, g_phys, utils, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec; type @@ -31,6 +31,7 @@ type Author: String; MusicName: String; SkyName: String; + SkyFullName: String; // used by render Height: Word; Width: Word; end; @@ -151,6 +152,7 @@ const FLAG_RED = 1; FLAG_BLUE = 2; FLAG_DOM = 3; + FLAG_LAST = FLAG_DOM; FLAG_STATE_NONE = 0; FLAG_STATE_NORMAL = 1; @@ -195,15 +197,6 @@ const GridDrawableMask = (GridTagBack or GridTagStep or GridTagWall or GridTagDoor or GridTagAcid1 or GridTagAcid2 or GridTagWater or GridTagFore); - -type - TBinHeapPanelDrawCmp = class - public - class function less (const a, b: TPanel): Boolean; inline; - end; - - TBinHeapPanelDraw = specialize TBinaryHeapBase; - var gWalls: TPanelArray; gRenderBackgrounds: TPanelArray; @@ -215,18 +208,15 @@ var gFlags: array [FLAG_RED..FLAG_BLUE] of TFlag; //gDOMFlags: array of TFlag; gMapInfo: TMapInfo; - gBackSize: TDFPoint; gDoorMap: array of array of DWORD; gLiftMap: array of array of DWORD; gWADHash: TMD5Digest; - BackID: DWORD = DWORD(-1); gExternalResources: array of TDiskFileInfo = nil; gMovingWallIds: array of Integer = nil; gdbg_map_use_accel_render: Boolean = true; gdbg_map_use_accel_coldet: Boolean = true; profMapCollision: TProfiler = nil; //WARNING: FOR DEBUGGING ONLY! - gDrawPanelList: TBinHeapPanelDraw = nil; // binary heap of all walls we have to render, populated by `g_Map_CollectDrawPanels()` gCurrentMap: TDynRecord = nil; gCurrentMapFileName: AnsiString = ''; // so we can skip texture reloading @@ -247,13 +237,17 @@ var (* private state *) implementation -uses - e_input, e_log, e_res, g_items, g_gfx, g_console, - g_weapons, g_game, g_sound, e_sound, CONFIG, - g_options, g_triggers, g_player, r_textures, r_animations, - Math, g_monsters, g_saveload, g_language, g_netmsg, - sfs, xstreams, hashtable, wadreader, - g_res_downloader; + uses + {$IFDEF ENABLE_GFX} + g_gfx, + {$ENDIF} + e_input, e_log, e_res, g_items, g_console, + g_weapons, g_game, g_sound, e_sound, CONFIG, + g_options, g_triggers, g_player, + Math, g_monsters, g_saveload, g_language, g_netmsg, + sfs, xstreams, hashtable, wadreader, + g_res_downloader + ; const FLAGRECT: TRectWH = (X:15; Y:12; Width:33; Height:52); @@ -514,14 +508,6 @@ begin end; end; - -class function TBinHeapPanelDrawCmp.less (const a, b: TPanel): Boolean; inline; -begin - if (a.tag < b.tag) then begin result := true; exit; end; - if (a.tag > b.tag) then begin result := false; exit; end; - result := (a.arrIdx < b.arrIdx); -end; - var TextNameHash: THashStrInt = nil; // key: texture name; value: index in `Textures` BadTextNameHash: THashStrInt = nil; // set; so we won't spam with non-existing texture messages @@ -1870,15 +1856,12 @@ begin //mapReader := nil; // Çàãðóçêà íåáà + gMapInfo.SkyFullName := ''; if (gMapInfo.SkyName <> '') then begin e_WriteLog(' Loading sky: ' + gMapInfo.SkyName, TMsgType.Notify); g_Game_SetLoadingText(_lc[I_LOAD_SKY], 0, False); - s := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res)); - if g_Texture_CreateWAD(BackID, s, gTextureFilter) then - g_Game_SetupScreenSize - else - g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s])) + gMapInfo.SkyFullName := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res)); end; // Çàãðóçêà ìóçûêè @@ -1903,8 +1886,10 @@ begin g_Weapon_Init(); g_Monsters_Init(); - // Åñëè íå LoadState, òî ñîçäàåì êàðòó ñòîëêíîâåíèé: - if not gLoadGameMode then g_GFX_Init(); + {$IFDEF ENABLE_GFX} + // Åñëè íå LoadState, òî ñîçäàåì êàðòó ñòîëêíîâåíèé: + if not gLoadGameMode then g_GFX_Init(); + {$ENDIF} // Ñáðîñ ëîêàëüíûõ ìàññèâîâ: mapTextureList := nil; @@ -2082,7 +2067,9 @@ procedure g_Map_Free(freeTextures: Boolean=true); end; begin - g_GFX_Free(); + {$IFDEF ENABLE_GFX} + g_GFX_Free; + {$ENDIF} g_Weapon_Free(); g_Items_Free(); g_Triggers_Free(); @@ -2138,14 +2125,6 @@ begin FreePanelArray(gBlockMon); gMovingWallIds := nil; - if BackID <> DWORD(-1) then - begin - gBackSize.X := 0; - gBackSize.Y := 0; - e_DeleteTexture(BackID); - BackID := DWORD(-1); - end; - g_Game_StopAllSounds(False); gMusic.FreeSound(); g_Sound_Delete(gMapInfo.MusicName); @@ -2569,7 +2548,10 @@ begin if pan.Enabled and mapGrid.proxyEnabled[pan.proxyId] then exit; pan.Enabled := True; - g_Mark(pan.X, pan.Y, pan.Width, pan.Height, MARK_DOOR, true); + + {$IFDEF ENABLE_GFX} + g_Mark(pan.X, pan.Y, pan.Width, pan.Height, MARK_DOOR, true); + {$ENDIF} mapGrid.proxyEnabled[pan.proxyId] := true; //if (pan.proxyId >= 0) then mapGrid.proxyEnabled[pan.proxyId] := true @@ -2595,7 +2577,9 @@ begin if (not pan.Enabled) and (not mapGrid.proxyEnabled[pan.proxyId]) then exit; pan.Enabled := False; - g_Mark(pan.X, pan.Y, pan.Width, pan.Height, MARK_DOOR, false); + {$IFDEF ENABLE_GFX} + g_Mark(pan.X, pan.Y, pan.Width, pan.Height, MARK_DOOR, false); + {$ENDIF} mapGrid.proxyEnabled[pan.proxyId] := false; //if (pan.proxyId >= 0) then begin mapGrid.removeBody(pan.proxyId); pan.proxyId := -1; end; @@ -2636,15 +2620,16 @@ begin begin LiftType := t; - g_Mark(X, Y, Width, Height, MARK_LIFT, false); - //TODO: make separate lift tags, and change tag here - - case LiftType of - LIFTTYPE_UP: g_Mark(X, Y, Width, Height, MARK_LIFTUP); - LIFTTYPE_DOWN: g_Mark(X, Y, Width, Height, MARK_LIFTDOWN); - LIFTTYPE_LEFT: g_Mark(X, Y, Width, Height, MARK_LIFTLEFT); - LIFTTYPE_RIGHT: g_Mark(X, Y, Width, Height, MARK_LIFTRIGHT); - end; + {$IFDEF ENABLE_GFX} + g_Mark(X, Y, Width, Height, MARK_LIFT, false); + //TODO: make separate lift tags, and change tag here + case LiftType of + LIFTTYPE_UP: g_Mark(X, Y, Width, Height, MARK_LIFTUP); + LIFTTYPE_DOWN: g_Mark(X, Y, Width, Height, MARK_LIFTDOWN); + LIFTTYPE_LEFT: g_Mark(X, Y, Width, Height, MARK_LIFTLEFT); + LIFTTYPE_RIGHT: g_Mark(X, Y, Width, Height, MARK_LIFTRIGHT); + end; + {$ENDIF} //if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelState(pguid); // mark platform as interesting @@ -2844,8 +2829,11 @@ begin loadPanels(); ///// ///// - // Îáíîâëÿåì êàðòó ñòîëêíîâåíèé è ñåòêó - g_GFX_Init(); + {$IFDEF ENABLE_GFX} + // Îáíîâëÿåì êàðòó ñòîëêíîâåíèé è ñåòêó + g_GFX_Init(); + {$ENDIF} + //mapCreateGrid(); ///// Çàãðóæàåì ìóçûêó: /////