X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-editor.git;a=blobdiff_plain;f=src%2Feditor%2Fg_map.pas;h=9901af6e635ad3e3419f2ba6fe3009ae6ee0cd02;hp=a93a75af45ac2396fb8f48f8849aeb24d50824eb;hb=HEAD;hpb=4cd27745126226e5e57a02f4c2a44ccbab16bbac diff --git a/src/editor/g_map.pas b/src/editor/g_map.pas index a93a75a..9901af6 100644 --- a/src/editor/g_map.pas +++ b/src/editor/g_map.pas @@ -113,7 +113,7 @@ const ((62), (16)), // WEAPON_ROCKETLAUNCHER ((54), (16)), // WEAPON_PLASMA ((61), (36)), // WEAPON_BFG - ((54), (16)), // WEAPON_SUPERPULEMET + ((54), (16)), // WEAPON_SUPERCHAINGUN (( 9), (11)), // AMMO_BULLETS ((28), (16)), // AMMO_BULLETS_BOX ((15), ( 7)), // AMMO_SHELLS @@ -126,7 +126,7 @@ const ((16), (16)), // KEY_RED ((16), (16)), // KEY_GREEN ((16), (16)), // KEY_BLUE - (( 1), ( 1)), // WEAPON_KASTET + (( 1), ( 1)), // WEAPON_IRONFIST ((43), (16)), // WEAPON_PISTOL ((14), (18)), // BOTTLE ((16), (15)), // HELMET @@ -233,7 +233,7 @@ function IsSpecialTexture(TextureName: String): Boolean; function SpecialTextureID(TextureName: String): DWORD; procedure ClearMap(); -function SaveMap(Res: String): Pointer; +function SaveMap(Res, ArchiveFormat: String): Pointer; function LoadMap(Res: String): Boolean; function LoadMapOld(_FileName: String): Boolean; procedure DrawMap(); @@ -262,7 +262,7 @@ const OLD_ITEM_WEAPON_ROCKETLAUNCHER = 11; OLD_ITEM_WEAPON_PLASMA = 12; OLD_ITEM_WEAPON_BFG = 13; - OLD_ITEM_WEAPON_SUPERPULEMET = 14; + OLD_ITEM_WEAPON_SUPERCHAINGUN = 14; OLD_ITEM_AMMO_BULLETS = 15; OLD_ITEM_AMMO_BULLETS_BOX = 16; OLD_ITEM_AMMO_SHELLS = 17; @@ -294,7 +294,7 @@ const (ITEM_WEAPON_ROCKETLAUNCHER), (ITEM_WEAPON_PLASMA), (ITEM_WEAPON_BFG), - (ITEM_WEAPON_SUPERPULEMET), + (ITEM_WEAPON_SUPERCHAINGUN), (ITEM_AMMO_BULLETS), (ITEM_AMMO_BULLETS_BOX), (ITEM_AMMO_SHELLS), @@ -330,7 +330,7 @@ const ((61), (15)), // WEAPON_ROCKETLAUNCHER ((53), (14)), // WEAPON_PLASMA ((61), (34)), // WEAPON_BFG - ((53), (16)), // WEAPON_SUPERPULEMET + ((53), (16)), // WEAPON_SUPERCHAINGUN (( 9), (10)), // AMMO_BULLETS ((28), (16)), // AMMO_BULLETS_BOX ((15), ( 7)), // AMMO_SHELLS @@ -1051,9 +1051,9 @@ begin Result := TEXTURE_SPECIAL_ACID2; end; -function SaveMap(Res: String): Pointer; +function SaveMap(Res, ArchiveFormat: String): Pointer; var - WAD: TWADEditor_1; + WAD: TWADEditor; MapWriter: TMapWriter_1; textures: TTexturesRec1Array; panels: TPanelsRec1Array; @@ -1086,11 +1086,22 @@ begin // Открываем WAD, если надо: if Res <> '' then begin - WAD := TWADEditor_1.Create(); g_ProcessResourceStr(Res, FileName, SectionName, ResName); - if not WAD.ReadFile(FileName) then - WAD.FreeWAD(); + if ArchiveFormat = '' then + begin + // format not specified -> try open automatically and append to it (or create new default) + WAD := gWADEditorFactory.OpenFile(FileName); + if WAD = nil then + WAD := gWADEditorFactory.CreateDefaultEditor(); + end + else + begin + // format specified -> append using exactly this format (overwrite if not compatible) + WAD := gWADEditorFactory.CreateEditor(ArchiveFormat); + if WAD.ReadFile(FileName) = False then + WAD.FreeWAD(); + end; WAD.CreateImage(); end; @@ -1381,6 +1392,24 @@ begin end; end; +function map_CreateAnimTexture(TextureName, Resource: String): Boolean; +var + Data: Pointer = nil; + FrameLen: Integer = 0; + Width: Word = 0; + Height: Word = 0; +begin + Result := GetFrame(Resource, Data, FrameLen, Width, Height); + if not Result then // Кадры + e_WriteLog(Format('GetFrame() error, res=%s', [TextureName]), MSG_WARNING) + else + begin + Result := g_CreateTextureMemorySize(Data, FrameLen, TextureName, 0, 0, Width, Height, 1); + if not Result then // Сама текстура + e_WriteLog(Format('g_CreateTextureMemorySize() error, res=%s', [TextureName]), MSG_WARNING); + end; +end; + function LoadMap(Res: String): Boolean; var WAD: TWADEditor_1; @@ -1398,23 +1427,18 @@ var area: TArea; trigger: TTrigger; a: Integer; - Data: Pointer; - Width, Height, m: Word; + m: Word; FileName, SectionName, ResName, _fn: String; TextureRes, ustr: String; pData: Pointer; - Len, FrameLen: Integer; - Error: Boolean; + Len: Integer; + Success: Boolean; NoTextureID: DWORD; NW, NH: Word; begin Result := False; pData := nil; Len := 0; - Data := nil; - FrameLen := 0; - Width := 0; - Height := 0; NoTextureID := 0; NW := 0; NH := 0; @@ -1464,50 +1488,43 @@ begin Application.ProcessMessages(); ustr := win2utf(textures[a].Resource); - if IsSpecialTexture(ustr) then + Success := True; + if not IsSpecialTexture(ustr) then begin - AddTexture(ustr, False); - Continue; - end; - - g_ProcessResourceStr(ustr, @_fn, nil, nil); - - if _fn = '' then - TextureRes := FileName + ustr - else - TextureRes := WadsDir + DirectorySeparator + ustr; + g_ProcessResourceStr(ustr, @_fn, nil, nil); - Error := False; + if _fn = '' + then TextureRes := FileName + ustr + else TextureRes := WadsDir + DirectorySeparator + ustr; - if not ByteBool(textures[a].Anim) then + if not Boolean(textures[a].Anim) then begin // Обычная текстура if not g_CreateTextureWAD(ustr, TextureRes) then begin - e_WriteLog(Format('g_CreateTextureWAD() error, res=%s', - [ustr]), MSG_WARNING); - Error := True; + e_WriteLog(Format('g_CreateTextureWAD() error, res=%s', [ustr]), MSG_WARNING); + Success := map_CreateAnimTexture(ustr, TextureRes); + if Success then + begin + textures[a].Anim := Byte(ByteBool(True)); + e_WriteLog(Format(' wrong (outdated?) anim flag hint - texture #%d is actually animated: %s', [a, ustr]), MSG_WARNING); + end; end; - - AddTexture(ustr, Error); end - else // Anim + else begin // Анимированная текстура - if not GetFrame(TextureRes, Data, FrameLen, Width, Height) then - begin // Кадры - e_WriteLog(Format('GetFrame() error, res=%s', - [ustr]), MSG_WARNING); - Error := True; - end; - - if not g_CreateTextureMemorySize(Data, FrameLen, ustr, 0, 0, Width, Height, 1) then - begin // Сама текстура - e_WriteLog(Format('g_CreateTextureMemorySize() error, res=%s', - [ustr]), MSG_WARNING); - Error := True; + if not map_CreateAnimTexture(ustr, TextureRes) then + begin + Success := g_CreateTextureWAD(ustr, TextureRes); + if Success then + begin + textures[a].Anim := Byte(ByteBool(False)); + e_WriteLog(Format(' wrong (outdated?) anim flag hint - texture #%d is actually static: %s', [a, ustr]), MSG_WARNING); + end; end; - - AddTexture(ustr, Error); end; + end; + + AddTexture(ustr, not Success); end; end; @@ -2204,7 +2221,7 @@ begin ITEM_WEAPON_ROCKETLAUNCHER: g_GetTexture('ITEM_WEAPON_ROCKETLAUNCHER', ID); ITEM_WEAPON_PLASMA: g_GetTexture('ITEM_WEAPON_PLASMA', ID); ITEM_WEAPON_BFG: g_GetTexture('ITEM_WEAPON_BFG', ID); - ITEM_WEAPON_SUPERPULEMET: g_GetTexture('ITEM_WEAPON_SUPERPULEMET', ID); + ITEM_WEAPON_SUPERCHAINGUN: g_GetTexture('ITEM_WEAPON_SUPERCHAINGUN', ID); ITEM_AMMO_BULLETS: g_GetTexture('ITEM_AMMO_BULLETS', ID); ITEM_AMMO_BULLETS_BOX: g_GetTexture('ITEM_AMMO_BULLETS_BOX', ID); ITEM_AMMO_SHELLS: g_GetTexture('ITEM_AMMO_SHELLS', ID); @@ -2598,7 +2615,7 @@ begin ITEM_WEAPON_ROCKETLAUNCHER: g_GetTexture('ITEM_WEAPON_ROCKETLAUNCHER', ID); ITEM_WEAPON_PLASMA: g_GetTexture('ITEM_WEAPON_PLASMA', ID); ITEM_WEAPON_BFG: g_GetTexture('ITEM_WEAPON_BFG', ID); - ITEM_WEAPON_SUPERPULEMET: g_GetTexture('ITEM_WEAPON_SUPERPULEMET', ID); + ITEM_WEAPON_SUPERCHAINGUN: g_GetTexture('ITEM_WEAPON_SUPERCHAINGUN', ID); ITEM_AMMO_BULLETS: g_GetTexture('ITEM_AMMO_BULLETS', ID); ITEM_AMMO_BULLETS_BOX: g_GetTexture('ITEM_AMMO_BULLETS_BOX', ID); ITEM_AMMO_SHELLS: g_GetTexture('ITEM_AMMO_SHELLS', ID); @@ -2896,14 +2913,14 @@ begin g_CreateTextureWAD('ITEM_MEDKIT_LARGE', GameWad + ':TEXTURES\MED2'); g_CreateTextureWAD('ITEM_WEAPON_SAW', GameWad + ':TEXTURES\SAW'); g_CreateTextureWAD('ITEM_WEAPON_PISTOL', GameWad + ':TEXTURES\PISTOL'); - g_CreateTextureWAD('ITEM_WEAPON_KASTET', GameWad + ':TEXTURES\KASTET'); + g_CreateTextureWAD('ITEM_WEAPON_IRONFIST', GameWad + ':TEXTURES\IRONFIST'); g_CreateTextureWAD('ITEM_WEAPON_SHOTGUN1', GameWad + ':TEXTURES\SHOTGUN1'); g_CreateTextureWAD('ITEM_WEAPON_SHOTGUN2', GameWad + ':TEXTURES\SHOTGUN2'); g_CreateTextureWAD('ITEM_WEAPON_CHAINGUN', GameWad + ':TEXTURES\MGUN'); g_CreateTextureWAD('ITEM_WEAPON_ROCKETLAUNCHER', GameWad + ':TEXTURES\RLAUNCHER'); g_CreateTextureWAD('ITEM_WEAPON_PLASMA', GameWad + ':TEXTURES\PGUN'); g_CreateTextureWAD('ITEM_WEAPON_BFG', GameWad + ':TEXTURES\BFG'); - g_CreateTextureWAD('ITEM_WEAPON_SUPERPULEMET', GameWad + ':TEXTURES\SPULEMET'); + g_CreateTextureWAD('ITEM_WEAPON_SUPERCHAINGUN', GameWad + ':TEXTURES\SCHAINGUN'); g_CreateTextureWAD('ITEM_AMMO_BULLETS', GameWad + ':TEXTURES\CLIP'); g_CreateTextureWAD('ITEM_AMMO_BULLETS_BOX', GameWad + ':TEXTURES\AMMO'); g_CreateTextureWAD('ITEM_AMMO_SHELLS', GameWad + ':TEXTURES\SHELL1'); @@ -2975,14 +2992,14 @@ begin g_DeleteTexture('ITEM_MEDKIT_LARGE'); g_DeleteTexture('ITEM_WEAPON_SAW'); g_DeleteTexture('ITEM_WEAPON_PISTOL'); - g_DeleteTexture('ITEM_WEAPON_KASTET'); + g_DeleteTexture('ITEM_WEAPON_IRONFIST'); g_DeleteTexture('ITEM_WEAPON_SHOTGUN1'); g_DeleteTexture('ITEM_WEAPON_SHOTGUN2'); g_DeleteTexture('ITEM_WEAPON_CHAINGUN'); g_DeleteTexture('ITEM_WEAPON_ROCKETLAUNCHER'); g_DeleteTexture('ITEM_WEAPON_PLASMA'); g_DeleteTexture('ITEM_WEAPON_BFG'); - g_DeleteTexture('ITEM_WEAPON_SUPERPULEMET'); + g_DeleteTexture('ITEM_WEAPON_SUPERCHAINGUN'); g_DeleteTexture('ITEM_AMMO_BULLETS'); g_DeleteTexture('ITEM_AMMO_BULLETS_BOX'); g_DeleteTexture('ITEM_AMMO_SHELLS');