From 51e8a1775c59211e3073fd1dd932e64f7856e086 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Wed, 20 Mar 2024 10:57:23 +0100 Subject: [PATCH 01/11] Add option to hide the system cursor of the game --- .../minigdx/tiny/cli/command/CreateCommand.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt b/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt index b9ebfa96..6062e405 100644 --- a/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt +++ b/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt @@ -42,26 +42,26 @@ class CreateCommand : CliktCommand(name = "create", help = "Create a new game.") .default(File(".")) private val gameName by option(help = "🏷 The name of the game") - .prompt(default = generateRandomGameName()) + .prompt(text = "🏷 The name of the game", default = generateRandomGameName()) private val gameResolution by option(help = "🖥 The game resolution (e.g., 800x600)") - .prompt(default = "256x256") + .prompt(text = "\uD83D\uDDA5 Game resolution (e.g., 800x600)", default = "256x256") .validate { require(it.matches(Regex("\\d+x\\d+"))) { "Invalid resolution format: $it" } } private val gameScript by option(help = "\uD83D\uDCDD Name of the default game script") - .prompt(default = "game.lua") + .prompt(text = "\uD83D\uDCDD Name of the first game script", default = "game.lua") .validate { require(it.endsWith(".lua")) { "Invalid game script extension: $it" } } private val spriteSize by option(help = "📐 The sprite size (e.g., 16x16)") - .prompt(default = "16x16") + .prompt(text = "\uD83D\uDCD0 Sprite size (e.g., 16x16)", default = "16x16") .validate { require(it.matches(Regex("\\d+x\\d+"))) { "Invalid resolution format: $it" } } private val zoom by option(help = "🔍 Game zoom") .int() - .prompt(default = "2") + .prompt(text = "\uD83D\uDD0D Game zoom", default = "2") private val spritesheets by option(help = "\uD83D\uDCC4 The filenames of the sprite sheets, separated by a comma (e.g., file1.png, file2.png)") - .prompt(default = "") + .prompt(text = "\uD83D\uDCC4 Sprite sheet name to include", default = "") .validate { require( it.isEmpty() || it.split(",") @@ -72,7 +72,7 @@ class CreateCommand : CliktCommand(name = "create", help = "Create a new game.") private val palette by option(help = "🎨 The Color palette to use") .int() .prompt( - """Please choose a game color palette: + """🎨 Please choose a game color palette: ${ GamePalette.ALL.mapIndexed { index, gamePalette -> "[${index + 1}] ${gamePalette.name}" @@ -81,6 +81,10 @@ ${ """, ) + private val hideMouseCursor by option(help = "\uD83D\uDDB1\uFE0F Hide system cursor mouse") + .prompt("\uD83D\uDDB1\uFE0F Hide system cursor mouse? (yes or no)", default = "No") + .validate { it.lowercase() == "yes" || it.lowercase() == "no" } + override fun run() { echo("➡\uFE0F Game Name: $gameName") echo("➡\uFE0F Game Resolution: $gameResolution") @@ -95,6 +99,7 @@ ${ zoom = zoom, colors = GamePalette.ALL[palette - 1].colors, scripts = listOf(gameScript), + hideMouseCursor = hideMouseCursor == "yes".lowercase(), ) as GameParameters if (!gameDirectory.exists()) gameDirectory.mkdirs() From c05dda960ba17fb3ad352b14599d38bf6a1fb248 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Wed, 20 Mar 2024 23:45:37 +0100 Subject: [PATCH 02/11] Bug fixes - ws.list not filtered correctly - debug.log crashing with table - new() not doing a deep copy of elements. --- .../com/github/minigdx/tiny/lua/DebugLib.kt | 40 +++++++++---------- .../com/github/minigdx/tiny/lua/StdLib.kt | 26 ++++++++---- .../github/minigdx/tiny/lua/WorkspaceLib.kt | 2 +- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt index 80aea156..9efbf71a 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt @@ -189,12 +189,30 @@ class DebugLib(private val resourceAccess: GameResourceAccess) : TwoArgFunction( } } + private fun formatValue(arg: LuaValue, recursiveSecurity: MutableSet = mutableSetOf()): String = if (arg.istable()) { + val table = arg as LuaTable + if (recursiveSecurity.contains(table.hashCode())) { + "table[<${table.hashCode()}>]" + } else { + recursiveSecurity.add(table.hashCode()) + val keys = table.keys() + val str = keys.joinToString(" ") { + it.optjstring("nil") + ":" + formatValue(table[it], recursiveSecurity) + } + "table[$str]" + } + } else if (arg.isfunction()) { + "function(" + (0 until arg.narg()).joinToString(", ") { "arg" } + ")" + } else { + arg.toString() + } + @TinyFunction("Log a message on the screen.", example = DEBUG_EXAMPLE) internal inner class log : TwoArgFunction() { @TinyCall("Log a message on the screen.") override fun call(@TinyArg("str") arg1: LuaValue, @TinyArg("color") arg2: LuaValue): LuaValue { - val message = arg1.optjstring("")!! + val message = formatValue(arg1) val color = arg2.optjstring("#32CD32")!! resourceAccess.debug(DebugMessage(message, color)) return NIL @@ -207,32 +225,12 @@ class DebugLib(private val resourceAccess: GameResourceAccess) : TwoArgFunction( @TinyFunction("Log a message into the console.", example = DEBUG_EXAMPLE) internal inner class console : OneArgFunction() { - private val recursiveSecurity = mutableSetOf() - @TinyCall("Log a message into the console.") override fun call(@TinyArg("str") arg: LuaValue): LuaValue { val str = formatValue(arg) - recursiveSecurity.clear() println("\uD83D\uDC1B $str") return NIL } - - private fun formatValue(arg: LuaValue): String = if (arg.istable()) { - val table = arg as LuaTable - if (recursiveSecurity.contains(table.hashCode())) { - "table[<${table.hashCode()}>]" - } else { - recursiveSecurity.add(table.hashCode()) - val keys = table.keys() - val str = keys.map { it.optjstring("nil") + ":" + formatValue(table.get(it)) } - .joinToString(" ") - "table[$str]" - } - } else if (arg.isfunction()) { - "function(" + (0 until arg.narg()).map { "arg" }.joinToString(", ") + ")" - } else { - arg.toString() - } } @TinyFunction("Draw a rectangle on the screen", example = DEBUG_ENABLED_EXAMPLE) diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/StdLib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/StdLib.kt index b9891517..d509302f 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/StdLib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/StdLib.kt @@ -46,19 +46,29 @@ class StdLib( @TinyCall("Create new instance of class using default values.") override fun call(@TinyArg("class") arg1: LuaValue, @TinyArg("default") arg2: LuaValue): LuaValue { val default = if (arg2.istable()) { - val result = LuaTable() - val toCopy = arg2.checktable()!! - toCopy.keys().forEach { key -> - result.set(key, toCopy.get(key)) - } - result + arg2.checktable()!!.deepCopy() } else { LuaTable() } - default.setmetatable(arg1) - arg1.rawset("__index", arg1) + val reference = arg1.checktable()!!.deepCopy() + default.setmetatable(reference) + reference.rawset("__index", reference) return default } + + private fun LuaTable.deepCopy(): LuaTable { + val result = LuaTable() + this.keys().forEach { key -> + var value = this[key] + value = if (value.istable()) { + value.checktable()!!.deepCopy() + } else { + value + } + result[key] = value + } + return result + } } @TinyFunction( diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/WorkspaceLib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/WorkspaceLib.kt index 8f7171c3..434583c5 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/WorkspaceLib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/WorkspaceLib.kt @@ -107,7 +107,7 @@ class WorkspaceLib( val ext = arg.optjstring(null).let { it?.lowercase() } val result = LuaTable() resources.forEach { - if ((ext == null || it.name.endsWith(ext))) { + if ((ext == null || it.extension.endsWith(ext))) { result.insert(0, valueOf(it.name)) } } From 7b01b563ac3a7310327770a26d893a1abb8c06d2 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Fri, 22 Mar 2024 00:17:36 +0100 Subject: [PATCH 03/11] Update SFX editor. --- tiny-cli/sfx.aseprite | Bin 3096 -> 3134 bytes .../src/jvmMain/resources/sfx/editor.ldtk | 120 +++++++-------- .../sfx/editor/simplified/Fx/Tiles.png | Bin 383 -> 384 bytes .../sfx/editor/simplified/Fx/_composite.png | Bin 396 -> 397 bytes .../sfx/editor/simplified/Fx/data.json | 30 ++-- tiny-cli/src/jvmMain/resources/sfx/sfx.png | Bin 3324 -> 3444 bytes .../src/jvmMain/resources/sfx/test-game.lua | 107 +++++++------ .../src/jvmMain/resources/sfx/widgets.lua | 145 ++++++++---------- .../com/github/minigdx/tiny/lua/SfxLib.kt | 1 - 9 files changed, 195 insertions(+), 208 deletions(-) diff --git a/tiny-cli/sfx.aseprite b/tiny-cli/sfx.aseprite index 5e6c52f6b50f0202a9650daa759a207c64ffdbc1..e8e99cd4583b969210f81149aaaa1276b0ec23e2 100644 GIT binary patch delta 2334 zcmZWp2~d;g7EK!4_#TziT9w*B+D9#|6_+Aa*4T_q^642IEB2X3+O*8?+9MSM_rjbLx(TI#8@=^gH+jhq_gc5hzh4p&05+|<<-ZWE zvz01S;#$)i(%Me6W>m{fWvZ0VZ^C{d+m6v+u+B>N`fm1=W~LOImGLp1(hECub>pmt zdhV&pDakp)jICdJLZrF4d_!~HFW!cya1;zfXZ3ZA zY$N?DjPh8OFsm+AfCO@}IHKYO^??)U0qe-gA&~D^=VzESM(ClI`5L%(l!i%vK(EdR z--Vga>`#{~uE2^-=U|qr$zps#lP&Rx2sHxD6?=1yrqq+>0P@J!kuZ$Qc%J1xK3czM zU=pws9(j+!wQi4&6}>8J7lbeZ8fy{;*L&JYnR2)r&K@l0&|4Dp70Q$^P|XwgdQtK< z#N#X4yUNSI0UqyaLhF5aen|4r6YZ`+tAZj91hplsOj2EdbOvI9KfU?YxEwI6_0p-~ zgtb9>jLl3Z)gBt+8V$cGYV%_f5x3ooV_-%Em7fPW=ZD$hu9bgdeR%p{^Pz5hCo++P z`P85fm=EBDxQt+eK0eQqy72->RAlu=ANnHEYcC0$1vDjMS4H$Z3@EW^IA4rtOmVqEMrBFK1j1i zvfW38)R5Pyiay+CO1=tDHc?l9H!2R5YmlD`374h9^;7oq59ix9k{)KnnKMJ)T9C^~ z4k@gUX3oB1b-7e@MY_Ci;7V6vZ^_tq_f|1Xb`Uex=$gt(1wX=* zX$6n)TdQP&+8HJYLeqM~%+mmhI`EE<8l=`!S{ z@49*)e!6Cd>YFgsnT`kHXI7%HW>oCU>~Eq6=LE*$tz4TkRG0Fm#vfaQ&;Y&PcY+r<Lo)d_R3y#W>dwyfSwqCo{sJ=ze4F~>+zSX{MBnSBOx zMgEC}?PNADMKj_!rYBqLL3Oz@CA(@g^9$Gat%s%%VT<^7_d^$V2e^si>pA@N?f!{n zQ2q0Ef7giv#EEoG7oPqi=B^%u*7NxXUC3wXiC?bJDQ*#h10?C6|1kt?YOaB+;(e47 z9%U~%h~&co?N#QcRRud)r zI0ioda*JWw(evoK@#rJ0FyW0!2cvg4nr|U}DLo)o`MqQ(K3?wh3U@o7RqjUj14pBD zr`-ll??{Qf4zl5w|G3#ao&`CwY%}+(7LIdK3<0 z+w4#x=%L!wsKhKux2nkhFdr#7$fU?Q#Uhwze7vKdPjc1 zVp2m>pAKjSpffL$20*hYu7I?Gavt(^VD5|=&emEtf-Ygn@Bx?EJnqx-uX-lH+}sZf zk1|z}^@%-VaP%&+^o;h%JR0y84+?GLf@w}P*uF%0eFIkVe{!8a26t&|pCm}P+zIb) zwkQQLKVF!n$^M!s{V(1Bu=VQyC9v1X^ZWo5rbv8=WntF5lOz=>fRkt7`RtC*3K1JI1MT@c~6*{$^=w}5*DoidxNUZdD=kt2i@O-a1ai`GYme| zG38iE`nTHxF{WKUlP5jbW}u-;56BxwMt&Edl*~ChHTD_$1mWk8Y2H_CJ6-M-e{WBs zZ2j&$|KPKzpg35zPe8#ne3lka&EytJ9pR8-{{C%ZM`-?v=8^SiOW???ZUgaGN2irb z4^8QqW)dexcYttyF~LO1cm-|t0W%Nc;WI_ii}qDn-N@Y`t@%)WL)Di3#rlT z0y_Dz_r_uZuHlP%<67R!+n!T9%$*>Yb=Xd7+}NqTAe2n7e|HfW-Ep>92PHNs{yuKb zfzu5?z~3P?uH#_$r7p%Ke();>!s?wf2v+m_6e>t^DOtZ1U|wua1bUGwXXEaysn<+~ z8~+NjBx|fON|N(%#jjJENr;!{S*ac3A!>&@QliqH0L~7hwg4GWWChN<;)fQ#+swkn9!-$a;QIZ#wSoc8j03_V{M=+a! z!)*>h6LDH+fWzeq4^KM@=LEaO#+aN$+@P~O{jvll<}UQZ#ZoMGit~(sj%+)z(e%cm FKLM;UL>T}8 delta 2296 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 diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk index d22b0d4e..6ee3654c 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk +++ b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk @@ -2196,8 +2196,8 @@ "customData": [], "savedSelections": [], "cachedPixelData": { - "opaqueTiles": "0000000011110011111111111000000000000000011100111111111110000000000000000000000000000000001111100000000000000000000000000111111000000000000000111111111101111110000000000000001111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "averageColors": "fbbbfbbbfdccfdcc0000000000000000f625f625f625f62575252225f778f778f878f999f778f878f778fbbbfbbbf235f725bbaa7baa3baa5feecfee5dcc20d3faaafaaafccbfccb00000000000000008225f235f235f23572252225f736f736f736f736f736f736f736f736f736f846f7350000bdcc9dcc2f0540853fa022af1f050f05308540853fa02fa022af02af1fe22fe23f7a2f7a20d310d32fa01fa0376847684768476868792779877937680000e725f625f725f867f856f86749990f051f052085208500000000000012af1fe21fe200003f7a20c410b478455845376827681768176727672767676747670000f625f235f636f856f725f8564889fbbbfbbbfbbbfbbbfbbbfbbb00000000000000000000000000000000f446f446f446f557f446f446f446f658f658f2350000f725f636f735f867f856f8671aabea9aea9aeaaaea9aea9aeaaa00000000000000000000000000000000f7bff8bff8bff9cff8bff8bff8bffbdefbdef2afd235d235d23500002bbc2bbc00000000e888e68600000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b99aba9a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b999ca89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "opaqueTiles": "0000000011110111111111111000000000000000011100111111111110000000000000000000000000000000001111100000000000000000000000000111111000000000000001111111111101111110000000000000011111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "averageColors": "fbbbfbbbfdccfdcc0000000000000000f625f625f625f6257525fbbbf778f778f878f999f778f878f778fbbbfbbbf235f725bbaa7baa3baa5feecfee5dcc20d3faaafaaafccbfccb00000000000000008225f235f235f23572250000f736f736f736f736f736f736f736f736f736f846f7350000bdcc9dcc2f0540853fa022af1f050f05308540853fa02fa022af02af1fe22fe23f7a2f7a20d300002fa01fa0376847684768476868792779877937680000e725f625f725f867f856f86749990f051f052085208500000000000012af1fe21fe200003f7a20c4000078455845376827681768176727672767676747670000f625f235f636f856f725f8564889fbbbfbbbfbbbfbbbfbbbfbbb0000000000000000000000000000f658f446f446f446f557f446f446f446f658f658f2350000f725f636f735f867f856f8671aabea9aea9aeaaaea9aea9aeaaa0000000000000000000000000000fbdef7bff8bff8bff9cff8bff8bff8bffbdefbdef2afd235d235d23500002bbc2bbc00000000b99ab6a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b99aba9a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b999ca89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } ], "enums": [ @@ -4776,7 +4776,7 @@ "layerDefUid": 7, "pxOffsetX": 0, "pxOffsetY": 0, - "visible": true, + "visible": false, "optionalRules": [], "intGridCsv": [], "autoLayerTiles": [], @@ -4786,7 +4786,7 @@ "entityInstances": [ { "__identifier": "Envelop", - "__grid": [1,3], + "__grid": [1,4], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -4795,7 +4795,7 @@ "width": 96, "height": 32, "defUid": 25, - "px": [8,24], + "px": [8,32], "fieldInstances": [ { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 26, "realEditorValues": [] }, { "__identifier": "Attack", "__type": "EntityRef", "__value": { @@ -4836,11 +4836,11 @@ }] } ], "__worldX": -176, - "__worldY": 160 + "__worldY": 168 }, { "__identifier": "Fader", - "__grid": [14,3], + "__grid": [14,4], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -4849,7 +4849,7 @@ "width": 8, "height": 32, "defUid": 12, - "px": [112,24], + "px": [112,32], "fieldInstances": [ { "__identifier": "Id", "__type": "Int", "__value": 0, "__tile": null, "defUid": 14, "realEditorValues": [] }, { "__identifier": "Type", "__type": "LocalEnum.Fader", "__value": "Note", "__tile": null, "defUid": 18, "realEditorValues": [] }, @@ -4863,11 +4863,11 @@ }] } ], "__worldX": -72, - "__worldY": 160 + "__worldY": 168 }, { "__identifier": "Fader", - "__grid": [16,3], + "__grid": [16,4], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -4876,7 +4876,7 @@ "width": 8, "height": 32, "defUid": 12, - "px": [128,24], + "px": [128,32], "fieldInstances": [ { "__identifier": "Id", "__type": "Int", "__value": 0, "__tile": null, "defUid": 14, "realEditorValues": [] }, { "__identifier": "Type", "__type": "LocalEnum.Fader", "__value": "Note", "__tile": null, "defUid": 18, "realEditorValues": [] }, @@ -4890,11 +4890,11 @@ }] } ], "__worldX": -56, - "__worldY": 160 + "__worldY": 168 }, { "__identifier": "Fader", - "__grid": [18,3], + "__grid": [18,4], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -4903,7 +4903,7 @@ "width": 8, "height": 32, "defUid": 12, - "px": [144,24], + "px": [144,32], "fieldInstances": [ { "__identifier": "Id", "__type": "Int", "__value": 0, "__tile": null, "defUid": 14, "realEditorValues": [] }, { "__identifier": "Type", "__type": "LocalEnum.Fader", "__value": "Note", "__tile": null, "defUid": 18, "realEditorValues": [] }, @@ -4917,11 +4917,11 @@ }] } ], "__worldX": -40, - "__worldY": 160 + "__worldY": 168 }, { "__identifier": "Fader", - "__grid": [20,3], + "__grid": [20,4], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -4930,7 +4930,7 @@ "width": 8, "height": 32, "defUid": 12, - "px": [160,24], + "px": [160,32], "fieldInstances": [ { "__identifier": "Id", "__type": "Int", "__value": 0, "__tile": null, "defUid": 14, "realEditorValues": [] }, { "__identifier": "Type", "__type": "LocalEnum.Fader", "__value": "Note", "__tile": null, "defUid": 18, "realEditorValues": [] }, @@ -4944,11 +4944,11 @@ }] } ], "__worldX": -24, - "__worldY": 160 + "__worldY": 168 }, { "__identifier": "Checkbox", - "__grid": [1,8], + "__grid": [1,9], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 8, "y": 48, "w": 8, "h": 8 }, @@ -4957,7 +4957,7 @@ "width": 8, "height": 8, "defUid": 27, - "px": [8,64], + "px": [8,72], "fieldInstances": [ { "__identifier": "Help", "__type": "String", "__value": "Enable Vibrato", "__tile": null, "defUid": 28, "realEditorValues": [{ "id": "V_String", @@ -4969,11 +4969,11 @@ }] } ], "__worldX": -176, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Checkbox", - "__grid": [7,8], + "__grid": [7,9], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 8, "y": 48, "w": 8, "h": 8 }, @@ -4982,7 +4982,7 @@ "width": 8, "height": 8, "defUid": 27, - "px": [56,64], + "px": [56,72], "fieldInstances": [ { "__identifier": "Help", "__type": "String", "__value": "Enable Sweep", "__tile": null, "defUid": 28, "realEditorValues": [{ "id": "V_String", @@ -4994,11 +4994,11 @@ }] } ], "__worldX": -128, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Checkbox", - "__grid": [14,8], + "__grid": [14,9], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 8, "y": 48, "w": 8, "h": 8 }, @@ -5007,7 +5007,7 @@ "width": 8, "height": 8, "defUid": 27, - "px": [112,64], + "px": [112,72], "fieldInstances": [ { "__identifier": "Help", "__type": "String", "__value": "Enable Tied notes", "__tile": null, "defUid": 28, "realEditorValues": [{ "id": "V_String", @@ -5019,11 +5019,11 @@ }] } ], "__worldX": -72, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Knob", - "__grid": [1,10], + "__grid": [1,11], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 240, "y": 0, "w": 8, "h": 8 }, @@ -5032,7 +5032,7 @@ "width": 8, "height": 8, "defUid": 9, - "px": [8,80], + "px": [8,88], "fieldInstances": [ { "__identifier": "Label", "__type": "String", "__value": "Vibrato", "__tile": null, "defUid": 10, "realEditorValues": [{ "id": "V_String", @@ -5044,11 +5044,11 @@ }] } ], "__worldX": -176, - "__worldY": 216 + "__worldY": 224 }, { "__identifier": "Knob", - "__grid": [7,10], + "__grid": [7,11], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 240, "y": 0, "w": 8, "h": 8 }, @@ -5057,7 +5057,7 @@ "width": 8, "height": 8, "defUid": 9, - "px": [56,80], + "px": [56,88], "fieldInstances": [ { "__identifier": "Label", "__type": "String", "__value": "Sweep", "__tile": null, "defUid": 10, "realEditorValues": [{ "id": "V_String", @@ -5069,11 +5069,11 @@ }] } ], "__worldX": -128, - "__worldY": 216 + "__worldY": 224 }, { "__identifier": "Knob", - "__grid": [1,13], + "__grid": [1,14], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 240, "y": 0, "w": 8, "h": 8 }, @@ -5082,7 +5082,7 @@ "width": 8, "height": 8, "defUid": 9, - "px": [8,104], + "px": [8,112], "fieldInstances": [ { "__identifier": "Label", "__type": "String", "__value": "Depth", "__tile": null, "defUid": 10, "realEditorValues": [{ "id": "V_String", @@ -5094,11 +5094,11 @@ }] } ], "__worldX": -176, - "__worldY": 240 + "__worldY": 248 }, { "__identifier": "TiedNote", - "__grid": [16,8], + "__grid": [16,9], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -5107,7 +5107,7 @@ "width": 8, "height": 48, "defUid": 38, - "px": [128,64], + "px": [128,72], "fieldInstances": [{ "__identifier": "Enabled", "__type": "EntityRef", "__value": { "entityIid": "e7cbddd0-d7b0-11ee-9c45-253ec4365407", "layerIid": "ec22d820-d7b0-11ee-9c45-8bfde102ddf7", @@ -5118,11 +5118,11 @@ "params": ["e7cbddd0-d7b0-11ee-9c45-253ec4365407"] }] }], "__worldX": -56, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Sweep", - "__grid": [10,8], + "__grid": [10,9], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -5131,7 +5131,7 @@ "width": 8, "height": 48, "defUid": 37, - "px": [80,64], + "px": [80,72], "fieldInstances": [ { "__identifier": "Sweep", "__type": "EntityRef", "__value": { "entityIid": "00629320-d7b0-11ee-9c45-e5865a129229", @@ -5162,11 +5162,11 @@ }] } ], "__worldX": -104, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Vibrato", - "__grid": [4,8], + "__grid": [4,9], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -5175,7 +5175,7 @@ "width": 8, "height": 48, "defUid": 36, - "px": [32,64], + "px": [32,72], "fieldInstances": [ { "__identifier": "Enabled", "__type": "EntityRef", "__value": { "entityIid": "e5e606d0-d7b0-11ee-9c45-d70f97b23e45", @@ -5206,11 +5206,11 @@ }] } ], "__worldX": -152, - "__worldY": 200 + "__worldY": 208 }, { "__identifier": "Knob", - "__grid": [7,13], + "__grid": [7,14], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 240, "y": 0, "w": 8, "h": 8 }, @@ -5219,7 +5219,7 @@ "width": 8, "height": 8, "defUid": 9, - "px": [56,104], + "px": [56,112], "fieldInstances": [ { "__identifier": "Label", "__type": "String", "__value": "Acceleration", "__tile": null, "defUid": 10, "realEditorValues": [{ "id": "V_String", @@ -5228,7 +5228,7 @@ { "__identifier": "Help", "__type": "String", "__value": null, "__tile": null, "defUid": 22, "realEditorValues": [] } ], "__worldX": -128, - "__worldY": 240 + "__worldY": 248 }, { "__identifier": "Fx", @@ -5379,16 +5379,12 @@ { "px": [96,24], "src": [192,0], "f": 0, "t": 24, "d": [78], "a": 1 }, { "px": [104,24], "src": [192,0], "f": 0, "t": 24, "d": [79], "a": 1 }, { "px": [112,24], "src": [192,0], "f": 0, "t": 24, "d": [80], "a": 1 }, - { "px": [112,24], "src": [248,16], "f": 0, "t": 95, "d": [80], "a": 1 }, { "px": [120,24], "src": [192,0], "f": 0, "t": 24, "d": [81], "a": 1 }, { "px": [128,24], "src": [192,0], "f": 0, "t": 24, "d": [82], "a": 1 }, - { "px": [128,24], "src": [248,16], "f": 0, "t": 95, "d": [82], "a": 1 }, { "px": [136,24], "src": [192,0], "f": 0, "t": 24, "d": [83], "a": 1 }, { "px": [144,24], "src": [192,0], "f": 0, "t": 24, "d": [84], "a": 1 }, - { "px": [144,24], "src": [248,16], "f": 0, "t": 95, "d": [84], "a": 1 }, { "px": [152,24], "src": [192,0], "f": 0, "t": 24, "d": [85], "a": 1 }, { "px": [160,24], "src": [192,0], "f": 0, "t": 24, "d": [86], "a": 1 }, - { "px": [160,24], "src": [248,16], "f": 0, "t": 95, "d": [86], "a": 1 }, { "px": [168,24], "src": [192,0], "f": 0, "t": 24, "d": [87], "a": 1 }, { "px": [0,32], "src": [192,0], "f": 0, "t": 24, "d": [88], "a": 1 }, { "px": [8,32], "src": [192,0], "f": 0, "t": 24, "d": [89], "a": 1 }, @@ -5405,16 +5401,16 @@ { "px": [96,32], "src": [192,0], "f": 0, "t": 24, "d": [100], "a": 1 }, { "px": [104,32], "src": [192,0], "f": 0, "t": 24, "d": [101], "a": 1 }, { "px": [112,32], "src": [192,0], "f": 0, "t": 24, "d": [102], "a": 1 }, - { "px": [112,32], "src": [248,24], "f": 0, "t": 127, "d": [102], "a": 1 }, + { "px": [112,32], "src": [248,16], "f": 0, "t": 95, "d": [102], "a": 1 }, { "px": [120,32], "src": [192,0], "f": 0, "t": 24, "d": [103], "a": 1 }, { "px": [128,32], "src": [192,0], "f": 0, "t": 24, "d": [104], "a": 1 }, - { "px": [128,32], "src": [248,24], "f": 0, "t": 127, "d": [104], "a": 1 }, + { "px": [128,32], "src": [248,16], "f": 0, "t": 95, "d": [104], "a": 1 }, { "px": [136,32], "src": [192,0], "f": 0, "t": 24, "d": [105], "a": 1 }, { "px": [144,32], "src": [192,0], "f": 0, "t": 24, "d": [106], "a": 1 }, - { "px": [144,32], "src": [248,24], "f": 0, "t": 127, "d": [106], "a": 1 }, + { "px": [144,32], "src": [248,16], "f": 0, "t": 95, "d": [106], "a": 1 }, { "px": [152,32], "src": [192,0], "f": 0, "t": 24, "d": [107], "a": 1 }, { "px": [160,32], "src": [192,0], "f": 0, "t": 24, "d": [108], "a": 1 }, - { "px": [160,32], "src": [248,24], "f": 0, "t": 127, "d": [108], "a": 1 }, + { "px": [160,32], "src": [248,16], "f": 0, "t": 95, "d": [108], "a": 1 }, { "px": [168,32], "src": [192,0], "f": 0, "t": 24, "d": [109], "a": 1 }, { "px": [0,40], "src": [192,0], "f": 0, "t": 24, "d": [110], "a": 1 }, { "px": [8,40], "src": [192,0], "f": 0, "t": 24, "d": [111], "a": 1 }, @@ -5483,16 +5479,16 @@ { "px": [96,56], "src": [192,0], "f": 0, "t": 24, "d": [166], "a": 1 }, { "px": [104,56], "src": [192,0], "f": 0, "t": 24, "d": [167], "a": 1 }, { "px": [112,56], "src": [192,0], "f": 0, "t": 24, "d": [168], "a": 1 }, - { "px": [112,56], "src": [248,32], "f": 0, "t": 159, "d": [168], "a": 1 }, + { "px": [112,56], "src": [248,24], "f": 0, "t": 127, "d": [168], "a": 1 }, { "px": [120,56], "src": [192,0], "f": 0, "t": 24, "d": [169], "a": 1 }, { "px": [128,56], "src": [192,0], "f": 0, "t": 24, "d": [170], "a": 1 }, - { "px": [128,56], "src": [248,32], "f": 0, "t": 159, "d": [170], "a": 1 }, + { "px": [128,56], "src": [248,24], "f": 0, "t": 127, "d": [170], "a": 1 }, { "px": [136,56], "src": [192,0], "f": 0, "t": 24, "d": [171], "a": 1 }, { "px": [144,56], "src": [192,0], "f": 0, "t": 24, "d": [172], "a": 1 }, - { "px": [144,56], "src": [248,32], "f": 0, "t": 159, "d": [172], "a": 1 }, + { "px": [144,56], "src": [248,24], "f": 0, "t": 127, "d": [172], "a": 1 }, { "px": [152,56], "src": [192,0], "f": 0, "t": 24, "d": [173], "a": 1 }, { "px": [160,56], "src": [192,0], "f": 0, "t": 24, "d": [174], "a": 1 }, - { "px": [160,56], "src": [248,32], "f": 0, "t": 159, "d": [174], "a": 1 }, + { "px": [160,56], "src": [248,24], "f": 0, "t": 127, "d": [174], "a": 1 }, { "px": [168,56], "src": [192,0], "f": 0, "t": 24, "d": [175], "a": 1 }, { "px": [0,64], "src": [192,0], "f": 0, "t": 24, "d": [176], "a": 1 }, { "px": [8,64], "src": [192,0], "f": 0, "t": 24, "d": [177], "a": 1 }, @@ -5509,12 +5505,16 @@ { "px": [96,64], "src": [192,0], "f": 0, "t": 24, "d": [188], "a": 1 }, { "px": [104,64], "src": [192,0], "f": 0, "t": 24, "d": [189], "a": 1 }, { "px": [112,64], "src": [192,0], "f": 0, "t": 24, "d": [190], "a": 1 }, + { "px": [112,64], "src": [248,32], "f": 0, "t": 159, "d": [190], "a": 1 }, { "px": [120,64], "src": [192,0], "f": 0, "t": 24, "d": [191], "a": 1 }, { "px": [128,64], "src": [192,0], "f": 0, "t": 24, "d": [192], "a": 1 }, + { "px": [128,64], "src": [248,32], "f": 0, "t": 159, "d": [192], "a": 1 }, { "px": [136,64], "src": [192,0], "f": 0, "t": 24, "d": [193], "a": 1 }, { "px": [144,64], "src": [192,0], "f": 0, "t": 24, "d": [194], "a": 1 }, + { "px": [144,64], "src": [248,32], "f": 0, "t": 159, "d": [194], "a": 1 }, { "px": [152,64], "src": [192,0], "f": 0, "t": 24, "d": [195], "a": 1 }, { "px": [160,64], "src": [192,0], "f": 0, "t": 24, "d": [196], "a": 1 }, + { "px": [160,64], "src": [248,32], "f": 0, "t": 159, "d": [196], "a": 1 }, { "px": [168,64], "src": [192,0], "f": 0, "t": 24, "d": [197], "a": 1 }, { "px": [0,72], "src": [192,0], "f": 0, "t": 24, "d": [198], "a": 1 }, { "px": [8,72], "src": [192,0], "f": 0, "t": 24, "d": [199], "a": 1 }, diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Fx/Tiles.png b/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Fx/Tiles.png index 859b0ae4255f7d4596e625d575d6d5db28c3da21..6868c1afeb78dbdbd498be6b1a2ea308e21e33e6 100644 GIT binary patch delta 218 zcmey*)WAGJ#l_vz#WAGf*4sN9c^ec&Tm!`xZb_2)R%oFq;Vmo_d$8tT)qh7|zF=Kvga-Gp!@egT&*RM_2dCs~g@xaV;+z|(u+`vd|LxbSN z-EvIT6%%L4>o>6KB(Q+dz2o2Q4Oo;DSa_J&7?l$Q3^*iMdKw%LC;*v2k>&=$4c-ou p?HM&E{^FVJ$|x)km1W_1Xmk5ZkdU}*<5LD8@O1TaS?83{1OVXHP!9kA delta 231 zcmZo*{?9Z)rQXfc#WAGf*4sN9c^ec2+5*KEZb_2)R%oFq;VmpQ_u%7u^Y?s``kCcz zXp9AH-eBEd=N!W1c0eIPz<`O3vAMzV0LKi5b%ypc-?8qAJhJtx>gl}=<~$ac_cpNV zB(Q)HBew($MNGUR#?&r8akZQvcfS(j0Q87Mbdl2KFq&nadj&mf`s&Tju0fWXt$&t;ucLK6V-%1mPb diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Fx/_composite.png b/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Fx/_composite.png index 08f37465963d878ab2c8a5fdbe40454f5f0efc67..2f2af25614f83a7377531d0ec346f4d430438914 100644 GIT binary patch literal 397 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 Aq5uE@ delta 3118 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 diff --git a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua index c2b6b4e8..0e00e1df 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua +++ b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua @@ -62,9 +62,10 @@ mode.score.configure = function(self, content) local content = self.file_selector:current() for index, note in ipairs(content.tracks[1].patterns[1]) do - self.sound.notes[index].value = note.note / 107 + self.sound.selector.selected = note.type self.sound.notes[index].tip_color = button_type[note.type].color - self.sound.volumes[index].value = note.volume / 255 + self.sound.notes[index]:set_value(note.note / 107) + self.sound.volumes[index]:set_value(note.volume / 255) end self.sound.bpm.value = content.bpm / 255 @@ -94,15 +95,10 @@ mode.fx.configure = function(self, content) local env = content.tracks[1].env if env ~= nil then - -- self.fx. - self.fx.envelope.attack_fader.value = env.attack / 255 - self.fx.envelope.attack = env.attack / 255 - self.fx.envelope.decay_fader.value = env.decay / 255 - self.fx.envelope.decay = env.decay / 255 - self.fx.envelope.sustain_fader.value = env.sustain / 255 - self.fx.envelope.sustain = env.sustain / 255 - self.fx.envelope.release_fader.value = env.release / 255 - self.fx.envelope.release = env.release / 255 + self.fx.envelope.attack_fader:set_value(env.attack / 255) + self.fx.envelope.decay_fader:set_value(env.decay / 255) + self.fx.envelope.sustain_fader:set_value(env.sustain / 255) + self.fx.envelope.release_fader:set_value(env.release / 255) end end @@ -124,7 +120,6 @@ local find_widget = function(widgets, ref) end function _init() - widgets:_init() help = nil menu = {} @@ -156,7 +151,7 @@ function _init() local w = widgets:create_menu_item(i) table.insert(menu, w) w.on_hover = on_menu_item_hover - w.on_click = on_click[i.customFields.Item] + w:on_update(on_click[i.customFields.Item]) if i.customFields.Item == "Wave" then w.active = 1 end @@ -178,6 +173,7 @@ function _init() for i in all(map.entities["FilesSelector"]) do file_selector = new(FileSelector, i) local files = ws.list("sfx") + table.sort(files) if #files == 0 then local new_file = ws.create("sfx", "sfx") table.insert(file_selector.files, { @@ -185,36 +181,45 @@ function _init() content = sfx.to_table(sfx.empty_score()) }) else + local i = 1 for f in all(files) do table.insert(file_selector.files, { file = f, content = sfx.to_table(ws.load(f)) }) + i = i + 1 end end + file_selector.next = find_widget(menu, file_selector.customFields.Next) file_selector.previous = find_widget(menu, file_selector.customFields.Previous) file_selector.screen = find_widget(menu, file_selector.customFields.Screen) file_selector.save = find_widget(menu, file_selector.customFields.Save) + file_selector.screen.label = true - file_selector.next.on_click = function(self) + file_selector.next:on_update(function(self) + debug.console("next") file_selector.current_file = math.min(#file_selector.files, file_selector.current_file + 1) - file_selector.screen.label = file_selector.files[file_selector.current_file].file - - end - - file_selector.previous.on_click = function(self) + file_selector.screen:set_value(file_selector.files[file_selector.current_file].file) + switch_to(current_mode) + end) + + file_selector.previous:on_update(function(self) + debug.console("previous") file_selector.current_file = math.max(1, file_selector.current_file - 1) - file_selector.screen.label = file_selector.files[file_selector.current_file].file - end + file_selector.screen:set_value(file_selector.files[file_selector.current_file].file) + switch_to(current_mode) + end) - file_selector.save.on_click = function(self) + file_selector.save:on_update(function(self) debug.console("saving file...") local score = sfx.to_score(file_selector:current()) + debug.console(file_selector:current()) + debug.console(score) ws.save(file_selector:currentName(), score) debug.console("file saved!") -- - end - file_selector.previous:on_click() + end) + file_selector.screen:set_value(file_selector.files[file_selector.current_file].file) end -- preload mode @@ -258,35 +263,40 @@ function _init() knob.on_hover = on_menu_item_hover local f = find_widget(m.widgets, knob.customFields.Attack) knob.attack_fader = f - f.on_value_update = function(self, value) + local on_value_update = function(self, value) knob.attack = value local content = file_selector:current() content.tracks[1].env.attack = value * 255 end + f:on_update(on_value_update) f = find_widget(m.widgets, knob.customFields.Decay) knob.decay_fader = f - f.on_value_update = function(self, value) + local on_value_update = function(self, value) knob.decay = value local content = file_selector:current() content.tracks[1].env.decay = value * 255 end + f:on_update(on_value_update) + f = find_widget(m.widgets, knob.customFields.Sustain) knob.sustain_fader = f - f.on_value_update = function(self, value) + local on_value_update = function(self, value) knob.sustain = value local content = file_selector:current() content.tracks[1].env.sustain = value * 255 end + f:on_update(on_value_update) f = find_widget(m.widgets, knob.customFields.Release) knob.release_fader = f - f.on_value_update = function(self, value) + local on_value_update = function(self, value) knob.release = value local content = file_selector:current() content.tracks[1].env.release = value * 255 end + f:on_update(on_value_update) table.insert(m.widgets, knob) end @@ -392,7 +402,7 @@ function _init() end } local knob = new(WaveSelector, k) - local on_changed = function(self) + local on_update = function(self) knob.selected = self.type for b in all(knob.selector) do b.status = 0 @@ -402,21 +412,21 @@ function _init() local e = find_widget(m.widgets, knob.customFields.Sine) table.insert(knob.selector, e) - e.on_changed = on_changed - e:on_changed() -- default selection + e:on_update(on_update) + on_update(e) -- default selection e = find_widget(m.widgets, knob.customFields.Triangle) table.insert(knob.selector, e) - e.on_changed = on_changed - + e:on_update(on_update) + e = find_widget(m.widgets, knob.customFields.Noise) table.insert(knob.selector, e) - e.on_changed = on_changed - + e:on_update(on_update) + e = find_widget(m.widgets, knob.customFields.Pulse) table.insert(knob.selector, e) - e.on_changed = on_changed - + e:on_update(on_update) + table.insert(m.widgets, knob) end @@ -440,23 +450,28 @@ function _init() for key, v in ipairs(k.customFields.Volumes) do local f = find_widget(m.widgets, v) s.volumes[key] = f - f.on_value_update = function(self, value) + local on_update = function(self, value) local content = file_selector:current() content.tracks[1].patterns[1][key].volume = value * 255 end + f:on_update(on_update) end for key, v in ipairs(k.customFields.Notes) do local f = find_widget(m.widgets, v) s.notes[key] = f - f.on_value_update = function(self, value) + local on_update = function(self, value) self.tip_color = button_type[selector.selected].color local content = file_selector:current() - content.tracks[1].patterns[1][key].type = selector.selected - content.tracks[1].patterns[1][key].index = selector.selectedIndex content.tracks[1].patterns[1][key].note = value * 107 -- 107 = number of total notes + + if content.tracks[1].patterns[1][key].volume <= 0 then + s.volumes[key]:set_value(1) + end end + + f:on_update(on_update) end s.bpm = find_widget(m.widgets, k.customFields.BPM) s.bpm.on_update = function(self) @@ -471,7 +486,8 @@ function _init() end s.play = find_widget(m.widgets, k.customFields.Play) - s.play.on_changed = play + s.play:on_update(play) + s.selector = selector m.sound = s end @@ -498,7 +514,7 @@ function _init() end fx.tied_notes = find_widget(m.widgets, k.customFields.Envelope) fx.play = find_widget(m.widgets, k.customFields.Play) - fx.play.on_changed = play + fx.play:on_update(play) m.fx = fx end end @@ -511,8 +527,7 @@ function _update() end, function() end, function() end) - widgets:_update() - + for w in all(menu) do w:_update() end @@ -538,8 +553,6 @@ function _draw() end help:_draw() - widgets:_draw() - for w in all(current_mode.widgets) do w:_draw() end diff --git a/tiny-cli/src/jvmMain/resources/sfx/widgets.lua b/tiny-cli/src/jvmMain/resources/sfx/widgets.lua index b56148a4..7575158a 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/widgets.lua +++ b/tiny-cli/src/jvmMain/resources/sfx/widgets.lua @@ -1,3 +1,18 @@ +local on_update = function(self, listener) + table.insert(self.listeners, listener) +end + +local fire_on_update = function(self, value) + for l in all(self.listeners) do + l(self, value) + end +end + +local set_value = function(self, value) + self.value = value + self:fire_on_update(value) +end + local Fader = { x = 0, y = 0, @@ -14,7 +29,11 @@ local Fader = { data = nil, index = 0, on_value_update = function(fader, value) - end + end, + listeners = {}, + on_update = on_update, + fire_on_update = fire_on_update, + set_value = set_value, } local Button = { @@ -27,47 +46,10 @@ local Button = { status = 0, -- 0 : idle ; 1 : over ; 2 : active overlay = 0, -- sprite index, on_active_button = function(current, prec) - end -} - -local Tab = { - x = 0, - y = 0, - width = 0, - height = 8, - enabled = true, - label = "+", - content = nil, - status = 0, -- 0 : inactive ; 1 : active - new_tab = false, - on_active_tab = nil, - on_new_tab = nil -} - -local TabManager = { - x = 0, - y = 0, - width = 0, - height = 0, - on_new_tab = nil, - tabs = {}, - active_tab = nil -} - -local Counter = { - label = "", - value = 0, - x = 0, - y = 0, - width = 16, - height = 16, - enabled = true, - status = 0, -- 0 : iddle ; 1 : over left ; 2 : over right - on_left = function(counter) end, - on_right = function(counter) - end, - spr = 32 + listeners = {}, + on_update = on_update, + fire_on_update = fire_on_update, } local Envelop = { @@ -112,20 +94,26 @@ local Knob = { on_update = nil } -local buttons = {} -local tabs = {} -local faders = {} -local widgets = {} -local counters = {} -local envelops = {} -local checkboxes = {} -local knobs = {} - -local factory = { - tabs = {}, - widgets = {} + +local MenuItem = { + _type = "MenuItem", + spr = nil, + hold = false, + status = 0, + active = 0, + help = "", + on_click = function() + end, + on_hover = function() + end, + listeners = {}, + on_update = on_update, + fire_on_update = fire_on_update, + set_value = set_value, } +local factory = { } + function inside_widget(w, x, y) return w.x <= x and x <= w.x + w.width and w.y <= y and y <= w.y + w.height end @@ -149,8 +137,8 @@ Button._update = function(self) self:on_hover() end local touched = ctrl.touched(0) - if touched and self.on_changed ~= nil then - self:on_changed() + if touched then + self:fire_on_update(self.status) end else self.status = 0 @@ -171,13 +159,6 @@ Button._draw = function(self) end end -factory.create_fader = function(self, value) - local result = new(Fader, value) - result.help = result.customFields.Help - result.label = result.customFields.Label - return result -end - factory.create_envelop = function(self, data) local result = new(Envelop, data) result.attack_start_x = result.x @@ -243,18 +224,22 @@ Knob._update = function(self) end end - -factory._init = function(self) - -end - -factory._update = function(mouse) - +factory.create_fader = function(self, value) + local result = new(Fader, value) + result.help = result.customFields.Help + result.label = result.customFields.Label + result.hitbox = { + x = result.x, + y = result.y, + width = result.width, + height = result.height + 4 + } + return result end Fader._update = function(self) local pos = ctrl.touch() - if inside_widget(self, pos.x, pos.y) then + if inside_widget(self.hitbox, pos.x, pos.y) then if self.on_hover ~= nil then self:on_hover() end @@ -263,9 +248,12 @@ Fader._update = function(self) local percent = math.max(0.0, 1.0 - ((pos.y - self.y) / self.height)) self.value = percent + -- todo: to be removed as fire_on_update should be used instead if self.on_value_update then self:on_value_update(self.value) end + + self:fire_on_update(self.value) end end end @@ -388,19 +376,6 @@ factory.create_help = function(self, data) return help end -local MenuItem = { - _type = "MenuItem", - spr = nil, - hold = false, - status = 0, - active = 0, - help = "", - on_click = function() - end, - on_hover = function() - end -} - local menuItems = {} MenuItem._update = function(self) @@ -414,7 +389,7 @@ MenuItem._update = function(self) self.status = 1 end if ctrl.touched(0) then - self:on_click() + self:fire_on_update(self.status) if self.hold then for i in all(menuItems) do i.active = 0 @@ -436,7 +411,7 @@ MenuItem._draw = function(self) end if self.label ~= nil then - print(self.label, self.x + 5, self.y + 2) + print(self.value, self.x + 5, self.y + 2) end end diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/SfxLib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/SfxLib.kt index 7d79d47c..dc4c3694 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/SfxLib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/SfxLib.kt @@ -295,7 +295,6 @@ class SfxLib( private fun SoundGenerator.toLuaTable(): LuaTable { val note = LuaTable() note.set("type", this.name) - note.set("index", this.index) note.set("note", this.note.index) note.set("volume", (this.volume * 255).toInt()) return note From bd581a31ec2f21123576abe3e46e9b6f967d198d Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Fri, 22 Mar 2024 00:40:43 +0100 Subject: [PATCH 04/11] Add new file button --- .../src/jvmMain/resources/sfx/editor.ldtk | 114 ++++++++++++++---- .../sfx/editor/simplified/Level_0/Tiles.png | Bin 370 -> 371 bytes .../editor/simplified/Level_0/_composite.png | Bin 370 -> 371 bytes .../sfx/editor/simplified/Level_0/data.json | 30 ++++- .../src/jvmMain/resources/sfx/test-game.lua | 16 ++- .../src/jvmMain/resources/sfx/widgets.lua | 2 + 6 files changed, 133 insertions(+), 29 deletions(-) diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk index 6ee3654c..a574c100 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk +++ b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk @@ -11,7 +11,7 @@ "iid": "d3199780-d7b0-11ee-9c45-618e61de5acd", "jsonVersion": "1.5.3", "appBuildId": 473703, - "nextUid": 70, + "nextUid": 71, "identifierStyle": "Capitalize", "toc": [], "worldLayout": "Free", @@ -1953,6 +1953,43 @@ "allowedRefsEntityUid": 2, "allowedRefTags": [], "tilesetUid": null + }, + { + "identifier": "NewFile", + "doc": null, + "__type": "EntityRef", + "uid": 70, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 2, + "allowedRefTags": [], + "tilesetUid": null } ] }, @@ -2210,7 +2247,8 @@ { "id": "Prev", "tileRect": { "tilesetUid": 1, "x": 168, "y": 0, "w": 8, "h": 8 }, "color": 4073265 }, { "id": "Next", "tileRect": { "tilesetUid": 1, "x": 176, "y": 0, "w": 8, "h": 8 }, "color": 16690740 }, { "id": "Help", "tileRect": null, "color": 6539085 }, - { "id": "Filename", "tileRect": null, "color": 16705377 } + { "id": "Filename", "tileRect": null, "color": 16705377 }, + { "id": "NewFile", "tileRect": { "tilesetUid": 1, "x": 104, "y": 0, "w": 8, "h": 8 }, "color": 4098376 } ], "iconTilesetUid": 1, "externalRelPath": null, "externalFileChecksum": null, "tags": [] }, { "identifier": "Fader", "uid": 16, "values": [ { "id": "Note", "tileRect": null, "color": 12470831 }, { "id": "Volume", "tileRect": null, "color": 14120515 } ], "iconTilesetUid": null, "externalRelPath": null, "externalFileChecksum": null, "tags": [] }, { "identifier": "ButtonType", "uid": 19, "values": [ @@ -2371,7 +2409,7 @@ }, { "__identifier": "MenuItem", - "__grid": [6,0], + "__grid": [8,0], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 168, "y": 0, "w": 8, "h": 8 }, @@ -2380,7 +2418,7 @@ "width": 8, "height": 8, "defUid": 2, - "px": [48,0], + "px": [64,0], "fieldInstances": [ { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Prev", "__tile": { "tilesetUid": 1, "x": 168, "y": 0, "w": 8, "h": 8 }, "defUid": 6, "realEditorValues": [{ "id": "V_String", @@ -2391,12 +2429,12 @@ "params": ["Previous file"] }] } ], - "__worldX": 48, + "__worldX": 64, "__worldY": 0 }, { "__identifier": "MenuItem", - "__grid": [11,0], + "__grid": [13,0], "__pivot": [0,0], "__tags": [], "__tile": { "tilesetUid": 1, "x": 176, "y": 0, "w": 8, "h": 8 }, @@ -2405,7 +2443,7 @@ "width": 8, "height": 8, "defUid": 2, - "px": [88,0], + "px": [104,0], "fieldInstances": [ { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Next", "__tile": { "tilesetUid": 1, "x": 176, "y": 0, "w": 8, "h": 8 }, "defUid": 6, "realEditorValues": [{ "id": "V_String", @@ -2416,12 +2454,12 @@ "params": ["Next File"] }] } ], - "__worldX": 88, + "__worldX": 104, "__worldY": 0 }, { "__identifier": "MenuItem", - "__grid": [7,0], + "__grid": [9,0], "__pivot": [0,0], "__tags": [], "__tile": null, @@ -2430,7 +2468,7 @@ "width": 32, "height": 8, "defUid": 2, - "px": [56,0], + "px": [72,0], "fieldInstances": [ { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Filename", "__tile": null, "defUid": 6, "realEditorValues": [{ "id": "V_String", @@ -2438,21 +2476,21 @@ }] }, { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 21, "realEditorValues": [] } ], - "__worldX": 56, + "__worldX": 72, "__worldY": 0 }, { "__identifier": "MenuItem", - "__grid": [13,0], + "__grid": [15,0], "__pivot": [0,0], "__tags": [], "__tile": null, "__smartColor": "#BE4A2F", "iid": "f564d4c0-d7b0-11ee-9c45-958bceaa5715", - "width": 80, + "width": 72, "height": 8, "defUid": 2, - "px": [104,0], + "px": [120,0], "fieldInstances": [ { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Help", "__tile": null, "defUid": 6, "realEditorValues": [{ "id": "V_String", @@ -2460,7 +2498,7 @@ }] }, { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 21, "realEditorValues": [] } ], - "__worldX": 104, + "__worldX": 120, "__worldY": 0 }, { @@ -2511,10 +2549,44 @@ }, "__tile": null, "defUid": 60, "realEditorValues": [{ "id": "V_String", "params": ["b93e5ed0-d7b0-11ee-9c45-7fcf1ae264e3"] + }] }, + { "__identifier": "NewFile", "__type": "EntityRef", "__value": { + "entityIid": "f7259960-d7b0-11ee-9a4d-e1816015be80", + "layerIid": "8a2f1940-d7b0-11ee-9c45-cd8bc568018a", + "levelIid": "d319e5a0-d7b0-11ee-9c45-898e2a016ceb", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 70, "realEditorValues": [{ + "id": "V_String", + "params": ["f7259960-d7b0-11ee-9a4d-e1816015be80"] }] } ], "__worldX": 64, "__worldY": 16 + }, + { + "__identifier": "MenuItem", + "__grid": [6,0], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 0, "w": 8, "h": 8 }, + "__smartColor": "#BE4A2F", + "iid": "f7259960-d7b0-11ee-9a4d-e1816015be80", + "width": 8, + "height": 8, + "defUid": 2, + "px": [48,0], + "fieldInstances": [ + { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "NewFile", "__tile": { "tilesetUid": 1, "x": 104, "y": 0, "w": 8, "h": 8 }, "defUid": 6, "realEditorValues": [{ + "id": "V_String", + "params": ["NewFile"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "New File", "__tile": null, "defUid": 21, "realEditorValues": [{ + "id": "V_String", + "params": ["New File"] + }] } + ], + "__worldX": 48, + "__worldY": 0 } ] }, @@ -2548,12 +2620,12 @@ { "px": [32,0], "src": [184,0], "f": 0, "t": 23, "d": [4], "a": 1 }, { "px": [40,0], "src": [184,0], "f": 0, "t": 23, "d": [5], "a": 1 }, { "px": [48,0], "src": [184,0], "f": 0, "t": 23, "d": [6], "a": 1 }, - { "px": [56,0], "src": [144,0], "f": 0, "t": 18, "d": [7], "a": 1 }, - { "px": [64,0], "src": [152,0], "f": 0, "t": 19, "d": [8], "a": 1 }, - { "px": [72,0], "src": [152,0], "f": 0, "t": 19, "d": [9], "a": 1 }, - { "px": [80,0], "src": [160,0], "f": 0, "t": 20, "d": [10], "a": 1 }, - { "px": [88,0], "src": [184,0], "f": 0, "t": 23, "d": [11], "a": 1 }, - { "px": [96,0], "src": [184,0], "f": 0, "t": 23, "d": [12], "a": 1 }, + { "px": [56,0], "src": [184,0], "f": 0, "t": 23, "d": [7], "a": 1 }, + { "px": [64,0], "src": [184,0], "f": 0, "t": 23, "d": [8], "a": 1 }, + { "px": [72,0], "src": [144,0], "f": 0, "t": 18, "d": [9], "a": 1 }, + { "px": [80,0], "src": [152,0], "f": 0, "t": 19, "d": [10], "a": 1 }, + { "px": [88,0], "src": [152,0], "f": 0, "t": 19, "d": [11], "a": 1 }, + { "px": [96,0], "src": [160,0], "f": 0, "t": 20, "d": [12], "a": 1 }, { "px": [104,0], "src": [184,0], "f": 0, "t": 23, "d": [13], "a": 1 }, { "px": [112,0], "src": [184,0], "f": 0, "t": 23, "d": [14], "a": 1 }, { "px": [120,0], "src": [184,0], "f": 0, "t": 23, "d": [15], "a": 1 }, diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Level_0/Tiles.png b/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Level_0/Tiles.png index 7cba465b1f0d05d46d61ea17873dc7f0760c4a79..01c745f321e7fcd0cdca89cf575b9cc97e7a39b2 100644 GIT binary patch delta 147 zcmeyw^qFabN|cqSi(^Q|t+zK83N{!BxE{=A>0C7DOVg1hyj(rLtnSJbdxcg{LHxOo9MRklrXK%)d^<}53nK>u9PM`qWqR>@W0C7DOVg1hyj(rLtnSJbdxcg{LHxOo9MRklrXK%)d^<}53nK>u9PM`qWqR>@W Date: Fri, 22 Mar 2024 01:03:59 +0100 Subject: [PATCH 05/11] Load SFX correctly --- .../src/jvmMain/resources/sfx/test-game.lua | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua index ca7e10ee..971e8837 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua +++ b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua @@ -20,7 +20,6 @@ local mode = { } } - local button_type = { Sine = { spr = 60, @@ -54,20 +53,26 @@ local button_type = { }, Next = { spr = 32 * 5 + 29 - }, + } } -- from a content, set the correct values in the score pannel mode.score.configure = function(self, content) local content = self.file_selector:current() - + + debug.console(content) for index, note in ipairs(content.tracks[1].patterns[1]) do - self.sound.selector.selected = note.type - self.sound.notes[index].tip_color = button_type[note.type].color - self.sound.notes[index]:set_value(note.note / 107) - self.sound.volumes[index]:set_value(note.volume / 255) + if (note.type == "Silence") then + self.sound.notes[index]:set_value(0) + self.sound.volumes[index]:set_value(0) + else + self.sound.selector.selected = note.type + self.sound.notes[index]:set_value(note.note / 107) + self.sound.notes[index].tip_color = button_type[note.type].color + self.sound.volumes[index]:set_value(note.volume / 255) + end end - + self.sound.bpm.value = content.bpm / 255 self.sound.volume.value = content.volume / 255 end @@ -181,13 +186,12 @@ function _init() content = sfx.to_table(sfx.empty_score()) }) else - local i = 1 for f in all(files) do + debug.console(f) table.insert(file_selector.files, { file = f, content = sfx.to_table(ws.load(f)) }) - i = i + 1 end end @@ -203,7 +207,7 @@ function _init() file_selector.screen:set_value(file_selector.files[file_selector.current_file].file) switch_to(current_mode) end) - + file_selector.previous:on_update(function(self) file_selector.current_file = math.max(1, file_selector.current_file - 1) file_selector.screen:set_value(file_selector.files[file_selector.current_file].file) @@ -211,8 +215,8 @@ function _init() end) file_selector.new_file:on_update(function(self) - debug.console("creating file") - local new_file = ws.create("sfx", "sfx") + debug.console("creating file") + local new_file = ws.create("sfx", "sfx") table.insert(file_selector.files, { file = new_file, content = sfx.to_table(sfx.empty_score()) @@ -289,7 +293,6 @@ function _init() end f:on_update(on_value_update) - f = find_widget(m.widgets, knob.customFields.Sustain) knob.sustain_fader = f local on_value_update = function(self, value) @@ -383,7 +386,7 @@ function _init() e.on_changed = function(self, value) knob.enabled = value end - + local v = find_widget(m.widgets, knob.customFields.Sweep) knob.knob_sweep = v v.on_update = function(self, value) @@ -428,15 +431,15 @@ function _init() e = find_widget(m.widgets, knob.customFields.Triangle) table.insert(knob.selector, e) e:on_update(on_update) - + e = find_widget(m.widgets, knob.customFields.Noise) table.insert(knob.selector, e) e:on_update(on_update) - + e = find_widget(m.widgets, knob.customFields.Pulse) table.insert(knob.selector, e) e:on_update(on_update) - + table.insert(m.widgets, knob) end @@ -466,7 +469,7 @@ function _init() end f:on_update(on_update) end - + for key, v in ipairs(k.customFields.Notes) do local f = find_widget(m.widgets, v) s.notes[key] = f @@ -537,7 +540,7 @@ function _update() end, function() end, function() end) - + for w in all(menu) do w:_update() end From 05bcf36ede1e30a821efbb97cd84f6aced8e1cf7 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sat, 20 Apr 2024 23:16:39 +0200 Subject: [PATCH 06/11] Fix bug on the Vec2 library by having a better management of default values. --- .../com/github/minigdx/tiny/lua/Vec2Lib.kt | 55 ++++++++++++------- .../github/minigdx/tiny/lua/Vec2LibTest.kt | 43 +++++++++++++++ 2 files changed, 77 insertions(+), 21 deletions(-) create mode 100644 tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt index bf32ef6c..ebc6ea5c 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt @@ -9,9 +9,11 @@ import org.luaj.vm2.LuaValue import org.luaj.vm2.Varargs import org.luaj.vm2.lib.LibFunction import org.luaj.vm2.lib.TwoArgFunction +import org.luaj.vm2.lib.VarArgFunction @TinyLib("vec2", "Vector2 manipulation library.") class Vec2Lib : TwoArgFunction() { + override fun call(arg1: LuaValue, arg2: LuaValue): LuaValue { val vector2 = LuaTable() vector2["create"] = create() @@ -33,7 +35,18 @@ class Vec2Lib : TwoArgFunction() { @TinyCall("Create a vector 2 as a table { x, y }.") override fun call(@TinyArg("x") arg1: LuaValue, @TinyArg("y") arg2: LuaValue): LuaValue { val (x, y) = extract(arg1, arg2) - return v2(x, y) + val defaultX = if(x.isnil()) { + ZERO + } else { + x + } + + val defaultY = if (y.isnil()) { + ZERO + } else { + y + } + return v2(defaultX, defaultY) } @TinyCall("Create a vector 2 as a table { x, y } using another vector 2.") @@ -41,7 +54,7 @@ class Vec2Lib : TwoArgFunction() { } @TinyFunction("Add vector2 to another vector2", example = VECTOR2_ADD) - class add : LibFunction() { + class add : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1, x2, y2) = extract(args) return v2( @@ -66,7 +79,7 @@ class Vec2Lib : TwoArgFunction() { } @TinyFunction("Subtract another vector to a vector", example = VECTOR2_SUB) - class sub : LibFunction() { + class sub : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1, x2, y2) = extract(args) return v2( @@ -113,7 +126,7 @@ class Vec2Lib : TwoArgFunction() { } @TinyFunction("Calculate the magnitude (length) of a vector") - class mag : LibFunction() { + class mag : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1) = extract(args) return valueOf(kotlin.math.sqrt(x1.todouble() * x1.todouble() + y1.todouble() * y1.todouble())) @@ -121,9 +134,9 @@ class Vec2Lib : TwoArgFunction() { @TinyCall("Calculate the magnitude (length) of a vector 2 {x, y}") override fun call( - @TinyArg("x") a: LuaValue, - @TinyArg("y") b: LuaValue, - ): LuaValue = super.call(a, b) + @TinyArg("x") arg1: LuaValue, + @TinyArg("y") arg2: LuaValue, + ): LuaValue = super.call(arg1, arg2) @TinyCall("Calculate the magnitude (length) of a vector 2 {x, y}") override fun call( @@ -132,29 +145,29 @@ class Vec2Lib : TwoArgFunction() { } @TinyFunction("Normalize a vector", example = VECTOR_NOR) - class nor : LibFunction() { + class nor : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1) = extract(args) val len = kotlin.math.sqrt(x1.todouble() * x1.todouble() + y1.todouble() * y1.todouble()) return if (len != 0.0) { v2(valueOf(x1.todouble() / len), valueOf(y1.todouble() / len)) } else { - NIL + v2(valueOf(0), valueOf(0)) } } @TinyCall("Normalize a vector 2 {x, y}") override fun call( - @TinyArg("x") a: LuaValue, - @TinyArg("y") b: LuaValue, - ): LuaValue = super.call(a, b) + @TinyArg("x") arg1: LuaValue, + @TinyArg("y") arg2: LuaValue, + ): LuaValue = super.call(arg1, arg2) @TinyCall("Normalize a vector 2 {x, y}") - override fun call(@TinyArg("v1", "vector 2 as a table {x, y}") a: LuaValue): LuaValue = super.call(a) + override fun call(@TinyArg("v1", "vector 2 as a table {x, y}") arg: LuaValue): LuaValue = super.call(arg) } @TinyFunction("Cross product") - class crs : LibFunction() { + class crs : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1, x2, y2) = extract(args) return valueOf( @@ -178,7 +191,7 @@ class Vec2Lib : TwoArgFunction() { } @TinyFunction("Scale a vector", example = VECTOR2_SCL) - class scl : LibFunction() { + class scl : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1, scale) = extract(args) return v2(valueOf(x1.todouble() * scale.todouble()), valueOf(y1.todouble() * scale.todouble())) @@ -186,16 +199,16 @@ class Vec2Lib : TwoArgFunction() { @TinyCall("Scale a vector 2 {x, y} using the factor scl") override fun call( - @TinyArg("x") a: LuaValue, - @TinyArg("y") b: LuaValue, - @TinyArg("scl") c: LuaValue, - ): LuaValue = super.call(a, b, c) + @TinyArg("x") arg1: LuaValue, + @TinyArg("y") arg2: LuaValue, + @TinyArg("scl") arg3: LuaValue, + ): LuaValue = super.call(arg1, arg2, arg3) @TinyCall("Scale a vector 2 {x, y} using the factor scl") override fun call( @TinyArg("v1", "vector 2 as a table {x, y}") a: LuaValue, - @TinyArg("scl") b: LuaValue, - ): LuaValue = super.call(a, b) + @TinyArg("scl") arg2: LuaValue, + ): LuaValue = super.call(a, arg2) } companion object { diff --git a/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt b/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt new file mode 100644 index 00000000..770549b3 --- /dev/null +++ b/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt @@ -0,0 +1,43 @@ +package com.github.minigdx.tiny.lua + +import org.luaj.vm2.LuaValue.Companion.valueOf +import kotlin.test.Test +import kotlin.test.assertEquals + +class Vec2LibTest { + + @Test + fun it_creates_empty_vec2() { + val result = Vec2Lib.create().call() + assertEquals(result.get("x"), valueOf(0)) + assertEquals(result.get("y"), valueOf(0)) + } + + @Test + fun it_creates_an_vec2() { + val result = Vec2Lib.create().call(valueOf(3), valueOf(4)) + assertEquals(result.get("x"), valueOf(3)) + assertEquals(result.get("y"), valueOf(4)) + } + + @Test + fun it_normalize_a_vector() { + val result = Vec2Lib.nor().call(Vec2Lib.create().call(valueOf(2), valueOf(0))) + assertEquals(result.get("x"), valueOf(1)) + assertEquals(result.get("y"), valueOf(0)) + } + + @Test + fun it_normalize_coordinates() { + val result = Vec2Lib.nor().call(valueOf(5), valueOf(0)) + assertEquals(result.get("x"), valueOf(1)) + assertEquals(result.get("y"), valueOf(0)) + } + + @Test + fun it_normalize_empty_vector() { + val result = Vec2Lib.nor().call(valueOf(0), valueOf(0)) + assertEquals(result.get("x"), valueOf(0)) + assertEquals(result.get("y"), valueOf(0)) + } +} \ No newline at end of file From 0e927684383afdc517e5c7db3e1514658426ca0b Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sun, 19 May 2024 09:56:20 +0200 Subject: [PATCH 07/11] Update the web code editor with basic syntax highlighting --- .../src/docs/asciidoc/docinfo-header.html | 34 +++++++- .../src/jsMain/kotlin/EditorStream.kt | 8 +- tiny-web-editor/src/jsMain/kotlin/Main.kt | 72 ++++++++++++++-- .../src/jsMain/resources/index.html | 31 ++++++- tiny-web-editor/src/jsTest/kotlin/MainTest.kt | 84 +++++++++++++++++++ 5 files changed, 216 insertions(+), 13 deletions(-) create mode 100644 tiny-web-editor/src/jsTest/kotlin/MainTest.kt diff --git a/tiny-doc/src/docs/asciidoc/docinfo-header.html b/tiny-doc/src/docs/asciidoc/docinfo-header.html index a33838ef..04257bb7 100644 --- a/tiny-doc/src/docs/asciidoc/docinfo-header.html +++ b/tiny-doc/src/docs/asciidoc/docinfo-header.html @@ -1,3 +1,4 @@ + diff --git a/tiny-web-editor/src/jsTest/kotlin/MainTest.kt b/tiny-web-editor/src/jsTest/kotlin/MainTest.kt new file mode 100644 index 00000000..8350a0de --- /dev/null +++ b/tiny-web-editor/src/jsTest/kotlin/MainTest.kt @@ -0,0 +1,84 @@ +import kotlinx.browser.document +import org.w3c.dom.HTMLDivElement +import kotlin.test.Test +import kotlin.test.assertEquals + +class MainTest { + + @Test + fun highlight_example() { + val elt = document.createElement("div") as HTMLDivElement + elt.innerHTML = +"""
-- this is a comment
+
function hello()
+
print("hello")
+
end
""" + + elt.innerHTML = highlight(elt.innerText) + + assertEquals( + """ +
-- this is a comment
+
function hello()
+
print("hello")
+
end
+ """.trimIndent().trim(), + elt.innerHTML, + ) + } + + @Test + fun highlight_comment() { + val elt = document.createElement("div") as HTMLDivElement + elt.innerHTML = "
-- this is a comment
" + elt.innerHTML = highlight(elt.innerText) + + assertEquals("
-- this is a comment
", elt.innerHTML) + } + + @Test + fun highlight_keyword() { + val elt = document.createElement("div") as HTMLDivElement + elt.innerHTML = +"""
function hello()
+
end
""" + + elt.innerHTML = highlight(elt.innerText) + + assertEquals( +"""
function hello()
+
end
""", + elt.innerHTML, + ) + } + + @Test + fun highlight_string() { + val elt = document.createElement("div") as HTMLDivElement + elt.innerHTML = "
\"hello world\"
" + elt.innerHTML = highlight(elt.innerText) + + assertEquals( + """
+ |"hello world" + |
+ """.trimMargin().replace("\n", ""), + elt.innerHTML, + ) + } + + @Test + fun highlight_number() { + val elt = document.createElement("div") as HTMLDivElement + elt.innerHTML = "
3
" + elt.innerHTML = highlight(elt.innerText) + + assertEquals( + """
+ |3 + |
+ """.trimMargin().replace("\n", ""), + elt.innerHTML, + ) + } +} From 1c8b9787abc6cfd41cdc09dbc5c7f88d7718719a Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sun, 19 May 2024 09:56:41 +0200 Subject: [PATCH 08/11] Lintfix --- .../commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt | 4 ++-- .../kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt index ebc6ea5c..8ecd46ff 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/Vec2Lib.kt @@ -35,7 +35,7 @@ class Vec2Lib : TwoArgFunction() { @TinyCall("Create a vector 2 as a table { x, y }.") override fun call(@TinyArg("x") arg1: LuaValue, @TinyArg("y") arg2: LuaValue): LuaValue { val (x, y) = extract(arg1, arg2) - val defaultX = if(x.isnil()) { + val defaultX = if (x.isnil()) { ZERO } else { x @@ -78,7 +78,7 @@ class Vec2Lib : TwoArgFunction() { ): LuaValue = super.call(a, b, c, d) } - @TinyFunction("Subtract another vector to a vector", example = VECTOR2_SUB) + @TinyFunction("Subtract another vector from another vector", example = VECTOR2_SUB) class sub : VarArgFunction() { override fun invoke(args: Varargs): Varargs { val (x1, y1, x2, y2) = extract(args) diff --git a/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt b/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt index 770549b3..af0cd31a 100644 --- a/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt +++ b/tiny-engine/src/commonTest/kotlin/com/github/minigdx/tiny/lua/Vec2LibTest.kt @@ -40,4 +40,4 @@ class Vec2LibTest { assertEquals(result.get("x"), valueOf(0)) assertEquals(result.get("y"), valueOf(0)) } -} \ No newline at end of file +} From 6826a21db79b3824a900388807c12cc8b42fe787 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sun, 19 May 2024 09:57:34 +0200 Subject: [PATCH 09/11] Add missing emoji in the CreateCommand --- .../com/github/minigdx/tiny/cli/command/CreateCommand.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt b/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt index 6062e405..854a4937 100644 --- a/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt +++ b/tiny-cli/src/jvmMain/kotlin/com/github/minigdx/tiny/cli/command/CreateCommand.kt @@ -42,7 +42,7 @@ class CreateCommand : CliktCommand(name = "create", help = "Create a new game.") .default(File(".")) private val gameName by option(help = "🏷 The name of the game") - .prompt(text = "🏷 The name of the game", default = generateRandomGameName()) + .prompt(text = "🏷 The name of the game", default = generateRandomGameName()) private val gameResolution by option(help = "🖥 The game resolution (e.g., 800x600)") .prompt(text = "\uD83D\uDDA5 Game resolution (e.g., 800x600)", default = "256x256") @@ -82,8 +82,8 @@ ${ ) private val hideMouseCursor by option(help = "\uD83D\uDDB1\uFE0F Hide system cursor mouse") - .prompt("\uD83D\uDDB1\uFE0F Hide system cursor mouse? (yes or no)", default = "No") - .validate { it.lowercase() == "yes" || it.lowercase() == "no" } + .prompt("\uD83D\uDDB1\uFE0F Hide system cursor mouse? (yes or no)", default = "No") + .validate { it.lowercase() == "yes" || it.lowercase() == "no" } override fun run() { echo("➡\uFE0F Game Name: $gameName") From f8c93aab1762759a2b50ac5a66beab1c0ffed796 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sun, 19 May 2024 09:59:17 +0200 Subject: [PATCH 10/11] Update in the debug.log function: pass a list of arguments to be concaneted in the log example: debug.log("bool?", true) --- .../com/github/minigdx/tiny/lua/DebugLib.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt index 9efbf71a..906f13a6 100644 --- a/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt +++ b/tiny-engine/src/commonMain/kotlin/com/github/minigdx/tiny/lua/DebugLib.kt @@ -17,6 +17,7 @@ import org.luaj.vm2.Varargs import org.luaj.vm2.lib.LibFunction import org.luaj.vm2.lib.OneArgFunction import org.luaj.vm2.lib.TwoArgFunction +import org.luaj.vm2.lib.VarArgFunction private class DebugShape { @@ -208,18 +209,18 @@ class DebugLib(private val resourceAccess: GameResourceAccess) : TwoArgFunction( } @TinyFunction("Log a message on the screen.", example = DEBUG_EXAMPLE) - internal inner class log : TwoArgFunction() { + internal inner class log : VarArgFunction() { @TinyCall("Log a message on the screen.") - override fun call(@TinyArg("str") arg1: LuaValue, @TinyArg("color") arg2: LuaValue): LuaValue { - val message = formatValue(arg1) - val color = arg2.optjstring("#32CD32")!! - resourceAccess.debug(DebugMessage(message, color)) + override fun invoke(@TinyArg("str") args: Varargs): Varargs { + val nbArgs = args.narg() + val message = (1..nbArgs).map { + formatValue(args.arg(it)) + }.joinToString("") + + resourceAccess.debug(DebugMessage(message, "#32CD32")) return NIL } - - @TinyCall("Log a message on the screen.") - override fun call(@TinyArg("str") arg: LuaValue): LuaValue = super.call(arg) } @TinyFunction("Log a message into the console.", example = DEBUG_EXAMPLE) From 93375b3a154e6bd54290754b5aacc58fdffb592c Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Sun, 19 May 2024 10:00:09 +0200 Subject: [PATCH 11/11] WIP of Pattern selector in the sfx editor --- tiny-cli/sfx.aseprite | Bin 3134 -> 3261 bytes .../src/jvmMain/resources/sfx/editor.ldtk | 1274 +++++++++++++++-- .../sfx/editor/simplified/Score/Tiles.png | Bin 562 -> 544 bytes .../editor/simplified/Score/_composite.png | Bin 569 -> 551 bytes .../sfx/editor/simplified/Score/data.json | 318 +++- tiny-cli/src/jvmMain/resources/sfx/sfx.png | Bin 3444 -> 3616 bytes .../src/jvmMain/resources/sfx/test-game.lua | 6 + 7 files changed, 1501 insertions(+), 97 deletions(-) diff --git a/tiny-cli/sfx.aseprite b/tiny-cli/sfx.aseprite index e8e99cd4583b969210f81149aaaa1276b0ec23e2..21aae196c85e45a9322c7b46d4b3682b7847820a 100644 GIT binary patch delta 2448 zcmZ8he_WFH7JkX4+j3cRwdGW{S=v^{ylFF&*w)geD=TM~mULxh$_$;F8sh6+TUIKr z{FSa?H)d*zSd7RNq2^@e50*MnRM5~66;KggftUAt?cV?Hf9HIj^EuDwc|PYnZSROS z;6zt(@Cu^y-S5j*;BJ?^(5ExF6zghi{4!#1KqcedVz3oNczAX7JUTzo1#3_>bCZzZo6rqPKi*9XEdW5ZHv* zJ)ike6Pv|St-OcZL@_XMXlcWQ5Z(6lwq#AG)_yImSHldhay!P`;1FY%k=Zet zhIzrJj>RQj^I4B~VIAz|uppm)3rp~WfP9WzfQ!L5n#84SJmEwio#bVgKR>9wj<8xW zsxfa-5L5*AIZHqWS`jZ2a+xL$gUEr?Ny-8Fy7-eN|y+C zOF_2t+>&8Fw!qahI*g~{phA||C*-~r+~RN4!xd-*(r(<*GZVS%b{{|$cVZg=+3$|b zvvMnPWFOZqIe(VZvtb;T@Ii%@E&aar#^n7nf@!h}gHM6*;K!9pdLiR#e|Zclw}vT% zRFwT1)*1ZW$ZWH0h*~yUBIHdlVvVpMw;1p${W8yrtM>EZY5-d@uF zOrKA!RaXoXz3Z+J;FfxJ^kWdwl_K_W>@ri33Eg(CeYYvD2=@q?%E7jmGZx|&NDm2r zKqzSc3W=piz9pUe(h~Qnb#R!LWX+iit)Gbs{;M^D@_0W&%G?dR8)^nd4|a2dz9 z2U1@5WG<3^V&+$W)6Bb8gou7M=1rw0yG7-C^NEHc2mT2Kk$B5xg=A;o2Oa%-QMT*+ zs$YsZnzx_zai*CvucB4?0Rv+JuQyyUBin)}7rqW60Fed`@-FlvZuqniI__A264kF(s}9baU0YMX|v5O8*l1(#k}3 zvQ}Iz3+jJ!M2=Q4!y7X#s^x1_@Fo&QgaY@T(SlQ9wl)rm7s+!1K)39Jq^)CO)3JQF zTPpaLCg!WbcKC@n-Cf{bKHcPAXsRLgWsQjptqtkSsOYCP9p640)R7AjaBZoyOf$8!)-ZSJ-ijX2dd>HICGic+7=FqFoBkm z2zu1wbOT=s_*Q(a!nJh3mW_RpG$LFG?ph>=AGTcc5zwc6jj*=ru*U#Oc0>9El3Eie zLwS#zW$?O(DDRB;FCLNcn4hb+pAG3mReS1ICyo-jJ(AdXY>!Jf`?aJ?H$|#uH2&y8h)U0{d{L4OA zY2wNEQ*(c@{Aq>BfDo8=+ivbgI$+0)586ZQfQTod~1L7}j?OmW(T-h53J zz0srMw78A`tb7_QV-!H$NMjABK%emEhxXi5Sr8Kjv zrAM-7tP1rr-CZ{>rpfIOir$qUsDQgOW(F(KVum4`MKU`ykw!IU*r@cSKiKa6@HkxB2McK{<3 zY%v&)S-ghh_rk##9UXZ7gS4zw7b{hG0|Va&)3D+r+ReT+AaIAZ+70m##=bCU2-klprW?bh+~A0|4E-e= z4F||QcB9CYqsLPqO!ja2o@8fJd&OGA{^IN6F%WnZunPwK6x-X*YnFUXh>|U2#Wd>S zJUcL^Ojs3>;;8$XZ#=T%AeNln5*heG!W|L6o{| z(DRWh60QrTkR*Objnob}kD>JdeQ9CYM2ndZL3w|V^PM5NmleZChu^*&2sM3DhxCHT zE2$^Vj1`ijw`?pR3vq@9^WBikIEenQY5uUtUM>0*bqXXcxul%9 z4jhjEJeJzMLrG32wf{JTtcDm(z$GO)=>=41hiv1QaSvRY{33u_U4{rh!Mo}mzCEx2 zFjk)vlAv0D)o&e)MxeWSW)j?x0|gT5RN4sIZsdvhVmFq=<@8$V-$aq7Is#>OVZW^oKj8< z8XO+%DAYmkJz56HN%ohf%q{gSxitBZmfl!)bgixh*X6QYK#=)jGf5IKZhZ8=0C~d* fFMCFPLqcvETm#)VO}? delta 2320 zcmZWpc~Fyg8crJ9xJxB#tx9bm?NCc=#iMAIGq&PUP^l+KL{O^{QjQ`Z5RxCQ)Yi&b zE)O80Vnhu=Lqq~3psi6NP!1DKGy%gMatMSk$(MY;rn~>_&b~A6%zMxK%slh7z9)9W z2NmJL8)BE+KbF3M_bPTHc!R@vYmr3*yi@HRTV9m{=Yj5^^yKFZn zZtvH|P2WCAW9``+*V<1PolIy{>CYyrU(jC7o>5PG^`#iE+!r;SNA7NHfp^FVfQz*A z=LyQnP?uB_N&z>zYd5X;k{{}}Zjt}IAl!fbvRi(0(HdK^GC8(6wGO1ToNP|3l$%Oa z$=hziULo6#(O?hea-lf9 z{5AElbI=3UkduNT-?zrsFm4RjLoM@P;M!3dCjAAyIvaE!roXhmSgg1L%h#8}3|EuI z_?jkL;1M2T)LgMQR%wboX$~Ndcn1NY7?<%X!+mtPc3$5&V8=i89)T;}o*pZBTh=NF zX86}v#rLoFw3E{1a2K3DP{^S-#p}zJ$=gxQbNEg{(lx~62<;=~Eo%nWSEDQ6gLLW09!!dCQ!32GLUM6

C0+VJ&2GsS9~DwXUZpDdY_lopD*T~= zy8NeMafn=l{FYC+EETSvu%CZ2+p>=IBrVpQ9{m2CY(`RWer*(U`Yo%=rGhKc#XWsj zI`X@VMt*v*jA0_b*>!3bMx}SjuB05mj8!_&P*N=T75cyAuo03)rat_6q><-N9y?)9R61x-C%7m6`QNRe1b5@zfKAOca86=dspw1yP9Qw;2Th-MfJDd#6+87t-(Ia~8kc@W9Rq4>&AGW4~6Nv6yaExNYn^jfUk=15twDh`tr!@cVj z)|1sT_^ZuDuk8CcV0u(-Jl2p414}vzM;yJ+s%NbxO6GBF+cz5xla8*Z*NsP?V)^ml z-Ejw_dl#B(A$=p=FIM@!VJALY?DTSXJD*kNM)w6rBXy_U`cCgds4Z1i2+dVgWusue zYKKSU`+aw5qajjeBSR58FRaO1nmZ%;n0VYk?FD)i4q}__P$KA}-f!|LYNYd6T(mXg z%M-L^swtW7qGIv5(y3TLcf0|rvyS=Nu4B=M?@BDu*Pg-`1(Bn-FyT_^jD_En5bxg$ zcjmvMVvKaDtqj&UtZ597!6r@-#>lwd(8&zj=g?BI?xA0>=o29)Ui4}DpffL!`a`oQ zHjlK1avt(^VCIY&PFGvkbqI?F_q$Bza9@-i=^6uIX6Bcvhct(48 z7WIFh2Zgp#!6YXNY+0bZz6LA$k6!@zRa=!a5r*NI2u{PPFIwvgN`T9+KQP$s~>qZw=!Y5=@k| zx1grQ(t2?SfZTJ=d|%8-cpg6JnlylHGkCVpNx+Mh3W&%3kHth;mJ{08!5U2~%dz|s z0mmrLTlyCCT}?;`a&7 zIK<0ytkgE~0JTjWAyH{h0%wO&orm-(G6H5@@dI-|YUE|%aJm?49>k&dEtHt}kOZxN zo2VWm)~~#U;3wy?{Bc`XVZ?~?NXctTjC+8%4-#(uBZy7F;Wh-L2{^4Yz~QomhbEnX ovx3}WqD@X9ZqQktd{crFv*-HaVkj0n#rcMRTc({@Z+ds$Ux|i3o&W#< diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk index a574c100..f85d3a6d 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk +++ b/tiny-cli/src/jvmMain/resources/sfx/editor.ldtk @@ -11,7 +11,7 @@ "iid": "d3199780-d7b0-11ee-9c45-618e61de5acd", "jsonVersion": "1.5.3", "appBuildId": 473703, - "nextUid": 71, + "nextUid": 90, "identifierStyle": "Capitalize", "toc": [], "worldLayout": "Free", @@ -2213,6 +2213,634 @@ "tilesetUid": null } ] + }, + { + "identifier": "PatternSelector", + "uid": 72, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": true, + "resizableY": true, + "minWidth": 16, + "maxWidth": null, + "minHeight": 16, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#FFFFFF", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [ + { + "identifier": "Pattern1", + "doc": null, + "__type": "EntityRef", + "uid": 73, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern2", + "doc": null, + "__type": "EntityRef", + "uid": 75, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern3", + "doc": null, + "__type": "EntityRef", + "uid": 76, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern4", + "doc": null, + "__type": "EntityRef", + "uid": 77, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern5", + "doc": null, + "__type": "EntityRef", + "uid": 78, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern6", + "doc": null, + "__type": "EntityRef", + "uid": 79, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern7", + "doc": null, + "__type": "EntityRef", + "uid": 80, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern8", + "doc": null, + "__type": "EntityRef", + "uid": 81, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern9", + "doc": null, + "__type": "EntityRef", + "uid": 82, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern10", + "doc": null, + "__type": "EntityRef", + "uid": 83, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern11", + "doc": null, + "__type": "EntityRef", + "uid": 84, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern12", + "doc": null, + "__type": "EntityRef", + "uid": 85, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern13", + "doc": null, + "__type": "EntityRef", + "uid": 86, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern14", + "doc": null, + "__type": "EntityRef", + "uid": 87, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern15", + "doc": null, + "__type": "EntityRef", + "uid": 88, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "Pattern16", + "doc": null, + "__type": "EntityRef", + "uid": 89, + "type": "F_EntityRef", + "isArray": false, + "canBeNull": false, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "RefLinkBetweenCenters", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "CurvedArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": false, + "allowOutOfLevelRef": false, + "allowedRefs": "OnlySpecificEntity", + "allowedRefsEntityUid": 17, + "allowedRefTags": [], + "tilesetUid": null + } + ] } ], "tilesets": [ { @@ -2234,7 +2862,7 @@ "savedSelections": [], "cachedPixelData": { "opaqueTiles": "0000000011110111111111111000000000000000011100111111111110000000000000000000000000000000001111100000000000000000000000000111111000000000000001111111111101111110000000000000011111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "averageColors": "fbbbfbbbfdccfdcc0000000000000000f625f625f625f6257525fbbbf778f778f878f999f778f878f778fbbbfbbbf235f725bbaa7baa3baa5feecfee5dcc20d3faaafaaafccbfccb00000000000000008225f235f235f23572250000f736f736f736f736f736f736f736f736f736f846f7350000bdcc9dcc2f0540853fa022af1f050f05308540853fa02fa022af02af1fe22fe23f7a2f7a20d300002fa01fa0376847684768476868792779877937680000e725f625f725f867f856f86749990f051f052085208500000000000012af1fe21fe200003f7a20c4000078455845376827681768176727672767676747670000f625f235f636f856f725f8564889fbbbfbbbfbbbfbbbfbbbfbbb0000000000000000000000000000f658f446f446f446f557f446f446f446f658f658f2350000f725f636f735f867f856f8671aabea9aea9aeaaaea9aea9aeaaa0000000000000000000000000000fbdef7bff8bff8bff9cff8bff8bff8bffbdefbdef2afd235d235d23500002bbc2bbc00000000b99ab6a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b99aba9a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b999ca89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "averageColors": "fbbbfbbbfdccfdcc0000000000000000f625f625f625f6257525fbbbf778f778f878f999f778f878f778fbbbfbbbf235f725bbaa7baa3baa5feecfee5dcc20d3faaafaaafccbfccb00000000000000008225f235f235f23572250000f736f736f736f736f736f736f736f736f736f846f7350000bdcc9dcc2f0540853fa022af1f050f05308540853fa02fa022af02af1fe22fe23f7a2f7a20d300002fa01fa0376847684768476868792779877937680000e725f625f725f867f856f86749990f051f052085208500000000000012af1fe21fe200003f7a20c4000078455845376827681768176727672767676747670000f625f235f636f856f725f8564889fbbbfbbbfbbbfbbbfbbbfbbb0000000000000000000000000000f658f446f446f446f557f446f446f446f658f658f2350000f725f636f735f867f856f8671aabea9aea9aeaaaea9aea9aeaaa0000000000000000000000000000fbdef7bff8bff8bff9cff8bff8bff8bffbdefbdef2afd235d235d23500002bbc2bbc00000000b99ab6a7000000000000000000000000000000000000000000002bbc2bbc2bbc2bbc2bbc2bbc2bbc2bbc2bbc000000004fee4fee4fee0000000000000000000000000000000000000000000000000000000000000000000000003bbc3bbc2bbc3bbc2bbc2bbc0000000000000000000000000000000000000000000000000000b99aba9a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b999ca89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee4fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" } } ], "enums": [ @@ -2258,7 +2886,8 @@ { "id": "Triangle", "tileRect": { "tilesetUid": 1, "x": 248, "y": 8, "w": 8, "h": 8 }, "color": 14984818 }, { "id": "Play", "tileRect": { "tilesetUid": 1, "x": 248, "y": 0, "w": 8, "h": 8 }, "color": 7552569 }, { "id": "Prev", "tileRect": { "tilesetUid": 1, "x": 224, "y": 40, "w": 8, "h": 8 }, "color": 4073265 }, - { "id": "Next", "tileRect": { "tilesetUid": 1, "x": 232, "y": 40, "w": 8, "h": 8 }, "color": 16690740 } + { "id": "Next", "tileRect": { "tilesetUid": 1, "x": 232, "y": 40, "w": 8, "h": 8 }, "color": 16690740 }, + { "id": "PatternId", "tileRect": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "color": 16705377 } ], "iconTilesetUid": 1, "externalRelPath": null, "externalFileChecksum": null, "tags": [] } ], "externalEnums": [], "levelFields": [] }, "levels": [ @@ -3943,56 +4572,6 @@ "__worldX": -160, "__worldY": 16 }, - { - "__identifier": "Button", - "__grid": [8,2], - "__pivot": [0,0], - "__tags": [], - "__tile": { "tilesetUid": 1, "x": 224, "y": 40, "w": 8, "h": 8 }, - "__smartColor": "#EAD4AA", - "iid": "995f4f60-d7b0-11ee-9c45-814a8ea4b593", - "width": 8, - "height": 8, - "defUid": 17, - "px": [64,16], - "fieldInstances": [ - { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "Prev", "__tile": { "tilesetUid": 1, "x": 224, "y": 40, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ - "id": "V_String", - "params": ["Prev"] - }] }, - { "__identifier": "Help", "__type": "String", "__value": "Previous pattern", "__tile": null, "defUid": 23, "realEditorValues": [{ - "id": "V_String", - "params": ["Previous pattern"] - }] } - ], - "__worldX": -120, - "__worldY": 16 - }, - { - "__identifier": "Button", - "__grid": [14,2], - "__pivot": [0,0], - "__tags": [], - "__tile": { "tilesetUid": 1, "x": 232, "y": 40, "w": 8, "h": 8 }, - "__smartColor": "#EAD4AA", - "iid": "9a336840-d7b0-11ee-9c45-05ba2659cb19", - "width": 8, - "height": 8, - "defUid": 17, - "px": [112,16], - "fieldInstances": [ - { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "Next", "__tile": { "tilesetUid": 1, "x": 232, "y": 40, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ - "id": "V_String", - "params": ["Next"] - }] }, - { "__identifier": "Help", "__type": "String", "__value": "Next Pattern", "__tile": null, "defUid": 23, "realEditorValues": [{ - "id": "V_String", - "params": ["Next Pattern"] - }] } - ], - "__worldX": -72, - "__worldY": 16 - }, { "__identifier": "WaveSelector", "__grid": [3,13], @@ -4390,59 +4969,572 @@ "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" - }, "__tile": null, "defUid": 54, "realEditorValues": [{ + }, "__tile": null, "defUid": 54, "realEditorValues": [{ + "id": "V_String", + "params": ["bc606820-d7b0-11ee-9c45-b9274d263161"] + }] }, + { "__identifier": "Volume", "__type": "EntityRef", "__value": { + "entityIid": "8269eaf0-d7b0-11ee-9c45-f7dd92d8e86a", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 61, "realEditorValues": [{ + "id": "V_String", + "params": ["8269eaf0-d7b0-11ee-9c45-f7dd92d8e86a"] + }] }, + { "__identifier": "BPM", "__type": "EntityRef", "__value": { + "entityIid": "81bb5b70-d7b0-11ee-9c45-1393fc15fd52", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 62, "realEditorValues": [{ + "id": "V_String", + "params": ["81bb5b70-d7b0-11ee-9c45-1393fc15fd52"] + }] }, + { "__identifier": "Play", "__type": "EntityRef", "__value": { + "entityIid": "5c45e690-d7b0-11ee-9c45-79131b730640", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 68, "realEditorValues": [{ + "id": "V_String", + "params": ["5c45e690-d7b0-11ee-9c45-79131b730640"] + }] } + ], + "__worldX": -16, + "__worldY": 16 + }, + { + "__identifier": "MenuItem", + "__grid": [20,8], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 152, "y": 8, "w": 8, "h": 8 }, + "__smartColor": "#BE4A2F", + "iid": "55fe7f30-d7b0-11ee-9ced-4b325d09db57", + "width": 8, + "height": 8, + "defUid": 2, + "px": [160,64], + "fieldInstances": [ + { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Space", "__tile": { "tilesetUid": 1, "x": 152, "y": 8, "w": 8, "h": 8 }, "defUid": 6, "realEditorValues": [] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 21, "realEditorValues": [] } + ], + "__worldX": -24, + "__worldY": 64 + }, + { + "__identifier": "Button", + "__grid": [4,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "19385ab0-d7b0-11ee-b6ce-e70545be188b", + "width": 8, + "height": 8, + "defUid": 17, + "px": [32,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -152, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [5,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "344df2b0-d7b0-11ee-b6ce-dd6eb549b0fd", + "width": 8, + "height": 8, + "defUid": 17, + "px": [40,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -144, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [6,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "34de99f0-d7b0-11ee-b6ce-0f991300af12", + "width": 8, + "height": 8, + "defUid": 17, + "px": [48,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -136, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [7,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3a73bd50-d7b0-11ee-b6ce-ebd0cd264c49", + "width": 8, + "height": 8, + "defUid": 17, + "px": [56,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -128, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [8,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3b18d6f0-d7b0-11ee-b6ce-63b393f80945", + "width": 8, + "height": 8, + "defUid": 17, + "px": [64,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -120, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [9,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3b91fe90-d7b0-11ee-b6ce-276295d25976", + "width": 8, + "height": 8, + "defUid": 17, + "px": [72,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -112, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [10,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3c105650-d7b0-11ee-b6ce-a1d847cfd04b", + "width": 8, + "height": 8, + "defUid": 17, + "px": [80,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -104, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [11,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3c8426c0-d7b0-11ee-b6ce-75dbc80f65d0", + "width": 8, + "height": 8, + "defUid": 17, + "px": [88,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -96, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [12,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3f528900-d7b0-11ee-b6ce-970a38cb7841", + "width": 8, + "height": 8, + "defUid": 17, + "px": [96,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -88, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [13,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "3fc288e0-d7b0-11ee-b6ce-61e0c50e19c1", + "width": 8, + "height": 8, + "defUid": 17, + "px": [104,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -80, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [14,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "404fadb0-d7b0-11ee-b6ce-6b1cdb9800c9", + "width": 8, + "height": 8, + "defUid": 17, + "px": [112,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -72, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [15,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "41fd5db0-d7b0-11ee-b6ce-45dae221e10b", + "width": 8, + "height": 8, + "defUid": 17, + "px": [120,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -64, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [16,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "427a07c0-d7b0-11ee-b6ce-7f0b82c0a9c0", + "width": 8, + "height": 8, + "defUid": 17, + "px": [128,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -56, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [17,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "430d4710-d7b0-11ee-b6ce-834a2ddca677", + "width": 8, + "height": 8, + "defUid": 17, + "px": [136,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -48, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [18,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "4aaabd90-d7b0-11ee-b6ce-01afe4733d9b", + "width": 8, + "height": 8, + "defUid": 17, + "px": [144,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -40, + "__worldY": 16 + }, + { + "__identifier": "Button", + "__grid": [19,2], + "__pivot": [0,0], + "__tags": [], + "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, + "__smartColor": "#EAD4AA", + "iid": "4b306850-d7b0-11ee-b6ce-2925c912fcaf", + "width": 8, + "height": 8, + "defUid": 17, + "px": [152,16], + "fieldInstances": [ + { "__identifier": "Type", "__type": "LocalEnum.ButtonType", "__value": "PatternId", "__tile": { "tilesetUid": 1, "x": 104, "y": 48, "w": 8, "h": 8 }, "defUid": 20, "realEditorValues": [{ + "id": "V_String", + "params": ["PatternId"] + }] }, + { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 23, "realEditorValues": [] } + ], + "__worldX": -32, + "__worldY": 16 + }, + { + "__identifier": "PatternSelector", + "__grid": [10,0], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "fd37a290-d7b0-11ee-b6ce-37a2d8292422", + "width": 16, + "height": 16, + "defUid": 72, + "px": [80,0], + "fieldInstances": [ + { "__identifier": "Pattern1", "__type": "EntityRef", "__value": { + "entityIid": "5c45e690-d7b0-11ee-9c45-79131b730640", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 73, "realEditorValues": [{ "id": "V_String", - "params": ["bc606820-d7b0-11ee-9c45-b9274d263161"] + "params": ["5c45e690-d7b0-11ee-9c45-79131b730640"] }] }, - { "__identifier": "Volume", "__type": "EntityRef", "__value": { - "entityIid": "8269eaf0-d7b0-11ee-9c45-f7dd92d8e86a", + { "__identifier": "Pattern2", "__type": "EntityRef", "__value": { + "entityIid": "19385ab0-d7b0-11ee-b6ce-e70545be188b", "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" - }, "__tile": null, "defUid": 61, "realEditorValues": [{ + }, "__tile": null, "defUid": 75, "realEditorValues": [{ "id": "V_String", - "params": ["8269eaf0-d7b0-11ee-9c45-f7dd92d8e86a"] + "params": ["19385ab0-d7b0-11ee-b6ce-e70545be188b"] }] }, - { "__identifier": "BPM", "__type": "EntityRef", "__value": { - "entityIid": "81bb5b70-d7b0-11ee-9c45-1393fc15fd52", + { "__identifier": "Pattern3", "__type": "EntityRef", "__value": { + "entityIid": "344df2b0-d7b0-11ee-b6ce-dd6eb549b0fd", "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" - }, "__tile": null, "defUid": 62, "realEditorValues": [{ + }, "__tile": null, "defUid": 76, "realEditorValues": [{ "id": "V_String", - "params": ["81bb5b70-d7b0-11ee-9c45-1393fc15fd52"] + "params": ["344df2b0-d7b0-11ee-b6ce-dd6eb549b0fd"] }] }, - { "__identifier": "Play", "__type": "EntityRef", "__value": { - "entityIid": "5c45e690-d7b0-11ee-9c45-79131b730640", + { "__identifier": "Pattern4", "__type": "EntityRef", "__value": { + "entityIid": "3a73bd50-d7b0-11ee-b6ce-ebd0cd264c49", "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" - }, "__tile": null, "defUid": 68, "realEditorValues": [{ + }, "__tile": null, "defUid": 77, "realEditorValues": [{ "id": "V_String", - "params": ["5c45e690-d7b0-11ee-9c45-79131b730640"] + "params": ["3a73bd50-d7b0-11ee-b6ce-ebd0cd264c49"] + }] }, + { "__identifier": "Pattern5", "__type": "EntityRef", "__value": { + "entityIid": "3a73bd50-d7b0-11ee-b6ce-ebd0cd264c49", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 78, "realEditorValues": [{ + "id": "V_String", + "params": ["3a73bd50-d7b0-11ee-b6ce-ebd0cd264c49"] + }] }, + { "__identifier": "Pattern6", "__type": "EntityRef", "__value": { + "entityIid": "3b91fe90-d7b0-11ee-b6ce-276295d25976", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 79, "realEditorValues": [{ + "id": "V_String", + "params": ["3b91fe90-d7b0-11ee-b6ce-276295d25976"] + }] }, + { "__identifier": "Pattern7", "__type": "EntityRef", "__value": { + "entityIid": "3c105650-d7b0-11ee-b6ce-a1d847cfd04b", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 80, "realEditorValues": [{ + "id": "V_String", + "params": ["3c105650-d7b0-11ee-b6ce-a1d847cfd04b"] + }] }, + { "__identifier": "Pattern8", "__type": "EntityRef", "__value": { + "entityIid": "3c8426c0-d7b0-11ee-b6ce-75dbc80f65d0", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 81, "realEditorValues": [{ + "id": "V_String", + "params": ["3c8426c0-d7b0-11ee-b6ce-75dbc80f65d0"] + }] }, + { "__identifier": "Pattern9", "__type": "EntityRef", "__value": { + "entityIid": "3f528900-d7b0-11ee-b6ce-970a38cb7841", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 82, "realEditorValues": [{ + "id": "V_String", + "params": ["3f528900-d7b0-11ee-b6ce-970a38cb7841"] + }] }, + { "__identifier": "Pattern10", "__type": "EntityRef", "__value": { + "entityIid": "3fc288e0-d7b0-11ee-b6ce-61e0c50e19c1", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 83, "realEditorValues": [{ + "id": "V_String", + "params": ["3fc288e0-d7b0-11ee-b6ce-61e0c50e19c1"] + }] }, + { "__identifier": "Pattern11", "__type": "EntityRef", "__value": { + "entityIid": "404fadb0-d7b0-11ee-b6ce-6b1cdb9800c9", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 84, "realEditorValues": [{ + "id": "V_String", + "params": ["404fadb0-d7b0-11ee-b6ce-6b1cdb9800c9"] + }] }, + { "__identifier": "Pattern12", "__type": "EntityRef", "__value": { + "entityIid": "41fd5db0-d7b0-11ee-b6ce-45dae221e10b", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 85, "realEditorValues": [{ + "id": "V_String", + "params": ["41fd5db0-d7b0-11ee-b6ce-45dae221e10b"] + }] }, + { "__identifier": "Pattern13", "__type": "EntityRef", "__value": { + "entityIid": "427a07c0-d7b0-11ee-b6ce-7f0b82c0a9c0", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 86, "realEditorValues": [{ + "id": "V_String", + "params": ["427a07c0-d7b0-11ee-b6ce-7f0b82c0a9c0"] + }] }, + { "__identifier": "Pattern14", "__type": "EntityRef", "__value": { + "entityIid": "427a07c0-d7b0-11ee-b6ce-7f0b82c0a9c0", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 87, "realEditorValues": [{ + "id": "V_String", + "params": ["427a07c0-d7b0-11ee-b6ce-7f0b82c0a9c0"] + }] }, + { "__identifier": "Pattern15", "__type": "EntityRef", "__value": { + "entityIid": "4aaabd90-d7b0-11ee-b6ce-01afe4733d9b", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 88, "realEditorValues": [{ + "id": "V_String", + "params": ["4aaabd90-d7b0-11ee-b6ce-01afe4733d9b"] + }] }, + { "__identifier": "Pattern16", "__type": "EntityRef", "__value": { + "entityIid": "4b306850-d7b0-11ee-b6ce-2925c912fcaf", + "layerIid": "4a687451-d7b0-11ee-9c45-f9fbfe85abb1", + "levelIid": "4a687450-d7b0-11ee-9c45-2f52ca2677e5", + "worldIid": "d3199781-d7b0-11ee-9c45-11db300be03a" + }, "__tile": null, "defUid": 89, "realEditorValues": [{ + "id": "V_String", + "params": ["4b306850-d7b0-11ee-b6ce-2925c912fcaf"] }] } ], - "__worldX": -16, - "__worldY": 16 - }, - { - "__identifier": "MenuItem", - "__grid": [20,8], - "__pivot": [0,0], - "__tags": [], - "__tile": { "tilesetUid": 1, "x": 152, "y": 8, "w": 8, "h": 8 }, - "__smartColor": "#BE4A2F", - "iid": "55fe7f30-d7b0-11ee-9ced-4b325d09db57", - "width": 8, - "height": 8, - "defUid": 2, - "px": [160,64], - "fieldInstances": [ - { "__identifier": "Item", "__type": "LocalEnum.Item", "__value": "Space", "__tile": { "tilesetUid": 1, "x": 152, "y": 8, "w": 8, "h": 8 }, "defUid": 6, "realEditorValues": [] }, - { "__identifier": "Help", "__type": "String", "__value": "", "__tile": null, "defUid": 21, "realEditorValues": [] } - ], - "__worldX": -24, - "__worldY": 64 + "__worldX": -104, + "__worldY": 0 } ] }, @@ -4487,14 +5579,14 @@ { "px": [72,16], "src": [192,0], "f": 0, "t": 24, "d": [53], "a": 1 }, { "px": [72,16], "src": [200,40], "f": 0, "t": 185, "d": [53], "a": 1 }, { "px": [80,16], "src": [192,0], "f": 0, "t": 24, "d": [54], "a": 1 }, - { "px": [80,16], "src": [200,40], "f": 0, "t": 185, "d": [54], "a": 1 }, { "px": [80,16], "src": [192,48], "f": 0, "t": 216, "d": [54], "a": 1 }, + { "px": [80,16], "src": [200,40], "f": 0, "t": 185, "d": [54], "a": 1 }, { "px": [88,16], "src": [192,0], "f": 0, "t": 24, "d": [55], "a": 1 }, - { "px": [88,16], "src": [200,40], "f": 0, "t": 185, "d": [55], "a": 1 }, { "px": [88,16], "src": [200,48], "f": 0, "t": 217, "d": [55], "a": 1 }, + { "px": [88,16], "src": [200,40], "f": 0, "t": 185, "d": [55], "a": 1 }, { "px": [96,16], "src": [192,0], "f": 0, "t": 24, "d": [56], "a": 1 }, - { "px": [96,16], "src": [200,40], "f": 0, "t": 185, "d": [56], "a": 1 }, { "px": [96,16], "src": [208,48], "f": 0, "t": 218, "d": [56], "a": 1 }, + { "px": [96,16], "src": [200,40], "f": 0, "t": 185, "d": [56], "a": 1 }, { "px": [104,16], "src": [192,0], "f": 0, "t": 24, "d": [57], "a": 1 }, { "px": [104,16], "src": [200,40], "f": 0, "t": 185, "d": [57], "a": 1 }, { "px": [112,16], "src": [192,0], "f": 0, "t": 24, "d": [58], "a": 1 }, diff --git a/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Score/Tiles.png b/tiny-cli/src/jvmMain/resources/sfx/editor/simplified/Score/Tiles.png index 0e26bd8a8018c24465034917d108bafa7c732da3..544b305bac31ab36b014a7251123632930ced7ca 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^8-TchgAGWoKKuAH0|Vo8PZ!6Kid%2*+V*`ikZ8S_ z(=w^+=>~Bxsci?DG9w)YTrX%lx-j)6AAj!UzF5;uinm{9^855%=gwdQW}83%yWy<6 ziDkF-f!$h6-<&q49AR=h07M)Xr3W*{%2R{T?aazpV!*onmg7G=e4bC2G0}cts|Anmr`uC0;lnU?Icz)rH zhR0VAnl|~)Iq-n5r@^+>;lRBkiU|b}`hn;9ro9XmK#92rIBozJhQ&>#pjg{7wf zXqV#wg#;Fz1Qs5Mk6B|wgma^OY$xGRo6TMh zi&N}t#CR+Gj_jYaPbuwVL;HW%53^Suv}!#mRp8aM^cBRXJgpTBn{LRm{oXK}p8*Iw MUHx3vIVCg!086jqbN~PV delta 496 zcmZ3$vWaDaO8rky7srr_TW{|g_B}F?XiL;{@;q9&gIksN`h$ioa}+dORm5FX9$5T) z`+Txo@3I?LGoDSoo|0b9$8L-bWT$PvoZ6t##ZqmvJ-5Qv{Nk_Yx-JK7k4S&~o~N3` z$Q^NjNo+#{tImTvjL&~4u;@Ifk7YXdv$2Bfp{C2nad;4c=^TSdPg`u=F(i-{I6DuKy^ZU;D_N-vPM?itn#^ z#O-iHSmI8j;D+S_95=cxSa{Y!=shnYH|R6WV^&U3H()AbcRQevz@n32#KObG#;BYC zL;?mJ5{%pujLi*#8-U1P15?8B07t}u$y$ukP7tNeZyEjVrEi}1QmZ-eGMYoUpz6~y z#{T_gf4|;)|GKt3Va@?nrg_$l2W7zqudh&Kk2|9H;8Op^Ifq&%&tnwJw)0D1e9Yo@ z;2p@|Em9wruWr_6@dG-A>6^aMi;uG_U3!2{(Pm-#rqp-upVm$F`M%6?!XNdQukW~N y^WbH@;GeY24StDTY;z_jaLNKb01T9cLiq>Wr#@NxXj?7=5O})!xvXbAzA(hXj!61{4u6V5<9hAaif4!78Enl&y{BicDn-C5)07l@ox7Wsda& z8T~`9NmCk%_X&u1Jz6eM8-M0!L80Esl5>r$Jq^NN-~Ot}*}>3K&tp;BV!*h3a`=H8 zje-Ry8+;SqfGqrToJ%q8&XI!>+Agj-Znk-CZ!tD(Qxf&bp z9#MSYmwr%>;asEO2F{*_w+DbO>}den0Cu(x#N}W&0bML+!1S$63FLMl3+$l{^$<@% zwQxj$^n-i|^CVm$P@RwMgJ<>1zvEA~@IxJK&imuz&X>=t_pNzemf-V1h;h4b!UkrL zbr0msiyo-)F;2I0Gj8SF&D;!ju5W@*LP1X($bD-Cbds64CDMc?7;gjJ-Y_%!!2B?F zZ5B0P7&HFv<(c;5u#J)%(6?Y;ZrqZuTK!qlwf1_I0GY=Te>s>$0UUzWTArW2+ k^@BoIKwkkh9(K9IXcnHZQbxBgf&mCTUHx3vIVCg!0I3+gq5uE@ delta 498 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 literal 3444 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 Aq5uE@ diff --git a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua index 971e8837..97980614 100644 --- a/tiny-cli/src/jvmMain/resources/sfx/test-game.lua +++ b/tiny-cli/src/jvmMain/resources/sfx/test-game.lua @@ -53,6 +53,9 @@ local button_type = { }, Next = { spr = 32 * 5 + 29 + }, + PatternId = { + spr = 32 * 5 + 29 + 16 } } @@ -530,6 +533,9 @@ function _init() fx.play:on_update(play) m.fx = fx end + + for k in all(map.entities["PatternSelector"]) do + end end switch_to(mode.score)