From e26a13ae12c87504607daa795bbc5e7e58e41e63 Mon Sep 17 00:00:00 2001
From: Nick's Hardware Youtube Channel
<56885781+nickshardware@users.noreply.github.com>
Date: Thu, 31 Oct 2024 14:00:15 -0400
Subject: [PATCH] Happy Halloween
---
animationexport.lfm | 77 +++++++++++++++++++++
animationexport.pas | 150 ++++++++++++++++++++++++++++++++++++++++
mapcore.pas | 11 ++-
mapeditor.lfm | 38 +++++-----
mapeditor.pas | 113 +++++++++++++++++-------------
rm.lpi | 22 +++++-
rm.lpr | 5 +-
rmabout.pas | 4 +-
rmmain.lfm | 87 +++++++++++++++--------
rmmain.pas | 137 ++++++++++++++++++++++++++++++------
rmthumb.pas | 4 +-
rmtools.pas | 66 +++++++++++++++---
setcustomcellsize.lfm | 60 ++++++++++++++++
setcustomcellsize.pas | 42 +++++++++++
setcustomspritesize.lfm | 60 ++++++++++++++++
setcustomspritesize.pas | 42 +++++++++++
setcustomtilesize.lfm | 60 ++++++++++++++++
setcustomtilesize.pas | 42 +++++++++++
spriteimport.lfm | 63 ++++++++++++++---
spriteimport.pas | 22 +++++-
spritesheetexport.lfm | 89 ++++++++++++++++++------
spritesheetexport.pas | 12 +++-
22 files changed, 1040 insertions(+), 166 deletions(-)
create mode 100644 animationexport.lfm
create mode 100644 animationexport.pas
create mode 100644 setcustomcellsize.lfm
create mode 100644 setcustomcellsize.pas
create mode 100644 setcustomspritesize.lfm
create mode 100644 setcustomspritesize.pas
create mode 100644 setcustomtilesize.lfm
create mode 100644 setcustomtilesize.pas
diff --git a/animationexport.lfm b/animationexport.lfm
new file mode 100644
index 0000000..dcd1554
--- /dev/null
+++ b/animationexport.lfm
@@ -0,0 +1,77 @@
+object AnimationExportForm: TAnimationExportForm
+ Left = 1398
+ Height = 222
+ Top = 243
+ Width = 388
+ Caption = 'Animation Export Properties'
+ ClientHeight = 222
+ ClientWidth = 388
+ LCLVersion = '3.4.0.0'
+ object EditName: TEdit
+ Left = 120
+ Height = 23
+ Top = 24
+ Width = 211
+ MaxLength = 20
+ ParentFont = False
+ TabOrder = 0
+ end
+ object AnimationName: TLabel
+ Left = 75
+ Height = 15
+ Top = 32
+ Width = 32
+ Caption = 'Name'
+ ParentColor = False
+ ParentFont = False
+ end
+ object AnimationType: TLabel
+ Left = 24
+ Height = 15
+ Top = 102
+ Width = 83
+ Caption = 'Animation Type'
+ ParentColor = False
+ ParentFont = False
+ end
+ object ComboMap: TComboBox
+ Left = 120
+ Height = 23
+ Top = 102
+ Width = 211
+ ItemHeight = 15
+ ParentFont = False
+ Style = csDropDownList
+ TabOrder = 1
+ end
+ object CompilerType: TLabel
+ Left = 58
+ Height = 15
+ Top = 64
+ Width = 49
+ Caption = 'Compiler'
+ ParentColor = False
+ ParentFont = False
+ end
+ object ComboCompiler: TComboBox
+ Left = 120
+ Height = 23
+ Top = 64
+ Width = 211
+ ItemHeight = 15
+ ParentFont = False
+ Style = csDropDownList
+ TabOrder = 2
+ OnChange = ComboCompilerChange
+ end
+ object OKButton: TButton
+ Left = 280
+ Height = 25
+ Top = 176
+ Width = 75
+ Caption = 'OK'
+ ParentFont = False
+ TabOrder = 3
+ OnClick = OKButtonClick
+ end
+end
diff --git a/animationexport.pas b/animationexport.pas
new file mode 100644
index 0000000..1e7aba4
--- /dev/null
+++ b/animationexport.pas
@@ -0,0 +1,150 @@
+unit animationexport;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,AnimBase,rwxgf,rmcodegen;
+
+type
+
+ { TAnimationExportForm }
+
+ TAnimationExportForm = class(TForm)
+ ComboCompiler: TComboBox;
+ ComboMap: TComboBox;
+ CompilerType: TLabel;
+ EditName: TEdit;
+ AnimationName: TLabel;
+ AnimationType: TLabel;
+ OKButton: TButton;
+ procedure ComboCompilerChange(Sender: TObject);
+ procedure OKButtonClick(Sender: TObject);
+ private
+
+ public
+ EO : AnimExportFormatRec;
+ procedure SetExportProps(props : AnimExportFormatRec);
+ procedure GetExportProps(var props : AnimExportFormatRec);
+ procedure InitComboBoxes;
+ procedure UpdateComboBoxes(compiler : integer);
+
+ end;
+
+var
+ AnimationExportForm: TAnimationExportForm;
+
+implementation
+
+{$R *.lfm}
+
+procedure TAnimationExportForm.ComboCompilerChange(Sender: TObject);
+begin
+ UpdateComboBoxes(ComboCompiler.ItemIndex);
+end;
+
+procedure TAnimationExportForm.OKButtonClick(Sender: TObject);
+begin
+ modalresult:= mrOk;
+end;
+
+procedure TAnimationExportForm.SetExportProps(props : AnimExportFormatRec);
+begin
+ EO:=props;
+ EditName.caption:=EO.Name;
+ ComboCompiler.ItemIndex:=EO.Lan;
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ UpdateComboBoxes(ComboCompiler.ItemIndex);
+end;
+
+procedure TAnimationExportForm.GetExportProps(var props : AnimExportFormatRec);
+begin
+ props.Name:=EditName.caption;
+ props.Lan:=ComboCompiler.ItemIndex;
+ props.AnimateFormat:=ComboMap.ItemIndex;
+end;
+
+procedure TAnimationExportForm.InitComboBoxes;
+begin
+ EditName.caption:='';
+ Combocompiler.Items.Clear;
+ ComboCompiler.Items.Add('None');
+ ComboCompiler.Items.Add('Basic');
+ ComboCompiler.Items.Add('Basic (Line#)');
+ ComboCompiler.Items.Add('C');
+ ComboCompiler.Items.Add('Pascal');
+ ComboCompiler.Items.Add('FreeBASIC');
+ ComboCompiler.Items.Add('QB64');
+ ComboCompiler.Items.Add('Amiga QuickBasic AQB');
+ ComboCompiler.Items.Add('BAM Basic');
+ ComboCompiler.ItemIndex:=0;
+
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.ItemIndex:=0;
+
+end;
+
+procedure TAnimationExportForm.UpdateComboBoxes(compiler : integer);
+begin
+ case compiler of NoLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.ItemIndex:=0;
+ end;
+ BasicLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ BasicLNLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ PascalLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ CLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ FBBasicLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ QB64BasicLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ AQBBasicLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+ BAMBasicLan:begin
+ ComboMap.Items.Clear;
+ ComboMap.Items.Add('None');
+ ComboMap.Items.Add('Simple');
+ ComboMap.ItemIndex:=EO.AnimateFormat;
+ end;
+
+ end;
+end;
+
+
+end.
+
diff --git a/mapcore.pas b/mapcore.pas
index 5933bf0..74a0e99 100644
--- a/mapcore.pas
+++ b/mapcore.pas
@@ -621,11 +621,16 @@ procedure TMapCoreBase.ClearMap(index, value : integer);
procedure TMapCoreBase.SetMapTileSize(index, twidth,theight : integer);
var
zsize : integer;
+ nzwidth,nzheight : integer;
begin
Map[index].Props.TileWidth:=twidth;
Map[index].Props.TileHeight:=theight;
- zsize:=GetZoomTileSize(Map[index].Props.ZoomSize);
- SetZoomMapTileSize(index,zsize,zsize);
+
+ zsize:=GetZoomSize(index);
+ nzwidth:=5*zsize+twidth;
+ nzheight:=5*zsize+theight;
+
+ SetZoomMapTileSize(index,nzwidth,nzheight);
end;
procedure TMapCoreBase.SetZoomMapTileSize(index, twidth,theight : integer);
@@ -635,6 +640,8 @@ procedure TMapCoreBase.SetZoomMapTileSize(index, twidth,theight : integer);
end;
+
+//not using this function - will remove in future versions
//returns how big the tile will be when zoom is applied
function TMapCoreBase.GetZoomTileSize(ZoomSize : integer) : integer;
var
diff --git a/mapeditor.lfm b/mapeditor.lfm
index 5cae470..0c48d96 100644
--- a/mapeditor.lfm
+++ b/mapeditor.lfm
@@ -1,7 +1,7 @@
object MapEdit: TMapEdit
- Left = 97
+ Left = 105
Height = 860
- Top = 366
+ Top = 217
Width = 1491
Caption = 'Map Editor'
ClientHeight = 860
@@ -240,7 +240,6 @@ object MapEdit: TMapEdit
Hint = 'Zoom Level'
Top = 13
Width = 25
- Max = 6
Min = 1
OnChange = TileZoomChange
Orientation = trVertical
@@ -534,7 +533,7 @@ object MapEdit: TMapEdit
end
end
object MainMenu1: TMainMenu
- Left = 72
+ Left = 80
Top = 304
object FileMenuItem: TMenuItem
Caption = 'File'
@@ -590,7 +589,7 @@ object MapEdit: TMapEdit
end
end
end
- object MenuItem4: TMenuItem
+ object MenuItem17: TMenuItem
Caption = 'Edit'
object Clear: TMenuItem
Caption = 'Clear'
@@ -598,6 +597,7 @@ object MapEdit: TMapEdit
end
object Undo: TMenuItem
Caption = 'Undo'
+ OnClick = ToolUndoIconClick
end
object CloneMap: TMenuItem
Caption = 'Clone'
@@ -611,6 +611,13 @@ object MapEdit: TMapEdit
Caption = 'Paste'
OnClick = PasteFromClipBoardClick
end
+ object Properties: TMenuItem
+ Caption = 'Properties'
+ OnClick = MenuMapPropsClick
+ end
+ end
+ object MenuItem4: TMenuItem
+ Caption = 'View'
object MenuItem5: TMenuItem
Caption = 'Resize Map To'
object ReSizeMap8x8: TMenuItem
@@ -641,9 +648,9 @@ object MapEdit: TMapEdit
Enabled = False
OnClick = ReSizeMapClick
end
- object SetCustomSize: TMenuItem
+ object SetMapCustomSize: TMenuItem
Caption = 'Set Custom Size'
- OnClick = SetCustomSizeClick
+ OnClick = SetMapCustomSizeClick
end
end
object MenuItem9: TMenuItem
@@ -672,16 +679,13 @@ object MapEdit: TMapEdit
Caption = '256 X 256'
OnClick = ReSizeTiles
end
- end
- object Properties: TMenuItem
- Caption = 'Properties'
- OnClick = MenuMapPropsClick
- end
- end
- object MenuItem17: TMenuItem
- Caption = 'View'
- object MenuItem18: TMenuItem
- Caption = 'Refresh'
+ object ShowTileCustomSize: TMenuItem
+ Enabled = False
+ end
+ object SetTileCustomSize: TMenuItem
+ Caption = 'Set Custom Size'
+ OnClick = SetTileCustomSizeClick
+ end
end
end
object MenuItem19: TMenuItem
diff --git a/mapeditor.pas b/mapeditor.pas
index 48e8c20..92a4d77 100644
--- a/mapeditor.pas
+++ b/mapeditor.pas
@@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,Types,
ComCtrls, Menus,rmthumb,mapcore,rwmap,mapexiportprops,rmcodegen,drawprocs,rmtools,rmclipboard,
- rmconfig, LCLType,setcustommapsize;
+ rmconfig, LCLType,setcustommapsize,setcustomtilesize;
const
AddImage = 1;
@@ -18,17 +18,22 @@ interface
{ TMapEdit }
TMapEdit = class(TForm)
- CopyToClipBoard: TMenuItem;
GroupBox1: TGroupBox;
MapImageList: TImageList;
- MenuItem15: TMenuItem;
+ Clear: TMenuItem;
CloneMap: TMenuItem;
+ CopyToClipBoard: TMenuItem;
+ Properties: TMenuItem;
+ PasteFromClipBoard: TMenuItem;
+ Undo: TMenuItem;
+ SetTileCustomSize: TMenuItem;
+ MenuItem15: TMenuItem;
MenuDeleteAll: TMenuItem;
+ ShowTileCustomSize: TMenuItem;
ShowCustomSize: TMenuItem;
- SetCustomSize: TMenuItem;
+ SetMapCustomSize: TMenuItem;
MenuPopupNew: TMenuItem;
MenuPopupDelete: TMenuItem;
- Properties: TMenuItem;
Panel1: TPanel;
RadioDraw: TRadioButton;
RadioErase: TRadioButton;
@@ -57,11 +62,8 @@ TMapEdit = class(TForm)
ScrollLeftMenu: TMenuItem;
ScrollUpMenu: TMenuItem;
ScrollDownMenu: TMenuItem;
- Undo: TMenuItem;
- PasteFromClipBoard: TMenuItem;
Panel2: TPanel;
MenuItem10: TMenuItem;
- Clear: TMenuItem;
ExportCArray: TMenuItem;
ExportPascalArray: TMenuItem;
MenuItem13: TMenuItem;
@@ -90,7 +92,6 @@ TMapEdit = class(TForm)
ReSize256x256: TMenuItem;
ReSizeMap64x64: TMenuItem;
MenuItem17: TMenuItem;
- MenuItem18: TMenuItem;
MenuItem19: TMenuItem;
TileModeDraw: TMenuItem;
TileModeErase: TMenuItem;
@@ -136,9 +137,9 @@ TMapEdit = class(TForm)
procedure Button1Click(Sender: TObject);
procedure CheckBoxDisplayGridChange(Sender: TObject);
procedure CloneMapClick(Sender: TObject);
+
procedure CopyToClipBoardClick(Sender: TObject);
- procedure CustomSizeMapDrawItem(Sender: TObject; ACanvas: TCanvas;
- ARect: TRect; AState: TOwnerDrawState);
+
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
@@ -168,7 +169,8 @@ TMapEdit = class(TForm)
procedure MenuSaveClick(Sender: TObject);
procedure PasteFromClipBoardClick(Sender: TObject);
procedure ReSizeMapClick(Sender: TObject);
- procedure SetCustomSizeClick(Sender: TObject);
+ procedure SetMapCustomSizeClick(Sender: TObject);
+ procedure SetTileCustomSizeClick(Sender: TObject);
procedure TileModeDrawClick(Sender: TObject);
procedure TileModeEraseClick(Sender: TObject);
procedure RadioDrawClick(Sender: TObject);
@@ -204,6 +206,7 @@ TMapEdit = class(TForm)
procedure ToolUndoIconClick(Sender: TObject);
procedure ToolVFLIPButtonClick(Sender: TObject);
+
private
public
@@ -323,7 +326,9 @@ procedure TMapEdit.Init;
SetMapTileMode(1); //draw
SetDrawTool(DrawShapePencil);
CurrentMap:=MapCoreBase.GetCurrentMap;
- MapCoreBase.SetZoomSize(CurrentMap,4);
+ MapCoreBase.SetZoomSize(CurrentMap,1);
+ TileZoom.Position:=MapCoreBase.GetZoomSize(CurrentMap);
+
MapCoreBase.SetMapTileSize(CurrentMap,32,32);
TileWidth:=MapCoreBase.GetZoomMapTileWidth(CurrentMap);
@@ -479,6 +484,9 @@ procedure TMapEdit.CloneMapClick(Sender: TObject);
ShowMessage('Map Cloned!');
end;
+
+
+
procedure TMapEdit.CopyToClipBoardClick(Sender: TObject);
var
ca : MapClipAreaRec;
@@ -487,11 +495,7 @@ procedure TMapEdit.CopyToClipBoardClick(Sender: TObject);
MapCoreBase.CopyToClipBoard(MapCoreBase.GetCurrentMap,ca.x,ca.y,ca.x2,ca.y2);
end;
-procedure TMapEdit.CustomSizeMapDrawItem(Sender: TObject; ACanvas: TCanvas;
- ARect: TRect; AState: TOwnerDrawState);
-begin
-end;
procedure TMapEdit.PasteFromClipBoardClick(Sender: TObject);
var
@@ -647,6 +651,8 @@ procedure TMapEdit.ClearMapClick(Sender: TObject);
MapCoreBase.ClearMap(CurrentMap,TileClear);
VerifyTileImageList;
MapPaintBox.Invalidate;
+ UpdateMapPreviewImageIcons(CurrentMap,UpdateImage);
+ MapListView.Repaint;
end;
@@ -882,12 +888,6 @@ procedure TMapEdit.MenuNewClick(Sender: TObject);
MapPaintBox.Invalidate;
end;
-
-
-
-
-
-
procedure TMapEdit.MenuOpenClick(Sender: TObject);
begin
OpenDialog1.Filter := 'RM MAP Files|*.map|All Files|*.*';
@@ -914,6 +914,7 @@ procedure TMapEdit.MenuSaveClick(Sender: TObject);
procedure TMapEdit.UpdateEditMenus;
var
mwidth,mheight : integer;
+ twidth,theight : integer;
begin
ReSizeMap8x8.Checked:=false;
ReSizeMap16x16.Checked:=false;
@@ -941,24 +942,30 @@ procedure TMapEdit.UpdateEditMenus;
ShowCustomSize.Caption:=IntToStr(mwidth)+'x'+IntToStr(mheight);
end;
-
-
ReSize8x8.Checked:=false;
ReSize16x16.Checked:=false;
ReSize32x32.Checked:=false;
ReSize64x64.Checked:=false;
ReSize128x128.Checked:=false;
ReSize256x256.Checked:=false;
-
- case MapCoreBase.GetMapTileWidth(MapCoreBase.GetCurrentMap) of 8: ReSize8x8.Checked:=true;
- 16: ReSize16x16.Checked:=true;
- 32: ReSize32x32.Checked:=true;
- 64: ReSize64x64.Checked:=true;
- 128: ReSize128x128.Checked:=true;
- 256: ReSize256x256.Checked:=true;
-
+ ShowTileCustomSize.Checked:=false;
+ ShowTileCustomSize.Caption:='';
+
+ twidth:=MapCoreBase.GetMapTileWidth(MapCoreBase.GetCurrentMap);
+ theight:=MapCoreBase.GetMapTileHeight(MapCoreBase.GetCurrentMap);
+
+ if (twidth=8) and (theight=8) then ReSize8x8.Checked:=true
+ else if (twidth=16) and (theight=16) then ReSize16x16.Checked:=true
+ else if (twidth=32) and (theight=32) then ReSize32x32.Checked:=true
+ else if (twidth=64) and (theight=64) then ReSize64x64.Checked:=true
+ else if (twidth=128) and (theight=128) then ReSize128x128.Checked:=true
+ else if (twidth=256) and (theight=256) then ReSize256x256.Checked:=true
+ else
+ begin
+ ShowTileCustomSize.Checked:=true;
+ ShowTileCustomSize.Caption:=IntToStr(twidth)+'x'+IntToStr(theight);
+ MapCoreBase.SetMapTileSize(MapCoreBase.GetCurrentMap,twidth,theight);
end;
-
end;
procedure TMapEdit.ReSizeMapClick(Sender: TObject);
@@ -989,6 +996,10 @@ procedure TMapEdit.ReSizeMapClick(Sender: TObject);
mwidth:=256;
mheight:=256;
end;
+ 'SetMapCustomSize' :begin
+ mwidth:=setcustommapsizeform.SpinEditCustomWidth.Value;
+ mheight:=setcustommapsizeform.SpinEditCustomHeight.Value;
+ end;
end;
MapCoreBase.ResizeMapSize(CurrentMap,mwidth,mheight);
@@ -1002,21 +1013,22 @@ procedure TMapEdit.ReSizeMapClick(Sender: TObject);
MapListView.Repaint;
end;
-procedure TMapEdit.SetCustomSizeClick(Sender: TObject);
+procedure TMapEdit.SetMapCustomSizeClick(Sender: TObject);
begin
if SetCustomMapSizeForm.ShowModal = mrOK then
begin
- MapCoreBase.ResizeMapSize(CurrentMap,SetCustomMapSizeForm.SpinEditCustomWidth.Value,
- SetCustomMapSizeForm.SpinEditCustomHeight.Value);
-
- UpdateEditMenus;
- UpdatePageSize;
- MapPaintBox.Invalidate;
- UpdateMapPreviewImageIcons(CurrentMap,UpdateImage);
- MapListView.Repaint;
+ ReSizeMapClick(Sender);
end;
end;
+procedure TMapEdit.SetTileCustomSizeClick(Sender: TObject);
+begin
+ if SetCustomTileSizeForm.ShowModal = mrOK then
+ begin
+ ReSizeTiles(Sender);
+ end;
+end;
+
procedure TMapEdit.TileModeDrawClick(Sender: TObject);
begin
TileMode:=1;
@@ -1059,28 +1071,33 @@ procedure TMapEdit.ReSizeTiles(Sender: TObject);
'ReSize16x16' :begin
tw:=16;
th:=16;
- zs:=2;
+ zs:=1;
end;
'ReSize32x32' :begin
tw:=32;
th:=32;
- zs:=3;
+ zs:=1;
end;
'ReSize64x64' :begin
tw:=64;
th:=64;
- zs:=4;
+ zs:=1;
end;
'ReSize128x128' :begin
tw:=128;
th:=128;
- zs:=5;
+ zs:=1;
end;
'ReSize256x256' :begin
tw:=256;
th:=256;
- zs:=6;
+ zs:=1;
end;
+ 'SetTileCustomSize':begin
+ tw:=SetCustomTileSizeForm.SpinEditTileWidth.Value;
+ th:=SetCustomTileSizeForm.SpinEditTileHeight.Value;
+ zs:=1;
+ end;
End;
MapCoreBase.SetZoomSize(CurrentMap,zs);
diff --git a/rm.lpi b/rm.lpi
index 0d795ac..ca438b0 100644
--- a/rm.lpi
+++ b/rm.lpi
@@ -146,7 +146,7 @@
-
+
@@ -360,6 +360,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rm.lpr b/rm.lpr
index 60e1315..707996d 100644
--- a/rm.lpr
+++ b/rm.lpr
@@ -13,7 +13,7 @@
gwbasic, spriteimport, wraylib, rmcodegen, rwaqb, rmapi, rmcolorxga,
fileprops, drawprocs, rmconfig, rmclipboard, soundgen, usfxr,
SpriteSheetExport, animate, AnimBase, setcustommapsize, animationexport,
-rwspriteanim
+rwspriteanim, setcustomspritesize, setcustomtilesize, SetCustomCellSize
{ you can add units after this };
{$R *.res}
@@ -38,6 +38,9 @@
Application.CreateForm(TAnimationForm, AnimationForm);
Application.CreateForm(TSetCustomMapSizeForm, SetCustomMapSizeForm);
Application.CreateForm(TAnimationExportForm, AnimationExportForm);
+ Application.CreateForm(Tsetcustomspritesizeform, setcustomspritesizeform);
+ Application.CreateForm(TSetCustomTileSizeForm, SetCustomTileSizeForm);
+ Application.CreateForm(TSetCustomCellSizeForm, SetCustomCellSizeForm);
Application.Run;
end.
diff --git a/rmabout.pas b/rmabout.pas
index ad56feb..e5c3cce 100644
--- a/rmabout.pas
+++ b/rmabout.pas
@@ -8,8 +8,8 @@ interface
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,lclintf;
Const
- ProgramName ='Raster Master v4.8 R115';
- ProgramLicense = 'Released October 22 - 2024 under MIT License';
+ ProgramName ='Raster Master v5.1 R118 Halloween Edition';
+ ProgramLicense = 'Released October 31 - 2024 under MIT License';
type
diff --git a/rmmain.lfm b/rmmain.lfm
index ea1abc6..eb8b7c9 100644
--- a/rmmain.lfm
+++ b/rmmain.lfm
@@ -1,7 +1,7 @@
object RMMainForm: TRMMainForm
- Left = 383
+ Left = 261
Height = 854
- Top = 155
+ Top = 190
Width = 1491
Align = alClient
Caption = 'Raster Master'
@@ -486,6 +486,7 @@ object RMMainForm: TRMMainForm
Hint = 'Zoom Level'
Top = 1
Width = 30
+ Max = 20
Min = 1
OnChange = ZoomTrackBarChange
Orientation = trVertical
@@ -1056,8 +1057,35 @@ object RMMainForm: TRMMainForm
end
object MenuEdit: TMenuItem
Caption = 'Edit'
- object EditResizeTo: TMenuItem
- Caption = 'Resize To'
+ object EditClear: TMenuItem
+ Caption = 'Clear'
+ OnClick = EditClearClick
+ end
+ object EditClone: TMenuItem
+ Caption = 'Clone'
+ OnClick = EditCloneClick
+ end
+ object EditUndo: TMenuItem
+ Caption = 'Undo'
+ OnClick = ToolUndoIconClick
+ end
+ object EditCopy: TMenuItem
+ Caption = 'Copy'
+ OnClick = EditCopyClick
+ end
+ object EditPaste: TMenuItem
+ Caption = 'Paste'
+ OnClick = EditPasteClick
+ end
+ object EditProperties: TMenuItem
+ Caption = 'Properties'
+ OnClick = PropertiesClick
+ end
+ end
+ object MenuItem17: TMenuItem
+ Caption = 'View'
+ object MenuItem18: TMenuItem
+ Caption = 'Sprite Size'
object EditResizeTo8: TMenuItem
Caption = '8 X 8'
OnClick = EditResizeToNewSize
@@ -1082,30 +1110,35 @@ object RMMainForm: TRMMainForm
Caption = '256 X 256'
OnClick = EditResizeToNewSize
end
+ object ShowCustomSize: TMenuItem
+ Enabled = False
+ end
+ object EditResizeCustom: TMenuItem
+ Caption = 'Set Custom Size'
+ OnClick = EditResizeCustomClick
+ end
end
- object EditClear: TMenuItem
- Caption = 'Clear'
- OnClick = EditClearClick
- end
- object EditClone: TMenuItem
- Caption = 'Clone'
- OnClick = EditCloneClick
- end
- object EditUndo: TMenuItem
- Caption = 'Undo'
- OnClick = ToolUndoIconClick
- end
- object EditCopy: TMenuItem
- Caption = 'Copy'
- OnClick = EditCopyClick
- end
- object EditPaste: TMenuItem
- Caption = 'Paste'
- OnClick = EditPasteClick
- end
- object EditProperties: TMenuItem
- Caption = 'Properties'
- OnClick = PropertiesClick
+ object MenuItem27: TMenuItem
+ Caption = 'Grid Cell Size'
+ object gcNormal: TMenuItem
+ Caption = 'Normal (10 X 9)'
+ OnClick = SetGridCellClick
+ end
+ object gcWide: TMenuItem
+ Caption = 'Wide (16 X 8)'
+ OnClick = SetGridCellClick
+ end
+ object gcTall: TMenuItem
+ Caption = 'Tall (10 X 18)'
+ OnClick = SetGridCellClick
+ end
+ object gcCustomShow: TMenuItem
+ Enabled = False
+ end
+ object gcCustom: TMenuItem
+ Caption = 'Set Custom Size'
+ OnClick = SetCustomGridCellClick
+ end
end
end
object MenuItem4: TMenuItem
diff --git a/rmmain.pas b/rmmain.pas
index 2973d2f..c717c9d 100644
--- a/rmmain.pas
+++ b/rmmain.pas
@@ -11,7 +11,7 @@ interface
rmcolor, rmcolorvga, rmcolorxga, rmamigaColor, rmabout, rwpal, rwraw, rwpcx, rwbmp,
rmamigarwxgf, wjavascriptarray, rmthumb, wmodex, rwgif, rwxgf, rmexportprops,
rres, rwpng, wmouse, mapeditor, spriteimport,spritesheetexport, wraylib, rwilbm, rwaqb, rmapi,rmxgfcore,
- fileprops,rmconfig,rmclipboard,soundgen,animate;
+ fileprops,rmconfig,rmclipboard,soundgen,animate,setcustomspritesize,SetCustomCellSize;
type
@@ -35,14 +35,7 @@ TRMMainForm = class(TForm)
EditCopy: TMenuItem;
EditPaste: TMenuItem;
EditColor: TMenuItem;
- EditResizeTo128: TMenuItem;
- EditResizeTo256: TMenuItem;
EditUndo: TMenuItem;
- EditResizeTo: TMenuItem;
- EditResizeTo8: TMenuItem;
- EditResizeTo16: TMenuItem;
- EditResizeTo32: TMenuItem;
- EditResizeTo64: TMenuItem;
EditClear: TMenuItem;
JavaScript: TMenuItem;
ACVSpriteColorArray: TMenuItem;
@@ -76,6 +69,22 @@ TRMMainForm = class(TForm)
EditProperties: TMenuItem;
BAMRGBPutData: TMenuItem;
DeleteImage: TMenuItem;
+ MenuItem17: TMenuItem;
+ MenuItem18: TMenuItem;
+ EditResizeTo8: TMenuItem;
+ EditResizeTo16: TMenuItem;
+ EditResizeTo32: TMenuItem;
+ EditResizeTo64: TMenuItem;
+ EditResizeTo128: TMenuItem;
+ EditResizeTo256: TMenuItem;
+ ShowCustomSize: TMenuItem;
+ EditResizeCustom: TMenuItem;
+ MenuItem27: TMenuItem;
+ gcNormal: TMenuItem;
+ gcWide: TMenuItem;
+ gcTall: TMenuItem;
+ gcCustomShow: TMenuItem;
+ gcCustom: TMenuItem;
SpriteAnimationMenu: TMenuItem;
SpriteExportMenu: TMenuItem;
SoundGenerator: TMenuItem;
@@ -358,6 +367,8 @@ TRMMainForm = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FreeBASICClick(Sender: TObject);
procedure FreePascalClick(Sender: TObject);
+ procedure SetCustomGridCellClick(Sender: TObject);
+ procedure SetGridCellClick(Sender: TObject);
procedure GWBASICClick(Sender: TObject);
procedure EditResizeToNewSize(Sender: TObject);
procedure javaScriptArrayClick(Sender: TObject);
@@ -365,6 +376,7 @@ TRMMainForm = class(TForm)
procedure ListView1Click(Sender: TObject);
procedure DeleteAllClick(Sender: TObject);
procedure MapEditMenuClick(Sender: TObject);
+ procedure EditResizeCustomClick(Sender: TObject);
procedure SoundGeneratorClick(Sender: TObject);
procedure SpriteAnimationMenuClick(Sender: TObject);
procedure SpriteExportMenuClick(Sender: TObject);
@@ -2203,6 +2215,52 @@ procedure TRMMainForm.FreePascalClick(Sender: TObject);
end;
end;
+procedure TRMMainForm.SetCustomGridCellClick(Sender: TObject);
+begin
+ if SetCustomCellSizeForm.ShowModal = mrOK then
+ begin
+ SetGridCellClick(Sender);
+ end;
+end;
+
+procedure TRMMainForm.SetGridCellClick(Sender: TObject);
+begin
+ if (Sender As TMenuItem).Name = 'gcNormal' then
+ begin
+ RMDrawTools.SetCellWidthMin(10);
+ RMDrawTools.SetCellHeightMin(9);
+ end
+ else if (Sender As TMenuItem).Name = 'gcWide' then
+ begin
+ RMDrawTools.SetCellWidthMin(16);
+ RMDrawTools.SetCellHeightMin(8);
+ end
+ else if (Sender As TMenuItem).Name = 'gcTall' then
+ begin
+ RMDrawTools.SetCellWidthMin(8);
+ RMDrawTools.SetCellHeightMin(16);
+ end
+ else if (Sender As TMenuItem).Name = 'gcCustom' then
+ begin
+ RMDrawTools.SetCellWidthMin(setcustomcellsizeform.SpinEditCellWidth.Value);
+ RMDrawTools.SetCellHeightMin(setcustomcellsizeform.SpinEditCellHeight.Value);
+ end;
+
+ RMDrawTools.SetZoomSize(ZoomSize);
+ ZoomPaintBox.Width:=RMDrawTools.GetZoomPageWidth;
+ ZoomPaintBox.Height:=RMDrawTools.GetZoomPageHeight;
+
+ RMDrawTools.SetZoomMaxX(RMDrawTools.GetZoomPageWidth);
+ RMDrawTools.SetZoomMaxY(RMDrawTools.GetZoomPageHeight);
+ RMDrawTools.SetClipStatus(0); // turn off in case clip area is bigger than work area
+
+ ZoomTrackBar.Position:=RMDrawTools.GetZoomSize;;
+ UpdateActualArea;
+ UpdateZoomArea;
+ UpdateThumbView;
+ UpdateEditMenu;
+end;
+
procedure TRMMainForm.GWBASICClick(Sender: TObject);
@@ -2234,6 +2292,9 @@ procedure TRMMainForm.GWBASICClick(Sender: TObject);
end;
Procedure TRMMainForm.UpdateEditMenu;
+var
+ swidth,sheight : integer;
+ gcWidth,gcHeight : integer;
begin
EditResizeTo8.Checked:=false;
EditResizeTo16.Checked:=false;
@@ -2241,30 +2302,50 @@ procedure TRMMainForm.GWBASICClick(Sender: TObject);
EditResizeTo64.Checked:=false;
EditResizeTo128.Checked:=false;
EditResizeTo256.Checked:=false;
- case RMCoreBase.GetWidth of 8: EditResizeTo8.Checked:=true;
- 16: EditResizeTo16.Checked:=true;
- 32: EditResizeTo32.Checked:=true;
- 64: EditResizeTo64.Checked:=true;
- 128: EditResizeTo128.Checked:=true;
- 256: EditResizeTo256.Checked:=true;
-
+ ShowCustomSize.Checked:=false;
+ ShowCustomSize.Caption:='';
+
+ swidth:=RMCoreBase.GetWidth;
+ sheight:=RMCoreBase.GetHeight;
+ if (swidth=8) and (sheight=8) then EditResizeTo8.Checked:=true
+ else if (swidth=16) and (sheight=16) then EditResizeTo16.Checked:=true
+ else if (swidth=32) and (sheight=32) then EditResizeTo32.Checked:=true
+ else if (swidth=64) and (sheight=64) then EditResizeTo64.Checked:=true
+ else if (swidth=128) and (sheight=128) then EditResizeTo128.Checked:=true
+ else if (swidth=256) and (sheight=256) then EditResizeTo256.Checked:=true
+ else
+ begin
+ ShowCustomSize.Caption:=IntToStr(swidth)+'x'+IntToStr(sheight);
+ ShowCustomSize.Checked:=true;
+ RMCoreBase.SetWidth(swidth);
+ RMCoreBase.SetHeight(sheight);
end;
+
+ gcNormal.Checked:=false;
+ gcWide.Checked:=false;
+ gcTall.Checked:=false;
+ gcCustomShow.Checked:=false;
+ gcWidth:=RMDrawTools.GetCellWidth;
+ gcHeight:=RMDrawTools.GetCellHeight;
+
end;
procedure TRMMainForm.EditResizeToNewSize(Sender: TObject);
var
- ImgWidth,ImgHeight : integer;
+ ImgWidth,ImgHeight,zsize : integer;
begin
-
+ zsize:=2;
if (Sender As TMenuItem).Name = 'EditResizeTo8' then
begin
ImgWidth:=8;
ImgHeight:=8;
+ zsize:=9;
end
else if (Sender As TMenuItem).Name = 'EditResizeTo16' then
begin
ImgWidth:=16;
ImgHeight:=16;
+ zsize:=4;
end
else if (Sender As TMenuItem).Name = 'EditResizeTo32' then
begin
@@ -2285,12 +2366,20 @@ procedure TRMMainForm.EditResizeToNewSize(Sender: TObject);
begin
ImgWidth:=256;
ImgHeight:=256;
+ end
+ else if (Sender As TMenuItem).Name = 'EditResizeCustom' then
+ begin
+ ImgWidth:=setcustomspritesizeform.SpinEditWidth.Value;
+ ImgHeight:=setcustomspritesizeform.SpinEditHeight.Value;
end;
- // ActualBox.Width:=ImgWidth;
+
+
+
+ // ActualBox.Width:=ImgWidth;
// ActualBox.Height:=ImgHeight;
RMCoreBase.SetWidth(ImgWidth);
RMCoreBase.SetHeight(ImgHeight);
- RMDrawTools.SetZoomSize(1);
+ RMDrawTools.SetZoomSize(zsize);
ZoomPaintBox.Width:=RMDrawTools.GetZoomPageWidth;
ZoomPaintBox.Height:=RMDrawTools.GetZoomPageHeight;
@@ -2299,7 +2388,7 @@ procedure TRMMainForm.EditResizeToNewSize(Sender: TObject);
RMDrawTools.SetZoomMaxY(RMDrawTools.GetZoomPageHeight);
RMDrawTools.SetClipStatus(0); // turn off in case clip area is bigger than work area
ZoomSize:=RMDrawTools.GetZoomSize;
-
+ ZoomTrackBar.Position:=ZoomSize;
UpdateActualArea;
UpdateZoomArea;
UpdateThumbView;
@@ -3739,6 +3828,14 @@ procedure TRMMainForm.MapEditMenuClick(Sender: TObject);
MapEdit.WindowState:=wsNormal;
end;
+procedure TRMMainForm.EditResizeCustomClick(Sender: TObject);
+begin
+ if SetCustomSpriteSizeForm.ShowModal = mrOK then
+ begin
+ EditResizeToNewSize(Sender);
+ end;
+end;
+
procedure TRMMainForm.SoundGeneratorClick(Sender: TObject);
begin
SoundGeneratorForm.Show;
diff --git a/rmthumb.pas b/rmthumb.pas
index ea45957..40250d6 100644
--- a/rmthumb.pas
+++ b/rmthumb.pas
@@ -656,7 +656,7 @@ procedure TImageThumb.OpenProject(filename : string;insertmode : boolean);
if IORESULT <>0 then exit;
if (head.sig=RMProjectSig) and (head.version=RMProjectVersion) then
begin
- //delete all current images - use should be warn when oopening files
+ //delete all current images - user should be warn when oopening files
count:=head.ImageCount;
IndexOffset:=0;
@@ -674,7 +674,7 @@ procedure TImageThumb.OpenProject(filename : string;insertmode : boolean);
ReadImageFromProject(F,i+indexoffset);
end;
- ReadAllMapsF(F,head.MapCount,insertmode);
+ ReadAllMapsF(F,head.MapCount,insertmode); //there is always atleast one map - even if it blank
if head.AnimCount > 0 then AnimateBase.ReadAnimations(F,head.AnimCount,InsertMode);
end;
diff --git a/rmtools.pas b/rmtools.pas
index d462871..4d8f287 100644
--- a/rmtools.pas
+++ b/rmtools.pas
@@ -42,7 +42,10 @@ interface
end;
TGridAreaRec = Record
- CellWidth : integer;
+ CellWidthMin : integer; //the starting cell width and height
+ CellHeightMin : integer;
+
+ CellWidth : integer; //cell width is the result of zoomsize*CellWidthMin
CellHeight : integer;
GridThickX : integer;
GridThickY : integer;
@@ -94,8 +97,18 @@ TRMDrawTools = class(TObject)
procedure Rect(Image : TCanvas;x,y,x2,y2 : integer;color : TColor; mode,full : integer);
procedure SetGridThickX(amount : integer);
procedure SetGridThickY(amount : integer);
+
procedure SetCellWidth(cWidth : integer);
procedure SetCellHeight(cHeight : integer);
+ function GetCellWidth : integer;
+ function GetCellHeight : integer;
+
+ procedure SetCellWidthMin(cWidthMin : integer);
+ procedure SetCellHeightMin(cHeightMin : integer);
+ function GetCellWidthMin : integer;
+ function GetCellHeightMin : integer;
+
+
function GetCellsPerRow(ImageWidth : integer) : integer;
function GetCellsPerCol(ImageHeight : integer) : integer;
function GetMaxXOffset(ActualImageWidth,ZoomImageWidth : integer) : integer;
@@ -170,9 +183,12 @@ implementation
procedure TRMDrawTools.Init;
begin
+ SetCellWidthMin(10);
+ SetCellHeightMin(9);
SetZoomMode(1);
SetZoomSize(2);
SetGridMode(1);
+
SetDrawTool(DrawShapePencil);
SetClipStatus(0); //off
SetClipSizedStatus(0);
@@ -920,6 +936,39 @@ procedure TRMDrawTools.SetCellHeight(cHeight : integer);
GridArea.CellHeight:=cHeight;
end;
+procedure TRMDrawTools.SetCellWidthMin(cWidthMin : integer);
+begin
+ GridArea.CellWidthMin:=cWidthMin;
+end;
+
+procedure TRMDrawTools.SetCellHeightMin(cHeightMin : integer);
+begin
+ GridArea.CellHeightMin:=cHeightMin;
+end;
+
+
+function TRMDrawTools.GetCellWidth : integer;
+begin
+ result:=GridArea.CellWidth;
+end;
+
+function TRMDrawTools.GetCellHeight : integer;
+begin
+ result:=GridArea.CellHeight;
+end;
+
+function TRMDrawTools.GetCellWidthMin : integer;
+begin
+ result:=GridArea.CellWidthMin;
+end;
+
+function TRMDrawTools.GetCellHeightMin : integer;
+begin
+ result:=GridArea.CellHeightMin;
+end;
+
+
+
function TRMDrawTools.GetCellsPerRow(ImageWidth : integer) : integer;
begin
GetCellsPerRow:=(ImageWidth div GridArea.CellWidth);
@@ -1004,19 +1053,13 @@ procedure TRMDrawTools.SetZoomMode(mode : integer);
end;
procedure TRMDrawTools.SetZoomSize(size : integer);
-var
- XMulti : integer;
- YMulti : integer;
-
begin
- if size > 10 then size:=10;
+ if size > 20 then size:=20;
if size < 1 then size:=1;
GridArea.ZoomSize:=size;
- XMulti:=10;
- YMulti:=9;
-
+ (*
if RMCoreBase.GetWidth = 8 then
begin
If GridArea.ZoomSize < 4 then GridArea.ZoomSize:=4;
@@ -1029,8 +1072,9 @@ procedure TRMDrawTools.SetZoomSize(size : integer);
begin
If GridArea.ZoomSize < 2 then GridArea.ZoomSize:=2;
end;
- SetCellWidth(GridArea.ZoomSize*XMulti);
- SetCellHeight(GridArea.ZoomSize*YMulti);
+ *)
+ SetCellWidth(GridArea.ZoomSize*GetCellWidthMin);
+ SetCellHeight(GridArea.ZoomSize*GetCellHeightMin);
end;
function TRMDrawTools.GetZoomSize : integer;
diff --git a/setcustomcellsize.lfm b/setcustomcellsize.lfm
new file mode 100644
index 0000000..43a19a0
--- /dev/null
+++ b/setcustomcellsize.lfm
@@ -0,0 +1,60 @@
+object SetCustomCellSizeForm: TSetCustomCellSizeForm
+ Left = 755
+ Height = 179
+ Top = 476
+ Width = 320
+ BorderStyle = bsDialog
+ Caption = 'Set Custom Cell Size'
+ ClientHeight = 179
+ ClientWidth = 320
+ LCLVersion = '3.4.0.0'
+ object SpinEditCellWidth: TSpinEditEx
+ Left = 80
+ Height = 23
+ Top = 32
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 0
+ MaxValue = 16
+ MinValue = 8
+ NullValue = 0
+ Value = 14
+ end
+ object SpinEditCellHeight: TSpinEditEx
+ Left = 80
+ Height = 23
+ Top = 64
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 1
+ MaxValue = 16
+ MinValue = 8
+ NullValue = 0
+ Value = 16
+ end
+ object Label1: TLabel
+ Left = 40
+ Height = 15
+ Top = 32
+ Width = 32
+ Caption = 'Width'
+ end
+ object Label2: TLabel
+ Left = 40
+ Height = 15
+ Top = 64
+ Width = 36
+ Caption = 'Height'
+ end
+ object OKButton: TButton
+ Left = 216
+ Height = 25
+ Top = 128
+ Width = 75
+ Caption = 'OK'
+ TabOrder = 2
+ OnClick = OKButtonClick
+ end
+end
diff --git a/setcustomcellsize.pas b/setcustomcellsize.pas
new file mode 100644
index 0000000..8b3e9cf
--- /dev/null
+++ b/setcustomcellsize.pas
@@ -0,0 +1,42 @@
+unit setcustomcellsize;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SpinEx;
+
+type
+
+ { TSetCustomCellSizeForm }
+
+ TSetCustomCellSizeForm = class(TForm)
+ OKButton: TButton;
+ Label1: TLabel;
+ Label2: TLabel;
+ SpinEditCellWidth: TSpinEditEx;
+ SpinEditCellHeight: TSpinEditEx;
+ procedure OKButtonClick(Sender: TObject);
+ private
+
+ public
+
+ end;
+
+var
+ SetCustomCellSizeForm: TSetCustomCellSizeForm;
+
+implementation
+
+{$R *.lfm}
+
+{ TSetCustomCellSizeForm }
+
+procedure TSetCustomCellSizeForm.OKButtonClick(Sender: TObject);
+begin
+ modalresult:= mrOk;
+end;
+
+end.
+
diff --git a/setcustomspritesize.lfm b/setcustomspritesize.lfm
new file mode 100644
index 0000000..c0cea5e
--- /dev/null
+++ b/setcustomspritesize.lfm
@@ -0,0 +1,60 @@
+object setcustomspritesizeform: Tsetcustomspritesizeform
+ Left = 811
+ Height = 211
+ Top = 499
+ Width = 320
+ BorderStyle = bsDialog
+ Caption = 'Set Custom Sprite Size'
+ ClientHeight = 211
+ ClientWidth = 320
+ LCLVersion = '3.4.0.0'
+ object SpinEditWidth: TSpinEditEx
+ Left = 128
+ Height = 23
+ Top = 35
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 0
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object SpinEditHeight: TSpinEditEx
+ Left = 128
+ Height = 23
+ Top = 72
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 1
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object OKButton: TButton
+ Left = 208
+ Height = 25
+ Top = 152
+ Width = 75
+ Caption = 'OK'
+ TabOrder = 2
+ OnClick = OKButtonClick
+ end
+ object SpriteWidth: TLabel
+ Left = 32
+ Height = 15
+ Top = 40
+ Width = 65
+ Caption = 'Sprite Width'
+ end
+ object SpriteHeight: TLabel
+ Left = 32
+ Height = 15
+ Top = 72
+ Width = 69
+ Caption = 'Sprite Height'
+ end
+end
diff --git a/setcustomspritesize.pas b/setcustomspritesize.pas
new file mode 100644
index 0000000..04be737
--- /dev/null
+++ b/setcustomspritesize.pas
@@ -0,0 +1,42 @@
+unit setcustomspritesize;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SpinEx;
+
+type
+
+ { Tsetcustomspritesizeform }
+
+ Tsetcustomspritesizeform = class(TForm)
+ SpriteHeight: TLabel;
+ SpriteWidth: TLabel;
+ OKButton: TButton;
+ SpinEditWidth: TSpinEditEx;
+ SpinEditHeight: TSpinEditEx;
+ procedure OKButtonClick(Sender: TObject);
+ private
+
+ public
+
+ end;
+
+var
+ setcustomspritesizeform: Tsetcustomspritesizeform;
+
+implementation
+
+{$R *.lfm}
+
+{ Tsetcustomspritesizeform }
+
+procedure Tsetcustomspritesizeform.OKButtonClick(Sender: TObject);
+begin
+ modalresult:= mrOk;
+end;
+
+end.
+
diff --git a/setcustomtilesize.lfm b/setcustomtilesize.lfm
new file mode 100644
index 0000000..2584dae
--- /dev/null
+++ b/setcustomtilesize.lfm
@@ -0,0 +1,60 @@
+object SetCustomTileSizeForm: TSetCustomTileSizeForm
+ Left = 755
+ Height = 180
+ Top = 461
+ Width = 309
+ BorderStyle = bsDialog
+ Caption = 'Set Custom Tile Size'
+ ClientHeight = 180
+ ClientWidth = 309
+ LCLVersion = '3.4.0.0'
+ object Button1: TButton
+ Left = 216
+ Height = 25
+ Top = 136
+ Width = 75
+ Caption = 'OK'
+ TabOrder = 0
+ OnClick = Button1Click
+ end
+ object SpinEditTileWidth: TSpinEditEx
+ Left = 96
+ Height = 23
+ Top = 39
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 1
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object SpinEditTileHeight: TSpinEditEx
+ Left = 96
+ Height = 23
+ Top = 72
+ Width = 103
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 2
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object Label1: TLabel
+ Left = 52
+ Height = 15
+ Top = 39
+ Width = 32
+ Caption = 'Width'
+ end
+ object Label2: TLabel
+ Left = 48
+ Height = 15
+ Top = 72
+ Width = 36
+ Caption = 'Height'
+ end
+end
diff --git a/setcustomtilesize.pas b/setcustomtilesize.pas
new file mode 100644
index 0000000..a2a0232
--- /dev/null
+++ b/setcustomtilesize.pas
@@ -0,0 +1,42 @@
+unit setcustomtilesize;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SpinEx;
+
+type
+
+ { TSetCustomTileSizeForm }
+
+ TSetCustomTileSizeForm = class(TForm)
+ Button1: TButton;
+ Label1: TLabel;
+ Label2: TLabel;
+ SpinEditTileWidth: TSpinEditEx;
+ SpinEditTileHeight: TSpinEditEx;
+ procedure Button1Click(Sender: TObject);
+ private
+
+ public
+
+ end;
+
+var
+ SetCustomTileSizeForm: TSetCustomTileSizeForm;
+
+implementation
+
+{$R *.lfm}
+
+{ TSetCustomTileSizeForm }
+
+procedure TSetCustomTileSizeForm.Button1Click(Sender: TObject);
+begin
+ modalresult:= mrOk;
+end;
+
+end.
+
diff --git a/spriteimport.lfm b/spriteimport.lfm
index fee7c50..7b9dd1c 100644
--- a/spriteimport.lfm
+++ b/spriteimport.lfm
@@ -1,7 +1,7 @@
object SpriteImportForm: TSpriteImportForm
- Left = 414
+ Left = 391
Height = 620
- Top = 374
+ Top = 393
Width = 1165
Caption = 'Sprite Sheet Import'
ClientHeight = 620
@@ -36,7 +36,7 @@ object SpriteImportForm: TSpriteImportForm
OnClick = OpenSpriteSheetClick
end
object SpriteSizeLabel: TLabel
- Left = 339
+ Left = 401
Height = 15
Top = 19
Width = 53
@@ -45,7 +45,7 @@ object SpriteImportForm: TSpriteImportForm
ParentFont = False
end
object SpriteSizeComboBox: TComboBox
- Left = 416
+ Left = 463
Height = 23
Top = 13
Width = 100
@@ -58,6 +58,7 @@ object SpriteImportForm: TSpriteImportForm
'64 X 64'
'128 X 128'
'256 X 256'
+ 'Custom'
)
ParentFont = False
Style = csDropDownList
@@ -66,7 +67,7 @@ object SpriteImportForm: TSpriteImportForm
OnChange = SpriteSizeComboBoxChange
end
object NewPaletteComboBox: TComboBox
- Left = 728
+ Left = 776
Height = 23
Top = 13
Width = 237
@@ -84,7 +85,7 @@ object SpriteImportForm: TSpriteImportForm
OnChange = NewPaletteComboBoxChange
end
object PaletteComboBox: TComboBox
- Left = 552
+ Left = 616
Height = 23
Top = 13
Width = 134
@@ -122,9 +123,9 @@ object SpriteImportForm: TSpriteImportForm
OnClick = ImportFromClipboardClick
end
object CheckBoxDisplayGrid: TCheckBox
- Left = 416
+ Left = 616
Height = 19
- Top = 54
+ Top = 48
Width = 81
Caption = 'Display Grid'
Checked = True
@@ -133,9 +134,9 @@ object SpriteImportForm: TSpriteImportForm
OnChange = CheckBoxDisplayGridChange
end
object CheckBoxSnapToGrid: TCheckBox
- Left = 416
+ Left = 616
Height = 19
- Top = 88
+ Top = 80
Width = 83
Caption = 'Snap to Grid'
Checked = True
@@ -156,6 +157,48 @@ object SpriteImportForm: TSpriteImportForm
BorderSpacing.Around = 10
Panels = <>
end
+ object SpinEditWidth: TSpinEditEx
+ Left = 464
+ Height = 23
+ Top = 48
+ Width = 100
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 8
+ OnChange = SpinEditWidthHeightChange
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object SpinEditHeight: TSpinEditEx
+ Left = 464
+ Height = 23
+ Top = 80
+ Width = 99
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 9
+ OnChange = SpinEditWidthHeightChange
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object Label1: TLabel
+ Left = 344
+ Height = 15
+ Top = 56
+ Width = 110
+ Caption = 'Custom Sprite Width'
+ end
+ object Label2: TLabel
+ Left = 340
+ Height = 15
+ Top = 80
+ Width = 114
+ Caption = 'Custom Sprite Height'
+ end
end
object SpriteSheetScrollBox: TScrollBox
AnchorSideLeft.Control = Owner
diff --git a/spriteimport.pas b/spriteimport.pas
index c2d054c..7a86019 100644
--- a/spriteimport.pas
+++ b/spriteimport.pas
@@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
- StdCtrls, ExtDlgs,Clipbrd,LCLIntf,LCLType,rwpng,rmcore,rmthumb;
+ StdCtrls, ExtDlgs,Clipbrd,LCLIntf,LCLType, SpinEx,rwpng,rmcore,rmthumb;
type
@@ -15,8 +15,12 @@ interface
TSpriteImportForm = class(TForm)
CheckBoxDisplayGrid: TCheckBox;
CheckBoxSnapToGrid: TCheckBox;
+ Label1: TLabel;
+ Label2: TLabel;
OpenDialog1: TOpenDialog;
ImportFromClipboard: TButton;
+ SpinEditWidth: TSpinEditEx;
+ SpinEditHeight: TSpinEditEx;
SpriteSheetPaintBox: TPaintBox;
SpriteSizeComboBox: TComboBox;
NewPaletteComboBox: TComboBox;
@@ -33,6 +37,7 @@ TSpriteImportForm = class(TForm)
procedure ImportFromClipboardClick(Sender: TObject);
procedure NewPaletteComboBoxChange(Sender: TObject);
procedure OpenSpriteSheetClick(Sender: TObject);
+ procedure SpinEditWidthHeightChange(Sender: TObject);
procedure SpriteSheetPaintBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SpriteSheetPaintBoxPaint(Sender: TObject);
@@ -108,6 +113,11 @@ procedure TSpriteImportForm.OpenSpriteSheetClick(Sender: TObject);
end;
end;
+procedure TSpriteImportForm.SpinEditWidthHeightChange(Sender: TObject);
+begin
+ if SpriteSize = 6 then SpriteSizeComboBoxChange(Sender);
+end;
+
procedure TSpriteImportForm.SpriteSheetPaintBoxMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
@@ -389,6 +399,10 @@ procedure TSpriteImportForm.UpdateSpriteValues;
SpriteWidth:=256;
SpriteHeight:=256;
end;
+ 6:begin
+ SpriteWidth:=SpinEditWidth.Value;
+ SpriteHeight:=SpinEditHeight.Value;
+ end;
end;
ClipWidth:=ZoomSize*SpriteWidth;
@@ -442,8 +456,10 @@ procedure TSpriteImportForm.FormCreate(Sender: TObject);
ClipWidth:=ZoomSize*SpriteWidth;
ClipHeight:=ZoomSize*SpriteHeight;
- NewPaletteFrom:=1; //new palette from entire image
- NewPaletteMode:=4; //vga
+ NewPaletteFrom:=0; //new palette from clip area
+ NewPaletteMode:=7; //xga 256
+ PaletteComboBox.ItemIndex:=NewPaletteMode;
+ NewPaletteComboBox.ItemIndex:=NewPaletteFrom;
end;
procedure TSpriteImportForm.CheckBoxDisplayGridChange(Sender: TObject);
diff --git a/spritesheetexport.lfm b/spritesheetexport.lfm
index e742508..982e752 100644
--- a/spritesheetexport.lfm
+++ b/spritesheetexport.lfm
@@ -1,7 +1,7 @@
object SpriteSheetExportForm: TSpriteSheetExportForm
- Left = 606
+ Left = 451
Height = 703
- Top = 230
+ Top = 254
Width = 1233
Caption = 'Sprite Sheet Export'
ClientHeight = 703
@@ -92,7 +92,6 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
'800X600'
'1024X768'
'Custom'
- ''
)
Style = csDropDownList
TabOrder = 1
@@ -121,6 +120,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
'64X64'
'128X128'
'256X256'
+ 'Custom'
)
Style = csDropDownList
TabOrder = 3
@@ -179,7 +179,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
OnClick = ApplyClick
end
object ExportToClipBoard: TButton
- Left = 280
+ Left = 433
Height = 25
Top = 75
Width = 131
@@ -188,7 +188,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
OnClick = ExportToClipBoardClick
end
object ExportToFile: TButton
- Left = 280
+ Left = 433
Height = 25
Top = 104
Width = 131
@@ -197,7 +197,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
OnClick = ExportToFileClick
end
object DescExportToClipboard: TButton
- Left = 568
+ Left = 688
Height = 25
Top = 75
Width = 131
@@ -206,7 +206,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
OnClick = DescExportToFileClick
end
object StaticText5: TStaticText
- Left = 464
+ Left = 584
Height = 17
Top = 56
Width = 129
@@ -214,7 +214,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
TabOrder = 12
end
object DescriptionFile: TComboBox
- Left = 464
+ Left = 584
Height = 23
Top = 75
Width = 100
@@ -241,7 +241,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
OnChange = SpriteSheetChange
end
object StaticText6: TStaticText
- Left = 280
+ Left = 408
Height = 17
Top = 56
Width = 105
@@ -251,34 +251,34 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
object StaticText7: TStaticText
Left = 16
Height = 17
- Top = 64
- Width = 120
- Caption = 'Custom Sprite Sheet'
+ Top = 56
+ Width = 136
+ Caption = 'Custom Sprite Sheet Size'
ParentBidiMode = False
TabOrder = 15
end
object StaticText8: TStaticText
- Left = 16
+ Left = 8
Height = 17
- Top = 88
+ Top = 77
Width = 65
Alignment = taRightJustify
Caption = 'Width'
TabOrder = 16
end
object StaticText9: TStaticText
- Left = 16
+ Left = 8
Height = 17
- Top = 120
+ Top = 112
Width = 65
Alignment = taRightJustify
Caption = 'Height'
TabOrder = 17
end
object CSWidth: TSpinEdit
- Left = 88
+ Left = 80
Height = 23
- Top = 88
+ Top = 80
Width = 64
MaxValue = 4000
MinValue = 256
@@ -287,9 +287,9 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
Value = 2000
end
object CSHeight: TSpinEdit
- Left = 88
+ Left = 80
Height = 23
- Top = 120
+ Top = 112
Width = 64
MaxValue = 4000
MinValue = 256
@@ -298,7 +298,7 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
Value = 2000
end
object DescExportToFile: TButton
- Left = 568
+ Left = 688
Height = 25
Top = 104
Width = 131
@@ -306,6 +306,53 @@ object SpriteSheetExportForm: TSpriteSheetExportForm
TabOrder = 20
OnClick = DescExportToFileClick
end
+ object Label1: TLabel
+ Left = 232
+ Height = 15
+ Top = 80
+ Width = 32
+ Caption = 'Width'
+ end
+ object Label2: TLabel
+ Left = 232
+ Height = 15
+ Top = 112
+ Width = 36
+ Caption = 'Height'
+ end
+ object SpinEditCustomSpriteWidth: TSpinEditEx
+ Left = 277
+ Height = 23
+ Top = 80
+ Width = 67
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 21
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object SpinEditCustomSpriteHeight: TSpinEditEx
+ Left = 277
+ Height = 23
+ Top = 112
+ Width = 67
+ MaxLength = 0
+ NumbersOnly = True
+ TabOrder = 22
+ MaxValue = 256
+ MinValue = 8
+ NullValue = 0
+ Value = 48
+ end
+ object Label3: TLabel
+ Left = 208
+ Height = 15
+ Top = 56
+ Width = 98
+ Caption = 'Custom Sprite Size'
+ end
end
object ZoomTrackBar: TTrackBar
AnchorSideRight.Control = Owner
diff --git a/spritesheetexport.pas b/spritesheetexport.pas
index b8f021a..9ee6e92 100644
--- a/spritesheetexport.pas
+++ b/spritesheetexport.pas
@@ -6,7 +6,8 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
- Spin, ComCtrls,Clipbrd,rmcodegen,rwxgf,rmclipboard,rmthumb,rmconfig,rwpng,LazFileUtils;
+ Spin, ComCtrls, Clipbrd, rmcodegen, rwxgf, rmclipboard, rmthumb, rmconfig,
+ rwpng, LazFileUtils, SpinEx;
type
@@ -20,8 +21,13 @@ TSpriteSheetExportForm = class(TForm)
CSWidth: TSpinEdit;
CSHeight: TSpinEdit;
DescExportToFile: TButton;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
SaveDialog1: TSaveDialog;
SaveDialog2: TSaveDialog;
+ SpinEditCustomSpriteWidth: TSpinEditEx;
+ SpinEditCustomSpriteHeight: TSpinEditEx;
SpriteSheet: TComboBox;
SpriteSize: TComboBox;
Direction: TComboBox;
@@ -427,6 +433,10 @@ procedure TSpriteSheetExportForm.UpdateSpriteValues;
SpriteWidth:=256;
SpriteHeight:=256;
end;
+ 6:begin
+ SpriteWidth:=SpinEditCustomSpriteWidth.Value;
+ SpriteHeight:=SpinEditCustomSpriteHeight.Value;
+ end;
end;
end;