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;