X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=03c029f6404dad7c884a4647d9752216b9ab6482;hb=b36923c380a9760c74967bc8c850517c386747db;hp=d120dfcd6928f48bf7a3749c0cc5d36219bbfd96;hpb=39b0746406e3df71ac598f7c0d9e96e9210df381;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index d120dfc..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; @@ -52,7 +53,6 @@ type State: Byte; Count: Integer; CaptureTime: LongWord; - Animation: TAnimation; Direction: TDirection; NeedSend: Boolean; end; @@ -152,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; @@ -196,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; @@ -216,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 @@ -248,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); @@ -515,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 @@ -1079,7 +1064,6 @@ end; procedure CreateArea(Area: TDynRecord); var a: Integer; - id: DWORD = 0; begin case Area.AreaType of AREA_DMPOINT, AREA_PLAYERPOINT1, AREA_PLAYERPOINT2, @@ -1119,14 +1103,7 @@ begin with gFlags[a] do begin - case a of - FLAG_RED: g_Frames_Get(id, 'FRAMES_FLAG_RED'); - FLAG_BLUE: g_Frames_Get(id, 'FRAMES_FLAG_BLUE'); - end; - - Animation := TAnimation.Create(id, True, 8); Obj.Rect := FLAGRECT; - g_Map_ResetFlag(a); end; end; @@ -1879,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; // Çàãðóçêà ìóçûêè @@ -1912,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; @@ -2091,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(); @@ -2147,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); @@ -2205,8 +2175,6 @@ begin begin with gFlags[a] do begin - if gFlags[a].Animation <> nil then gFlags[a].Animation.Update(); - Obj.oldX := Obj.X; Obj.oldY := Obj.Y; @@ -2580,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 @@ -2606,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; @@ -2647,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 @@ -2855,8 +2829,11 @@ begin loadPanels(); ///// ///// - // Îáíîâëÿåì êàðòó ñòîëêíîâåíèé è ñåòêó - g_GFX_Init(); + {$IFDEF ENABLE_GFX} + // Îáíîâëÿåì êàðòó ñòîëêíîâåíèé è ñåòêó + g_GFX_Init(); + {$ENDIF} + //mapCreateGrid(); ///// Çàãðóæàåì ìóçûêó: /////