From: binarymaster Date: Fri, 29 Sep 2017 15:42:45 +0000 (+0300) Subject: Main: Epic encoding and other bugs megafix! X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-editor.git;a=commitdiff_plain;h=6fb9c23afad22a71679525dc44ea32675d73609f Main: Epic encoding and other bugs megafix! --- diff --git a/src/editor/f_addresource.pas b/src/editor/f_addresource.pas index edca4ed..815fb1f 100644 --- a/src/editor/f_addresource.pas +++ b/src/editor/f_addresource.pas @@ -160,12 +160,12 @@ begin WAD.ReadFile(FileName); if cbSectionsList.Text <> '..' then - SectionName := utf2win(cbSectionsList.Text) + SectionName := cbSectionsList.Text else SectionName := ''; // Читаем ресурсы выбранной секции: - ResourceList := WAD.GetResourcesList(SectionName); + ResourceList := WAD.GetResourcesList(utf2win(SectionName)); WAD.Free(); @@ -194,14 +194,14 @@ begin if cbSectionsList.Text = '..' then SectionName := '' else - SectionName := utf2win(cbSectionsList.Text); + SectionName := cbSectionsList.Text; if cbWADList.Text[1] <> '<' then FileName := cbWADList.Text else FileName := ''; - FResourceName := FileName+':'+SectionName+'\'+utf2win(lbResourcesList.Items[lbResourcesList.ItemIndex]); + FResourceName := FileName+':'+SectionName+'\'+lbResourcesList.Items[lbResourcesList.ItemIndex]; if FileName <> '' then FFullResourceName := EditorDir+'wads/'+FResourceName diff --git a/src/editor/f_addresource_sky.pas b/src/editor/f_addresource_sky.pas index 9eea718..98a8026 100644 --- a/src/editor/f_addresource_sky.pas +++ b/src/editor/f_addresource_sky.pas @@ -62,7 +62,7 @@ begin WAD := TWADEditor_1.Create(); WAD.ReadFile(WADName); - WAD.GetResource(SectionName, ResourceName, TextureData, ImageSize); + WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ImageSize); WAD.Free(); @@ -152,7 +152,7 @@ begin SectionName := '..'; // WAD файл: - a := cbWADList.Items.IndexOf(win2utf(FileName)); + a := cbWADList.Items.IndexOf(FileName); if a <> -1 then begin cbWADList.ItemIndex := a; @@ -160,7 +160,7 @@ begin end; // Секция: - a := cbSectionsList.Items.IndexOf(win2utf(SectionName)); + a := cbSectionsList.Items.IndexOf(SectionName); if a <> -1 then begin cbSectionsList.ItemIndex := a; @@ -168,7 +168,7 @@ begin end; // Ресурс: - a := lbResourcesList.Items.IndexOf(win2utf(ResourceName)); + a := lbResourcesList.Items.IndexOf(ResourceName); if a <> -1 then begin lbResourcesList.ItemIndex := a; diff --git a/src/editor/f_addresource_sound.pas b/src/editor/f_addresource_sound.pas index 55508f0..c6406d0 100644 --- a/src/editor/f_addresource_sound.pas +++ b/src/editor/f_addresource_sound.pas @@ -136,7 +136,7 @@ begin WAD := TWADEditor_1.Create; WAD.ReadFile(FileName); - if WAD.GetResource(SectionName, ResourceName, SoundData, ResLength) then + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), SoundData, ResLength) then begin sz := SizeOf(FMOD_CREATESOUNDEXINFO); FillMemory(@soundExInfo, sz, 0); @@ -311,7 +311,7 @@ begin SectionName := '..'; // WAD файл: - a := cbWADList.Items.IndexOf(win2utf(FileName)); + a := cbWADList.Items.IndexOf(FileName); if a <> -1 then begin cbWADList.ItemIndex := a; @@ -319,7 +319,7 @@ begin end; // Секция: - a := cbSectionsList.Items.IndexOf(win2utf(SectionName)); + a := cbSectionsList.Items.IndexOf(SectionName); if a <> -1 then begin cbSectionsList.ItemIndex := a; @@ -327,7 +327,7 @@ begin end; // Ресурс: - a := lbResourcesList.Items.IndexOf(win2utf(ResourceName)); + a := lbResourcesList.Items.IndexOf(ResourceName); if a <> -1 then begin lbResourcesList.ItemIndex := a; diff --git a/src/editor/f_addresource_texture.pas b/src/editor/f_addresource_texture.pas index 6c3840d..0ab28a5 100644 --- a/src/editor/f_addresource_texture.pas +++ b/src/editor/f_addresource_texture.pas @@ -5,7 +5,7 @@ unit f_addresource_texture; interface uses - LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, + LCLIntf, LCLType, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, f_addresource, StdCtrls, ExtCtrls, utils, Imaging, ImagingTypes, ImagingUtility; @@ -64,6 +64,8 @@ var begin Result := False; + Data := nil; + Size := 0; // Читаем файл и ресурс в нем: g_ProcessResourceStr(Res, WADName, SectionName, ResourceName); @@ -71,7 +73,7 @@ begin WAD := TWADEditor_1.Create(); if (not WAD.ReadFile(WADName)) or - (not WAD.GetResource(SectionName, ResourceName, Data, Size)) then + (not WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), Data, Size)) then begin WAD.Free(); Exit; @@ -169,6 +171,9 @@ var begin Result := False; + AnimWAD := nil; + Len := 0; + TextData := nil; // Читаем WAD: g_ProcessResourceStr(Res, WADName, SectionName, ResourceName); @@ -182,7 +187,7 @@ begin end; // Читаем WAD-ресурс из WAD: - if not WAD.GetResource(SectionName, ResourceName, AnimWAD, Len) then + if not WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), AnimWAD, Len) then begin WAD.Free(); Exit; @@ -273,9 +278,9 @@ begin bgc := 255 else bgc := 200; - clr.r := ClampToByte(((255 - clr.a) * bgc + clr.a * clr.r) div 255); - clr.g := ClampToByte(((255 - clr.a) * bgc + clr.a * clr.g) div 255); - clr.b := ClampToByte(((255 - clr.a) * bgc + clr.a * clr.b) div 255); + clr.r := ClampToByte((Byte(255 - clr.a) * bgc + clr.a * clr.r) div 255); + clr.g := ClampToByte((Byte(255 - clr.a) * bgc + clr.a * clr.g) div 255); + clr.b := ClampToByte((Byte(255 - clr.a) * bgc + clr.a * clr.b) div 255); // TODO: check for RGB/BGR somehow? ii^ := clr.b; Inc(ii); ii^ := clr.g; Inc(ii); @@ -300,13 +305,17 @@ var begin Result := nil; + AnimWAD := nil; + Len := 0; + TextData := nil; + TextureData := nil; // Читаем WAD файл и ресурс в нем: g_ProcessResourceStr(Res, WADName, SectionName, ResourceName); WAD := TWADEditor_1.Create(); WAD.ReadFile(WADName); - WAD.GetResource(SectionName, ResourceName, AnimWAD, Len); + WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), AnimWAD, Len); WAD.FreeWAD(); // Читаем описание анимации: @@ -348,6 +357,8 @@ var begin Result := nil; + TextureData := nil; + Len := 0; // Читаем WAD: g_ProcessResourceStr(ResourceStr, WADName, SectionName, ResourceName); @@ -360,7 +371,7 @@ begin end; // Читаем ресурс текстуры в нем: - WAD.GetResource(SectionName, ResourceName, TextureData, Len); + WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, Len); WAD.Free(); @@ -488,8 +499,8 @@ begin for i := 0 to lbResourcesList.Count-1 do if lbResourcesList.Selected[i] then begin - AddTexture(cbWADlist.Text, utf2win(cbSectionsList.Text), - utf2win(lbResourcesList.Items[i]), False); + AddTexture(cbWADlist.Text, cbSectionsList.Text, + lbResourcesList.Items[i], False); lbResourcesList.Selected[i] := False; end; end; diff --git a/src/editor/f_main.lfm b/src/editor/f_main.lfm index c51c295..ade3a7f 100644 --- a/src/editor/f_main.lfm +++ b/src/editor/f_main.lfm @@ -31,6 +31,7 @@ object MainForm: TMainForm Beveled = True MinSize = 64 OnCanResize = Splitter1CanResize + OnMoved = Splitter1Moved ResizeAnchor = akRight end object Splitter2: TSplitter @@ -42,6 +43,7 @@ object MainForm: TMainForm Align = alBottom MinSize = 64 OnCanResize = Splitter2CanResize + OnMoved = Splitter1Moved ResizeAnchor = akBottom end object PanelProps: TPanel diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index ef9e19d..2b9ddee 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -5,9 +5,9 @@ unit f_main; interface uses - LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics, - Controls, Forms, Dialogs, ImgList, StdCtrls, Buttons, - ComCtrls, ValEdit, Types, ToolWin, Menus, ExtCtrls, + LCLIntf, LCLType, SysUtils, Variants, Classes, Graphics, + Controls, Forms, Dialogs, StdCtrls, Buttons, + ComCtrls, ValEdit, Types, Menus, ExtCtrls, CheckLst, Grids, OpenGLContext, utils, UTF8Process; type @@ -214,7 +214,9 @@ type procedure RenderPanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure RenderPanelPaint(Sender: TObject); procedure RenderPanelResize(Sender: TObject); + procedure Splitter1Moved(Sender: TObject); procedure vleObjectPropertyEditButtonClick(Sender: TObject); + procedure vleObjectPropertyApply(Sender: TObject); procedure vleObjectPropertyGetPickList(Sender: TObject; const KeyName: String; Values: TStrings); procedure vleObjectPropertyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -323,10 +325,10 @@ procedure ChangeShownProperty(Name: String; NewValue: String); implementation uses - f_options, e_graphics, e_log, GL, GLExt, Math, + f_options, e_graphics, e_log, GL, Math, f_mapoptions, g_basic, f_about, f_mapoptimization, f_mapcheck, f_addresource_texture, g_textures, - f_activationtype, f_keys, MAPWRITER, MAPSTRUCT, + f_activationtype, f_keys, MAPREADER, f_selectmap, f_savemap, WADEDITOR, WADSTRUCT, MAPDEF, g_map, f_saveminimap, f_addresource, CONFIG, f_packmap, f_addresource_sound, f_maptest, f_choosetype, @@ -951,7 +953,8 @@ begin case TriggerType of TRIGGER_EXIT: begin - with ItemProps[InsertRow(_lc[I_PROP_TR_NEXT_MAP], Data.MapName, True)] do + str := win2utf(Data.MapName); + with ItemProps[InsertRow(_lc[I_PROP_TR_NEXT_MAP], str, True)] do begin EditStyle := esEllipsis; ReadOnly := True; @@ -1105,7 +1108,8 @@ begin TRIGGER_SOUND: begin - with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_NAME], Data.SoundName, True)] do + str := win2utf(Data.SoundName); + with ItemProps[InsertRow(_lc[I_PROP_TR_SOUND_NAME], str, True)] do begin EditStyle := esEllipsis; ReadOnly := True; @@ -1268,7 +1272,8 @@ begin TRIGGER_MUSIC: begin - with ItemProps[InsertRow(_lc[I_PROP_TR_MUSIC_NAME], Data.MusicName, True)] do + str := win2utf(Data.MusicName); + with ItemProps[InsertRow(_lc[I_PROP_TR_MUSIC_NAME], str, True)] do begin EditStyle := esEllipsis; ReadOnly := True; @@ -1370,7 +1375,8 @@ begin EditStyle := esPickList; ReadOnly := True; end; - with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_TEXT], Data.MessageText, True)] do + str := win2utf(Data.MessageText); + with ItemProps[InsertRow(_lc[I_PROP_TR_MESSAGE_TEXT], str, True)] do begin EditStyle := esSimple; MaxLength := 100; @@ -1881,13 +1887,17 @@ var ok: Boolean; FileName: String; ResourceName: String; - UResourceName: String; FullResourceName: String; SectionName: String; Data: Pointer; Width, Height: Word; fn: String; begin + Data := nil; + FrameLen := 0; + Width := 0; + Height := 0; + if aSection = '..' then SectionName := '' else @@ -1909,19 +1919,18 @@ begin else begin // Внешний WAD FileName := EditorDir+'wads/'+aWAD; - ResourceName := utf2win(aWAD)+':'+SectionName+'\'+aTex; + ResourceName := aWAD+':'+SectionName+'\'+aTex; end; ok := True; - UResourceName := win2utf(ResourceName); // Есть ли уже такая текстура: for a := 0 to MainForm.lbTextureList.Items.Count-1 do - if UResourceName = MainForm.lbTextureList.Items[a] then + if ResourceName = MainForm.lbTextureList.Items[a] then begin if not silent then ErrorMessageBox(Format(_lc[I_MSG_TEXTURE_ALREADY], - [UResourceName])); + [ResourceName])); ok := False; end; @@ -1930,7 +1939,7 @@ begin begin if not silent then ErrorMessageBox(Format(_lc[I_MSG_RES_NAME_64], - [UResourceName])); + [ResourceName])); ok := False; end; @@ -1939,7 +1948,7 @@ begin a := -1; if aWAD = _lc[I_WAD_SPECIAL_TEXS] then begin - a := MainForm.lbTextureList.Items.Add(UResourceName); + a := MainForm.lbTextureList.Items.Add(ResourceName); if not silent then SelectTexture(a); Result := True; @@ -1953,12 +1962,12 @@ begin GetFrame(FullResourceName, Data, FrameLen, Width, Height); if g_CreateTextureMemorySize(Data, FrameLen, ResourceName, 0, 0, Width, Height, 1) then - a := MainForm.lbTextureList.Items.Add(UResourceName); + a := MainForm.lbTextureList.Items.Add(ResourceName); end else // Обычная текстура begin if g_CreateTextureWAD(ResourceName, FullResourceName) then - a := MainForm.lbTextureList.Items.Add(UResourceName); + a := MainForm.lbTextureList.Items.Add(ResourceName); end; if (a > -1) and (not silent) then SelectTexture(a); @@ -2047,7 +2056,7 @@ begin lbTextureList.Sorted := True; lbTextureList.Sorted := False; - UpdateCaption(win2utf(gMapInfo.Name), ExtractFileName(FileName), MapName); + UpdateCaption(gMapInfo.Name, ExtractFileName(FileName), MapName); end; end; @@ -2213,7 +2222,7 @@ end; function SelectedTexture(): String; begin if MainForm.lbTextureList.ItemIndex <> -1 then - Result := utf2win(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex]) + Result := MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex] else Result := ''; end; @@ -2221,7 +2230,7 @@ end; function IsSpecialTextureSel(): Boolean; begin Result := (MainForm.lbTextureList.ItemIndex <> -1) and - IsSpecialTexture(utf2win(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex])); + IsSpecialTexture(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex]); end; function CopyBufferToString(var CopyBuf: TCopyRecArray): String; @@ -2555,7 +2564,9 @@ var cfglen: Integer; config: TConfig; begin + cfgdata := nil; cfglen := 0; + ID := 0; wad := TWADEditor_1.Create; if wad.ReadFile(EditorDir+'data/Game.wad') then @@ -2712,6 +2723,11 @@ var ObjCount: Word; aX, aY, aX2, aY2, XX, ScaleSz: Integer; begin + ID := 0; + PID := 0; + Width := 0; + Height := 0; + e_BeginRender(); e_Clear(GL_COLOR_BUFFER_BIT, @@ -4095,6 +4111,11 @@ begin MainForm.Resize(); end; +procedure TMainForm.Splitter1Moved(Sender: TObject); +begin + FormResize(Sender); +end; + procedure TMainForm.aMapOptionsExecute(Sender: TObject); var ResName: String; @@ -4105,7 +4126,7 @@ begin while (Pos(':\', ResName) > 0) do Delete(ResName, 1, Pos(':\', ResName) + 1); - UpdateCaption(win2utf(gMapInfo.Name), ExtractFileName(OpenedWAD), ResName); + UpdateCaption(gMapInfo.Name, ExtractFileName(OpenedWAD), ResName); end; procedure TMainForm.aAboutExecute(Sender: TObject); @@ -4270,6 +4291,7 @@ begin DrawPressRect := False; Exit; end; + i := -1; // Выбор области воздействия, в зависимости от типа триггера vleObjectProperty.FindRow(_lc[I_PROP_TR_EX_AREA], i); @@ -4326,11 +4348,11 @@ begin begin AddSoundForm.OKFunction := nil; AddSoundForm.lbResourcesList.MultiSelect := False; - AddSoundForm.SetResource := utf2win(vleObjectProperty.Cells[1, i]); + AddSoundForm.SetResource := vleObjectProperty.Cells[1, i]; if (AddSoundForm.ShowModal() = mrOk) then begin - vleObjectProperty.Cells[1, i] := win2utf(AddSoundForm.ResourceName); + vleObjectProperty.Cells[1, i] := AddSoundForm.ResourceName; bApplyProperty.Click(); end; Exit; @@ -4370,6 +4392,9 @@ var TextureID: DWORD; TextureWidth, TextureHeight: Word; begin + TextureID := 0; + TextureWidth := 0; + TextureHeight := 0; if (lbTextureList.ItemIndex <> -1) and (not IsSpecialTextureSel()) then begin @@ -4523,6 +4548,10 @@ var NoTextureID: DWORD; NW, NH: Word; begin + NoTextureID := 0; + NW := 0; + NH := 0; + if SelectedObjectCount() <> 1 then Exit; if not SelectedObjects[GetFirstSelected()].Live then @@ -4720,10 +4749,10 @@ begin case TriggerType of TRIGGER_EXIT: begin - s := vleObjectProperty.Values[_lc[I_PROP_TR_NEXT_MAP]]; + s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_NEXT_MAP]]); FillByte(Data.MapName[0], 16, 0); if s <> '' then - Move(Data.MapName[0], s[1], Min(Length(s), 16)); + Move(s[1], Data.MapName[0], Min(Length(s), 16)); end; TRIGGER_TEXTURE: @@ -4759,10 +4788,10 @@ begin TRIGGER_SOUND: begin - s := vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_NAME]]; + s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_NAME]]); FillByte(Data.SoundName[0], 64, 0); if s <> '' then - Move(Data.SoundName[0], s[1], Min(Length(s), 64)); + Move(s[1], Data.SoundName[0], Min(Length(s), 64)); Data.Volume := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_VOLUME]], 0), 255); Data.Pan := Min(StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SOUND_PAN]], 0), 255); @@ -4813,10 +4842,10 @@ begin TRIGGER_MUSIC: begin - s := vleObjectProperty.Values[_lc[I_PROP_TR_MUSIC_NAME]]; + s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_MUSIC_NAME]]); FillByte(Data.MusicName[0], 64, 0); if s <> '' then - Move(Data.MusicName[0], s[1], Min(Length(s), 64)); + Move(s[1], Data.MusicName[0], Min(Length(s), 64)); if vleObjectProperty.Values[_lc[I_PROP_TR_MUSIC_ACT]] = _lc[I_PROP_TR_MUSIC_ON] then Data.MusicAction := 1 @@ -4873,10 +4902,10 @@ begin else if vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TO]] = _lc[I_PROP_TR_MESSAGE_TO_5] then Data.MessageSendTo := 5; - s := vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TEXT]]; + s := utf2win(vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TEXT]]); FillByte(Data.MessageText[0], 100, 0); if s <> '' then - Move(Data.MessageText[0], s[1], Min(Length(s), 100)); + Move(s[1], Data.MessageText[0], Min(Length(s), 100)); Data.MessageTime := Min(Max( StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_MESSAGE_TIME]], 0), 0), 65535); @@ -5342,8 +5371,8 @@ begin begin Panel^.TextureID := SpecialTextureID(Panel^.TextureName); with MainForm.lbTextureList.Items do - if IndexOf(win2utf(Panel^.TextureName)) = -1 then - Add(win2utf(Panel^.TextureName)); + if IndexOf(Panel^.TextureName) = -1 then + Add(Panel^.TextureName); end; end; @@ -5461,7 +5490,7 @@ begin begin b := lbTypeSelect.ItemIndex; Values[Key] := PANELNAMES[b]; - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end end @@ -5496,7 +5525,7 @@ begin if SelectMapForm.ShowModal() = mrOK then begin vleObjectProperty.Values[Key] := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if (Key = _lc[I_PROP_TR_SOUND_NAME]) or @@ -5504,12 +5533,12 @@ begin begin // Выбор файла звука/музыки: AddSoundForm.OKFunction := nil; AddSoundForm.lbResourcesList.MultiSelect := False; - AddSoundForm.SetResource := utf2win(vleObjectProperty.Values[Key]); + AddSoundForm.SetResource := vleObjectProperty.Values[Key]; if (AddSoundForm.ShowModal() = mrOk) then begin - vleObjectProperty.Values[Key] := utf2win(AddSoundForm.ResourceName); - bApplyProperty.Click(); + vleObjectProperty.Values[Key] := AddSoundForm.ResourceName; + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_ACTIVATION] then @@ -5539,7 +5568,7 @@ begin b := b or ACTIVATE_NOMONSTER; Values[Key] := ActivateToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_KEYS] then @@ -5566,7 +5595,7 @@ begin b := b or KEY_BLUETEAM; Values[Key] := KeyToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_FX_TYPE] then @@ -5584,7 +5613,7 @@ begin begin b := lbTypeSelect.ItemIndex; Values[Key] := EffectToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_MONSTER_TYPE] then @@ -5602,7 +5631,7 @@ begin begin b := lbTypeSelect.ItemIndex + MONSTER_DEMON; Values[Key] := MonsterToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_ITEM_TYPE] then @@ -5631,7 +5660,7 @@ begin if b >= ITEM_WEAPON_KASTET then b := b + 2; Values[Key] := ItemToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_SHOT_TYPE] then @@ -5649,7 +5678,7 @@ begin begin b := lbTypeSelect.ItemIndex; Values[Key] := ShotToStr(b); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_EFFECT_TYPE] then @@ -5672,7 +5701,7 @@ begin Values[Key] := _lc[I_PROP_TR_EFFECT_PARTICLE] else Values[Key] := _lc[I_PROP_TR_EFFECT_ANIMATION]; - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_EFFECT_SUBTYPE] then @@ -5728,7 +5757,7 @@ begin Values[Key] := _lc[I_PROP_TR_EFFECT_BUBBLE]; end; - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_TR_EFFECT_COLOR] then @@ -5738,16 +5767,24 @@ begin if ColorDialog.Execute then begin Values[Key] := IntToStr(ColorDialog.Color); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end else if Key = _lc[I_PROP_PANEL_TEX] then begin // Смена текстуры: vleObjectProperty.Values[Key] := SelectedTexture(); - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; end; +procedure TMainForm.vleObjectPropertyApply(Sender: TObject); +begin + // hack to prevent empty ID in list + RenderPanel.SetFocus(); + bApplyProperty.Click(); + vleObjectProperty.SetFocus(); +end; + procedure TMainForm.aSaveMapExecute(Sender: TObject); var FileName, Section, Res: String; @@ -5852,13 +5889,13 @@ begin if MapList <> nil then for a := 0 to High(MapList) do - SelectMapForm.lbMapList.Items.Add(MapList[a]); + SelectMapForm.lbMapList.Items.Add(win2utf(MapList[a])); if (SelectMapForm.ShowModal() = mrOK) then begin str := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; MapName := ''; - Move(MapName[0], str[1], Min(16, Length(str))); + Move(str[1], MapName[0], Min(16, Length(str))); if MessageBox(0, PChar(Format(_lc[I_MSG_DELETE_MAP_PROMT], [MapName, OpenDialog.FileName])), @@ -5867,7 +5904,7 @@ begin MB_DEFBUTTON2) <> mrYes then Exit; - WAD.RemoveResource('', MapName); + WAD.RemoveResource('', utf2win(MapName)); MessageBox(0, PChar(Format(_lc[I_MSG_MAP_DELETED_PROMT], [MapName])), @@ -5893,7 +5930,7 @@ procedure TMainForm.vleObjectPropertyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then - bApplyProperty.Click(); + vleObjectPropertyApply(Sender); end; procedure MovePanel(var ID: DWORD; MoveType: Byte); @@ -6065,7 +6102,7 @@ begin gMapInfo.FileName := SaveDialog.FileName; gMapInfo.MapName := SaveMapForm.eMapName.Text; - UpdateCaption(win2utf(gMapInfo.Name), ExtractFileName(gMapInfo.FileName), gMapInfo.MapName); + UpdateCaption(gMapInfo.Name, ExtractFileName(gMapInfo.FileName), gMapInfo.MapName); end; procedure TMainForm.aSelectAllExecute(Sender: TObject); diff --git a/src/editor/f_mapoptimization.pas b/src/editor/f_mapoptimization.pas index e7aad24..efeac7d 100644 --- a/src/editor/f_mapoptimization.pas +++ b/src/editor/f_mapoptimization.pas @@ -105,7 +105,7 @@ begin for i := 0 to High(gPanels) do if (gPanels[i].PanelType <> 0) and - (gPanels[i].TextureName = utf2win(MainForm.lbTextureList.Items[a])) then + (gPanels[i].TextureName = MainForm.lbTextureList.Items[a]) then begin ok := False; Break; @@ -114,7 +114,7 @@ begin // Нашли неиспользуемую текстуру: if ok then begin - g_DeleteTexture(utf2win(MainForm.lbTextureList.Items[a])); + g_DeleteTexture(MainForm.lbTextureList.Items[a]); if not b then begin mOptimizationResult.Lines.Add(_lc[I_OPT_DELETED_TEXTURES]); diff --git a/src/editor/f_mapoptions.pas b/src/editor/f_mapoptions.pas index 9d3a20c..d86ff0e 100644 --- a/src/editor/f_mapoptions.pas +++ b/src/editor/f_mapoptions.pas @@ -112,13 +112,13 @@ uses // Callbacks to receive results from resource choosing dialogs function SetSky: Boolean; begin - MapOptionsForm.eBack.Text := win2utf(AddSkyForm.ResourceName); + MapOptionsForm.eBack.Text := AddSkyForm.ResourceName; Result := True; end; function SetMusic: Boolean; begin - MapOptionsForm.eMusic.Text := win2utf(AddSoundForm.ResourceName); + MapOptionsForm.eMusic.Text := AddSoundForm.ResourceName; Result := True; end; @@ -128,12 +128,12 @@ var a, b: Integer; begin // General map options - eMapName.Text := win2utf(gMapInfo.Name); - eMapDescription.Text := win2utf(gMapInfo.Description); - eAuthor.Text := win2utf(gMapInfo.Author); + eMapName.Text := gMapInfo.Name; + eMapDescription.Text := gMapInfo.Description; + eAuthor.Text := gMapInfo.Author; - eBack.Text := win2utf(gMapInfo.SkyName); - eMusic.Text := win2utf(gMapInfo.MusicName); + eBack.Text := gMapInfo.SkyName; + eMusic.Text := gMapInfo.MusicName; eMapWidth.Text := IntToStr(gMapInfo.Width); eMapHeight.Text := IntToStr(gMapInfo.Height); @@ -191,11 +191,11 @@ begin with gMapInfo do begin - Name := utf2win(eMapName.Text); - Description := utf2win(eMapDescription.Text); - Author := utf2win(eAuthor.Text); - SkyName := utf2win(eBack.Text); - MusicName := utf2win(eMusic.Text); + Name := eMapName.Text; + Description := eMapDescription.Text; + Author := eAuthor.Text; + SkyName := eBack.Text; + MusicName := eMusic.Text; if Width > newWidth then MapOffset.X := 0; @@ -236,7 +236,7 @@ procedure TMapOptionsForm.bSelectBackClick(Sender: TObject); begin AddSkyForm.OKFunction := SetSky; AddSkyForm.lbResourcesList.MultiSelect := False; - AddSkyForm.SetResource := utf2win(eBack.Text); + AddSkyForm.SetResource := eBack.Text; AddSkyForm.ShowModal(); end; @@ -244,7 +244,7 @@ procedure TMapOptionsForm.bSelectMusicClick(Sender: TObject); begin AddSoundForm.OKFunction := SetMusic; AddSoundForm.lbResourcesList.MultiSelect := False; - AddSoundForm.SetResource := utf2win(eMusic.Text); + AddSoundForm.SetResource := eMusic.Text; AddSoundForm.ShowModal(); end; diff --git a/src/editor/f_options.pas b/src/editor/f_options.pas index 28debba..926479e 100644 --- a/src/editor/f_options.pas +++ b/src/editor/f_options.pas @@ -5,7 +5,7 @@ unit f_options; interface uses - LCLIntf, LCLType, LMessages, Messages, SysUtils, Variants, Classes, + LCLIntf, LCLType, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Registry; diff --git a/src/editor/f_packmap.pas b/src/editor/f_packmap.pas index 0999e54..428d9d3 100644 --- a/src/editor/f_packmap.pas +++ b/src/editor/f_packmap.pas @@ -6,7 +6,7 @@ interface uses LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, - Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; + Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils; type TPackMapForm = class (TForm) @@ -98,7 +98,7 @@ begin Exit; end; - if not wad2.GetResource(section, resource, data, reslen) then + if not wad2.GetResource(utf2win(section), utf2win(resource), data, reslen) then begin MessageBox(0, PChar(Format(_lc[I_MSG_RES_ERROR], [filename, section, resource])), @@ -109,22 +109,22 @@ begin wad2.Free(); - {if wad_to.HaveResource(section_to, resource) then + {if wad_to.HaveResource(utf2win(section_to), utf2win(resource)) then begin for a := 2 to 256 do begin s := IntToStr(a); - if not wad_to.HaveResource(section_to, resource+s) then Break; + if not wad_to.HaveResource(utf2win(section_to), utf2win(resource+s)) then Break; end; resource := resource+s; end;} // Если такого ресурса нет в WAD-файле-назначении, то копируем: - if not wad_to.HaveResource(section_to, resource) then + if not wad_to.HaveResource(utf2win(section_to), utf2win(resource)) then begin - if not wad_to.HaveSection(section_to) then - wad_to.AddSection(section_to); - wad_to.AddResource(data, reslen, resource, section_to); + 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)); end; FreeMem(data); @@ -178,7 +178,7 @@ begin if cbTextrures.Checked and (textures <> nil) then for a := 0 to High(textures) do begin - res := textures[a].Resource; + res := win2utf(textures[a].Resource); if IsSpecialTexture(res) then Continue; @@ -198,7 +198,7 @@ begin end; // Переименовываем ресурс текстуры: - res := Format(':%s\%s', [tsection, resource]); + res := utf2win(Format(':%s\%s', [tsection, resource])); ZeroMemory(@textures[a].Resource[0], 64); CopyMemory(@textures[a].Resource[0], @res[1], Min(Length(res), 64)); end; @@ -210,7 +210,7 @@ begin // Нужно копировать небо: if cbSky.Checked then begin - res := header.SkyName; + res := win2utf(header.SkyName); g_ProcessResourceStr(res, @filename, @section, @resource); // Не записывать стандартное небо: @@ -227,7 +227,7 @@ begin end; // Переименовываем ресурс неба: - res := Format(':%s\%s', [ssection, resource]); + res := utf2win(Format(':%s\%s', [ssection, resource])); ZeroMemory(@header.SkyName[0], 64); CopyMemory(@header.SkyName[0], @res[1], Min(Length(res), 64)); end; @@ -236,7 +236,7 @@ begin // Нужно копировать музыку: if cbMusic.Checked then begin - res := header.MusicName; + res := win2utf(header.MusicName); g_ProcessResourceStr(res, @filename, @section, @resource); // Не записывать стандартную музыку: @@ -253,7 +253,7 @@ begin end; // Переименовываем ресурс музыки: - res := Format(':%s\%s', [msection, resource]); + res := utf2win(Format(':%s\%s', [msection, resource])); ZeroMemory(@header.MusicName[0], 64); CopyMemory(@header.MusicName[0], @res[1], Min(Length(res), 64)); end; @@ -311,7 +311,7 @@ begin Нужно проверять есть такая текстура textures и есть ли она вообще? // Переименовываем ресурс текстуры: - res := Format(':%s\%s', [tsection, resource]); + res := utf2win(Format(':%s\%s', [tsection, resource])); ZeroMemory(@textures[a].Resource[0], 64); CopyMemory(@textures[a].Resource[0], @res[1], Min(Length(res), 64)); diff --git a/src/editor/f_savemap.pas b/src/editor/f_savemap.pas index f89ee73..f5feee3 100644 --- a/src/editor/f_savemap.pas +++ b/src/editor/f_savemap.pas @@ -6,7 +6,7 @@ interface uses LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, - Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; + Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils; type TSaveMapForm = class (TForm) @@ -113,7 +113,7 @@ begin if Sign = MAP_SIGNATURE then begin - nm := ResList[a]; + nm := win2utf(ResList[a]); lbMapList.Items.Add(nm); if placeName then diff --git a/src/editor/f_selectmap.pas b/src/editor/f_selectmap.pas index a83e3e0..46f365c 100644 --- a/src/editor/f_selectmap.pas +++ b/src/editor/f_selectmap.pas @@ -6,7 +6,7 @@ interface uses LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics, - Controls, Forms, Dialogs, StdCtrls, ExtCtrls; + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils; type TSelectMapForm = class (TForm) @@ -84,7 +84,7 @@ begin FreeMem(Data); if Sign = MAP_SIGNATURE then - lbMapList.Items.Add(ResList[a]); + lbMapList.Items.Add(win2utf(ResList[a])); Sign := ''; end; diff --git a/src/editor/g_map.pas b/src/editor/g_map.pas index 0a97da7..caa6b57 100644 --- a/src/editor/g_map.pas +++ b/src/editor/g_map.pas @@ -5,7 +5,7 @@ Unit g_map; Interface Uses - LCLIntf, LCLType, LMessages, g_basic, e_graphics, MAPREADER, MAPSTRUCT, + LCLIntf, LCLType, g_basic, e_graphics, MAPREADER, MAPSTRUCT, MAPWRITER, e_log, MAPDEF, utils; Type @@ -240,12 +240,11 @@ procedure FreeData(); procedure ShiftMapObjects(dx, dy: Integer); -Implementation +implementation -Uses +uses BinEditor, g_textures, Dialogs, SysUtils, CONFIG, f_main, - Forms, Math, f_addresource_texture, WADEDITOR, - Masks, g_Language; + Forms, Math, f_addresource_texture, WADEDITOR, g_language; const OLD_ITEM_MEDKIT_SMALL = 1; @@ -1074,6 +1073,8 @@ begin triggers := nil; PanelTable := nil; MonsterTable := nil; + Data := nil; + Len := 0; // Открываем WAD, если надо: if Res <> '' then @@ -1093,20 +1094,25 @@ begin begin ZeroMemory(@header, SizeOf(TMapHeaderRec_1)); - if gMapInfo.Name <> '' then - CopyMemory(@MapName[0], @gMapInfo.Name[1], Min(32, Length(gMapInfo.Name))); + s := utf2win(gMapInfo.Name); + if s <> '' then + CopyMemory(@MapName[0], @s[1], Min(32, Length(s))); - if gMapInfo.Description <> '' then - CopyMemory(@MapDescription[0], @gMapInfo.Description[1], Min(256, Length(gMapInfo.Description))); + s := utf2win(gMapInfo.Description); + if s <> '' then + CopyMemory(@MapDescription[0], @s[1], Min(256, Length(s))); - if gMapInfo.Author <> '' then - CopyMemory(@MapAuthor[0], @gMapInfo.Author[1], Min(32, Length(gMapInfo.Author))); + s := utf2win(gMapInfo.Author); + if s <> '' then + CopyMemory(@MapAuthor[0], @s[1], Min(32, Length(s))); - if gMapInfo.MusicName <> '' then - CopyMemory(@MusicName[0], @gMapInfo.MusicName[1], Min(64, Length(gMapInfo.MusicName))); + s := utf2win(gMapInfo.MusicName); + if s <> '' then + CopyMemory(@MusicName[0], @s[1], Min(64, Length(s))); - if gMapInfo.SkyName <> '' then - CopyMemory(@SkyName[0], @gMapInfo.SkyName[1], Min(64, Length(gMapInfo.SkyName))); + s := utf2win(gMapInfo.SkyName); + if s <> '' then + CopyMemory(@SkyName[0], @s[1], Min(64, Length(s))); Width := gMapInfo.Width; Height := gMapInfo.Height; @@ -1122,7 +1128,7 @@ begin SetLength(textures, Length(textures)+1); s := utf2win(MainForm.lbTextureList.Items[a]); CopyMemory(@textures[High(textures)].Resource[0], @s[1], Min(64, Length(s))); - if g_GetTextureFlagByName(s) = 1 then + if g_GetTextureFlagByName(MainForm.lbTextureList.Items[a]) = 1 then textures[High(textures)].Anim := 1 else textures[High(textures)].Anim := 0; @@ -1174,7 +1180,7 @@ begin // Номер текстуры в списке текстур: if gPanels[a].TextureID <> TEXTURE_SPECIAL_NONE then for b := 0 to High(textures) do - if gPanels[a].TextureName = textures[b].Resource then + if utf2win(gPanels[a].TextureName) = textures[b].Resource then begin TextureNum := b; Break; @@ -1338,9 +1344,9 @@ begin // Записываем в WAD, если надо: if Res <> '' then begin - e_WriteLog('Fuck me (A) ' + ResName, MSG_NOTIFY); - WAD.RemoveResource('', ResName); - WAD.AddResource(Data, Len, ResName, ''); + s := utf2win(ResName); + WAD.RemoveResource('', s); + WAD.AddResource(Data, Len, s, ''); WAD.SaveTo(FileName); FreeMem(Data); @@ -1355,18 +1361,16 @@ end; procedure AddTexture(res: String; Error: Boolean); var a: Integer; - ures: String; begin - ures := win2utf(res); with MainForm.lbTextureList do begin for a := 0 to Count-1 do - if Items[a] = ures then + if Items[a] = res then Exit; - if Error and (slInvalidTextures.IndexOf(ures) = -1) then - slInvalidTextures.Add(ures); - Items.Add(ures); + if Error and (slInvalidTextures.IndexOf(res) = -1) then + slInvalidTextures.Add(res); + Items.Add(res); end; end; @@ -1390,7 +1394,7 @@ var Data: Pointer; Width, Height, m: Word; FileName, SectionName, ResName, _fn: String; - TextureRes: String; + TextureRes, ustr: String; pData: Pointer; Len, FrameLen: Integer; Error: Boolean; @@ -1398,6 +1402,15 @@ var 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]; @@ -1414,7 +1427,7 @@ begin end; // Читаем ресурс карты: - if not WAD.GetResource('', ResName, pData, Len) then + if not WAD.GetResource('', utf2win(ResName), pData, Len) then begin WAD.Free(); Exit; @@ -1442,50 +1455,51 @@ begin begin MainForm.pbLoad.StepIt(); Application.ProcessMessages(); + ustr := win2utf(textures[a].Resource); - if IsSpecialTexture(textures[a].Resource) then + if IsSpecialTexture(ustr) then begin - AddTexture(textures[a].Resource, False); + AddTexture(ustr, False); Continue; end; - g_ProcessResourceStr(textures[a].Resource, @_fn, nil, nil); + g_ProcessResourceStr(ustr, @_fn, nil, nil); if _fn = '' then - TextureRes := FileName + textures[a].Resource + TextureRes := FileName + ustr else - TextureRes := EditorDir+'wads/'+textures[a].Resource; + TextureRes := EditorDir+'wads/'+ustr; Error := False; if not ByteBool(textures[a].Anim) then begin // Обычная текстура - if not g_CreateTextureWAD(textures[a].Resource, TextureRes) then + if not g_CreateTextureWAD(ustr, TextureRes) then begin e_WriteLog(Format('g_CreateTextureWAD() error, res=%s', - [textures[a].Resource]), MSG_WARNING); + [ustr]), MSG_WARNING); Error := True; end; - AddTexture(textures[a].Resource, Error); + AddTexture(ustr, Error); end else // Anim begin // Анимированная текстура if not GetFrame(TextureRes, Data, FrameLen, Width, Height) then begin // Кадры e_WriteLog(Format('GetFrame() error, res=%s', - [textures[a].Resource]), MSG_WARNING); + [ustr]), MSG_WARNING); Error := True; end; - if not g_CreateTextureMemorySize(Data, FrameLen, textures[a].Resource, 0, 0, Width, Height, 1) then + if not g_CreateTextureMemorySize(Data, FrameLen, ustr, 0, 0, Width, Height, 1) then begin // Сама текстура e_WriteLog(Format('g_CreateTextureMemorySize() error, res=%s', - [textures[a].Resource]), MSG_WARNING); + [ustr]), MSG_WARNING); Error := True; end; - AddTexture(textures[a].Resource, Error); + AddTexture(ustr, Error); end; end; end; @@ -1528,9 +1542,10 @@ begin if WordBool(panel.PanelType and m) and (not (ByteBool(panels[a].Flags and PANEL_FLAG_HIDE))) then begin - if not IsSpecialTexture(textures[panels[a].TextureNum].Resource) then + ustr := win2utf(textures[panels[a].TextureNum].Resource); + if not IsSpecialTexture(ustr) then begin // Текстура - if g_GetTexture(textures[panels[a].TextureNum].Resource, panel.TextureID) then + if g_GetTexture(ustr, panel.TextureID) then g_GetTextureSizeByID(panel.TextureID, panel.TextureWidth, panel.TextureHeight) else begin panel.TextureWidth := 1; @@ -1545,9 +1560,9 @@ begin end; end else // Спец. текстура - panel.TextureID := SpecialTextureID(textures[panels[a].TextureNum].Resource); + panel.TextureID := SpecialTextureID(ustr); - panel.TextureName := textures[panels[a].TextureNum].Resource; + panel.TextureName := ustr; end; // Жидкость без текстуры: @@ -1676,11 +1691,11 @@ begin with gMapInfo do begin MapName := ResName; - Name := Header.MapName; - Description := Header.MapDescription; - Author := Header.MapAuthor; - MusicName := Header.MusicName; - SkyName := Header.SkyName; + Name := win2utf(Header.MapName); + Description := win2utf(Header.MapDescription); + Author := win2utf(Header.MapAuthor); + MusicName := win2utf(Header.MusicName); + SkyName := win2utf(Header.SkyName); Height := Header.Height; Width := Header.Width; end; @@ -1708,7 +1723,7 @@ const var map: TConfig; i, a: Integer; - s, us, section: String; + s, section: String; panel: TPanel; item: TItem; area: TArea; @@ -1747,13 +1762,13 @@ begin begin s := ExtractFileName(_FileName); Delete(s, Length(s)-3, 4); - s := UpperCase(s) + '.WAD:TEXTURES\'+ UpperCase(map.ReadStr('Textures', 'TextureName'+IntToStr(a), '')); + s := UpperCase(s) + '.WAD:TEXTURES\'+ UpperCase(win2utf(map.ReadStr('Textures', 'TextureName'+IntToStr(a), ''))); if not g_CreateTextureWAD(s, EditorDir+'wads/'+s) then Continue; end; - MainForm.lbTextureList.Items.Add(win2utf(s)); + MainForm.lbTextureList.Items.Add(s); end; // Чтение панелей: @@ -1803,7 +1818,7 @@ begin begin s := ExtractFileName(_FileName); Delete(s, Length(s)-3, 4); - s := UpperCase(s) + '.WAD:TEXTURES\' + UpperCase(map.ReadStr(section, 'TextureName', '')); + s := UpperCase(s) + '.WAD:TEXTURES\' + UpperCase(win2utf(map.ReadStr(section, 'TextureName', ''))); if g_GetTexture(s, panel.TextureID) then begin @@ -1834,10 +1849,9 @@ begin end; end; - us := win2utf(s); with MainForm.lbTextureList.Items do - if IndexOf(us) = -1 then - Add(us); + if IndexOf(s) = -1 then + Add(s); panel.TextureName := s; panel.TextureWidth := 1; panel.TextureHeight := 1; @@ -1963,8 +1977,8 @@ begin begin if Items.Count > 0 then for a := Items.Count-1 downto 0 do - if not IsSpecialTexture(utf2win(Items[a])) then - g_DeleteTexture(utf2win(Items[a])); + if not IsSpecialTexture(Items[a]) then + g_DeleteTexture(Items[a]); Clear(); end; @@ -1980,6 +1994,9 @@ procedure DrawPanels(fPanelType: Word); NoTextureID: DWORD; NW, NH: Word; begin + NoTextureID := 0; + NW := 0; + NH := 0; with gPanels[a] do begin case TextureID of @@ -2091,6 +2108,7 @@ var r: TRectWH; begin + ID := 0; // В режиме Превью рисуем небо: if PreviewMode then begin diff --git a/src/editor/g_textures.pas b/src/editor/g_textures.pas index 0ef0a81..786229a 100644 --- a/src/editor/g_textures.pas +++ b/src/editor/g_textures.pas @@ -4,7 +4,7 @@ unit g_textures; interface -uses LCLIntf, LCLType, LMessages, e_graphics; +uses LCLIntf, LCLType, LMessages, e_graphics, utils; function g_SimpleCreateTextureWAD(var ID: DWORD; Resource: string): Boolean; function g_SimpleCreateTextureWADSize(var ID: DWORD; Resource: string; @@ -80,7 +80,7 @@ begin WAD := TWADEditor_1.Create; WAD.ReadFile(FileName); - if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then begin if e_CreateTextureMem(TextureData, ResourceLength, ID) then Result := True; FreeMem(TextureData); @@ -137,7 +137,7 @@ begin WAD := TWADEditor_1.Create; WAD.ReadFile(FileName); - if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then begin Result := e_CreateTextureMem(TextureData, ResourceLength, TexturesArray[find_id].ID); FreeMem(TextureData); @@ -174,7 +174,7 @@ begin WAD := TWADEditor_1.Create; WAD.ReadFile(FileName); - if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then begin if e_CreateTextureMemEx(TextureData, ResourceLength, ID, X, Y, Width, Height) then Result := True; FreeMem(TextureData); @@ -205,7 +205,7 @@ begin WAD := TWADEditor_1.Create; WAD.ReadFile(FileName); - if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then begin Result := e_CreateTextureMemEx(TextureData, ResourceLength, TexturesArray[find_id].ID, X, Y, Width, Height); FreeMem(TextureData);