X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_map.pas;h=0e31b25d28acb6a33847bb606cf8367bafaceb8a;hb=abda6900c041e39944de6a49aa088a60c170715e;hp=9459c10a158f0c9715fad5bf90bd88ab8d655850;hpb=5c816a8e702fd39c65d0928a3315d81e979f30fb;p=d2df-sdl.git diff --git a/src/game/g_map.pas b/src/game/g_map.pas index 9459c10..0e31b25 100644 --- a/src/game/g_map.pas +++ b/src/game/g_map.pas @@ -20,7 +20,7 @@ interface uses SysUtils, Classes, mempool, - r_graphics, g_basic, MAPDEF, g_textures, + g_base, g_basic, MAPDEF, g_textures, 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; end; @@ -215,11 +215,9 @@ 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; @@ -242,18 +240,17 @@ type var mapGrid: TPanelGrid = nil; // DO NOT USE! public for debugging only! +var (* private state *) + Textures: TLevelTextureArray = nil; implementation uses - {$INCLUDE ../nogl/noGLuses.inc} - e_input, g_main, e_log, e_texture, e_res, g_items, g_gfx, g_console, + 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, Math, g_monsters, g_saveload, g_language, g_netmsg, sfs, xstreams, hashtable, wadreader, - ImagingTypes, Imaging, ImagingUtility, - ImagingGif, ImagingNetworkGraphics, g_res_downloader; const @@ -524,7 +521,6 @@ begin end; var - Textures: TLevelTextureArray = nil; TextNameHash: THashStrInt = nil; // key: texture name; value: index in `Textures` BadTextNameHash: THashStrInt = nil; // set; so we won't spam with non-existing texture messages RespawnPoints: array of TRespawnPoint; @@ -872,18 +868,10 @@ begin if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); if TextNameHash.get(RecName, result) then exit; // i found her! - SetLength(Textures, Length(Textures)+1); - result := High(Textures); - - with Textures[High(Textures)] do - begin - TextureName := RecName; - Width := 1; - Height := 1; - Anim := False; - TextureID := LongWord(TEXTURE_NONE); - end; - + SetLength(Textures, Length(Textures) + 1); + Textures[High(Textures)].TextureName := RecName; + Textures[High(Textures)].FullName := ''; + Result := High(Textures); TextNameHash.put(RecName, result); end; @@ -980,366 +968,98 @@ begin addResToExternalResList(GetReplacementWad(g_ExtractWadName(map.SkyName))); end; - -function CreateTexture (RecName: AnsiString; Map: string; log: Boolean): Integer; -var - WAD: TWADFile; - TextureData: Pointer; - WADName: String; - a, ResLength: Integer; -begin - RecName := toLowerCase1251(RecName); - if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); - if TextNameHash.get(RecName, result) then - begin - // i found her! - //e_LogWritefln('texture ''%s'' already loaded (%s)', [RecName, result]); - exit; - end; - - Result := -1; - - if (BadTextNameHash <> nil) and BadTextNameHash.has(RecName) then exit; // don't do it again and again - - { - if Textures <> nil then - begin - for a := 0 to High(Textures) do - begin - if (Textures[a].TextureName = RecName) then - begin // Òåêñòóðà ñ òàêèì èìåíåì óæå åñòü - e_LogWritefln('texture ''%s'' already loaded', [RecName]); - Result := a; - Exit; - end; - end; - end; - } - - // Òåêñòóðû ñî ñïåöèàëüíûìè èìåíàìè (âîäà, ëàâà, êèñëîòà): - if (RecName = TEXTURE_NAME_WATER) or - (RecName = TEXTURE_NAME_ACID1) or - (RecName = TEXTURE_NAME_ACID2) then - begin - SetLength(Textures, Length(Textures)+1); - - with Textures[High(Textures)] do - begin - TextureName := RecName; - if (TextureName = TEXTURE_NAME_WATER) then TextureID := LongWord(TEXTURE_SPECIAL_WATER) - else if (TextureName = TEXTURE_NAME_ACID1) then TextureID := LongWord(TEXTURE_SPECIAL_ACID1) - else if (TextureName = TEXTURE_NAME_ACID2) then TextureID := LongWord(TEXTURE_SPECIAL_ACID2); - - Anim := False; - end; - - result := High(Textures); - TextNameHash.put(RecName, result); - Exit; - end; - - // Çàãðóæàåì ðåñóðñ òåêñòóðû â ïàìÿòü èç WAD'à: - WADName := GetReplacementWad(g_ExtractWadName(RecName)); - if (WADName <> '') then addResToExternalResList(WADName); - if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else - - WAD := TWADFile.Create(); - WAD.ReadFile(WADName); - - //txname := RecName; - { - if (WADName = Map) and WAD.GetResource(g_ExtractFilePathName(RecName), TextureData, ResLength) then - begin - FreeMem(TextureData); - RecName := 'COMMON\ALIEN'; - end; - } - - if WAD.GetResource(g_ExtractFilePathName(RecName), TextureData, ResLength, log) then - begin - SetLength(Textures, Length(Textures)+1); - if not e_CreateTextureMem(TextureData, ResLength, Textures[High(Textures)].TextureID) then - begin - e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning); - SetLength(Textures, Length(Textures)-1); - result := -1; - Exit; - end; - e_GetTextureSize(Textures[High(Textures)].TextureID, @Textures[High(Textures)].Width, @Textures[High(Textures)].Height); - FreeMem(TextureData); - Textures[High(Textures)].TextureName := RecName; - Textures[High(Textures)].Anim := False; - - result := High(Textures); - TextNameHash.put(RecName, result); - end - else // Íåò òàêîãî ðåóñðñà â WAD'å - begin - //e_WriteLog(Format('SHIT! Error loading texture %s : %s', [RecName, g_ExtractFilePathName(RecName)]), MSG_WARNING); - if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); - if log and (not BadTextNameHash.get(RecName, a)) then - begin - e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning); - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); - end; - BadTextNameHash.put(RecName, -1); - end; - - WAD.Free(); -end; - - -function CreateAnimTexture(RecName: String; Map: string; log: Boolean): Integer; -var - WAD: TWADFile; - TextureWAD: PChar = nil; - TextData: Pointer = nil; - TextureData: Pointer = nil; - cfg: TConfig = nil; - WADName: String; - ResLength: Integer; - TextureResource: String; - _width, _height, _framecount, _speed: Integer; - _backanimation: Boolean; - //imgfmt: string; - ia: TDynImageDataArray = nil; - f, c, frdelay, frloop: Integer; -begin - RecName := toLowerCase1251(RecName); - if (TextNameHash = nil) then TextNameHash := THashStrInt.Create(); - if TextNameHash.get(RecName, result) then - begin - // i found her! - //e_LogWritefln('animated texture ''%s'' already loaded (%s)', [RecName, result]); - exit; - end; - - result := -1; - - //e_LogWritefln('*** Loading animated texture "%s"', [RecName]); - - if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); - if BadTextNameHash.get(RecName, f) then - begin - //e_WriteLog(Format('no animation texture %s (don''t worry)', [RecName]), MSG_NOTIFY); - exit; - end; - - // ×èòàåì WAD-ðåñóðñ àíèì.òåêñòóðû èç WAD'à â ïàìÿòü: - WADName := GetReplacementWad(g_ExtractWadName(RecName)); - if (WADName <> '') then addResToExternalResList(WADName); - if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else - - WAD := TWADFile.Create(); - try - //if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map; - - WAD.ReadFile(WADName); - - if not WAD.GetResource(g_ExtractFilePathName(RecName), TextureWAD, ResLength, log) then - begin - if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); - if log and (not BadTextNameHash.get(RecName, f)) then - begin - e_WriteLog(Format('Error loading animation texture %s', [RecName]), TMsgType.Warning); - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); - end; - BadTextNameHash.put(RecName, -1); - exit; - end; - - {TEST - if WADName = Map then - begin - //FreeMem(TextureWAD); - if not WAD.GetResource('COMMON/animation', TextureWAD, ResLength) then Halt(1); - end; - } - - WAD.FreeWAD(); - - if ResLength < 6 then - begin - e_WriteLog(Format('Animated texture file "%s" too short', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - // ýòî ïòèöà? ýòî ñàìîë¸ò? - if isWadData(TextureWAD, ResLength) then + function CreateTexture (RecName: AnsiString; Map: String; log: Boolean): Integer; + var + HName: AnsiString; + WAD, WADz: TWADFile; + WADName, ResName: String; + ResData, ReszData: Pointer; + ResLen, ReszLen: Integer; + cfg: TConfig; + id: Integer; + begin + Result := -1; + HName := toLowerCase1251(RecName); + if (TextNameHash = nil) then + TextNameHash := THashStrInt.Create(); + if TextNameHash.get(HName, Result) then + begin + // e_LogWritefln('CreateTexture: found loaded %s', [Result]); + end + else begin - // íåò, ýòî ñóïåðìåí! - if not WAD.ReadMemory(TextureWAD, ResLength) then + Result := -1; + if (BadTextNameHash = nil) or not BadTextNameHash.has(HName) then begin - e_WriteLog(Format('Animated texture WAD file "%s" is invalid', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - // ×èòàåì INI-ðåñóðñ àíèì. òåêñòóðû è çàïîìèíàåì åãî óñòàíîâêè: - if not WAD.GetResource('TEXT/ANIM', TextData, ResLength) then - begin - e_WriteLog(Format('Animated texture file "%s" has invalid INI', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - cfg := TConfig.CreateMem(TextData, ResLength); - - TextureResource := cfg.ReadStr('', 'resource', ''); - if TextureResource = '' then - begin - e_WriteLog(Format('Animated texture WAD file "%s" has no "resource"', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - _width := cfg.ReadInt('', 'framewidth', 0); - _height := cfg.ReadInt('', 'frameheight', 0); - _framecount := cfg.ReadInt('', 'framecount', 0); - _speed := cfg.ReadInt('', 'waitcount', 0); - _backanimation := cfg.ReadBool('', 'backanimation', False); - - cfg.Free(); - cfg := nil; - - // ×èòàåì ðåñóðñ òåêñòóð (êàäðîâ) àíèì. òåêñòóðû â ïàìÿòü: - if not WAD.GetResource('TEXTURES/'+TextureResource, TextureData, ResLength) then - begin - e_WriteLog(Format('Animated texture WAD file "%s" has no texture "%s"', [RecName, 'TEXTURES/'+TextureResource]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - WAD.Free(); - WAD := nil; - - SetLength(Textures, Length(Textures)+1); - with Textures[High(Textures)] do - begin - // Ñîçäàåì êàäðû àíèì. òåêñòóðû èç ïàìÿòè: - if g_Frames_CreateMemory(@FramesID, '', TextureData, ResLength, _width, _height, _framecount, _backanimation) then - begin - TextureName := RecName; - Width := _width; - Height := _height; - Anim := True; - FramesCount := _framecount; - Speed := _speed; - result := High(Textures); - TextNameHash.put(RecName, result); - end + case RecName of + TEXTURE_NAME_WATER, TEXTURE_NAME_ACID1, TEXTURE_NAME_ACID2: + begin + SetLength(Textures, Length(Textures) + 1); + Textures[High(Textures)].FullName := RecName; + Textures[High(Textures)].TextureName := RecName; + Result := High(Textures); + TextNameHash.put(RecName, result); + end else - begin - if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); - if log and (not BadTextNameHash.get(RecName, f)) then + WADName := GetReplacementWad(g_ExtractWadName(RecName)); + if (WADName <> '') then + addResToExternalResList(WADName); + if WADName = '' then + WADName := Map; + ResName := g_ExtractFilePathName(RecName); + WAD := TWADFile.Create(); + if WAD.ReadFile(WadName) then begin - e_WriteLog(Format('Error loading animation texture %s', [RecName]), TMsgType.Warning); + if WAD.GetResource(ResName, ResData, ResLen, log) then + begin + if IsWadData(ResData, ResLen) then + begin + WADz := TWADFile.Create(); + if WADz.ReadMemory(ResData, ResLen) then + begin + if WADz.GetResource('TEXT/ANIM', ReszData, ReszLen) then + begin + cfg := TConfig.CreateMem(ReszData, ReszLen); + if cfg <> nil then + begin + SetLength(Textures, Length(Textures) + 1); + Textures[High(Textures)].TextureName := RecName; + Textures[High(Textures)].FullName := WadName + ':' + ResName; + Textures[High(Textures)].FramesCount := cfg.ReadInt('', 'framecount', 0); + Textures[High(Textures)].Speed := cfg.ReadInt('', 'waitcount', 0); + Result := High(Textures); + TextNameHash.put(HName, result); + cfg.Free; + end; + FreeMem(ReszData); + end + end; + WADz.Free; + end + else + begin + SetLength(Textures, Length(Textures) + 1); + Textures[High(Textures)].FullName := WADName + ':' + ResName; + Textures[High(Textures)].TextureName := RecName; + Result := High(Textures); + TextNameHash.put(HName, result); + end; + FreeMem(ResData); + end end; - BadTextNameHash.put(RecName, -1); - end; - end; - end - else - begin - // try animated image - { - imgfmt := DetermineMemoryFormat(TextureWAD, ResLength); - if length(imgfmt) = 0 then - begin - e_WriteLog(Format('Animated texture file "%s" has unknown format', [RecName]), MSG_WARNING); - exit; - end; - } - GlobalMetadata.ClearMetaItems(); - GlobalMetadata.ClearMetaItemsForSaving(); - if not LoadMultiImageFromMemory(TextureWAD, ResLength, ia) then - begin - e_WriteLog(Format('Animated texture file "%s" cannot be loaded', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - if length(ia) = 0 then - begin - e_WriteLog(Format('Animated texture file "%s" has no frames', [RecName]), TMsgType.Warning); - BadTextNameHash.put(RecName, -1); - exit; - end; - - WAD.Free(); - WAD := nil; - - _width := ia[0].width; - _height := ia[0].height; - _framecount := length(ia); - _speed := 1; - _backanimation := false; - frdelay := -1; - frloop := -666; - if GlobalMetadata.HasMetaItem(SMetaFrameDelay) then - begin - //writeln(' frame delay: ', GlobalMetadata.MetaItems[SMetaFrameDelay]); - try - f := GlobalMetadata.MetaItems[SMetaFrameDelay]; - frdelay := f; - if f < 0 then f := 0; - // rounding ;-) - c := f mod 28; - if c < 13 then c := 0 else c := 1; - f := (f div 28)+c; - if f < 1 then f := 1 else if f > 255 then f := 255; - _speed := f; - except - end; - end; - if GlobalMetadata.HasMetaItem(SMetaAnimationLoops) then - begin - //writeln(' frame loop : ', GlobalMetadata.MetaItems[SMetaAnimationLoops]); - try - f := GlobalMetadata.MetaItems[SMetaAnimationLoops]; - frloop := f; - if f <> 0 then _backanimation := true; // non-infinite looping == forth-and-back - except - end; - end; - //writeln(' creating animated texture with ', length(ia), ' frames (delay:', _speed, '; backloop:', _backanimation, ') from "', RecName, '"...'); - //for f := 0 to high(ia) do writeln(' frame #', f, ': ', ia[f].width, 'x', ia[f].height); - f := ord(_backanimation); - e_WriteLog(Format('Animated texture file "%s": %d frames (delay:%d; back:%d; frdelay:%d; frloop:%d), %dx%d', [RecName, length(ia), _speed, f, frdelay, frloop, _width, _height]), TMsgType.Notify); - - SetLength(Textures, Length(Textures)+1); - // cîçäàåì êàäðû àíèì. òåêñòóðû èç êàðòèíîê - if g_CreateFramesImg(ia, @Textures[High(Textures)].FramesID, '', _backanimation) then - begin - Textures[High(Textures)].TextureName := RecName; - Textures[High(Textures)].Width := _width; - Textures[High(Textures)].Height := _height; - Textures[High(Textures)].Anim := True; - Textures[High(Textures)].FramesCount := length(ia); - Textures[High(Textures)].Speed := _speed; - result := High(Textures); - TextNameHash.put(RecName, result); - //writeln(' CREATED!'); - end - else - begin - if (BadTextNameHash = nil) then BadTextNameHash := THashStrInt.Create(); - if log and (not BadTextNameHash.get(RecName, f)) then - begin - e_WriteLog(Format('Error loading animation texture "%s" images', [RecName]), TMsgType.Warning); - end; - BadTextNameHash.put(RecName, -1); + WAD.Free; + end end; end; - finally - for f := 0 to High(ia) do FreeImage(ia[f]); - WAD.Free(); - cfg.Free(); - if (TextureWAD <> nil) then FreeMem(TextureWAD); - if (TextData <> nil) then FreeMem(TextData); - if (TextureData <> nil) then FreeMem(TextureData); + if Result < 0 then + begin + if (BadTextNameHash = nil) then + BadTextNameHash := THashStrInt.Create(); + if log and (not BadTextNameHash.get(HName, id)) then + e_WriteLog(Format('Error loading texture %s', [RecName]), TMsgType.Warning); + BadTextNameHash.put(HName, -1); + end end; -end; procedure CreateItem(Item: TDynRecord); begin @@ -1356,7 +1076,6 @@ end; procedure CreateArea(Area: TDynRecord); var a: Integer; - id: DWORD = 0; begin case Area.AreaType of AREA_DMPOINT, AREA_PLAYERPOINT1, AREA_PLAYERPOINT2, @@ -1396,14 +1115,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; @@ -1664,7 +1376,7 @@ var FileName, mapResName, TexName, s: AnsiString; Data: Pointer; Len: Integer; - ok, isAnim: Boolean; + ok: Boolean; CurTex, ntn: Integer; rec, texrec: TDynRecord; pttit: PTRec; @@ -1842,23 +1554,17 @@ begin else begin {$IF DEFINED(D2F_DEBUG_TXLOAD)} - e_LogWritefln(' Loading texture #%d: %s', [cnt, rec.Resource]); + 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 + ntn := CreateTexture(rec.Resource, FileName, True); + if ntn < 0 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])); + if rec.Anim then + g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_ANIM], [rec.Resource])) + else + g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [rec.Resource])); + ntn := CreateNullTexture(rec.Resource) end; - if (ntn < 0) then ntn := CreateNullTexture(rec.Resource); - rec.tagInt := ntn; // remember texture number end; g_Game_StepLoading(); @@ -1998,39 +1704,7 @@ begin if (k = NNF_NAME_BEFORE) or (k = NNF_NAME_AFTER) then begin - // Ïðîáóåì äîáàâèòü íîâóþ òåêñòóðó - if texrec.Anim then - begin - // Íà÷àëüíàÿ - àíèìèðîâàííàÿ, èùåì àíèìèðîâàííóþ - isAnim := True; - //e_LogWritefln('000: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - ok := CreateAnimTexture(TexName, FileName, False) >= 0; - //e_LogWritefln('001: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - if not ok then - begin - // Íåò àíèìèðîâàííîé, èùåì îáû÷íóþ - isAnim := False; - //e_LogWritefln('002: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - ok := CreateTexture(TexName, FileName, False) >= 0; - //e_LogWritefln('003: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - end; - end - else - begin - // Íà÷àëüíàÿ - îáû÷íàÿ, èùåì îáû÷íóþ - isAnim := False; - //e_LogWritefln('004: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - ok := CreateTexture(TexName, FileName, False) >= 0; - //e_LogWritefln('005: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - if not ok then - begin - // Íåò îáû÷íîé, èùåì àíèìèðîâàííóþ - isAnim := True; - //e_LogWritefln('006: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - ok := CreateAnimTexture(TexName, FileName, False) >= 0; - //e_LogWritefln('007: pannum=%s; TexName=[%s]; FileName=[%s]', [pannum, TexName, FileName]); - end; - end; + ok := CreateTexture(TexName, FileName, False) >= 0; // Îíà ñóùåñòâóåò. Çàíîñèì åå ID â ñïèñîê ïàíåëè if ok then @@ -2042,7 +1716,6 @@ begin begin SetLength(AddTextures, Length(AddTextures)+1); AddTextures[High(AddTextures)].Texture := c; - AddTextures[High(AddTextures)].Anim := isAnim; break; end; end; @@ -2051,7 +1724,6 @@ begin begin SetLength(AddTextures, Length(AddTextures)+1); AddTextures[High(AddTextures)].Texture := c; - AddTextures[High(AddTextures)].Anim := isAnim; end; end; end @@ -2062,7 +1734,6 @@ begin // Çàíîñèì òåêóùóþ òåêñòóðó íà ñâîå ìåñòî SetLength(AddTextures, Length(AddTextures)+1); AddTextures[High(AddTextures)].Texture := rec.tagInt; // internal texture number, not map index - AddTextures[High(AddTextures)].Anim := texrec.Anim; CurTex := High(AddTextures); ok := true; end @@ -2082,8 +1753,6 @@ begin // Çàíîñèì òîëüêî òåêóùóþ òåêñòóðó SetLength(AddTextures, 1); AddTextures[0].Texture := rec.tagInt; // internal texture number, not map index - AddTextures[0].Anim := false; - if (texrec <> nil) then AddTextures[0].Anim := texrec.Anim; CurTex := 0; end; @@ -2199,20 +1868,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); - if gTextureFilter then TEXTUREFILTER := GL_LINEAR else TEXTUREFILTER := GL_NEAREST; - try - s := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res)); - if g_Texture_CreateWAD(BackID, s) then - g_Game_SetupScreenSize - else - g_FatalError(Format(_lc[I_GAME_ERROR_SKY], [s])) - finally - TEXTUREFILTER := GL_NEAREST; - end; + gMapInfo.SkyFullName := e_GetResourcePath(WadDirs, gMapInfo.SkyName, g_ExtractWadName(Res)); end; // Çàãðóçêà ìóçûêè @@ -2401,8 +2062,6 @@ begin end; procedure g_Map_Free(freeTextures: Boolean=true); -var - a: Integer; procedure FreePanelArray(var panels: TPanelArray); var @@ -2451,27 +2110,7 @@ begin if freeTextures then begin e_LogWritefln('g_Map_Free: clearing textures...', []); - if (Textures <> nil) then - begin - for a := 0 to High(Textures) do - begin - if not g_Map_IsSpecialTexture(Textures[a].TextureName) then - begin - if Textures[a].Anim then - begin - g_Frames_DeleteByID(Textures[a].FramesID) - end - else - begin - if (Textures[a].TextureID <> LongWord(TEXTURE_NONE)) then - begin - e_DeleteTexture(Textures[a].TextureID); - end; - end; - end; - end; - Textures := nil; - end; + Textures := nil; TextNameHash.Free(); TextNameHash := nil; BadTextNameHash.Free(); @@ -2494,14 +2133,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); @@ -2552,8 +2183,6 @@ begin begin with gFlags[a] do begin - if gFlags[a].Animation <> nil then gFlags[a].Animation.Update(); - m := g_Obj_Move(@Obj, True, True); if gTime mod (GAME_TICK*2) <> 0 then Continue;