summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6bd345e)
raw | patch | inline | side by side (parent: 6bd345e)
author | binarymaster <x86corez@gmail.com> | |
Fri, 29 Sep 2017 15:42:45 +0000 (18:42 +0300) | ||
committer | binarymaster <x86corez@gmail.com> | |
Fri, 29 Sep 2017 15:44:17 +0000 (18:44 +0300) |
14 files changed:
index edca4ed817570b631ebabe9260132922159974da..815fb1f38a8961a25fff67b9e211aa7d567a51a2 100644 (file)
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();
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
index 9eea7180818843a5581e452b2be08036792ea845..98a8026ac10961fb13f3f1fe8fb493d1af1dcd05 100644 (file)
WAD := TWADEditor_1.Create();
WAD.ReadFile(WADName);
- WAD.GetResource(SectionName, ResourceName, TextureData, ImageSize);
+ WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ImageSize);
WAD.Free();
SectionName := '..';
// WAD файл:
- a := cbWADList.Items.IndexOf(win2utf(FileName));
+ a := cbWADList.Items.IndexOf(FileName);
if a <> -1 then
begin
cbWADList.ItemIndex := a;
end;
// Секция:
- a := cbSectionsList.Items.IndexOf(win2utf(SectionName));
+ a := cbSectionsList.Items.IndexOf(SectionName);
if a <> -1 then
begin
cbSectionsList.ItemIndex := a;
end;
// Ресурс:
- a := lbResourcesList.Items.IndexOf(win2utf(ResourceName));
+ a := lbResourcesList.Items.IndexOf(ResourceName);
if a <> -1 then
begin
lbResourcesList.ItemIndex := a;
index 55508f0b724985ba0f52b0527e7fe51a81685d1d..c6406d0769f032f19fa96621a193538f9106a6a0 100644 (file)
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);
SectionName := '..';
// WAD файл:
- a := cbWADList.Items.IndexOf(win2utf(FileName));
+ a := cbWADList.Items.IndexOf(FileName);
if a <> -1 then
begin
cbWADList.ItemIndex := a;
end;
// Секция:
- a := cbSectionsList.Items.IndexOf(win2utf(SectionName));
+ a := cbSectionsList.Items.IndexOf(SectionName);
if a <> -1 then
begin
cbSectionsList.ItemIndex := a;
end;
// Ресурс:
- a := lbResourcesList.Items.IndexOf(win2utf(ResourceName));
+ a := lbResourcesList.Items.IndexOf(ResourceName);
if a <> -1 then
begin
lbResourcesList.ItemIndex := a;
index 6c3840d627d290c4dd44f1261a09c24a7f377031..0ab28a5586e623ebc0580fdfca4cff372e36e060 100644 (file)
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;
begin
Result := False;
+ Data := nil;
+ Size := 0;
// Читаем файл и ресурс в нем:
g_ProcessResourceStr(Res, WADName, SectionName, ResourceName);
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;
begin
Result := False;
+ AnimWAD := nil;
+ Len := 0;
+ TextData := nil;
// Читаем WAD:
g_ProcessResourceStr(Res, WADName, SectionName, ResourceName);
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;
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);
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();
// Читаем описание анимации:
begin
Result := nil;
+ TextureData := nil;
+ Len := 0;
// Читаем WAD:
g_ProcessResourceStr(ResourceStr, WADName, SectionName, ResourceName);
end;
// Читаем ресурс текстуры в нем:
- WAD.GetResource(SectionName, ResourceName, TextureData, Len);
+ WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, Len);
WAD.Free();
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 c51c295fb089769750f5b0966f5231032e4b88db..ade3a7fc534c7949a6752a2e0096dca0e2879810 100644 (file)
--- a/src/editor/f_main.lfm
+++ b/src/editor/f_main.lfm
Beveled = True
MinSize = 64
OnCanResize = Splitter1CanResize
+ OnMoved = Splitter1Moved
ResizeAnchor = akRight
end
object Splitter2: TSplitter
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 ef9e19d2ee9c59c7ffd0bdeae5e12aedfa9221cc..2b9ddee5a2a3f6a26c8311f6984b84d4655e3836 100644 (file)
--- a/src/editor/f_main.pas
+++ b/src/editor/f_main.pas
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
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);
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,
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;
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;
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;
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;
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
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;
begin
if not silent then
ErrorMessageBox(Format(_lc[I_MSG_RES_NAME_64],
- [UResourceName]));
+ [ResourceName]));
ok := False;
end;
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;
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);
lbTextureList.Sorted := True;
lbTextureList.Sorted := False;
- UpdateCaption(win2utf(gMapInfo.Name), ExtractFileName(FileName), MapName);
+ UpdateCaption(gMapInfo.Name, ExtractFileName(FileName), MapName);
end;
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;
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;
cfglen: Integer;
config: TConfig;
begin
+ cfgdata := nil;
cfglen := 0;
+ ID := 0;
wad := TWADEditor_1.Create;
if wad.ReadFile(EditorDir+'data/Game.wad') then
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,
MainForm.Resize();
end;
+procedure TMainForm.Splitter1Moved(Sender: TObject);
+begin
+ FormResize(Sender);
+end;
+
procedure TMainForm.aMapOptionsExecute(Sender: TObject);
var
ResName: String;
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);
DrawPressRect := False;
Exit;
end;
+ i := -1;
// Выбор области воздействия, в зависимости от типа триггера
vleObjectProperty.FindRow(_lc[I_PROP_TR_EX_AREA], i);
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;
TextureID: DWORD;
TextureWidth, TextureHeight: Word;
begin
+ TextureID := 0;
+ TextureWidth := 0;
+ TextureHeight := 0;
if (lbTextureList.ItemIndex <> -1) and
(not IsSpecialTextureSel()) then
begin
NoTextureID: DWORD;
NW, NH: Word;
begin
+ NoTextureID := 0;
+ NW := 0;
+ NH := 0;
+
if SelectedObjectCount() <> 1 then
Exit;
if not SelectedObjects[GetFirstSelected()].Live then
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:
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);
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
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);
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;
begin
b := lbTypeSelect.ItemIndex;
Values[Key] := PANELNAMES[b];
- bApplyProperty.Click();
+ vleObjectPropertyApply(Sender);
end;
end
end
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
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
b := b or ACTIVATE_NOMONSTER;
Values[Key] := ActivateToStr(b);
- bApplyProperty.Click();
+ vleObjectPropertyApply(Sender);
end;
end
else if Key = _lc[I_PROP_TR_KEYS] then
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
begin
b := lbTypeSelect.ItemIndex;
Values[Key] := EffectToStr(b);
- bApplyProperty.Click();
+ vleObjectPropertyApply(Sender);
end;
end
else if Key = _lc[I_PROP_TR_MONSTER_TYPE] then
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
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
begin
b := lbTypeSelect.ItemIndex;
Values[Key] := ShotToStr(b);
- bApplyProperty.Click();
+ vleObjectPropertyApply(Sender);
end;
end
else if Key = _lc[I_PROP_TR_EFFECT_TYPE] then
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
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
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;
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])),
MB_DEFBUTTON2) <> mrYes then
Exit;
- WAD.RemoveResource('', MapName);
+ WAD.RemoveResource('', utf2win(MapName));
MessageBox(0, PChar(Format(_lc[I_MSG_MAP_DELETED_PROMT],
[MapName])),
var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
- bApplyProperty.Click();
+ vleObjectPropertyApply(Sender);
end;
procedure MovePanel(var ID: DWORD; MoveType: Byte);
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);
index e7aad24b53f9c31dd9a4d1f5b54eeea616eae1ee..efeac7d6dab3c7668fe0d5fd06613cf08495f87c 100644 (file)
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;
// Нашли неиспользуемую текстуру:
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]);
index 9d3a20ce1e6b619ffa359802745d2d5068a584bd..d86ff0e3542b508c132588a588f188d4a0e0bfb9 100644 (file)
// 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;
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);
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;
begin
AddSkyForm.OKFunction := SetSky;
AddSkyForm.lbResourcesList.MultiSelect := False;
- AddSkyForm.SetResource := utf2win(eBack.Text);
+ AddSkyForm.SetResource := eBack.Text;
AddSkyForm.ShowModal();
end;
begin
AddSoundForm.OKFunction := SetMusic;
AddSoundForm.lbResourcesList.MultiSelect := False;
- AddSoundForm.SetResource := utf2win(eMusic.Text);
+ AddSoundForm.SetResource := eMusic.Text;
AddSoundForm.ShowModal();
end;
index 28debba765666f781e334d94807db7cdd40e0cdd..926479ebc984fce733836e7dcf4efe914178050b 100644 (file)
--- a/src/editor/f_options.pas
+++ b/src/editor/f_options.pas
interface
uses
- LCLIntf, LCLType, LMessages, Messages, SysUtils, Variants, Classes,
+ LCLIntf, LCLType, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls, ComCtrls, Registry;
index 0999e54c3758e074d1d3901ad5d0ea6153b205b7..428d9d355a0735a0805f02038ab128ddea81a41b 100644 (file)
--- a/src/editor/f_packmap.pas
+++ b/src/editor/f_packmap.pas
uses
LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes,
- Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
+ Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils;
type
TPackMapForm = class (TForm)
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])),
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);
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;
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;
// Нужно копировать небо:
if cbSky.Checked then
begin
- res := header.SkyName;
+ res := win2utf(header.SkyName);
g_ProcessResourceStr(res, @filename, @section, @resource);
// Не записывать стандартное небо:
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;
// Нужно копировать музыку:
if cbMusic.Checked then
begin
- res := header.MusicName;
+ res := win2utf(header.MusicName);
g_ProcessResourceStr(res, @filename, @section, @resource);
// Не записывать стандартную музыку:
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;
Нужно проверять есть такая текстура 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));
index f89ee7366f2a7105e6502bc93f37ecb91463a608..f5feee313ce5291af9041bcdb5c43ba9646c6ebe 100644 (file)
--- a/src/editor/f_savemap.pas
+++ b/src/editor/f_savemap.pas
uses
LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes,
- Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
+ Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils;
type
TSaveMapForm = class (TForm)
if Sign = MAP_SIGNATURE then
begin
- nm := ResList[a];
+ nm := win2utf(ResList[a]);
lbMapList.Items.Add(nm);
if placeName then
index a83e3e03b140d0c76fcdbc0dcb8d9a628fa9d03b..46f365c7f6cfe4c9bf0a50ebc6046f559d8c9f69 100644 (file)
uses
LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics,
- Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
+ Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils;
type
TSelectMapForm = class (TForm)
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 0a97da7d911e29672ea2b28cc708ee8070da762a..caa6b57d1a53a099ef97d4da799342b4d88ac9f1 100644 (file)
--- a/src/editor/g_map.pas
+++ b/src/editor/g_map.pas
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
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;
triggers := nil;
PanelTable := nil;
MonsterTable := nil;
+ Data := nil;
+ Len := 0;
// Открываем WAD, если надо:
if Res <> '' then
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;
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;
// Номер текстуры в списке текстур:
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;
// Записываем в 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);
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;
Data: Pointer;
Width, Height, m: Word;
FileName, SectionName, ResName, _fn: String;
- TextureRes: String;
+ TextureRes, ustr: String;
pData: Pointer;
Len, FrameLen: Integer;
Error: Boolean;
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];
end;
// Читаем ресурс карты:
- if not WAD.GetResource('', ResName, pData, Len) then
+ if not WAD.GetResource('', utf2win(ResName), pData, Len) then
begin
WAD.Free();
Exit;
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;
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;
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;
// Жидкость без текстуры:
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;
var
map: TConfig;
i, a: Integer;
- s, us, section: String;
+ s, section: String;
panel: TPanel;
item: TItem;
area: TArea;
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;
// Чтение панелей:
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
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;
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;
NoTextureID: DWORD;
NW, NH: Word;
begin
+ NoTextureID := 0;
+ NW := 0;
+ NH := 0;
with gPanels[a] do
begin
case TextureID of
r: TRectWH;
begin
+ ID := 0;
// В режиме Превью рисуем небо:
if PreviewMode then
begin
index 0ef0a81e0dae27a743e1469443b63cad4d351650..786229a847ef6dd5777801191e59647400c89950 100644 (file)
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;
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);
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);
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);
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);