diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 46db3faae77a9079d5a1fd43b3af92f77f9e90e1..745f26166a931226c604f90871e2213d1291f288 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
uses
SysUtils, Classes,
e_graphics, g_basic, MAPDEF, g_textures,
- g_phys, wadreader, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec;
+ g_phys, utils, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec;
type
TMapInfo = record
function g_Map_Load(Res: String): Boolean;
function g_Map_GetMapInfo(Res: String): TMapInfo;
-function g_Map_GetMapsList(WADName: String): SArray;
+function g_Map_GetMapsList(WADName: String): SSArray;
function g_Map_Exist(Res: String): Boolean;
procedure g_Map_Free(freeTextures: Boolean=true);
procedure g_Map_Update();
GL, GLExt, g_weapons, g_game, g_sound, e_sound, CONFIG,
g_options, g_triggers, g_player,
Math, g_monsters, g_saveload, g_language, g_netmsg,
- utils, sfs, xstreams, hashtable,
+ sfs, xstreams, hashtable, wadreader,
ImagingTypes, Imaging, ImagingUtility,
ImagingGif, ImagingNetworkGraphics;
PanelID: DWORD;
AddTextures: TAddTextureArray;
TriggersTable: array of TTRec;
- FileName, mapResName, s, TexName: String;
+ FileName, mapResName, TexName, s: AnsiString;
Data: Pointer;
Len: Integer;
ok, isAnim: Boolean;
//moveActive: Boolean;
pan: TPanel;
mapOk: Boolean = false;
+ usedTextures: THashStrInt = nil; // key: mapTextureList
begin
mapGrid.Free();
mapGrid := nil;
e_WriteLog(' Loading textures:', TMsgType.Notify);
g_Game_SetLoadingText(_lc[I_LOAD_TEXTURES], mapTextureList.count-1, False);
- cnt := -1;
- for rec in mapTextureList do
- begin
- Inc(cnt);
- s := rec.Resource;
- {$IF DEFINED(D2F_DEBUG_TXLOAD)}
- e_WriteLog(Format(' Loading texture #%d: %s', [cnt, s]), TMsgType.Notify);
- {$ENDIF}
- //if g_Map_IsSpecialTexture(s) then e_WriteLog(' SPECIAL!', MSG_NOTIFY);
- if rec.Anim then
- begin
- // Àíèìèðîâàííàÿ òåêñòóðà
- ntn := CreateAnimTexture(rec.Resource, FileName, True);
- if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_ANIM], [s]));
- end
- else
+ // find used textures
+ usedTextures := hashNewStrInt();
+ try
+ if (panels <> nil) and (panels.count > 0) then
begin
- // Îáû÷íàÿ òåêñòóðà
- ntn := CreateTexture(rec.Resource, FileName, True);
- if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [s]));
+ for rec in panels do
+ begin
+ texrec := rec.TextureRec;
+ if (texrec <> nil) then usedTextures.put(toLowerCase1251(texrec.Resource), 42);
+ end;
end;
- if (ntn < 0) then ntn := CreateNullTexture(rec.Resource);
- rec.tagInt := ntn; // remember texture number
- g_Game_StepLoading();
+ cnt := -1;
+ for rec in mapTextureList do
+ begin
+ Inc(cnt);
+ if not usedTextures.has(toLowerCase1251(rec.Resource)) then
+ begin
+ rec.tagInt := -1; // just in case
+ e_LogWritefln(' Unused texture #%d: %s', [cnt, rec.Resource]);
+ end
+ else
+ begin
+ {$IF DEFINED(D2F_DEBUG_TXLOAD)}
+ e_LogWritefln(' Loading texture #%d: %s', [cnt, rec.Resource]);
+ {$ENDIF}
+ //if g_Map_IsSpecialTexture(s) then e_WriteLog(' SPECIAL!', MSG_NOTIFY);
+ if rec.Anim then
+ begin
+ // Àíèìèðîâàííàÿ òåêñòóðà
+ ntn := CreateAnimTexture(rec.Resource, FileName, True);
+ if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_ANIM], [rec.Resource]));
+ end
+ else
+ begin
+ // Îáû÷íàÿ òåêñòóðà
+ ntn := CreateTexture(rec.Resource, FileName, True);
+ if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [rec.Resource]));
+ end;
+ if (ntn < 0) then ntn := CreateNullTexture(rec.Resource);
+
+ rec.tagInt := ntn; // remember texture number
+ end;
+ g_Game_StepLoading();
+ end;
+ finally
+ usedTextures.Free();
end;
// set panel tagInt to texture index
end;
end;
+
// Çàãðóçêà òðèããåðîâ
gTriggerClientID := 0;
e_WriteLog(' Loading triggers...', TMsgType.Notify);
mapReader.Free();
end;
-function g_Map_GetMapsList(WADName: string): SArray;
+function g_Map_GetMapsList(WADName: string): SSArray;
var
WAD: TWADFile;
a: Integer;
- ResList: SArray;
+ ResList: SSArray;
begin
Result := nil;
WAD := TWADFile.Create();
var
WAD: TWADFile;
FileName, mnn: string;
- ResList: SArray;
+ ResList: SSArray;
a: Integer;
begin
Result := False;