X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=08ebadeb2929d4b429c62c9a7794173bfb0995cc;hb=bec8cdb3ed10342622663c441db86cbd7bb63885;hp=81eb17e904044c36be49914f5172380a7b8cbdd6;hpb=05c4488d67219fb60a2687af2a06397fea1dffbb;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 81eb17e..08ebade 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -2,8 +2,7 @@ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -260,7 +259,8 @@ uses Math, g_monsters, g_saveload, g_language, g_netmsg, sfs, xstreams, hashtable, wadreader, ImagingTypes, Imaging, ImagingUtility, - ImagingGif, ImagingNetworkGraphics; + ImagingGif, ImagingNetworkGraphics, + g_res_downloader; const FLAGRECT: TRectWH = (X:15; Y:12; Width:33; Height:52); @@ -900,6 +900,26 @@ begin end; +function GetReplacementWad (WadName: AnsiString): AnsiString; +begin + if (length(WadName) = 0) then + begin + result := ''; + end + else + begin + result := g_Res_FindReplacementWad(WadName); + if (result <> WadName) then + begin + //e_LogWritefln('GetReplacementWad: old=%s; new=%s', [WadName, result]); + end + else + begin + result := GameDir+'/wads/'+result; + end; + end; +end; + function CreateTexture(RecName: AnsiString; Map: string; log: Boolean): Integer; var WAD: TWADFile; @@ -958,12 +978,10 @@ begin end; // Çàãðóæàåì ðåñóðñ òåêñòóðû â ïàìÿòü èç WAD'à: - WADName := g_ExtractWadName(RecName); + WADName := GetReplacementWad(g_ExtractWadName(RecName)); + if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else WAD := TWADFile.Create(); - - if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map; - WAD.ReadFile(WADName); //txname := RecName; @@ -1046,11 +1064,12 @@ begin end; // ×èòàåì WAD-ðåñóðñ àíèì.òåêñòóðû èç WAD'à â ïàìÿòü: - WADName := g_ExtractWadName(RecName); + WADName := GetReplacementWad(g_ExtractWadName(RecName)); + if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else WAD := TWADFile.Create(); try - if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map; + //if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map; WAD.ReadFile(WADName); @@ -1084,8 +1103,7 @@ begin end; // ýòî ïòèöà? ýòî ñàìîë¸ò? - if (TextureWAD[0] = 'D') and (TextureWAD[1] = 'F') and - (TextureWAD[2] = 'W') and (TextureWAD[3] = 'A') and (TextureWAD[4] = 'D') then + if isWadData(TextureWAD, ResLength) then begin // íåò, ýòî ñóïåðìåí! if not WAD.ReadMemory(TextureWAD, ResLength) then @@ -1450,9 +1468,14 @@ end; procedure addResToExternalResList(res: string); begin - res := extractWadName(res); - if (res <> '') and (gExternalResources.IndexOf(res) = -1) then + //e_LogWritefln('DBG: ***trying external resource %s', [res]); + res := toLowerCase1251(extractWadName(res)); + // ignore "standart.wad" + if (res <> '') {and (res <> 'standart.wad')} and (gExternalResources.IndexOf(res) = -1) then + begin + //e_LogWritefln('DBG: added external resource %s', [res]); gExternalResources.Add(res); + end; end; procedure generateExternalResourcesList({mapReader: TMapReader_1}map: TDynRecord); @@ -1836,7 +1859,14 @@ 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); + if (ntn < 0) then + begin + ntn := CreateNullTexture(rec.Resource); + end + else + begin + addResToExternalResList(rec.Resource); + end; rec.tagInt := ntn; // remember texture number end; @@ -2261,7 +2291,7 @@ begin finally sfsGCEnable(); // enable releasing unused volumes //mapReader.Free(); - e_ClearInputBuffer(); // why not? + e_UnpressAllKeys; // why not? if not mapOk then begin gCurrentMap.Free();