diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas
index a63b81e0b75abf83576ca7c4b60416b2253ef72b..061e916d2f490781327162979ad7a5c8b329df6d 100644 (file)
--- a/src/editor/f_main.pas
+++ b/src/editor/f_main.pas
unit f_main;
unit f_main;
-{$MODE Delphi}
+{$INCLUDE ../shared/a_modes.inc}
interface
interface
LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ImgList, StdCtrls, Buttons,
ComCtrls, ValEdit, Types, ToolWin, Menus, ExtCtrls,
LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ImgList, StdCtrls, Buttons,
ComCtrls, ValEdit, Types, ToolWin, Menus, ExtCtrls,
- CheckLst, Grids, OpenGLContext;
+ CheckLst, Grids, OpenGLContext, utils;
type
type
MaxLength := 3;
end;
MaxLength := 3;
end;
- with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_ALLMAP], BoolNames[Data.ShotAllMap], True)] do
+ case Data.ShotAim of
+ 1: str := _lc[I_PROP_TR_SHOT_AIM_1];
+ 2: str := _lc[I_PROP_TR_SHOT_AIM_2];
+ 3: str := _lc[I_PROP_TR_SHOT_AIM_3];
+ else str := _lc[I_PROP_TR_SHOT_AIM_0];
+ end;
+ with ItemProps[InsertRow(_lc[I_PROP_TR_SHOT_AIM], str, True)-1] do
begin
EditStyle := esPickList;
ReadOnly := True;
begin
EditStyle := esPickList;
ReadOnly := True;
ok: Boolean;
FileName: String;
ResourceName: String;
ok: Boolean;
FileName: String;
ResourceName: String;
+ UResourceName: String;
FullResourceName: String;
SectionName: String;
Data: Pointer;
FullResourceName: String;
SectionName: String;
Data: Pointer;
end
else
begin // Внешний WAD
end
else
begin // Внешний WAD
- FileName := EditorDir+'wads\'+aWAD;
+ FileName := EditorDir+'wads/'+aWAD;
ResourceName := aWAD+':'+SectionName+'\'+aTex;
end;
ok := True;
ResourceName := aWAD+':'+SectionName+'\'+aTex;
end;
ok := True;
+ UResourceName := win2utf(ResourceName);
// Есть ли уже такая текстура:
for a := 0 to MainForm.lbTextureList.Items.Count-1 do
// Есть ли уже такая текстура:
for a := 0 to MainForm.lbTextureList.Items.Count-1 do
- if ResourceName = MainForm.lbTextureList.Items[a] then
+ if UResourceName = MainForm.lbTextureList.Items[a] then
begin
if not silent then
ErrorMessageBox(Format(_lc[I_MSG_TEXTURE_ALREADY],
begin
if not silent then
ErrorMessageBox(Format(_lc[I_MSG_TEXTURE_ALREADY],
- [ResourceName]));
+ [UResourceName]));
ok := False;
end;
ok := False;
end;
begin
if not silent then
ErrorMessageBox(Format(_lc[I_MSG_RES_NAME_64],
begin
if not silent then
ErrorMessageBox(Format(_lc[I_MSG_RES_NAME_64],
- [ResourceName]));
+ [UResourceName]));
ok := False;
end;
ok := False;
end;
a := -1;
if aWAD = _lc[I_WAD_SPECIAL_TEXS] then
begin
a := -1;
if aWAD = _lc[I_WAD_SPECIAL_TEXS] then
begin
- a := MainForm.lbTextureList.Items.Add(ResourceName);
+ a := MainForm.lbTextureList.Items.Add(UResourceName);
if not silent then
SelectTexture(a);
Result := True;
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
GetFrame(FullResourceName, Data, FrameLen, Width, Height);
if g_CreateTextureMemorySize(Data, FrameLen, ResourceName, 0, 0, Width, Height, 1) then
- a := MainForm.lbTextureList.Items.Add(ResourceName);
+ a := MainForm.lbTextureList.Items.Add(UResourceName);
end
else // Обычная текстура
begin
if g_CreateTextureWAD(ResourceName, FullResourceName) then
end
else // Обычная текстура
begin
if g_CreateTextureWAD(ResourceName, FullResourceName) then
- a := MainForm.lbTextureList.Items.Add(ResourceName);
+ a := MainForm.lbTextureList.Items.Add(UResourceName);
end;
if (a > -1) and (not silent) then
SelectTexture(a);
end;
if (a > -1) and (not silent) then
SelectTexture(a);
function SelectedTexture(): String;
begin
if MainForm.lbTextureList.ItemIndex <> -1 then
function SelectedTexture(): String;
begin
if MainForm.lbTextureList.ItemIndex <> -1 then
- Result := MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex]
+ Result := utf2win(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex])
else
Result := '';
end;
else
Result := '';
end;
function IsSpecialTextureSel(): Boolean;
begin
Result := (MainForm.lbTextureList.ItemIndex <> -1) and
function IsSpecialTextureSel(): Boolean;
begin
Result := (MainForm.lbTextureList.ItemIndex <> -1) and
- IsSpecialTexture(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex]);
+ IsSpecialTexture(utf2win(MainForm.lbTextureList.Items[MainForm.lbTextureList.ItemIndex]));
end;
function CopyBufferToString(var CopyBuf: TCopyRecArray): String;
end;
function CopyBufferToString(var CopyBuf: TCopyRecArray): String;
cfglen := 0;
wad := TWADEditor_1.Create;
cfglen := 0;
wad := TWADEditor_1.Create;
- if wad.ReadFile(EditorDir+'data\Game.wad') then
+ if wad.ReadFile(EditorDir+'data/Game.wad') then
wad.GetResource('FONTS', cfgres, cfgdata, cfglen);
wad.Free();
if cfglen <> 0 then
begin
wad.GetResource('FONTS', cfgres, cfgdata, cfglen);
wad.Free();
if cfglen <> 0 then
begin
- if not g_CreateTextureWAD('FONT_STD', EditorDir+'data\Game.wad:FONTS\'+texture) then
+ if not g_CreateTextureWAD('FONT_STD', EditorDir+'data/Game.wad:FONTS\'+texture) then
e_WriteLog('ERROR ERROR ERROR', MSG_WARNING);
config := TConfig.CreateMem(cfgdata, cfglen);
e_WriteLog('ERROR ERROR ERROR', MSG_WARNING);
config := TConfig.CreateMem(cfgdata, cfglen);
OpenedMap := '';
OpenedWAD := '';
OpenedMap := '';
OpenedWAD := '';
- config := TConfig.CreateFile(EditorDir+'\Editor.cfg');
+ config := TConfig.CreateFile(EditorDir+'Editor.cfg');
+ if config.ReadInt('Editor', 'XPos', -1) = -1 then
+ Position := poDesktopCenter
+ else begin
+ Left := config.ReadInt('Editor', 'XPos', Left);
+ Top := config.ReadInt('Editor', 'YPos', Top);
+ Width := config.ReadInt('Editor', 'Width', Width);
+ Height := config.ReadInt('Editor', 'Height', Height);
+ end;
if config.ReadBool('Editor', 'Maximize', False) then
WindowState := wsMaximized;
ShowMap := config.ReadBool('Editor', 'Minimap', False);
if config.ReadBool('Editor', 'Maximize', False) then
WindowState := wsMaximized;
ShowMap := config.ReadBool('Editor', 'Minimap', False);
trigger.Data.ShotPanelID := -1;
trigger.Data.ShotTarget := 0;
trigger.Data.ShotIntSight := 0;
trigger.Data.ShotPanelID := -1;
trigger.Data.ShotTarget := 0;
trigger.Data.ShotIntSight := 0;
- trigger.Data.ShotAllMap := False;
+ trigger.Data.ShotAim := TRIGGER_SHOT_AIM_DEFAULT;
trigger.Data.ShotPos.X := trigger.X-64;
trigger.Data.ShotPos.Y := trigger.Y-64;
trigger.Data.ShotAngle := 0;
trigger.Data.ShotPos.X := trigger.X-64;
trigger.Data.ShotPos.Y := trigger.Y-64;
trigger.Data.ShotAngle := 0;
config: TConfig;
i: Integer;
begin
config: TConfig;
i: Integer;
begin
- config := TConfig.CreateFile(EditorDir+'\Editor.cfg');
+ config := TConfig.CreateFile(EditorDir+'Editor.cfg');
+ config.WriteInt('Editor', 'XPos', Left);
+ config.WriteInt('Editor', 'YPos', Top);
+ config.WriteInt('Editor', 'Width', Width);
+ config.WriteInt('Editor', 'Height', Height);
config.WriteBool('Editor', 'Maximize', WindowState = wsMaximized);
config.WriteBool('Editor', 'Minimap', ShowMap);
config.WriteInt('Editor', 'PanelProps', PanelProps.ClientWidth);
config.WriteBool('Editor', 'Maximize', WindowState = wsMaximized);
config.WriteBool('Editor', 'Minimap', ShowMap);
config.WriteInt('Editor', 'PanelProps', PanelProps.ClientWidth);
config.WriteStr('RecentFiles', IntToStr(i+1), '');
RecentFiles.Free();
config.WriteStr('RecentFiles', IntToStr(i+1), '');
RecentFiles.Free();
- config.SaveFile(EditorDir+'\Editor.cfg');
+ config.SaveFile(EditorDir+'Editor.cfg');
config.Free();
slInvalidTextures.Free;
config.Free();
slInvalidTextures.Free;
begin
AddSoundForm.OKFunction := nil;
AddSoundForm.lbResourcesList.MultiSelect := False;
begin
AddSoundForm.OKFunction := nil;
AddSoundForm.lbResourcesList.MultiSelect := False;
- AddSoundForm.SetResource := vleObjectProperty.Cells[1, i];
+ AddSoundForm.SetResource := utf2win(vleObjectProperty.Cells[1, i]);
if (AddSoundForm.ShowModal() = mrOk) then
begin
if (AddSoundForm.ShowModal() = mrOk) then
begin
- vleObjectProperty.Cells[1, i] := AddSoundForm.ResourceName;
+ vleObjectProperty.Cells[1, i] := win2utf(AddSoundForm.ResourceName);
bApplyProperty.Click();
end;
Exit;
bApplyProperty.Click();
end;
Exit;
Values.Add(_lc[I_PROP_TR_SHOT_TO_5]);
Values.Add(_lc[I_PROP_TR_SHOT_TO_6]);
end
Values.Add(_lc[I_PROP_TR_SHOT_TO_5]);
Values.Add(_lc[I_PROP_TR_SHOT_TO_6]);
end
+ else if KeyName = _lc[I_PROP_TR_SHOT_AIM] then
+ begin
+ Values.Add(_lc[I_PROP_TR_SHOT_AIM_0]);
+ Values.Add(_lc[I_PROP_TR_SHOT_AIM_1]);
+ Values.Add(_lc[I_PROP_TR_SHOT_AIM_2]);
+ Values.Add(_lc[I_PROP_TR_SHOT_AIM_3]);
+ end
else if (KeyName = _lc[I_PROP_PANEL_BLEND]) or
(KeyName = _lc[I_PROP_DM_ONLY]) or
(KeyName = _lc[I_PROP_ITEM_FALLS]) or
else if (KeyName = _lc[I_PROP_PANEL_BLEND]) or
(KeyName = _lc[I_PROP_DM_ONLY]) or
(KeyName = _lc[I_PROP_ITEM_FALLS]) or
(KeyName = _lc[I_PROP_TR_SCORE_CON]) or
(KeyName = _lc[I_PROP_TR_SCORE_MSG]) or
(KeyName = _lc[I_PROP_TR_HEALTH_MAX]) or
(KeyName = _lc[I_PROP_TR_SCORE_CON]) or
(KeyName = _lc[I_PROP_TR_SCORE_MSG]) or
(KeyName = _lc[I_PROP_TR_HEALTH_MAX]) or
- (KeyName = _lc[I_PROP_TR_SHOT_ALLMAP]) or
(KeyName = _lc[I_PROP_TR_SHOT_SOUND]) or
(KeyName = _lc[I_PROP_TR_EFFECT_CENTER]) then
begin
(KeyName = _lc[I_PROP_TR_SHOT_SOUND]) or
(KeyName = _lc[I_PROP_TR_EFFECT_CENTER]) then
begin
Data.ShotTarget := 6;
Data.ShotIntSight := Min(Max(
StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_SIGHT]], 0), 0), 65535);
Data.ShotTarget := 6;
Data.ShotIntSight := Min(Max(
StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_SIGHT]], 0), 0), 65535);
- Data.ShotAllMap := NameToBool(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_ALLMAP]]);
+ Data.ShotAim := 0;
+ if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_1] then
+ Data.ShotAim := 1
+ else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_2] then
+ Data.ShotAim := 2
+ else if vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_AIM]] = _lc[I_PROP_TR_SHOT_AIM_3] then
+ Data.ShotAim := 3;
Data.ShotAngle := Min(
StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_ANGLE]], 0), 360);
Data.ShotWait := Min(Max(
Data.ShotAngle := Min(
StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_SHOT_ANGLE]], 0), 360);
Data.ShotWait := Min(Max(
begin
Panel^.TextureID := SpecialTextureID(Panel^.TextureName);
with MainForm.lbTextureList.Items do
begin
Panel^.TextureID := SpecialTextureID(Panel^.TextureName);
with MainForm.lbTextureList.Items do
- if IndexOf(Panel^.TextureName) = -1 then
- Add(Panel^.TextureName);
+ if IndexOf(win2utf(Panel^.TextureName)) = -1 then
+ Add(win2utf(Panel^.TextureName));
end;
end;
end;
end;
begin // Выбор файла звука/музыки:
AddSoundForm.OKFunction := nil;
AddSoundForm.lbResourcesList.MultiSelect := False;
begin // Выбор файла звука/музыки:
AddSoundForm.OKFunction := nil;
AddSoundForm.lbResourcesList.MultiSelect := False;
- AddSoundForm.SetResource := vleObjectProperty.Values[Key];
+ AddSoundForm.SetResource := utf2win(vleObjectProperty.Values[Key]);
if (AddSoundForm.ShowModal() = mrOk) then
begin
if (AddSoundForm.ShowModal() = mrOk) then
begin
- vleObjectProperty.Values[Key] := AddSoundForm.ResourceName;
+ vleObjectProperty.Values[Key] := utf2win(AddSoundForm.ResourceName);
bApplyProperty.Click();
end;
end
bApplyProperty.Click();
end;
end
lbTypeSelect.Items.Add(ItemToStr(ITEM_HELMET));
lbTypeSelect.Items.Add(ItemToStr(ITEM_JETPACK));
lbTypeSelect.Items.Add(ItemToStr(ITEM_INVIS));
lbTypeSelect.Items.Add(ItemToStr(ITEM_HELMET));
lbTypeSelect.Items.Add(ItemToStr(ITEM_JETPACK));
lbTypeSelect.Items.Add(ItemToStr(ITEM_INVIS));
+ lbTypeSelect.Items.Add(ItemToStr(ITEM_WEAPON_FLAMETHROWER));
+ lbTypeSelect.Items.Add(ItemToStr(ITEM_AMMO_FUELCAN));
b := StrToItem(Values[Key]);
if b >= ITEM_BOTTLE then
b := StrToItem(Values[Key]);
if b >= ITEM_BOTTLE then
else gLanguage := LANGUAGE_RUSSIAN;
end;
else gLanguage := LANGUAGE_RUSSIAN;
end;
- config := TConfig.CreateFile(EditorDir+'\Editor.cfg');
+ config := TConfig.CreateFile(EditorDir+'Editor.cfg');
config.WriteStr('Editor', 'Language', gLanguage);
config.WriteStr('Editor', 'Language', gLanguage);
- config.SaveFile(EditorDir+'\Editor.cfg');
+ config.SaveFile(EditorDir+'Editor.cfg');
config.Free();
end;
config.Free();
end;
e_InitGL();
e_WriteLog('Loading data', MSG_NOTIFY);
LoadStdFont('STDTXT', 'STDFONT', gEditorFont);
e_InitGL();
e_WriteLog('Loading data', MSG_NOTIFY);
LoadStdFont('STDTXT', 'STDFONT', gEditorFont);
+ e_WriteLog('Loading more data', MSG_NOTIFY);
LoadData();
LoadData();
+ e_WriteLog('Loading even more data', MSG_NOTIFY);
gDataLoaded := True;
MainForm.FormResize(nil);
end;
gDataLoaded := True;
MainForm.FormResize(nil);
end;
PreviewMode := not PreviewMode;
(Sender as TMenuItem).Checked := PreviewMode;
PreviewMode := not PreviewMode;
(Sender as TMenuItem).Checked := PreviewMode;
+
+ FormResize(Self);
end;
procedure TMainForm.miLayer1Click(Sender: TObject);
end;
procedure TMainForm.miLayer1Click(Sender: TObject);
// Сохраняем временную карту:
time := 0;
repeat
// Сохраняем временную карту:
time := 0;
repeat
- mapWAD := ExtractFilePath(TestD2dExe) + Format('maps\temp%.4d.wad', [time]);
+ mapWAD := ExtractFilePath(TestD2dExe) + Format('maps/temp%.4d.wad', [time]);
Inc(time);
until not FileExists(mapWAD);
mapToRun := mapWAD + ':\' + TEST_MAP_NAME;
SaveMap(mapToRun);
Inc(time);
until not FileExists(mapWAD);
mapToRun := mapWAD + ':\' + TEST_MAP_NAME;
SaveMap(mapToRun);
- mapToRun := ExtractRelativePath(ExtractFilePath(TestD2dExe) + 'maps\', mapToRun);
+ mapToRun := ExtractRelativePath(ExtractFilePath(TestD2dExe) + 'maps/', mapToRun);
// Опции игры:
opt := 32 + 64;
// Опции игры:
opt := 32 + 64;