diff --git a/src/editor/g_map.pas b/src/editor/g_map.pas
index 3f3b58d2e734b3d82969b930a6e7730e73a6f418..9901af6e635ad3e3419f2ba6fe3009ae6ee0cd02 100644 (file)
--- a/src/editor/g_map.pas
+++ b/src/editor/g_map.pas
((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
((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
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();
uses
BinEditor, g_textures, Dialogs, SysUtils, CONFIG, f_main,
- Forms, Math, f_addresource_texture, WADEDITOR, g_language, g_resources, g_options;
+ Forms, Math, f_addresource_texture, WADEDITOR, g_language, g_options;
const
OLD_ITEM_MEDKIT_SMALL = 1;
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;
(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),
((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
Result := TEXTURE_SPECIAL_ACID2;
end;
-function SaveMap(Res: String): Pointer;
+function SaveMap(Res, ArchiveFormat: String): Pointer;
var
+ WAD: TWADEditor;
MapWriter: TMapWriter_1;
textures: TTexturesRec1Array;
panels: TPanelsRec1Array;
Len: LongWord;
begin
+ WAD := nil;
textures := nil;
panels := nil;
items := nil;
Data := nil;
Len := 0;
+// Открываем WAD, если надо:
+ if Res <> '' then
+ begin
+ g_ProcessResourceStr(Res, FileName, SectionName, ResName);
+
+ 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;
+
MapWriter := TMapWriter_1.Create();
// Сохраняем заголовок:
// Записываем в WAD, если надо:
if Res <> '' then
- begin
- g_ProcessResourceStr(Res, FileName, SectionName, ResName);
- g_AddResource(FileName, SectionName, ResName, Data, Len, a);
- ASSERT(a = 0);
- FreeMem(Data);
- Result := nil
- end
+ begin
+ s := utf2win(ResName);
+ WAD.RemoveResource('', s);
+ WAD.AddResource(Data, Len, s, '');
+ WAD.SaveTo(FileName);
+
+ FreeMem(Data);
+ WAD.Free();
+
+ Result := nil;
+ end
else
- begin
- Result := Data
- end
+ Result := Data;
end;
procedure AddTexture(res: String; Error: Boolean);
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;
MapReader: TMapReader_1;
Header: TMapHeaderRec_1;
textures: TTexturesRec1Array;
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;
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_WAD];
+ MainForm.lLoad.Caption := MsgLoadWad;
Application.ProcessMessages();
-// Читаем ресурс карты
+// Открываем WAD:
+ WAD := TWADEditor_1.Create();
g_ProcessResourceStr(Res, FileName, SectionName, ResName);
- g_ReadResource(FileName, SectionName, ResName, pData, Len);
- if pData = nil then Exit;
+
+ if not WAD.ReadFile(FileName) then
+ begin
+ WAD.Free();
+ Exit;
+ end;
+
+// Читаем ресурс карты:
+ if not WAD.GetResource('', utf2win(ResName), pData, Len) then
+ begin
+ WAD.Free();
+ Exit;
+ end;
+
+ WAD.Free();
MapReader := TMapReader_1.Create();
- MainForm.lLoad.Caption := _lc[I_LOAD_MAP];
+ MainForm.lLoad.Caption := MsgLoadMap;
Application.ProcessMessages();
MapReader.LoadMap(pData);
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(textures);
- MainForm.lLoad.Caption := _lc[I_LOAD_TEXTURES];
+ MainForm.lLoad.Caption := MsgLoadTextures;
for a := 0 to High(textures) do
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;
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(panels);
- MainForm.lLoad.Caption := _lc[I_LOAD_PANELS];
+ MainForm.lLoad.Caption := MsgLoadPanels;
for a := 0 to High(panels) do
begin
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(items);
- MainForm.lLoad.Caption := _lc[I_LOAD_ITEMS];
+ MainForm.lLoad.Caption := MsgLoadItems;
for a := 0 to High(items) do
begin
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(monsters);
- MainForm.lLoad.Caption := _lc[I_LOAD_MONSTERS];
+ MainForm.lLoad.Caption := MsgLoadMonsters;
for a := 0 to High(monsters) do
begin
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(areas);
- MainForm.lLoad.Caption := _lc[I_LOAD_AREAS];
+ MainForm.lLoad.Caption := MsgLoadAreas;
for a := 0 to High(areas) do
begin
begin
MainForm.pbLoad.Position := 0;
MainForm.pbLoad.Max := Length(triggers);
- MainForm.lLoad.Caption := _lc[I_LOAD_TRIGGERS];
+ MainForm.lLoad.Caption := MsgLoadTriggers;
for a := 0 to High(triggers) do
begin
// Открытие карты:
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_MAP];;
+ MainForm.lLoad.Caption := MsgLoadMap;;
Application.ProcessMessages();
map := TConfig.CreateFile(_FileName);
MainForm.pbLoad.Max := i;
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_TEXTURES];
+ MainForm.lLoad.Caption := MsgLoadTextures;
for a := 1 to i do
begin
MainForm.pbLoad.Max := i;
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_PANELS];
+ MainForm.lLoad.Caption := MsgLoadPanels;
for a := 1 to i do
begin
MainForm.pbLoad.Max := i;
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_ITEMS];
+ MainForm.lLoad.Caption := MsgLoadItems;
for a := 1 to i do
begin
MainForm.pbLoad.Max := i;
MainForm.pbLoad.Position := 0;
- MainForm.lLoad.Caption := _lc[I_LOAD_AREAS];
+ MainForm.lLoad.Caption := MsgLoadAreas;
for a := 1 to i do
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);
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);
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');
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');