index ac1d07d3d2f216a815d4483442e9876c5c380f75..cdbe1056f9fde71dd1a11c5d2bfd53dac216faff 100644 (file)
--- a/src/editor/f_packmap.pas
+++ b/src/editor/f_packmap.pas
uses
BinEditor, WADEDITOR, g_map, MAPREADER, MAPWRITER, MAPSTRUCT,
- f_main, math, g_language, g_resources;
+ f_main, math, g_language, g_resources, e_log;
{$R *.lfm}
eWAD.Text := SaveDialog.FileName;
end;
-function ProcessResource(wad_to: TWADEditor_1; section_to, filename, section, resource: String): Boolean;
+function ProcessResource(wad_to, section_to, filename, section, resource: String): Boolean;
var
data: Pointer;
- reslen: Integer;
+ res, len: Integer;
+ us, un: String;
begin
+ Result := True;
if filename = '' then
- g_ProcessResourceStr(OpenedMap, @filename, nil, nil)
+ g_GetResourceSection(OpenedMap, filename, us, un)
else
filename := EditorDir + 'wads/' + filename;
+ e_WriteLog('ProcessResource: "' + wad_to + '" "' + section_to + '" "' + filename + '" "' + section + '" "' + resource + '"', MSG_NOTIFY);
- g_ReadResource(filename, section, resource, data, reslen);
+ if resource = '' then Exit;
+
+ g_ReadResource(filename, section, resource, data, len);
if data <> nil then
begin
(* Write resource only if it does not exists *)
- if not wad_to.HaveResource(utf2win(section_to), utf2win(resource)) then
+ g_ExistsResource(wad_to, section_to, resource, res);
+ if res <> 0 then
begin
- if not wad_to.HaveSection(utf2win(section_to)) then
- wad_to.AddSection(utf2win(section_to));
- wad_to.AddResource(data, reslen, utf2win(resource), utf2win(section_to))
+ g_AddResource(wad_to, section_to, resource, data, len, res);
+ ASSERT(res = 0)
end;
FreeMem(data);
- Result := True
end
else
begin
procedure TPackMapForm.bPackClick(Sender: TObject);
var
- WAD: TWADEditor_1;
+ WadFile: String;
mr: TMapReader_1;
mw: TMapWriter_1;
data: Pointer;
if data = nil then
Exit;
- WAD := TWADEditor_1.Create();
-
-// Не перезаписывать WAD, а дополнить:
- if cbAdd.Checked then
- if WAD.ReadFile(eWAD.Text) then
- WAD.CreateImage();
+ if not cbAdd.Checked then
+ begin
+ (* Overwrite wad *)
+ if FileExists(eWAD.Text) then
+ begin
+ if FileExists(eWAD.Text + '.bak0') then
+ ASSERT(DeleteFile(eWAD.Text + '.bak0'));
+ ASSERT(RenameFile(eWAD.Text, eWAD.Text + '.bak0'))
+ end
+ end;
// Читаем карту из памяти:
mr := TMapReader_1.Create();
if IsSpecialTexture(res) then
Continue;
- g_ProcessResourceStr(res, @filename, @section, @resource);
+ g_GetResourceSection(res, filename, section, resource);
// Не записывать стандартные текстуры:
if (not cbNonStandart.Checked) or
(AnsiLowerCase(filename) <> SHRSHADE_WAD) ) then
begin
// Копируем ресурс текстуры:
- if not f_packmap.ProcessResource(WAD, tsection, filename, section, resource) then
+ if not f_packmap.ProcessResource(eWAD.Text, tsection, filename, section, resource) then
begin
mr.Free();
- WAD.Free();
Exit;
end;
if cbSky.Checked then
begin
res := win2utf(header.SkyName);
- g_ProcessResourceStr(res, @filename, @section, @resource);
+ g_GetResourceSection(res, filename, section, resource);
// Не записывать стандартное небо:
if (not cbNonStandart.Checked) or
(AnsiLowerCase(filename) <> SHRSHADE_WAD) ) then
begin
// Копируем ресурс неба:
- if not f_packmap.ProcessResource(WAD, ssection, filename, section, resource) then
+ if not f_packmap.ProcessResource(eWAD.Text, ssection, filename, section, resource) then
begin
mr.Free();
- WAD.Free();
Exit;
end;
if cbMusic.Checked then
begin
res := win2utf(header.MusicName);
- g_ProcessResourceStr(res, @filename, @section, @resource);
+ g_GetResourceSection(res, filename, section, resource);
// Не записывать стандартную музыку:
if (not cbNonStandart.Checked) or
(AnsiLowerCase(filename) <> SHRSHADE_WAD) ) then
begin
// Копируем ресурс музыки:
- if not f_packmap.ProcessResource(WAD, msection, filename, section, resource) then
+ if not f_packmap.ProcessResource(eWAD.Text, msection, filename, section, resource) then
begin
mr.Free();
- WAD.Free();
Exit;
end;
if res = '' then
Break;
- g_ProcessResourceStr(res, @filename, @section, @resource);
+ g_GetResourceSection(res, @filename, @section, @resource);
// Не записывать стандартные дополнительные текстуры:
if (not cbNonStandart.Checked) or
(AnsiLowerCase(filename) <> SHRSHADE_WAD) ) then
begin
// Копируем ресурс дополнительной текстуры:
- if f_packmap.ProcessResource(WAD, tsection, filename, section, resource) then
+ if f_packmap.ProcessResource(eWAD.Text, tsection, filename, section, resource) then
begin
Нужно проверять есть такая текстура textures и есть ли она вообще?
// Сохраняем карту из памяти под новым именем в WAD-файл:
len := mw.SaveMap(data);
- WAD.AddResource(data, len, eResource.Text, '');
- WAD.SaveTo(eWAD.Text);
-
+ g_AddResource(eWAD.Text, '', eResource.Text, data, len, a);
mw.Free();
mr.Free();
- WAD.Free();
-
- MessageDlg(Format(_lc[I_MSG_PACKED],
- [eResource.Text, ExtractFileName(eWAD.Text)]),
- mtInformation, [mbOK], 0);
-
Close();
+
+ ASSERT(a = 0); (* saved *)
+ MessageDlg(Format(_lc[I_MSG_PACKED], [eResource.Text, ExtractFileName(eWAD.Text)]), mtInformation, [mbOK], 0);
end;
procedure TPackMapForm.FormCreate(Sender: TObject);