X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_main.pas;h=dfb9b75ef200377d2fbf27e5e7d780ac63f3acff;hb=c869f28997ec7308491cbc067ee15d8a53f923e4;hp=d869c785749cd0497a217349a91f666e436713d1;hpb=1ce8d00ce0f8da0afff7b341a361f0993f33e810;p=d2df-editor.git diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index d869c78..dfb9b75 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -215,6 +215,7 @@ type procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); procedure FormWindowStateChange(Sender: TObject); + procedure miRecentFileExecute(Sender: TObject); procedure miMacRecentClearClick(Sender: TObject); procedure miMacZoomClick(Sender: TObject); procedure lbTextureListClick(Sender: TObject); @@ -348,10 +349,10 @@ uses f_mapoptions, g_basic, f_about, f_mapoptimization, f_mapcheck, f_addresource_texture, g_textures, f_activationtype, f_keys, wadreader, fileutil, - MAPREADER, f_selectmap, f_savemap, WADEDITOR, MAPDEF, + MAPREADER, f_selectmap, f_savemap, WADEDITOR, WADSTRUCT, MAPDEF, g_map, f_saveminimap, f_addresource, CONFIG, f_packmap, f_addresource_sound, f_choosetype, - g_language, ClipBrd, g_resources, g_options; + g_language, ClipBrd, g_options; const UNDO_DELETE_PANEL = 1; @@ -407,8 +408,7 @@ const type TUndoRec = record - UndoType: Byte; - case Byte of + case UndoType: Byte of UNDO_DELETE_PANEL: (Panel: ^TPanel); UNDO_DELETE_ITEM: (Item: TItem); UNDO_DELETE_AREA: (Area: TArea); @@ -429,9 +429,8 @@ type end; TCopyRec = record - ObjectType: Byte; ID: Cardinal; - case Byte of + case ObjectType: Byte of OBJECT_PANEL: (Panel: ^TPanel); OBJECT_ITEM: (Item: TItem); OBJECT_AREA: (Area: TArea); @@ -2371,10 +2370,10 @@ begin Result := Res; end; -procedure StringToCopyBuffer(Str: String; var CopyBuf: TCopyRecArray; - var pmin: TPoint); +procedure StringToCopyBuffer(Str: String; var CopyBuf: TCopyRecArray; var pmin: TPoint); var i, j, t: Integer; + minArea, newArea, newX, newY: LongInt; function GetNext(): String; var @@ -2417,6 +2416,7 @@ var end; begin + minArea := High(minArea); Str := Trim(Str); if GetNext() <> CLIPBOARD_SIG then @@ -2427,8 +2427,7 @@ begin // Тип объекта: t := StrToIntDef(GetNext(), 0); - if (t < OBJECT_PANEL) or (t > OBJECT_TRIGGER) or - (GetNext() <> ';') then + if (t < OBJECT_PANEL) or (t > OBJECT_TRIGGER) or (GetNext() <> ';') then begin // Что-то не то => пропускаем: t := Pos(';', Str); Delete(Str, 1, t); @@ -2454,13 +2453,14 @@ begin PanelType := StrToIntDef(GetNext(), PANEL_WALL); X := StrToIntDef(GetNext(), 0); Y := StrToIntDef(GetNext(), 0); - pmin.X := Min(X, pmin.X); - pmin.Y := Min(Y, pmin.Y); Width := StrToIntDef(GetNext(), 16); Height := StrToIntDef(GetNext(), 16); TextureName := GetNext(); Alpha := StrToIntDef(GetNext(), 0); Blending := (GetNext() = '1'); + newArea := X * Y - Width * Height; + newX := X; + newY := Y; end; end; @@ -2470,10 +2470,11 @@ begin ItemType := StrToIntDef(GetNext(), ITEM_MEDKIT_SMALL); X := StrToIntDef(GetNext(), 0); Y := StrToIntDef(GetNext(), 0); - pmin.X := Min(X, pmin.X); - pmin.Y := Min(Y, pmin.Y); OnlyDM := (GetNext() = '1'); Fall := (GetNext() = '1'); + newArea := X * Y; + newX := X; + newY := Y; end; OBJECT_MONSTER: @@ -2482,13 +2483,12 @@ begin MonsterType := StrToIntDef(GetNext(), MONSTER_DEMON); X := StrToIntDef(GetNext(), 0); Y := StrToIntDef(GetNext(), 0); - pmin.X := Min(X, pmin.X); - pmin.Y := Min(Y, pmin.Y); - - if GetNext() = '1' then - Direction := D_LEFT - else - Direction := D_RIGHT; + if GetNext() = '1' + then Direction := D_LEFT + else Direction := D_RIGHT; + newArea := X * Y; + newX := X; + newY := Y; end; OBJECT_AREA: @@ -2497,12 +2497,12 @@ begin AreaType := StrToIntDef(GetNext(), AREA_PLAYERPOINT1); X := StrToIntDef(GetNext(), 0); Y := StrToIntDef(GetNext(), 0); - pmin.X := Min(X, pmin.X); - pmin.Y := Min(Y, pmin.Y); - if GetNext() = '1' then - Direction := D_LEFT - else - Direction := D_RIGHT; + if GetNext() = '1' + then Direction := D_LEFT + else Direction := D_RIGHT; + newArea := X * Y; + newX := X; + newY := Y; end; OBJECT_TRIGGER: @@ -2511,47 +2511,26 @@ begin TriggerType := StrToIntDef(GetNext(), TRIGGER_EXIT); X := StrToIntDef(GetNext(), 0); Y := StrToIntDef(GetNext(), 0); - pmin.X := Min(X, pmin.X); - pmin.Y := Min(Y, pmin.Y); Width := StrToIntDef(GetNext(), 16); Height := StrToIntDef(GetNext(), 16); ActivateType := StrToIntDef(GetNext(), 0); Key := StrToIntDef(GetNext(), 0); Enabled := (GetNext() = '1'); TexturePanel := StrToIntDef(GetNext(), 0); - - for j := 0 to 127 do - Data.Default[j] := StrToIntDef(GetNext(), 0); - - case TriggerType of - TRIGGER_TELEPORT: - begin - pmin.X := Min(Data.TargetPoint.X, pmin.X); - pmin.Y := Min(Data.TargetPoint.Y, pmin.Y); - end; - TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF: - begin - pmin.X := Min(Data.tX, pmin.X); - pmin.Y := Min(Data.tY, pmin.Y); - end; - TRIGGER_SPAWNMONSTER: - begin - pmin.X := Min(Data.MonPos.X, pmin.X); - pmin.Y := Min(Data.MonPos.Y, pmin.Y); - end; - TRIGGER_SPAWNITEM: - begin - pmin.X := Min(Data.ItemPos.X, pmin.X); - pmin.Y := Min(Data.ItemPos.Y, pmin.Y); - end; - TRIGGER_SHOT: - begin - pmin.X := Min(Data.ShotPos.X, pmin.X); - pmin.Y := Min(Data.ShotPos.Y, pmin.Y); - end; - end; + for j := 0 to 127 + do Data.Default[j] := StrToIntDef(GetNext(), 0); + newArea := X * Y - Width * Height; + newX := X; + newY := Y; end; end; + + if newArea < minArea then + begin + minArea := newArea; + pmin.X := newX; + pmin.Y := newY; + end; end; end; @@ -2559,32 +2538,17 @@ end; //Закончились вспомогательные процедуры //---------------------------------------- -type - TRecentHandler = class - private - FForm: TMainForm; - FPath: String; - public - constructor Create (form: TMainForm; path: String); - procedure Execute (Sender: TObject); - end; - -constructor TRecentHandler.Create (form: TMainForm; path: String); -begin - Assert(form <> nil); - FForm := form; - FPath := path; -end; - -procedure TRecentHandler.Execute (Sender: TObject); - var fn: AnsiString; +procedure TMainForm.miRecentFileExecute (Sender: TObject); +var + s, fn: AnsiString; begin - fn := g_ExtractWadName(FPath); + s := RecentFiles[(Sender as TMenuItem).Tag]; + fn := g_ExtractWadName(s); if FileExists(fn) then - OpenMap(fn, g_ExtractFilePathName(FPath)) + OpenMap(fn, g_ExtractFilePathName(s)) else Application.MessageBox('', 'File not available anymore', MB_OK); -// if Application.MessageBox(PChar(MsgMsgDelRecentPromt), PChar(MsgMsgDelRecent), MB_ICONQUESTION or MB_YESNO) = idYes then +// if Application.MessageBox(PChar(MsgMsgDelRecentPrompt), PChar(MsgMsgDelRecent), MB_ICONQUESTION or MB_YESNO) = idYes then // begin // RecentFiles.Delete(n); // RefreshRecentMenu(); @@ -2592,40 +2556,35 @@ begin end; procedure TMainForm.RefillRecentMenu (menu: TMenuItem; start: Integer; fmt: AnsiString); - var i: Integer; MI: TMenuItem; cb: TMethod; h: TRecentHandler; s: AnsiString; + var i: Integer; MI: TMenuItem; s: AnsiString; begin Assert(menu <> nil); Assert(start >= 0); Assert(start <= menu.Count); - // clear all recent entries from menu + // clear all the recent entries from menu i := start; while i < menu.Count do begin MI := menu.Items[i]; - cb := TMethod(MI.OnClick); - if cb.Code = @TRecentHandler.Execute then + if @MI.OnClick <> @TMainForm.miRecentFileExecute then + i += 1 + else begin - // this is recent menu entry - // remove it and free callback handler - h := TRecentHandler(cb.Data); menu.Delete(i); - MI.Free(); - h.Free(); - end - else - Inc(i); + MI.Destroy(); + end; end; // fill with a new ones - for i := 0 to RecentFiles.Count - 1 do + for i := 0 to RecentFiles.Count-1 do begin - s := RecentFiles[i]; - h := TRecentHandler.Create(self, s); MI := TMenuItem.Create(menu); - MI.Caption := Format(fmt, [i + 1, g_ExtractWadNameNoPath(s), g_ExtractFilePathName(s)]); - MI.OnClick := h.Execute; - menu.Insert(start + i, MI); + s := RecentFiles[i]; + MI.Caption := Format(fmt, [i+1, g_ExtractWadNameNoPath(s), g_ExtractFilePathName(s)]); + MI.OnClick := miRecentFileExecute; + MI.Tag := i; + menu.Insert(start + i, MI); // transfers ownership end; end; @@ -2647,7 +2606,7 @@ begin begin // Reconstruct Windows-like recent list start := miMenuFile.IndexOf(miWinRecent); - if start < 0 then start := miMenuFile.Count else start := start + 1; + if start < 0 then start := miMenuFile.Count else start += 1; RefillRecentMenu(miMenuFile, start, '%0:d %1:s:%2:s'); miWinRecent.Enabled := False; miWinRecent.Visible := RecentFiles.Count = 0; @@ -2670,13 +2629,21 @@ var cwdt, chgt: Byte; spc: ShortInt; ID: DWORD; + wad: TWADEditor_1; cfgdata: Pointer; cfglen: Integer; config: TConfig; begin + cfgdata := nil; + cfglen := 0; ID := 0; - g_ReadResource(GameWad, 'FONTS', cfgres, cfgdata, cfglen); - if cfgdata <> nil then + + wad := TWADEditor_1.Create; + if wad.ReadFile(GameWad) then + wad.GetResource('FONTS', cfgres, cfgdata, cfglen); + wad.Free(); + + if cfglen <> 0 then begin if not g_CreateTextureWAD('FONT_STD', GameWad + ':FONTS\' + texture) then e_WriteLog('ERROR ERROR ERROR', MSG_WARNING); @@ -2687,15 +2654,14 @@ begin spc := Min(Max(config.ReadInt('FontMap', 'Kerning', 0), -128), 127); if g_GetTexture('FONT_STD', ID) then - e_TextureFontBuild(ID, FontID, cwdt, chgt, spc - 2); + e_TextureFontBuild(ID, FontID, cwdt, chgt, spc-2); config.Free(); - FreeMem(cfgdata) end else - begin - e_WriteLog('Could not load FONT_STD', MSG_WARNING) - end + e_WriteLog('Could not load FONT_STD', MSG_WARNING); + + if cfglen <> 0 then FreeMem(cfgdata); end; procedure TMainForm.FormCreate(Sender: TObject); @@ -2843,9 +2809,6 @@ begin s := config.ReadStr('Editor', 'Language', ''); gLanguage := s; - Compress := config.ReadBool('Editor', 'Compress', True); - Backup := config.ReadBool('Editor', 'Backup', True); - TestGameMode := config.ReadStr('TestRun', 'GameMode', 'DM'); TestLimTime := config.ReadStr('TestRun', 'LimTime', '0'); TestLimScore := config.ReadStr('TestRun', 'LimScore', '0'); @@ -2899,6 +2862,23 @@ begin e_TextureFontPrintEx(X, Y, Text, FontID, 0, 0, 0, 1.0); end; +procedure InitGraphics; +begin + // FIXME: this is a shitty hack + if not gDataLoaded then + begin + e_WriteLog('Init OpenGL', MSG_NOTIFY); + e_InitGL(); + e_WriteLog('Loading data', MSG_NOTIFY); + LoadStdFont('STDTXT', 'STDFONT', gEditorFont); + e_WriteLog('Loading more data', MSG_NOTIFY); + LoadData(); + e_WriteLog('Loading even more data', MSG_NOTIFY); + gDataLoaded := True; + MainForm.FormResize(nil); + end; +end; + procedure TMainForm.Draw(); var x, y: Integer; @@ -2914,6 +2894,8 @@ begin Width := 0; Height := 0; + InitGraphics(); + e_BeginRender(); e_Clear(GL_COLOR_BUFFER_BIT, @@ -3796,7 +3778,12 @@ begin if Button = mbMiddle then MouseMDown := False; - DrawRect := nil; + if DrawRect <> nil then + begin + Dispose(DrawRect); + DrawRect := nil; + end; + ResizeType := RESIZETYPE_NONE; TextureID := 0; @@ -4361,8 +4348,11 @@ begin end; // Клавиши мыши не зажаты: - if (not MouseRDown) and (not MouseLDown) then + if (not MouseRDown) and (not MouseLDown) and (DrawRect <> nil) then + begin + Dispose(DrawRect); DrawRect := nil; + end; // Строка состояния - координаты мыши: StatusBar.Panels[1].Text := Format('(%d:%d)', @@ -4373,7 +4363,7 @@ end; procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin - CanClose := Application.MessageBox(PChar(MsgMsgExitPromt), + CanClose := Application.MessageBox(PChar(MsgMsgExitPrompt), PChar(MsgMsgExit), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = idYes; @@ -4541,7 +4531,7 @@ begin end end; - if Key = Ord('V') then + if Key = Ord('I') then begin // Поворот монстров и областей: if (SelectedObjects <> nil) then begin @@ -4912,7 +4902,7 @@ begin if OpenedMap = '' then Exit; - if Application.MessageBox(PChar(MsgMsgReopenMapPromt), + if Application.MessageBox(PChar(MsgMsgReopenMapPrompt), PChar(MsgMenuFileReopen), MB_ICONQUESTION or MB_YESNO) <> idYes then Exit; @@ -5542,7 +5532,7 @@ begin if i = -1 then Exit; - if Application.MessageBox(PChar(Format(MsgMsgDelTexturePromt, + if Application.MessageBox(PChar(Format(MsgMsgDelTexturePrompt, [SelectedTexture()])), PChar(MsgMsgDelTexture), MB_ICONQUESTION or MB_YESNO or @@ -5568,7 +5558,7 @@ end; procedure TMainForm.aNewMapExecute(Sender: TObject); begin - if Application.MessageBox(PChar(MsgMsgClearMapPromt), PChar(MsgMsgClearMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then + if Application.MessageBox(PChar(MsgMsgClearMapPrompt), PChar(MsgMsgClearMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then FullClear(); end; @@ -5715,7 +5705,7 @@ begin QuickSortCopyBuffer(0, b); end; -// Пестановка ссылок триггеров: +// Постановка ссылок триггеров: for a := 0 to Length(CopyBuffer)-1 do if CopyBuffer[a].ObjectType = OBJECT_TRIGGER then begin @@ -5836,15 +5826,16 @@ begin h := High(CopyBuffer); RemoveSelectFromObjects(); - if h > 0 then + if g_CollidePoint( + pmin.X, pmin.Y, -MapOffset.X-32, -MapOffset.Y-32, RenderPanel.Width, RenderPanel.Height) then begin - xadj := -pmin.X - Floor((MapOffset.X - 32) / DotStep) * DotStep; - yadj := -pmin.Y - Floor((MapOffset.Y - 32) / DotStep) * DotStep; + xadj := DotStep; + yadj := DotStep; end else begin - xadj := DotStep; - yadj := DotStep; + xadj := Floor((-pmin.X - MapOffset.X + 32) / DotStep) * DotStep; + yadj := Floor((-pmin.Y - MapOffset.Y + 32) / DotStep) * DotStep; end; for a := 0 to h do @@ -6368,7 +6359,7 @@ begin g_ProcessResourceStr(OpenedMap, FileName, Section, Res); - SaveMap(FileName+':\'+Res); + SaveMap(FileName+':\'+Res, ''); end; procedure TMainForm.aOpenMapExecute(Sender: TObject); @@ -6415,47 +6406,65 @@ end; procedure TMainForm.aDeleteMap(Sender: TObject); var - res: Integer; - FileName: String; - MapName: String; + WAD: TWADEditor_1; + MapList: SArray; + MapName: Char16; + a: Integer; + str: String; begin OpenDialog.Filter := MsgFileFilterWad; if not OpenDialog.Execute() then Exit; - FileName := OpenDialog.FileName; - SelectMapForm.Caption := MsgCapRemove; - SelectMapForm.lbMapList.Items.Clear(); - SelectMapForm.GetMaps(FileName); + WAD := TWADEditor_1.Create(); - if SelectMapForm.ShowModal() <> mrOK then + if not WAD.ReadFile(OpenDialog.FileName) then + begin + WAD.Free(); Exit; + end; - MapName := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; - if Application.MessageBox(PChar(Format(MsgMsgDeleteMapPromt, [MapName, OpenDialog.FileName])), PChar(MsgMsgDeleteMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then - Exit; + WAD.CreateImage(); + + MapList := WAD.GetResourcesList(''); + + SelectMapForm.Caption := MsgCapRemove; + SelectMapForm.lbMapList.Items.Clear(); + + if MapList <> nil then + for a := 0 to High(MapList) do + SelectMapForm.lbMapList.Items.Add(win2utf(MapList[a])); - g_DeleteResource(FileName, '', MapName, res); - if res <> 0 then + if (SelectMapForm.ShowModal() = mrOK) then begin - Application.MessageBox(PChar('Cant delete map res=' + IntToStr(res)), PChar('Map not deleted!'), MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1); - Exit - end; + str := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; + MapName := ''; + Move(str[1], MapName[0], Min(16, Length(str))); + + if Application.MessageBox(PChar(Format(MsgMsgDeleteMapPrompt, [MapName, OpenDialog.FileName])), PChar(MsgMsgDeleteMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then + Exit; + + WAD.RemoveResource('', utf2win(MapName)); - Application.MessageBox( - PChar(Format(MsgMsgMapDeletedPromt, [MapName])), - PChar(MsgMsgMapDeleted), - MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1 - ); + Application.MessageBox( + PChar(Format(MsgMsgMapDeletedPrompt, [MapName])), + PChar(MsgMsgMapDeleted), + MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1 + ); + + WAD.SaveTo(OpenDialog.FileName); // Удалили текущую карту - сохранять по старому ее нельзя: - if OpenedMap = (FileName + ':\' + MapName) then - begin - OpenedMap := ''; - OpenedWAD := ''; - MainForm.Caption := FormCaption - end + if OpenedMap = (OpenDialog.FileName+':\'+MapName) then + begin + OpenedMap := ''; + OpenedWAD := ''; + MainForm.Caption := FormCaption; + end; + end; + + WAD.Free(); end; procedure TMainForm.vleObjectPropertyKeyDown(Sender: TObject; @@ -6606,35 +6615,59 @@ begin end; procedure TMainForm.aSaveMapAsExecute(Sender: TObject); -var - idx: Integer; + var i, idx: Integer; list: TStringList; fmt: String; begin - SaveDialog.Filter := MsgFileFilterWad; - - if not SaveDialog.Execute() then - Exit; + list := TStringList.Create(); - SaveMapForm.GetMaps(SaveDialog.FileName, True); + // TODO: get loclized strings automatically from language files + SaveDialog.DefaultExt := '.dfz'; + SaveDialog.FilterIndex := 1; + SaveDialog.Filter := ''; + gWADEditorFactory.GetRegistredEditors(list); + for i := 0 to list.Count - 1 do + begin + if list[i] = 'DFZIP' then + SaveDialog.FilterIndex := i + 1; - if SaveMapForm.ShowModal() <> mrOK then - Exit; + if i <> 0 then + SaveDialog.Filter := SaveDialog.Filter + '|'; - SaveDialog.InitialDir := ExtractFileDir(SaveDialog.FileName); - OpenedMap := SaveDialog.FileName+':\'+SaveMapForm.eMapName.Text; - OpenedWAD := SaveDialog.FileName; + if list[i] = 'DFWAD' then + SaveDialog.Filter := SaveDialog.Filter + MsgFileFilterSaveDFWAD + else if list[i] = 'DFZIP' then + SaveDialog.Filter := SaveDialog.Filter + MsgFileFilterSaveDFZIP + else + SaveDialog.Filter := SaveDialog.Filter + list[i] + '|*.*'; + end; - idx := RecentFiles.IndexOf(OpenedMap); -// Такая карта уже недавно открывалась: - if idx >= 0 then - RecentFiles.Delete(idx); - RecentFiles.Insert(0, OpenedMap); - RefreshRecentMenu; + if SaveDialog.Execute() then + begin + i := SaveDialog.FilterIndex - 1; + if (i >= 0) and (i < list.Count) then fmt := list[i] else fmt := ''; - SaveMap(OpenedMap); + SaveMapForm.GetMaps(SaveDialog.FileName, True, fmt); + if SaveMapForm.ShowModal() = mrOK then + begin + SaveDialog.InitialDir := ExtractFileDir(SaveDialog.FileName); + OpenedMap := SaveDialog.FileName+':\'+SaveMapForm.eMapName.Text; + OpenedWAD := SaveDialog.FileName; + + idx := RecentFiles.IndexOf(OpenedMap); + // Такая карта уже недавно открывалась: + if idx >= 0 then + RecentFiles.Delete(idx); + RecentFiles.Insert(0, OpenedMap); + RefreshRecentMenu; + + SaveMap(OpenedMap, fmt); + + gMapInfo.FileName := SaveDialog.FileName; + gMapInfo.MapName := SaveMapForm.eMapName.Text; + UpdateCaption(gMapInfo.Name, ExtractFileName(gMapInfo.FileName), gMapInfo.MapName); + end; + end; - gMapInfo.FileName := SaveDialog.FileName; - gMapInfo.MapName := SaveMapForm.eMapName.Text; - UpdateCaption(gMapInfo.Name, ExtractFileName(gMapInfo.FileName), gMapInfo.MapName); + list.Free(); end; procedure TMainForm.aSelectAllExecute(Sender: TObject); @@ -6683,20 +6716,6 @@ end; procedure TMainForm.OnIdle(Sender: TObject; var Done: Boolean); var f: AnsiString; begin - // FIXME: this is a shitty hack - if not gDataLoaded then - begin - e_WriteLog('Init OpenGL', MSG_NOTIFY); - e_InitGL(); - e_WriteLog('Loading data', MSG_NOTIFY); - LoadStdFont('STDTXT', 'STDFONT', gEditorFont); - e_WriteLog('Loading more data', MSG_NOTIFY); - LoadData(); - e_WriteLog('Loading even more data', MSG_NOTIFY); - gDataLoaded := True; - MainForm.FormResize(nil); - end; - Draw(); if StartMap <> '' then begin f := StartMap; @@ -6928,7 +6947,7 @@ begin newWad := newWad + '.wad' end; tempMap := newWAD + ':\' + TEST_MAP_NAME; - SaveMap(tempMap); + SaveMap(tempMap, ''); // Опции игры: opt := 32 + 64;