diff --git a/.github/stale.yml b/.github/stale.yml
index dc8a83080..d44497a17 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -3,7 +3,9 @@ daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 90
# Issues with these labels will never be considered stale
-exemptLabels: []
+exemptLabels:
+ - 'type:epic'
+ - 'type:debt'
# Label to use when marking an issue as stale
staleLabel: 'state:stale'
# Comment to post when marking an issue as stale. Set to `false` to disable
diff --git a/.gitignore b/.gitignore
index 8537fc545..5a4019a72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,10 +39,15 @@ desktop\.ini
.directory
# Generated files
+*.js.map
+*.css.map
src/typedefs/ct.js/types.d.ts
app/data/ctLibJSDocAst.json
+app/data/ct.shared/ctSound.js
app/data/ct.release/**
app/data/ct.shared/**
+app/data/monaco-workers/**
+app/data/codicon-TEAEXHHG.ttf
app/examples
app/templates
app/bundledAssets
@@ -69,7 +74,7 @@ app/exportDesktop
app/temp
/temp
app/data/fonts/style/.css
-app/data/patronsCache.csv
+app/data/patronsCache.*
builds
build
cache
@@ -77,6 +82,7 @@ tempChangelog.md
prev
trash
/Changelog.md
+app/nightly
# tests
error_screenshots/
@@ -115,4 +121,3 @@ app/data/ct.libs/gamedistribution/.vscode/settings.json
# neutralino binaries
src/ct.release/desktopPack/bin
src/ct.release/desktopPack/game/neutralino.js
-app/data/ct.shared/ctSound.js
diff --git a/.gitmodules b/.gitmodules
index 7d649c007..8dd135fae 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,3 @@
-[submodule "DragonBonesJS"]
- path = DragonBonesJS
- url = https://github.com/DragonBones/DragonBonesJS.git
[submodule "SSCD.js"]
path = SSCD.js
url = https://github.com/CosmoMyzrailGorynych/SSCD.js.git
diff --git a/README.md b/README.md
index 8ac87c656..f35ac6270 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ Ct.js as a game editor is a web application as well, based on the NW.js framewor
**Ct.js was made to be the cross-platform, always accessible integrated tool** that is not stuck in time like most other 2D game engines that use dated renderers, limited feature sets, and have hindering UIs. Ct.js lets you focus on your game's content without worrying about technical details like asset packing and loading, handling different screen resolutions, packing for desktop, and such.
-Ct.js is opinionated and gamedev-centric. To make a game, you do not need to know web development or how to summon a demon — all the tools and the knowledge are already in ct.js.
+Ct.js is opinionated and gamedev-centric. To make a game, you do not need to know web development or how to summon a demon — all the tools and knowledge are already in ct.js.
**And all this is to be free** — as in beer, as in freedom, and as a reproach towards companies too deep in their corporate greed.
@@ -36,15 +36,15 @@ Ct.js is opinionated and gamedev-centric. To make a game, you do not need to kno
# Production builds
-See the [releases page](https://github.com/ct-js/ct-js/releases) or [jump to itch.io page](https://comigo.itch.io/ct). Available for Windows, Mac and Linux.
+See the [releases page](https://github.com/ct-js/ct-js/releases) or [jump to the itch.io page](https://comigo.itch.io/ct). Available for Windows, Mac and Linux.
# Nightly builds
-We host [dev builds at itch.io](https://comigo.itch.io/ct-nightly). This page will have nightly versions that are built from the `develop` branch from our repository. It means that you will get the latest features, improvement, bug fixes, **and new bugs** daily, out of the oven. Use with caution and have fun. [Itch.io app](https://itch.io/app) is strongly recommended.
+We host [dev builds at itch.io](https://comigo.itch.io/ct-nightly). This page will have nightly versions that are built from the `develop` branch of our repository. It means that you will get the latest features, improvements, bug fixes, **and new bugs** daily, out of the oven. Use with caution and have fun. [The itch.io app](https://itch.io/app) is strongly recommended.
# Getting help
-For bugs, feature requests, developing questions, please use [GitHub issues](https://github.com/ct-js/ct-js/issues) so we can better track them. For general support about making games, ask a question at our [discord server](https://discord.gg/yuvuDW5).
+For bugs, feature requests, development questions, please use [GitHub issues](https://github.com/ct-js/ct-js/issues) so we can better track them. For general support about making games, ask a question at our [discord server](https://discord.gg/yuvuDW5).
# Repo structure & tools
@@ -52,10 +52,10 @@ For bugs, feature requests, developing questions, please use [GitHub issues](htt
* `data`
* `ct.libs` — catmods (modules) that ship with ct.js. Feel free to create a pull request with your module!
* `i18n` — UI language schemes. Open for pull requests! :)
-* `src` — a source folder that compile into `/app` folder at a build time.
+* `src` — a source folder that compiles into `/app` folder at a build time.
* `ct.release` — the ct.js game library, aka its "core"
* `js` — different top-level scripts, including 3rd-party libraries.
- * `node_requires` — built and copied to the `/app` directory.
+ * `node_requires` — built and copied to the `/app` directory.
* `pug` — HTML sources of editor's windows, written in [Pug](https://pugjs.org/).
* `riotTags` — components that drive UI logic in ct.js. Written in [Pug](https://pugjs.org/) and [Riot.js v3](https://v3.riotjs.now.sh/).
* `styl` — style sheets, written in [Stylus](http://stylus-lang.com/).
@@ -69,7 +69,7 @@ For bugs, feature requests, developing questions, please use [GitHub issues](htt
See the [main dev board](https://github.com/orgs/ct-js/projects/5/views/7) for hot issues and plans for next releases. Prioritize the "Current release" column, then "To Do", then "Backlog", though if you really want a feature from a backlog to come true right here, right now, no one can stop you :)
-Please leave a comment in issues you want to work on so that we can assign you to them and avoid occasional double work from several contributors.
+Please leave a comment on issues you want to work on so that we can assign you to them and avoid occasional double work from several contributors.
## Forking and installing the dev environment
@@ -89,9 +89,9 @@ gulp -f devSetup.gulpfile.js
gulp
```
-Use `gulp dev` instead of just `gulp` to run a dev service with live-reloading without opening ct.js in its default manner. In either case, you can stop this service in the usual manner for your terminal, e.g. `Ctrl+C`. If you are encountering unexplained issues, especially when switching to a new branch, run `gulp -f devSetup.gulpfile.js` again.
+Use `gulp dev` instead of just `gulp` to run a dev service with live reloading without opening ct.js in its default manner. In either case, you can stop this service in the usual manner for your terminal, e.g. `Ctrl+C`. If you are encountering unexplained issues, especially when switching to a new branch, run `gulp -f devSetup.gulpfile.js` again.
-VSCode can use [this extension](https://marketplace.visualstudio.com/items?itemName=ruakr.vsc-nwjs) to run ct.js with an attached debugger. Before running the debugger, to allow live-reloading, run `gulp dev`.
+VSCode can use [this extension](https://marketplace.visualstudio.com/items?itemName=ruakr.vsc-nwjs) to run ct.js with an attached debugger. Before running the debugger, to allow live reloading, run `gulp dev`.
## Linting
@@ -114,14 +114,14 @@ gulp lintI18n
It's actually easy and robust. We have [regular ct.js](https://comigo.itch.io/ct) for core releases and [ct.js Nightly](https://comigo.itch.io/ct-nightly) as a canary/preview build.
-* Once your PR was approved and merged, it gets into the `develop` branch.
+* Once your PR is approved and merged, it gets into the `develop` branch.
* Every change to `develop` triggers a CI build, and a new version of [ct.js Nightly](https://comigo.itch.io/ct-nightly) is released publicly.
* To automatically update ct.js Nightly, we recommend using [the official itch.io app](https://itch.io/app).
-* Every now and then maintainers decide to release a public version of ct.js — it involves version bumping, creating and cleaning changelog, updating screenshot, website, presskit data and such. Some stuff is automated, but it still involves manual work and public announcements on different channels. But if your change got into `develop`, it means it will reach the `master` branch as well.
+* Every now and then maintainers decide to release a public version of ct.js — it involves version bumping, creating and cleaning changelog, updating screenshots, website, presskit data and such. Some stuff is automated, but it still involves manual work and public announcements on different channels. But if your change gets into `develop``, it means it will reach the `master` branch as well.
### Releasing ct.js
-This is left for emergencies only, as Gitlab CI should prepare binaries for github and send them to itch.io as well
+This is left for emergencies only, as Gitlab CI should prepare binaries for GitHub and send them to itch.io as well
```sh
# Builds docs and adds them to ct.js app
@@ -143,7 +143,7 @@ gulp sendGithubDraft
gulp deploy
```
-The first run will be slow as it will download nw.js binaries. Next runs will use cached files.
+The first run will be slow as it will download nw.js binaries. The next runs will use cached files.
## Naming conventions and references
@@ -154,3 +154,11 @@ Use [Comigo's CSS naming guide](https://cosmomyzrailgorynych.github.io/css-namin
We have some references for ct.js' internals on [our wiki](https://github.com/ct-js/ct-js/wiki).
The ct.js app has a built-in CSS stylebook in the Meta section of the main menu.
+
+## Patrons
+
+Ct.js is supported by these wonderful people:
+
+
+
+
diff --git a/app/Changelog.md b/app/Changelog.md
index 35afde62c..ee22c5f3e 100644
--- a/app/Changelog.md
+++ b/app/Changelog.md
@@ -1,3 +1,118 @@
+## v5.0.0
+
+*Sat Jun 15 2024*
+
+### ✨ New Features
+
+* Add a custom error display in games so players can more easily report failures. Add a toggle to disable error reporting in-game and a field to specify a custom repor link.
+* Add a method `tween.value` to the `tween` catmod, and add a Catnip block to animate arbitrary computed values.
+* Add an option to main menu to autoapply asset changes before launching a game
+* Add community's learning resources and games to the starting screen
+* Allow using bitmap labels in buttons and textboxes, and introduce a new base class for Bitmap Text labels. Add an option to increase bitmap font rendering that fixes issues with bitmap fonts
+* Behaviors: add Behavior added and Behavior removed events
+* Context menu item for styles to create a template with a Text base class from it
+* Customize debugger's layout: split-screen, multi-windowed, and automatic (based on the screen count)
+* New programming language: Catnip
+* New UI themes:
+ * Alma Sakura
+ * Golden Eye
+ * One Dark Pro
+ * Synthwave '84
+* `room.makeCopyAligned` and `room.makeCopyAlignedRef` methods to dynamically add copies that align to camera's boundaries, in the same way you set up them in room editor's UI tools.
+* Specify additional typedefs for JS properties of behaviors, templates, and rooms. Available for JavaScript projects only.
+
+### ⚡️ General Improvements
+
+* :bento: Update the `light` catmod for ct.js v5
+* Add `'neutralino'` case to `u.getEnvironment` (Closes #517)
+* Add additional checks for extended fields and fields in asset types. Fixes not being able to use array fields for asset types in content schemas
+* Align table cells to the top
+* Improve layout of project scripts
+* Improve performance of afterDraw injection of matter.js catmod
+* Internal: `'always strict'` on ct.IDE's compiled TS files
+* Internal: Enforce stricter type checks in ct.js client library
+* Internal: Bundle most node_modules and ct.IDE's scripts into one file. This makes loading ct.IDE faster, as well as reduces the bundle size and install time. It also drops `--mixed-context` nw.js flag.
+* Internal: Update `nw-builder` to v4.7.4
+* Limit max project name length
+* Relayout the debugger screen to open the console in another window. Solves issues with JS breakpoints and "stop on exception" button
+* Remember opened assets when a project is saved, and reopen them when a project is loaded
+* Rename "editor" to "engine" in the ct.js' devtools banner
+* Replace `resedit-cli` with `resedit` for ct.IDE: removes dependency for node.js in desktop exporter.
+* Rework ct.js games' CSS to be less invasive to 3rd-party widgets and such
+* Rework font asset type into typefaces
+* Update patrons screen and move its logic into a module
+* Update QR code generator for game debugger
+
+### 🐛 Bug Fixes
+
+* Add a safeguard to `tween.add` to not update values if the animated object was `kill`ed.
+* Add proper handling of missing event declaration. Warn user about events that use missing catmods when exporting a project and in a template editro
+* Fix `updateWindowMenu` error appearing on non-MacOS devices
+* Fix ancient settings for monaco editor that showed errors on ES5+ features
+* Fix being able to get several context menus by right-clicking other stuff with an already opened menu
+* Fix being able to select game canvas on iOS browsers
+* Fix built-in asset gallery not being accessible on Mac
+* Fix canvases and code editors in tandem, style, room and scriptable editors disappearing after opening a tab -> switching to another one -> resizing window -> going back to the tab with a code editor or a pixi.js canvas.
+* Fix cases when content types' typedefs were not updated
+* Fix copy alignment being bound to copy-pasted copies in the room editor
+* Fix copy rearrangement effects resetting upon reopening a room.
+* Fix emitter's rectangular shapes being misaligned
+* Fix error spam about uninicialized position and scale changes in `room-entities-properties`
+* Fix monaco-editors hotkeys for changing font size
+* Fix old current room name in `templates.copy` documentation
+* Fix SnapTarget in room editor interfering with clicks on canvas
+* Fix `templates.each` method. It can also be used with arrow function now, too, as it passes a copy to the first argument of your function.
+* Fix textboxes' html inputs remaining on screen when a room changes
+* Fix the `tween` catmods throwing errors despite using the `silent: true` option or `.catch` handlers
+* Internal: Fix `gulp docs` failing on windows with new node.js versions
+* Internal: Fix context-menu tags overwriting their `ref` attribute with "root"
+* Internal: Fix devSetup.gulpfile.js failing on Node.js v20.13+ and Windows
+* Internal: Rename properties of context-menu tag so it doesn't pull in global values
+* Make monaco-editor pass Ctrl+S, F5 & Alt+F5 hotkeys to ct.IDE so you can save/launch projects while in a code editor
+* Minor visual fixes for tabs
+* Prevent dragging sound thumbnails in the sound editor
+
+### 🍱 Demos, Dependencies and Stuff
+
+* Gallery: Add textures for buttons and panels
+* Add tutorial projects ported to Catnip by @firecakes
+* Add a Catnip example of LabRaid
+* Pull the latest docs
+* Rename examples by tagging them with used language, remove two unsupported examples
+* Update Comments and Debug translation files
+* Update the list of boosters
+
+### 📝 Docs
+
+* :bug: Example code error (Follow a copy of a template called "Character") Fixes #133
+* :bug: Grammar fixes on homepage
+* :bug: Make the patrons list centered
+* Add a patron list to README.md
+* Add Catnip examples to ct.js tutorials
+* Add Learn Catnip category
+* 100% russian documentation translation
+* Move a couple comments in catnip's declarationExtractor to a proper place
+
+### 🌐 Website
+
+* :bug: Fix the broken "games made with ct.js section", put a button to submit a game
+* :bug: Set unique names for forms
+* :construction: I may have summoned demons
+* :globe_with_meridians: Add Chinese Simplified translation (#44 by @emaoshushu)
+* :globe_with_meridians: Add Japanese translation (#45 by @taxi13245)
+* :sparkles: Add forms for submitting games and learning resources
+* :sparkles: Create an embeddable widget with supporters
+* :zap: Add a honeypot for all the fields
+* :zap: Add patrons panel to homepage
+* :zap: Update wording on the homepage
+* Add a nice language comparison thingie
+
+### 👾 Misc
+
+* :fire: Internal: Delete now unused `app/projects` folder from the repo
+* :fire: Internal: Remove the `DragonBones` submodule
+* :globe_with_meridians: Update Russian UI translation file
+
## v4.0.2
*Sun Feb 25 2024*
diff --git a/app/data/boosters.yaml b/app/data/boosters.yaml
deleted file mode 100644
index 3995dbe99..000000000
--- a/app/data/boosters.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-cats:
-- Dēmētrius ille
-- GAKONS
-
-businessCats:
-- Chocopelli
-- Lawrence Chrysler
-
-sponsors: []
diff --git a/app/data/ct.libs/desktop/module.json b/app/data/ct.libs/desktop/module.json
index d6922e218..255abda15 100644
--- a/app/data/ct.libs/desktop/module.json
+++ b/app/data/ct.libs/desktop/module.json
@@ -3,6 +3,7 @@
"name": "Desktop features",
"tagline": "A module that provides useful desktop-specific features, such as manipulating the window, toggling the debugger/devtools, and more!",
"version": "0.3.0",
+ "icon": "monitor",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/gamepad/module.json b/app/data/ct.libs/gamepad/module.json
index 6e70ec04a..355fefa39 100644
--- a/app/data/ct.libs/gamepad/module.json
+++ b/app/data/ct.libs/gamepad/module.json
@@ -4,6 +4,7 @@
"tagline": "Connect your gamepad to the Actions system.",
"name_Ru": "Геймпад",
"tagline_Ru": "Подключает джойстики к системе Действий.",
+ "icon": "airplay",
"version": "2.0.0",
"packageName": "gamepad",
"authors": [
diff --git a/app/data/ct.libs/keyboard/module.json b/app/data/ct.libs/keyboard/module.json
index ebccfc33a..b5252a3ac 100644
--- a/app/data/ct.libs/keyboard/module.json
+++ b/app/data/ct.libs/keyboard/module.json
@@ -2,6 +2,7 @@
"main": {
"name": "Keyboard",
"tagline": "Add keyboard events to the Actions system.",
+ "icon": "airplay",
"name_Ru": "Клавиатура",
"tagline_Ru": "Добавляет события клавиатуры в систему Действий.",
"version": "4.0.0",
diff --git a/app/data/ct.libs/keyboard/types.d.ts b/app/data/ct.libs/keyboard/types.d.ts
index a539cb2c9..54ff33bb3 100644
--- a/app/data/ct.libs/keyboard/types.d.ts
+++ b/app/data/ct.libs/keyboard/types.d.ts
@@ -35,12 +35,6 @@ declare namespace keyboard {
*/
var ctrl: boolean;
- /**
- * Temporarily suspend e.preventDefault() calls. For example, to allow for a HTML text
- * box to be used.
- */
- var permitDefault: boolean;
-
/**
* Resets all the `ct.keyboard` parameters.
*/
diff --git a/app/data/ct.libs/light/index.js b/app/data/ct.libs/light/index.js
index daedd8159..194258863 100644
--- a/app/data/ct.libs/light/index.js
+++ b/app/data/ct.libs/light/index.js
@@ -17,16 +17,16 @@ const light = (function addCtLight() {
* @returns {PIXI.Sprite}
*/
add(texture, x, y, options) {
- const light = new PIXI.Sprite(texture);
- light.blendMode = PIXI.BLEND_MODES.ADD;
- light.x = x;
- light.y = y;
+ const l = new PIXI.Sprite(texture);
+ l.blendMode = PIXI.BLEND_MODES.ADD;
+ l.x = x;
+ l.y = y;
if (options) {
- Object.assign(light, options);
+ Object.assign(l, options);
}
- lightLayer.addChild(light);
- light.lights.push(light);
- return light;
+ lightLayer.addChild(l);
+ light.lights.push(l);
+ return l;
},
/**
* @param {PIXI.Texture | PIXI.Sprite} copyOrLight
@@ -58,27 +58,29 @@ const light = (function addCtLight() {
lightSprite.width = Math.ceil(camera.width);
lightSprite.height = Math.ceil(camera.height);
}
- renderer.render(lightLayer, renderTexture);
+ renderer.render(lightLayer, {
+ renderTexture: renderTexture
+ });
},
- updateOne(light) {
- if (light.owner) {
- if (!templates.valid(light.owner)) {
- light.remove(light);
+ updateOne(l) {
+ if (l.owner) {
+ if (!templates.valid(l.owner)) {
+ l.remove(l);
return;
}
- light.transform.setFromMatrix(light.owner.worldTransform);
- light.scale.x *= light.scaleFactor || 1;
- light.scale.y *= light.scaleFactor || 1;
- light.angle -= light.rotationFactor || 0;
- if (light.copyOpacity) {
- light.alpha = light.owner.alpha;
+ l.transform.setFromMatrix(l.owner.worldTransform);
+ l.scale.x *= l.scaleFactor || 1;
+ l.scale.y *= l.scaleFactor || 1;
+ l.angle -= l.rotationFactor || 0;
+ if (l.copyOpacity) {
+ l.alpha = l.owner.alpha;
}
}
},
update() {
rooms.current.updateTransform();
- for (const light of light.lights) {
- light.updateOne(light);
+ for (const l of light.lights) {
+ light.updateOne(l);
}
},
clear() {
@@ -114,5 +116,6 @@ const light = (function addCtLight() {
light.render();
}
};
+ return light;
})();
window.light = light;
diff --git a/app/data/ct.libs/light/injections/beforeroomoncreate.js b/app/data/ct.libs/light/injections/beforeroomoncreate.js
index d2d41ef5d..950bc7626 100644
--- a/app/data/ct.libs/light/injections/beforeroomoncreate.js
+++ b/app/data/ct.libs/light/injections/beforeroomoncreate.js
@@ -1,4 +1,4 @@
if (this === rooms.current) {
light.clear();
- light.ambientColor =u.hexToPixi(rooms.current.lightAmbientColor || '#FFFFFF');
+ light.ambientColor = u.hexToPixi(rooms.current.lightAmbientColor || '#FFFFFF');
}
diff --git a/app/data/ct.libs/light/module.json b/app/data/ct.libs/light/module.json
index cb8a1bebe..1c1fbece3 100644
--- a/app/data/ct.libs/light/module.json
+++ b/app/data/ct.libs/light/module.json
@@ -4,7 +4,7 @@
"name_Ru": "Система освещения",
"tagline": "Create dynamic lights with textures that follow your copies.",
"tagline_Ru": "Создавай динамические источники света, прикреплённые к копиям, с помощью текстур.",
- "version": "1.0.0",
+ "version": "2.0.0",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/matter/injections/afterdraw.js b/app/data/ct.libs/matter/injections/afterdraw.js
index 5d04d1df7..23b3d6f24 100644
--- a/app/data/ct.libs/matter/injections/afterdraw.js
+++ b/app/data/ct.libs/matter/injections/afterdraw.js
@@ -1,9 +1,6 @@
-if (this.matterEnable) {
+if (this.matterEnable && !this.matterStatic) {
this.rotation = this.matterBody.angle;
- this.x = this.matterBody.position.x;
- this.y = this.matterBody.position.y;
- //this.speed = this.matterBody.speed;
+ this.position.set(this.matterBody.position.x, this.matterBody.position.y);
this.hspeed = this.matterBody.velocity.x;
this.vspeed = this.matterBody.velocity.y;
- //this.direction = u.pdn(this.hspeed, this.vspeed);
}
diff --git a/app/data/ct.libs/matter/injections/htmlbottom.html b/app/data/ct.libs/matter/injections/htmltop.html
similarity index 100%
rename from app/data/ct.libs/matter/injections/htmlbottom.html
rename to app/data/ct.libs/matter/injections/htmltop.html
diff --git a/app/data/ct.libs/place/blocks.js b/app/data/ct.libs/place/blocks.js
new file mode 100644
index 000000000..008f7ea59
--- /dev/null
+++ b/app/data/ct.libs/place/blocks.js
@@ -0,0 +1,59 @@
+module.exports = [{
+ name: 'Move this copy along a line stopping at',
+ name_Ru: 'Переместить эту копию по линии, останавливаясь перед',
+ type: 'command',
+ code: 'move template bullet',
+ icon: 'move',
+ category: 'Movement',
+ pieces: [{
+ type: 'argument',
+ key: 'cgroup',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }],
+ jsTemplate: (values) => {
+ if (values.return !== 'undefined') {
+ return `${values.return} = this.moveBullet(${values.cgroup}, ${values.precision || 1});`;
+ }
+ return `this.moveBullet(${values.cgroup}, ${values.precision || 1});`;
+ }
+}, {
+ name: 'Move this copy stopping at',
+ name_Ru: 'Переместить эту копию, останавливаясь перед',
+ type: 'command',
+ code: 'move template smart',
+ icon: 'move',
+ category: 'Movement',
+ pieces: [{
+ type: 'argument',
+ key: 'cgroup',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }],
+ jsTemplate: (values) => {
+ if (values.return !== 'undefined') {
+ return `${values.return} = this.moveSmart(${values.cgroup}, ${values.precision || 1});`;
+ }
+ return `this.moveSmart(${values.cgroup}, ${values.precision || 1});`;
+ }
+}];
diff --git a/app/data/ct.libs/place/module.json b/app/data/ct.libs/place/module.json
index 8382c69d0..97f241ba3 100644
--- a/app/data/ct.libs/place/module.json
+++ b/app/data/ct.libs/place/module.json
@@ -4,6 +4,7 @@
"tagline": "Check for collisions, move copies continuously, and add basic collision avoidance to your copies.",
"tagline_Ru": "Проверяет столкновения, последовательно передвигает копии и предоставляет простые методы обхода препятствий вашим копиям.",
"version": "4.0.0",
+ "icon": "copy",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/place/types.d.ts b/app/data/ct.libs/place/types.d.ts
index beb5b2a5a..b5453b8ef 100644
--- a/app/data/ct.libs/place/types.d.ts
+++ b/app/data/ct.libs/place/types.d.ts
@@ -72,6 +72,10 @@ declare namespace place {
* @param {IShapeBearer} c1 The first object to check collision with
* @param {IShapeBearer} c2 The second object to check collision against
*
+ * @catnipLabel are colliding
+ * @catnipLabel_Ru сталкиваются
+ * @catnipIcon copy
+ *
* @returns {boolean} `true` if there was a collision, `false` otherwise
*/
function collide(c1: IShapeBearer, c2: IShapeBearer): boolean;
@@ -98,6 +102,7 @@ declare namespace place {
*
* @param {Copy} me The object to check collisions on
* @param {String} [cgroup] The collision group to check against
+ * @catnipName_Ru свободно
*/
function free(me: Copy, cgroup?: string): boolean;
@@ -111,6 +116,7 @@ declare namespace place {
* @param {String} [cgroup] The collision group to check against
* @returns {Copy|PIXI.Sprite|false} The collided copy or tile, or `false`
* if there is no collision.
+ * @catnipName_Ru занято
*/
function occupied(me: Copy, x: number, y: number, cgroup?: string):
Copy | PIXI.Sprite | false;
@@ -123,8 +129,13 @@ declare namespace place {
* @param {String} [cgroup] The collision group to check against
* @returns {Copy|PIXI.Sprite|false} The collided copy, or `false`
* if there were no collisions.
+ * @catnipName_Ru занято
*/
function occupied(me: Copy, cgroup?: string): Copy | false;
+ /**
+ * @catnipName all occupying
+ * @catnipName_Ru все занимающие место
+ */
function occupiedMultiple(me: Copy, cgroup?: string): Array | false;
function occupiedMultiple(me: Copy, x: number, y: number, cgroup?: string):
Array | false;
@@ -142,7 +153,10 @@ declare namespace place {
* @param {number} x The x coordinate to check, as if `me` was placed there
* @param {number} y The y coordinate to check, as if `me` was placed there
* @param {String} [template] The name of the template to check against
+ * @catnipAsset template:template
* @returns {Copy|false} The collided copy or `false`, if there was no collision.
+ * @catnipName occupied by a template
+ * @catnipName_Ru занято шаблоном
*/
function meet(me: Copy, x: number, y: number, template: string): Copy | false;
/**
@@ -151,9 +165,14 @@ declare namespace place {
*
* @param {Copy} me The object to check collisions on
* @param {String} [template] The name of the template to check agains
+ * @catnipAsset template:template
* @returns {Copy|Array} The collided copy or `false`, if there was no collision.
*/
function meet(me: Copy, template: string): Copy | false;
+ /**
+ * @catnipName all template's occupying copies
+ * @catnipName_Ru все занимающие место копии шаблона
+ */
function meetMultiple(me: Copy, template: string): Array;
function meetMultiple(me: Copy, x: number, y: number, template: string):Array;
@@ -170,9 +189,15 @@ declare namespace place {
* @param {number} [x] The x coordinate to check, as if `me` was placed there.
* @param {number} [y] The y coordinate to check, as if `me` was placed there.
* @param {number} cgroup The collision group of tile layers to test against.
+ * @catnipName occupied by a tile
+ * @catnipName_Ru занято плиткой
*/
function tiles(me: Copy, x: number, y: number, cgroup: string): false|PIXI.Sprite;
function tiles(me: Copy, cgroup: string): false|PIXI.Sprite;
+ /**
+ * @catnipName all occupying tiles
+ * @catnipName_Ru все занимающие место плитки
+ */
function tilesMultiple(me: Copy, x: number, y: number, cgroup: string): false|PIXI.Sprite[];
function tilesMultiple(me: Copy, cgroup: string): false|PIXI.Sprite[];
@@ -189,14 +214,22 @@ declare namespace place {
* @param {number} [x] The x coordinate to check, as if `me` was placed there.
* @param {number} [y] The y coordinate to check, as if `me` was placed there.
* @param {number} cgroup The collision group of tile layers to test against.
+ * @catnipName occupied by a copy
+ * @catnipName_Ru занято копией
*/
function copies(me: Copy, x: number, y: number, cgroup: string): false|Copy;
function copies(me: Copy, cgroup: string): false|Copy;
+ /**
+ * @catnipName all occupying copies
+ * @catnipName_Ru все занимающие место копии
+ */
function copiesMultiple(me: Copy, x: number, y: number, cgroup: string): false|Copy[];
function copiesMultiple(me: Copy, cgroup: string): false|Copy[];
/**
* Returns the latest distance after calling `ct.place.furthest` or `ct.place.nearest`.
+ * @catnipName last distance
+ * @catnipName_Ru последнее расстояние
*/
var lastdist: number;
@@ -206,6 +239,8 @@ declare namespace place {
* @param {number} y The vertical position of the starting point
* @param {string} template The name of the template against which copies
* the distance will be measured
+ * @catnipAsset template:template
+ * @catnipName_Ru ближайший
*/
function nearest(x: number, y: number, template: string): Copy | false;
@@ -215,6 +250,8 @@ declare namespace place {
* @param {number} y The vertical position of the starting point
* @param {string} template The name of the template against which copies
* the distance will be measured
+ * @catnipAsset template:template
+ * @catnipName_Ru наиболее удалённый
*/
function furthest(x: number, y: number, template: string): Copy | false;
@@ -225,10 +262,6 @@ declare namespace place {
* This function is especially useful for side-view games and any fast-moving copies,
* as it allows precise movement without clipping or passing through surfaces.
*
- * @remarks
- * You will usually need to premultiply `maxLength` with `u.delta`
- * so that the speed is consistent under different FPS rates.
- *
* @param {Copy} me The copy that needs to be moved
* @param {number} direction The direction in which to perform a movement
* @param {number} maxLength The maximum distance a copy can traverse
@@ -238,6 +271,10 @@ declare namespace place {
* @returns {Copy|boolean} If there was no collision and a copy reached its target,
* returns `false`. If a copy met an obstacle as another copy, returns this copy.
* If there was a tile, returns `true`.
+ *
+ * @catnipSaveReturn
+ * @catnipName Move a copy along a line
+ * @catnipName_Ru Передвинуть копию вдоль линии
*/
function moveAlong(
me: Copy, direction: number, maxLength: number, cgroup?: string, stepSize?: number
@@ -250,10 +287,6 @@ declare namespace place {
* and set precision with `stepSize` (default is `1`, which means pixel-by-pixel movement).
* This movement suits characters in top-down and side-view worlds.
*
- * @remarks
- * You will usually need to premultiply `dx` and `dy` with `u.delta`
- * so that the speed is consistent under different FPS rates.
- *
* @param {Copy} me The copy that needs to be moved
* @param {number} dx Amount of pixels to move by X axis
* @param {number} dy Amount of pixels to move by Y axis
@@ -262,6 +295,10 @@ declare namespace place {
* @param {number} [stepSize=1] Precision of movement
* @returns {false|ISeparateMovementResult} `false` if it reached its target,
* an object with each axis specified otherwise.
+ *
+ * @catnipSaveReturn
+ * @catnipName Move a copy by distance
+ * @catnipName_Ru Передвинуть копию на расстояние
*/
function moveByAxes(me: Copy, dx: number, dy: number, cgroup?: string, stepSize?: number):
false | ISeparateMovementResult;
@@ -283,6 +320,8 @@ declare namespace place {
* (usually the speed of a copy)
* @param {string} cgroup The collision group to test against. If not defined,
* will test against all the copies
+ * @catnipName Move a copy avoiding obstacles
+ * @catnipName_Ru Передвинуть копию, обходя препятствия
*/
function go(me: Copy, x: number, y: number, length: number, cgroup?: string): void;
@@ -373,6 +412,8 @@ declare namespace place {
* Enables collision checks on the specified tilemap, with an optional collision group.
* @param {Tilemap} tilemap The tilemap on which to enable collisions.
* @param {string} cgroup Collision group.
+ * @catnipName Enable tilemap collisions
+ * @catnipName_Ru Включить столкновения у слоя тайлов
*/
function enableTilemapCollisions(tilemap: Tilemap, cgroup?: string): void;
}
diff --git a/app/data/ct.libs/pointer/index.js b/app/data/ct.libs/pointer/index.js
index 44a15c22b..2c3203229 100644
--- a/app/data/ct.libs/pointer/index.js
+++ b/app/data/ct.libs/pointer/index.js
@@ -112,7 +112,8 @@ const pointer = (function mountCtPointer() {
}
};
var handleMove = function (e) {
- if (settings.preventDefault) {
+ // Allow default browser events inside error messages
+ if (settings.preventDefault && !(e.target.closest && e.target.closest('.ct-Errors'))) {
e.preventDefault();
}
let pointerHover = pointer.hover.find(p => p.id === e.pointerId);
@@ -136,7 +137,8 @@ const pointer = (function mountCtPointer() {
}
};
var handleDown = function (e) {
- if (settings.preventDefault) {
+ // Allow default browser events inside error messages
+ if (settings.preventDefault && !(e.target.closest && e.target.closest('.ct-Errors'))) {
e.preventDefault();
}
pointer.type = e.pointerType;
@@ -148,7 +150,8 @@ const pointer = (function mountCtPointer() {
}
};
var handleUp = function (e) {
- if (settings.preventDefault) {
+ // Allow default browser events inside error messages
+ if (settings.preventDefault && !(e.target.closest && e.target.closest('.ct-Errors'))) {
e.preventDefault();
}
const p = pointer.down.find(p => p.id === e.pointerId);
@@ -162,7 +165,8 @@ const pointer = (function mountCtPointer() {
};
var handleWheel = function handleWheel(e) {
setKey('Wheel', ((e.wheelDelta || -e.detail) < 0) ? -1 : 1);
- if (settings.preventDefault) {
+ // Allow default browser events inside error messages
+ if (settings.preventDefault && !(e.target.closest && e.target.closest('.ct-Errors'))) {
e.preventDefault();
}
};
diff --git a/app/data/ct.libs/pointer/module.json b/app/data/ct.libs/pointer/module.json
index 7ef872408..78b0be6bc 100644
--- a/app/data/ct.libs/pointer/module.json
+++ b/app/data/ct.libs/pointer/module.json
@@ -5,6 +5,7 @@
"tagline": "A uniform API for any type of pointer devices, be it touchscreens, pen tablets, or mouse.",
"tagline_Ru": "Единый API для всех видов указателей — мышек, тач-экранов, графических планшетов и т.д.",
"version": "1.0.1",
+ "icon": "ui",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/pointer/types.d.ts b/app/data/ct.libs/pointer/types.d.ts
index d027d413b..1a03523db 100644
--- a/app/data/ct.libs/pointer/types.d.ts
+++ b/app/data/ct.libs/pointer/types.d.ts
@@ -89,8 +89,17 @@ interface IPointer {
}
declare namespace pointer {
+ /**
+ * @catnipIgnore
+ */
var hover: IPointer[];
+ /**
+ * @catnipIgnore
+ */
var down: IPointer[];
+ /**
+ * @catnipIgnore
+ */
var released: IPointer[];
/** The horizontal position at which the primary pointer is positioned. */
var x: number;
@@ -234,11 +243,6 @@ declare namespace pointer {
function isButtonPressed(button: PointerButtonName, pointer: IPointer): boolean;
function lock(): void;
function unlock(): void;
- /**
- * Temporarily suspend e.preventDefault() calls. For example, to allow for a HTML text
- * box to be used.
- */
- var permitDefault: boolean;
/**
* Equals to `true` when the pointer is locked.
* Note that the pointer can still be unlocked while the locking mode is on,
diff --git a/app/data/ct.libs/random/index.js b/app/data/ct.libs/random/index.js
index 8bb516c4e..205f3aad8 100644
--- a/app/data/ct.libs/random/index.js
+++ b/app/data/ct.libs/random/index.js
@@ -3,12 +3,23 @@
const random = function random(x) {
return Math.random() * x;
};
+function processRandomInput(input) {
+ if (input.length === 1 && typeof input[0] === "string") {
+ return input[0].split(",");
+ }
+ return input;
+}
Object.assign(random, {
dice(...variants) {
- return variants[Math.floor(Math.random() * variants.length)];
+ const dices = processRandomInput(variants);
+ if (Array.isArray(dices) && dices.length > 0) {
+ const result = dices[Math.floor(Math.random() * dices.length)];
+ const parsedResult = parseFloat(result);
+ return isNaN(parsedResult) ? result : parsedResult;
+ }
},
histogram(...histogram) {
- const coeffs = [...histogram];
+ const coeffs = [...processRandomInput(histogram)];
let sumCoeffs = 0;
for (let i = 0; i < coeffs.length; i++) {
sumCoeffs += coeffs[i];
diff --git a/app/data/ct.libs/random/module.json b/app/data/ct.libs/random/module.json
index 11b795543..460d8b39f 100644
--- a/app/data/ct.libs/random/module.json
+++ b/app/data/ct.libs/random/module.json
@@ -3,6 +3,7 @@
"name": "random",
"tagline": "Compute random stuff!",
"tagline_Ru": "Вычисляй случайные значения!",
+ "icon": "sort-numerically",
"version": "2.0.0",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
diff --git a/app/data/ct.libs/random/types.d.ts b/app/data/ct.libs/random/types.d.ts
index 665ca5b51..ebd56e902 100644
--- a/app/data/ct.libs/random/types.d.ts
+++ b/app/data/ct.libs/random/types.d.ts
@@ -6,16 +6,18 @@ interface IPoint {
/** Returns a random float value between 0 and x, exclusive. */
declare function random(x: number): number;
declare namespace random {
- /** Returns a random given argument. */
+ /**
+ * Returns random argument from comma separated arguments (without spaces):
+ * Numbers will return float. Words will return string. These can be mixed.
+ */
function dice(...dices: T[]): T;
function dice(...dices: any): any;
/**
* Returns a weighted random number from 0 to 1 according to a given histogram.
* Each argument defines the probability of a random value to appear in a bucket.
- * @example If you call `ct.random.histogram(1, 10)`, the method will return values
- * in a range [0.5;1) ten times more often than in a range [0;0.5).
- * @example If you call `ct.random.histogram(1, 10, 2)`, the method will return values
+ * Example:
+ * If you call `random.histogram(1, 10, 2)`, the method will return values
* in a range [0.333;0.667) ten times more often than in a range [0;0.333)
* and five times more often than in a range [0.667;1).
*/
@@ -38,13 +40,19 @@ declare namespace random {
/** Returns a random float value between `x1` and `x2`, exclusive. */
function range(x1: number, x2: number): number
- /** Returns a random float value between 0 and 360, exclusive. */
+ /**
+ * Returns a random float value between 0 and 360, exclusive.
+ * @catnipName random angle
+ */
function deg(): number;
/** Returns a pair of random coordinates from 0 to a corresponding room side. */
function coord(): IPoint;
- /** Returns a random element from the passed array */
+ /**
+ * Returns a random element from the passed array
+ * @catnipName random from array
+ */
function from(a: T[]): T;
function from(a: any[]): any;
@@ -56,15 +64,30 @@ declare namespace random {
*/
function text(text: string): string;
- /** When given both `x` and `y`, randomly returns `true` approximately `x` times out of `y`. When given only a value between 0…100, returns `true` approximately `x` times out of 100. E.g. `ct.random.chance(30)` means a 30% success rate. */
+ /**
+ * When given both `x` and `y`, randomly returns `true` approximately `x` times
+ * out of `y`. When given only a value between 0…100, returns `true`
+ * approximately `x` times out of 100. E.g. `random.chance(30)` means
+ * a 30% success rate.
+ */
function chance(x: number, y?: number): boolean;
- /** Returns next seeded random number. */
+ /**
+ * Returns next seeded random number.
+ */
function seeded(): number;
- /** Sets the seed of the `ct.random.seeded()` method. */
+ /**
+ * Sets the seed of the `random.seeded()` method.
+ * @catnipName Set the seed for the "random seeded" block
+ */
function setSeed(seed: number): void;
- /** Creates a new seeded random number generator. It is a function that you can store and use in the same way as `ct.random.seeded()`. */
+ /**
+ * Creates a new seeded random number generator. It is a function that you can store
+ * and use in the same way as `random.seeded()`.
+ * @catnipName Create a seeded randomizer function with seed
+ * @catnipSaveReturn
+ */
function createSeededRandomizer(seed: number): () => number;
}
diff --git a/app/data/ct.libs/splashscreen/module.json b/app/data/ct.libs/splashscreen/module.json
index 1feef79c9..08c119b0e 100644
--- a/app/data/ct.libs/splashscreen/module.json
+++ b/app/data/ct.libs/splashscreen/module.json
@@ -4,6 +4,7 @@
"name_Ru": "Вступительный экран-обложка",
"tagline": "Create splash screens at project settings.",
"tagline_Ru": "Создай вступительное интро с помощью настроек проекта.",
+ "icon": "monitor",
"version": "0.0.0",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
diff --git a/app/data/ct.libs/sprite/module.json b/app/data/ct.libs/sprite/module.json
index 375f24032..0c4faa2f1 100644
--- a/app/data/ct.libs/sprite/module.json
+++ b/app/data/ct.libs/sprite/module.json
@@ -3,6 +3,7 @@
"name": "Sprite Composer",
"tagline": "Create new animations from one sprite, freeing yourself from the necessity to split and stitch frames manually.",
"version": "1.0.0",
+ "icon": "texture",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/transition/module.json b/app/data/ct.libs/transition/module.json
index 3cd9b645c..b011ff901 100644
--- a/app/data/ct.libs/transition/module.json
+++ b/app/data/ct.libs/transition/module.json
@@ -4,6 +4,7 @@
"tagline": "Add nice and smooth transitions between levels, or whenever you need them.",
"tagline_Ru": "Добавь красивые плавные переходы между уровнями, или вызови их когда угодно.",
"version": "1.0.0",
+ "icon": "monitor",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/transition/types.d.ts b/app/data/ct.libs/transition/types.d.ts
index b189c86e4..fbbd479ee 100644
--- a/app/data/ct.libs/transition/types.d.ts
+++ b/app/data/ct.libs/transition/types.d.ts
@@ -8,11 +8,15 @@ declare namespace transition {
* The beginning of a fading transition, which paints the whole screen through time.
* The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function fadeOut(duration?: number, color?: number): Promise;
/**
* The end of a fading transition. The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function fadeIn(duration?: number, color?: number): Promise;
@@ -22,6 +26,8 @@ declare namespace transition {
* which will zoom in 10 times. Setting values larger than `1` will zoom out instead.
* The arguments `duration` and `color` are optional, and default to `500` (0.5 seconds)
* and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function scaleOut(duration?: number, scaling?: number, color?: number): Promise;
/**
@@ -30,6 +36,8 @@ declare namespace transition {
* The default `scaling` is `0.1`, which will zoom in 10 times. Setting values larger
* than `1` will zoom out instead. The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function scaleIn(duration?: number, scaling?: number, color?: number): Promise;
@@ -39,6 +47,8 @@ declare namespace transition {
* covering the screen with an opaque color.
* The arguments `duration` and `color` are optional, and
* default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function slideOut(duration?: number, direction?: CtTransitionDirection, color?: number): Promise;
/**
@@ -47,6 +57,8 @@ declare namespace transition {
* covering the screen with an opaque color.
* The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function slideIn(duration?: number, direction?: CtTransitionDirection, color?: number): Promise;
@@ -55,6 +67,8 @@ declare namespace transition {
* that smoothly grows from a size of a point to cover the whole screen
* in a given opaque color. The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function circleOut(duration?: number, color?: number): Promise;
/**
@@ -62,6 +76,8 @@ declare namespace transition {
* that covers the whole screen in a given opaque color but smoothly
* shrinks to a point. The arguments `duration` and `color` are optional,
* and default to `500` (0.5 seconds) and `0x000000` (black color).
+ *
+ * @catnipPromise then
*/
function circleIn(duration?: number, color?: number): Promise;
}
diff --git a/app/data/ct.libs/tween/DOCS.md b/app/data/ct.libs/tween/DOCS.md
index e13e26cd4..8f576c152 100644
--- a/app/data/ct.libs/tween/DOCS.md
+++ b/app/data/ct.libs/tween/DOCS.md
@@ -33,7 +33,30 @@ tween.add({
});
```
-### Default interpolation methods
+## tween.value(options: object, onTick: (value: number) => void)
+
+Creates a new custom tween that animates one numeric value. Options are:
+
+* `options.from` Initial value
+* `options.to` Target value
+* `options.curve` An interpolating function. You can write your own, or use default ones written below. The default one is `tween.ease`.
+* `options.duration` The duration of easing, in milliseconds.
+* `options.isUi` If true, use `u.timeUi` instead of `u.time`. The default is `false`.
+* `options.silent` If set to true, suppresses errors when the timer was interrupted or stopped manually.
+
+### **Example:** Animate copy's scale from 0 to 1.
+
+```js
+tween.value({
+ from: 0,
+ to: 1,
+ duration: 350
+}, newValue => {
+ this.scale.x = this.scale.y = newValue;
+});
+```
+
+## Default interpolation methods
* `tween.linear`
diff --git a/app/data/ct.libs/tween/blocks.js b/app/data/ct.libs/tween/blocks.js
new file mode 100644
index 000000000..2b9e1b4de
--- /dev/null
+++ b/app/data/ct.libs/tween/blocks.js
@@ -0,0 +1,375 @@
+/* eslint-disable camelcase */
+module.exports = [{
+ name: 'Animate a value',
+ name_Ru: 'Анимировать значение',
+ displayName: 'Animate a value',
+ displayName_Ru: 'Анимировать',
+ type: 'command',
+ code: 'animate propVal',
+ pieces: [{
+ type: 'argument',
+ key: 'value',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'to',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'for',
+ i18nKey: 'forDuring'
+ }, {
+ type: 'argument',
+ key: 'ms',
+ typeHint: 'number',
+ required: true,
+ defaultConstant: 1000
+ }, {
+ type: 'asyncMarker'
+ }, {
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'redo'
+ }, {
+ type: 'label',
+ name: 'then',
+ i18nKey: 'then'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'then'
+ }, {
+ type: 'icon',
+ icon: 'alert-octagon'
+ }, {
+ type: 'label',
+ name: 'catch',
+ i18nKey: 'catch'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'catch'
+ }, {
+ type: 'options',
+ options: [{
+ key: 'isUi',
+ name: 'Animate in UI time',
+ name_Ru: 'Анимировать в UI времени',
+ typeHint: 'boolean'
+ }, {
+ key: 'curve',
+ name: 'Curve',
+ name_Ru: 'Кривая',
+ typeHint: 'wildcard'
+ }]
+ }],
+ jsTemplate: values => `
+ tween.value({
+ from: ${values.value},
+ to: ${values.to},
+ duration: ${values.ms},
+ isUi: ${values.isUi},
+ curve: ${values.curve || 'tween.ease'}
+ }, value => {
+ ${values.value} = value;
+ }).then(() => {
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });
+ `
+}, {
+ name: 'Animate property',
+ name_Ru: 'Анимировать свойство',
+ displayName: 'Animate object\'s',
+ displayName_Ru: 'Анимировать у объекта',
+ type: 'command',
+ code: 'animate',
+ pieces: [{
+ type: 'argument',
+ key: 'target',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'property',
+ i18nKey: 'property'
+ }, {
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'for',
+ i18nKey: 'forDuring'
+ }, {
+ type: 'argument',
+ key: 'ms',
+ typeHint: 'number',
+ required: true,
+ defaultConstant: 1000
+ }, {
+ type: 'asyncMarker'
+ }, {
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'redo'
+ }, {
+ type: 'label',
+ name: 'then',
+ i18nKey: 'then'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'then'
+ }, {
+ type: 'icon',
+ icon: 'alert-octagon'
+ }, {
+ type: 'label',
+ name: 'catch',
+ i18nKey: 'catch'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'catch'
+ }, {
+ type: 'options',
+ options: [{
+ key: 'isUi',
+ name: 'Animate in UI time',
+ name_Ru: 'Анимировать в UI времени',
+ typeHint: 'boolean'
+ }, {
+ key: 'curve',
+ name: 'Curve',
+ name_Ru: 'Кривая',
+ typeHint: 'wildcard'
+ }]
+ }],
+ jsTemplate: values => `
+ tween.add({
+ obj: ${values.target},
+ duration: ${values.ms},
+ isUi: ${values.isUi},
+ fields: {
+ ${values.property}: ${values.value}
+ },
+ curve: ${values.curve || 'tween.ease'}
+ }).then(() => {
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });
+ `
+}, {
+ name: 'Animate scale',
+ name_Ru: 'Анимировать размер',
+ displayName: 'Animate object\'s',
+ displayName_Ru: 'Анимировать у объекта',
+ type: 'command',
+ code: 'animate scale',
+ pieces: [{
+ type: 'argument',
+ key: 'target',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'scale',
+ i18nKey: 'scale'
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'for',
+ i18nKey: 'forDuring'
+ }, {
+ type: 'argument',
+ key: 'ms',
+ typeHint: 'number',
+ required: true,
+ defaultConstant: 1000
+ }, {
+ type: 'asyncMarker'
+ }, {
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'redo'
+ }, {
+ type: 'label',
+ name: 'then',
+ i18nKey: 'then'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'then'
+ }, {
+ type: 'icon',
+ icon: 'alert-octagon'
+ }, {
+ type: 'label',
+ name: 'catch',
+ i18nKey: 'catch'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'catch'
+ }, {
+ type: 'options',
+ options: [{
+ key: 'isUi',
+ name: 'Animate in UI time',
+ name_Ru: 'Анимировать в UI времени',
+ typeHint: 'boolean'
+ }, {
+ key: 'curve',
+ name: 'Curve',
+ name_Ru: 'Кривая',
+ typeHint: 'wildcard'
+ }]
+ }],
+ jsTemplate: values => `
+ tween.add({
+ obj: ${values.target}.scale,
+ duration: ${values.ms},
+ isUi: ${values.isUi},
+ fields: {
+ x: ${values.x},
+ y: ${values.y}
+ },
+ curve: ${values.curve || 'tween.ease'}
+ }).then(() => {
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });
+ `
+}, {
+ name: 'Animate position',
+ name_Ru: 'Анимировать расположение',
+ displayName: 'Animate object\'s',
+ displayName_Ru: 'Анимировать у объекта',
+ type: 'command',
+ code: 'animate position',
+ pieces: [{
+ type: 'argument',
+ key: 'target',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'position',
+ i18nKey: 'position'
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'for',
+ i18nKey: 'forDuring'
+ }, {
+ type: 'argument',
+ key: 'ms',
+ typeHint: 'number',
+ required: true,
+ defaultConstant: 1000
+ }, {
+ type: 'asyncMarker'
+ }, {
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'redo'
+ }, {
+ type: 'label',
+ name: 'then',
+ i18nKey: 'then'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'then'
+ }, {
+ type: 'icon',
+ icon: 'alert-octagon'
+ }, {
+ type: 'label',
+ name: 'catch',
+ i18nKey: 'catch'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'catch'
+ }, {
+ type: 'options',
+ options: [{
+ key: 'isUi',
+ name: 'Animate in UI time',
+ name_Ru: 'Анимировать в UI времени',
+ typeHint: 'boolean'
+ }, {
+ key: 'curve',
+ name: 'Curve',
+ name_Ru: 'Кривая',
+ typeHint: 'wildcard'
+ }]
+ }],
+ jsTemplate: values => `
+ tween.add({
+ obj: ${values.target},
+ duration: ${values.ms},
+ isUi: ${values.isUi},
+ fields: {
+ x: ${values.x},
+ y: ${values.y}
+ },
+ curve: ${values.curve || 'tween.ease'}
+ }).then(() => {
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });
+ `
+}];
diff --git a/app/data/ct.libs/tween/index.js b/app/data/ct.libs/tween/index.js
index 557a4f900..c91845a2a 100644
--- a/app/data/ct.libs/tween/index.js
+++ b/app/data/ct.libs/tween/index.js
@@ -20,6 +20,8 @@
* @returns {Promise} A promise which is resolved if the effect was fully played,
* or rejected if it was interrupted manually by code, room switching or instance kill.
* You can call a `stop()` method on this promise to interrupt it manually.
+ *
+ * @catnipIgnore
*/
add(options) {
const twoon = {
@@ -27,39 +29,72 @@
fields: options.fields || {},
curve: options.curve || tween.ease,
duration: options.duration || 1000,
- timer: new CtTimer(options.duration, false, options.isUi || false)
+ timer: new CtTimer(options.duration, false, options.isUi || false),
+ starting: {},
+ reject: (message) => twoon.timer.reject(message),
+ resolve: (fields) => twoon.timer.resolve(fields)
};
- const promise = new Promise((resolve, reject) => {
- twoon.resolve = resolve;
- twoon.reject = reject;
- twoon.starting = {};
- for (const field in twoon.fields) {
- twoon.starting[field] = twoon.obj[field] || 0;
+ twoon.promise = twoon.timer.promise;
+ twoon.starting = {};
+ for (const field in twoon.fields) {
+ twoon.starting[field] = twoon.obj[field] || 0;
+ }
+ tween.tweens.push(twoon);
+ twoon.promise = twoon.promise.then(() => {
+ if (!twoon.obj.kill) {
+ for (const field in twoon.fields) {
+ twoon.obj[field] = twoon.fields[field];
+ }
}
- tween.tweens.push(twoon);
- });
- if (options.silent) {
- promise.catch(() => void 0);
- twoon.timer.catch(() => void 0);
+ }, options.silent && (() => void 0));
+ twoon.promise.stop = () => {
+ twoon.timer.reject({
+ code: 0,
+ info: 'Stopped by game logic',
+ from: 'tween'
+ });
+ };
+ return twoon.promise;
+ },
+ value(options, onTick) {
+ const twoon = {
+ from: options.from,
+ to: options.to,
+ curve: options.curve || tween.ease,
+ duration: options.duration || 1000,
+ timer: new CtTimer(options.duration, false, options.isUi || false),
+ starting: {},
+ reject: (message) => twoon.timer.reject(message),
+ resolve: (fields) => twoon.timer.resolve(fields),
+ onTick
+ };
+ twoon.promise = twoon.timer.promise;
+ twoon.starting = {};
+ for (const field in twoon.fields) {
+ twoon.starting[field] = twoon.obj[field] || 0;
}
- promise.stop = function stop() {
- twoon.reject({
+ tween.tweens.push(twoon);
+ twoon.promise = twoon.promise.then(() => {
+ onTick(twoon.to);
+ }, options.silent && (() => void 0));
+ twoon.promise.stop = () => {
+ twoon.timer.reject({
code: 0,
info: 'Stopped by game logic',
from: 'tween'
});
};
- return promise;
+ return twoon.promise;
},
- /**
- * Linear interpolation.
- * Here and below, these parameters are used:
- *
- * @param {Number} s Starting value
- * @param {Number} d The change of value to transition to, the Delta
- * @param {Number} a The current timing state, 0-1
- * @returns {Number} Interpolated value
- */
+ /**
+ * Linear interpolation.
+ * Here and below, these parameters are used:
+ *
+ * @param {Number} s Starting value
+ * @param {Number} d The change of value to transition to, the Delta
+ * @param {Number} a The current timing state, 0-1
+ * @returns {Number} Interpolated value
+ */
linear(s, d, a) {
return d * a + s;
},
diff --git a/app/data/ct.libs/tween/injections/beforeroomstep.js b/app/data/ct.libs/tween/injections/beforeroomstep.js
index c4fc784a6..e5170e613 100644
--- a/app/data/ct.libs/tween/injections/beforeroomstep.js
+++ b/app/data/ct.libs/tween/injections/beforeroomstep.js
@@ -2,7 +2,7 @@
let i = 0;
while (i < tween.tweens.length) {
const twoon = tween.tweens[i];
- if (twoon.obj.kill) {
+ if (twoon.obj && twoon.obj.kill) {
twoon.reject({
code: 2,
info: 'Copy is killed'
@@ -14,10 +14,14 @@
if (a > 1) {
a = 1;
}
- for (const field in twoon.fields) {
- const s = twoon.starting[field],
- d = twoon.fields[field] - twoon.starting[field];
- twoon.obj[field] = twoon.curve(s, d, a);
+ if (twoon.obj) {
+ for (const field in twoon.fields) {
+ const s = twoon.starting[field],
+ d = twoon.fields[field] - twoon.starting[field];
+ twoon.obj[field] = twoon.curve(s, d, a);
+ }
+ } else {
+ twoon.onTick(twoon.curve(twoon.from, twoon.to - twoon.from, a));
}
if (a === 1) {
twoon.resolve(twoon.fields);
diff --git a/app/data/ct.libs/tween/injections/roomonleave.js b/app/data/ct.libs/tween/injections/roomonleave.js
index 70433d198..2e83a2572 100644
--- a/app/data/ct.libs/tween/injections/roomonleave.js
+++ b/app/data/ct.libs/tween/injections/roomonleave.js
@@ -1,10 +1,3 @@
if (!this.kill) {
- for (const twoon of tween.tweens) {
- twoon.reject({
- info: 'Room switch',
- code: 1,
- from: 'tween'
- });
- }
tween.tweens = [];
}
diff --git a/app/data/ct.libs/tween/module.json b/app/data/ct.libs/tween/module.json
index fde0344a5..12d53e76e 100644
--- a/app/data/ct.libs/tween/module.json
+++ b/app/data/ct.libs/tween/module.json
@@ -3,6 +3,7 @@
"name": "ct.tween",
"tagline": "Animate values through time with different interpolation curves.",
"version": "1.1.0",
+ "icon": "interpolation-smooth",
"authors": [{
"name": "Cosmo Myzrail Gorynych",
"mail": "admin@nersta.ru"
diff --git a/app/data/ct.libs/tween/types.d.ts b/app/data/ct.libs/tween/types.d.ts
index 8f24f777d..5c86a081f 100644
--- a/app/data/ct.libs/tween/types.d.ts
+++ b/app/data/ct.libs/tween/types.d.ts
@@ -35,6 +35,8 @@ declare namespace tween {
* Creates a new tween effect and adds it to the game loop.
* Returns a Promise which is resolved if the effect was fully played,
* or rejected if it was interrupted manually by code, room switching or Copy kill.
+ *
+ * @catnipIgnore
*/
function add(options: ITweenOptions): ITween;
diff --git a/app/data/ct.shared/ctSound.js b/app/data/ct.shared/ctSound.js
deleted file mode 100644
index 2a8d39b2f..000000000
--- a/app/data/ct.shared/ctSound.js
+++ /dev/null
@@ -1,623 +0,0 @@
-var __defProp = Object.defineProperty;
-var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
-};
-var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
-};
-var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
-var __async = (__this, __arguments, generator) => {
- return new Promise((resolve, reject) => {
- var fulfilled = (value) => {
- try {
- step(generator.next(value));
- } catch (e) {
- reject(e);
- }
- };
- var rejected = (value) => {
- try {
- step(generator.throw(value));
- } catch (e) {
- reject(e);
- }
- };
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
- step((generator = generator.apply(__this, __arguments)).next());
- });
-};
-
-// src/ct.release/sounds.ts
-var sounds_exports = {};
-__export(sounds_exports, {
- default: () => sounds_default,
- exportedSounds: () => exportedSounds,
- pannedSounds: () => pannedSounds,
- pixiSoundInstances: () => pixiSoundInstances,
- pixiSoundPrefix: () => pixiSoundPrefix,
- playRandomVariant: () => playRandomVariant,
- playVariant: () => playVariant,
- playWithoutEffects: () => playWithoutEffects,
- soundMap: () => soundMap,
- soundsLib: () => soundsLib
-});
-module.exports = __toCommonJS(sounds_exports);
-var PannerFilter = class extends PIXI.sound.filters.Filter {
- constructor(refDistance, rolloffFactor) {
- const { audioContext } = PIXI.sound.context;
- const panner = audioContext.createPanner();
- panner.panningModel = "equalpower";
- panner.distanceModel = "inverse";
- panner.refDistance = refDistance;
- panner.rolloffFactor = rolloffFactor;
- const destination = panner;
- super(destination);
- this._panner = panner;
- }
- reposition(tracked) {
- if (tracked.kill) {
- return;
- }
- this._panner.positionX.value = tracked.x / camera.referenceLength;
- this._panner.positionY.value = tracked.y / camera.referenceLength;
- }
- destroy() {
- super.destroy();
- this._panner = null;
- }
-};
-var pannedSounds = /* @__PURE__ */ new Map();
-var _a;
-var exportedSounds = (_a = [
- /*!@sounds@*/
-][0]) != null ? _a : [];
-var soundMap = {};
-for (const exportedSound of exportedSounds) {
- soundMap[exportedSound.name] = exportedSound;
-}
-var pixiSoundInstances = {};
-var fxNames = Object.keys(PIXI.sound.filters).filter((name) => name !== "Filter" && name !== "StreamFilter");
-var fxNamesToClasses = {};
-for (const fxName of fxNames) {
- fxNamesToClasses[fxName] = PIXI.sound.filters[fxName];
-}
-var pixiSoundPrefix = "pixiSound-";
-var randomRange = (min, max) => Math.random() * (max - min) + min;
-var withSound = (name, fn) => {
- const pixiFind = PIXI.sound.exists(name) && PIXI.sound.find(name);
- if (pixiFind) {
- return fn(pixiFind, name);
- }
- if (name in pixiSoundInstances) {
- return fn(pixiSoundInstances[name], name);
- }
- if (name in soundMap) {
- let lastVal;
- for (const variant of soundMap[name].variants) {
- const assetName = `${pixiSoundPrefix}${variant.uid}`;
- lastVal = fn(pixiSoundInstances[assetName], assetName);
- }
- return lastVal;
- }
- throw new Error(`[sounds] Sound "${name}" was not found. Is it a typo?`);
-};
-var playVariant = (sound, variant, options) => {
- var _a2, _b, _c, _d, _e;
- const pixiSoundInst = PIXI.sound.find(`${pixiSoundPrefix}${variant.uid}`).play(options);
- if ((_a2 = sound.volume) == null ? void 0 : _a2.enabled) {
- pixiSoundInst.volume = randomRange(sound.volume.min, sound.volume.max) * ((options == null ? void 0 : options.volume) || 1);
- } else if ((options == null ? void 0 : options.volume) !== void 0) {
- pixiSoundInst.volume = options.volume;
- }
- if ((_b = sound.pitch) == null ? void 0 : _b.enabled) {
- pixiSoundInst.speed = randomRange(sound.pitch.min, sound.pitch.max) * ((options == null ? void 0 : options.speed) || 1);
- } else if ((options == null ? void 0 : options.speed) !== void 0) {
- pixiSoundInst.speed = options.speed;
- }
- if ((_c = sound.distortion) == null ? void 0 : _c.enabled) {
- soundsLib.addDistortion(
- pixiSoundInst,
- randomRange(sound.distortion.min, sound.distortion.max)
- );
- }
- if ((_d = sound.reverb) == null ? void 0 : _d.enabled) {
- soundsLib.addReverb(
- pixiSoundInst,
- randomRange(sound.reverb.secondsMin, sound.reverb.secondsMax),
- randomRange(sound.reverb.decayMin, sound.reverb.decayMax),
- sound.reverb.reverse
- );
- }
- if ((_e = sound.eq) == null ? void 0 : _e.enabled) {
- soundsLib.addEqualizer(
- pixiSoundInst,
- ...sound.eq.bands.map((band) => randomRange(band.min, band.max))
- // 🍝
- );
- }
- return pixiSoundInst;
-};
-var playWithoutEffects = (sound, variant, options) => {
- const pixiSoundInst = PIXI.sound.find(`${pixiSoundPrefix}${variant.uid}`).play(options);
- return pixiSoundInst;
-};
-var playRandomVariant = (sound, options) => {
- const variant = sound.variants[Math.floor(Math.random() * sound.variants.length)];
- return playVariant(sound, variant, options);
-};
-var soundsLib = {
- /**
- * Preloads a sound. This is usually applied to music files before playing
- * as they are not preloaded by default.
- *
- * @param {string} name The name of a sound
- * @returns {Promise} A promise that resolves into the name of the loaded sound asset.
- */
- load(name) {
- return __async(this, null, function* () {
- const promises = [];
- withSound(name, (soundRes, resName) => {
- const s = PIXI.sound.play(resName, {
- muted: true
- });
- if (s instanceof Promise) {
- promises.push(s);
- s.then((i) => {
- i.stop();
- });
- } else {
- s.stop();
- }
- });
- yield Promise.all(promises);
- return name;
- });
- },
- /**
- * Plays a sound.
- *
- * @param {string} name Sound's name
- * @param {PlayOptions} [options] Options used for sound playback.
- * @param {Function} options.complete When completed.
- * @param {number} options.end End time in seconds.
- * @param {filters.Filter[]} options.filters Filters that apply to play.
- * @param {Function} options.loaded If not already preloaded, callback when finishes load.
- * @param {boolean} options.loop Override default loop, default to the Sound's loop setting.
- * @param {boolean} options.muted If sound instance is muted by default.
- * @param {boolean} options.singleInstance Setting true will stop any playing instances.
- * @param {number} options.speed Override default speed, default to the Sound's speed setting.
- * @param {number} options.start Start time offset in seconds.
- * @param {number} options.volume Override default volume.
- * @returns Either a sound instance, or a promise that resolves into a sound instance.
- */
- play(name, options) {
- if (name in soundMap) {
- const exported = soundMap[name];
- return playRandomVariant(exported, options);
- }
- if (name in pixiSoundInstances) {
- return pixiSoundInstances[name].play(options);
- }
- throw new Error(`[sounds.play] Sound "${name}" was not found. Is it a typo?`);
- },
- playAt(name, position, options) {
- const sound = soundsLib.play(name, options);
- const { panning } = soundMap[name];
- if (sound instanceof Promise) {
- sound.then((instance) => {
- soundsLib.addPannerFilter(
- instance,
- position,
- panning.refDistance,
- panning.rolloffFactor
- );
- });
- } else {
- soundsLib.addPannerFilter(
- sound,
- position,
- panning.refDistance,
- panning.rolloffFactor
- );
- }
- return sound;
- },
- /**
- * Stops a sound if a name is specified, otherwise stops all sound.
- *
- * @param {string|IMediaInstance} [name] Sound's name, or the sound instance.
- *
- * @returns {void}
- */
- stop(name) {
- if (name) {
- if (typeof name === "string") {
- withSound(name, (sound) => sound.stop());
- } else {
- name.stop();
- }
- } else {
- PIXI.sound.stopAll();
- }
- },
- /**
- * Pauses a sound if a name is specified, otherwise pauses all sound.
- *
- * @param {string} [name] Sound's name
- *
- * @returns {void}
- */
- pause(name) {
- if (name) {
- withSound(name, (sound) => sound.pause());
- } else {
- PIXI.sound.pauseAll();
- }
- },
- /**
- * Resumes a sound if a name is specified, otherwise resumes all sound.
- *
- * @param {string} [name] Sound's name
- *
- * @returns {void}
- */
- resume(name) {
- if (name) {
- withSound(name, (sound) => sound.resume());
- } else {
- PIXI.sound.resumeAll();
- }
- },
- /**
- * Returns whether a sound with the specified name was added to the game.
- * This doesn't tell whether it is fully loaded or not, it only checks
- * for existance of sound's metadata in your game.
- *
- * @param {string} name Sound's name
- *
- * @returns {boolean}
- */
- exists(name) {
- return name in soundMap || name in pixiSoundInstances;
- },
- /**
- * Returns whether a sound is currently playing if a name is specified,
- * otherwise if any sound is currently playing.
- *
- * @param {string} [name] Sound's name
- *
- * @returns {boolean} `true` if the sound is playing, `false` otherwise.
- */
- playing(name) {
- if (!name) {
- return PIXI.sound.isPlaying();
- }
- if (name in pixiSoundInstances) {
- return pixiSoundInstances[name].isPlaying;
- } else if (name in soundMap) {
- for (const variant of soundMap[name].variants) {
- if (pixiSoundInstances[`${pixiSoundPrefix}${variant.uid}`].isPlaying) {
- return true;
- }
- }
- } else {
- throw new Error(`[sounds] Sound "${name}" was not found. Is it a typo?`);
- }
- return false;
- },
- /**
- * Get or set the volume for a sound.
- *
- * @param {string|IMediaInstance} name Sound's name or instance
- * @param {number} [volume] The new volume where 1 is 100%.
- * If empty, will return the existing volume.
- *
- * @returns {number} The current volume of the sound.
- */
- volume(name, volume) {
- if (volume !== void 0) {
- if (typeof name === "string") {
- withSound(name, (sound) => {
- sound.volume = volume;
- });
- } else {
- name.volume = volume;
- }
- }
- if (typeof name === "string") {
- return withSound(name, (sound) => sound.volume);
- }
- return name.volume;
- },
- /**
- * Set the global volume for all sounds.
- * @param {number} value The new volume where 1 is 100%.
- *
- */
- globalVolume(value) {
- PIXI.sound.volumeAll = value;
- },
- /**
- * Fades a sound to a given volume. Can affect either a specific instance or the whole group.
- *
- * @param [name] Sound's name or instance to affect. If null, all sounds are faded.
- * @param [newVolume] The new volume where 1 is 100%. Default is 0.
- * @param [duration] The duration of transition, in milliseconds. Default is 1000.
- */
- fade(name, newVolume = 0, duration = 1e3) {
- const start = {
- time: performance.now(),
- value: null
- };
- if (name) {
- start.value = soundsLib.volume(name);
- } else {
- start.value = PIXI.sound.context.volume;
- }
- const updateVolume = (currentTime) => {
- const elapsed = currentTime - start.time;
- const progress = Math.min(elapsed / duration, 1);
- const value = start.value + (newVolume - start.value) * progress;
- if (name) {
- soundsLib.volume(name, value);
- } else {
- soundsLib.globalVolume(value);
- }
- if (progress < 1) {
- requestAnimationFrame(updateVolume);
- }
- };
- requestAnimationFrame(updateVolume);
- },
- /**
- * Adds a filter to the specified sound and remembers its constructor name.
- * This method is not intended to be called directly.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- */
- addFilter(sound, filter, filterName) {
- const fx = filter;
- fx.preserved = filterName;
- if (sound === false) {
- PIXI.sound.filtersAll = [...PIXI.sound.filtersAll || [], fx];
- } else if (typeof sound === "string") {
- withSound(sound, (soundInst) => {
- soundInst.filters = [...soundInst.filters || [], fx];
- });
- } else if (sound) {
- sound.filters = [...sound.filters || [], fx];
- } else {
- throw new Error(`[sounds.addFilter] Invalid sound: ${sound}`);
- }
- },
- /**
- * Adds a distortion filter.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- * @param {number} amount The amount of distortion to set from 0 to 1. Default is 0.
- */
- addDistortion(sound, amount) {
- const fx = new PIXI.sound.filters.DistortionFilter(amount);
- soundsLib.addFilter(sound, fx, "DistortionFilter");
- return fx;
- },
- /**
- * Adds an equalizer filter.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- * @param {number} f32 Default gain for 32 Hz. Default is 0.
- * @param {number} f64 Default gain for 64 Hz. Default is 0.
- * @param {number} f125 Default gain for 125 Hz. Default is 0.
- * @param {number} f250 Default gain for 250 Hz. Default is 0.
- * @param {number} f500 Default gain for 500 Hz. Default is 0.
- * @param {number} f1k Default gain for 1000 Hz. Default is 0.
- * @param {number} f2k Default gain for 2000 Hz. Default is 0.
- * @param {number} f4k Default gain for 4000 Hz. Default is 0.
- * @param {number} f8k Default gain for 8000 Hz. Default is 0.
- * @param {number} f16k Default gain for 16000 Hz. Default is 0.
- */
- // eslint-disable-next-line max-params
- addEqualizer(sound, f32, f64, f125, f250, f500, f1k, f2k, f4k, f8k, f16k) {
- const fx = new PIXI.sound.filters.EqualizerFilter(f32, f64, f125, f250, f500, f1k, f2k, f4k, f8k, f16k);
- soundsLib.addFilter(sound, fx, "EqualizerFilter");
- return fx;
- },
- /**
- * Combine all channels into mono channel.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- */
- addMonoFilter(sound) {
- const fx = new PIXI.sound.filters.MonoFilter();
- soundsLib.addFilter(sound, fx, "MonoFilter");
- return fx;
- },
- /**
- * Adds a reverb filter.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- * @param {number} seconds Seconds for reverb. Default is 3.
- * @param {number} decay The decay length. Default is 2.
- * @param {boolean} reverse Reverse reverb. Default is false.
- */
- addReverb(sound, seconds, decay, reverse) {
- const fx = new PIXI.sound.filters.ReverbFilter(seconds, decay, reverse);
- soundsLib.addFilter(sound, fx, "ReverbFilter");
- return fx;
- },
- /**
- * Adds a filter for stereo panning.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- * @param {number} pan The amount of panning: -1 is left, 1 is right. Default is 0 (centered).
- */
- addStereoFilter(sound, pan) {
- const fx = new PIXI.sound.filters.StereoFilter(pan);
- soundsLib.addFilter(sound, fx, "StereoFilter");
- return fx;
- },
- /**
- * Adds a 3D sound filter.
- * This filter can only be applied to sound instances.
- *
- * @param sound The sound to apply effect to.
- * @param position Any object with x and y properties — for example, copies.
- */
- addPannerFilter(sound, position, refDistance, rolloffFactor) {
- const fx = new PannerFilter(refDistance, rolloffFactor);
- soundsLib.addFilter(sound, fx, "PannerFilter");
- pannedSounds.set(position, fx);
- sound.on("end", () => {
- pannedSounds.delete(position);
- });
- return fx;
- },
- /**
- * Adds a telephone-sound filter.
- *
- * @param sound If set to false, applies the filter globally.
- * If set to a string, applies the filter to the specified sound asset.
- * If set to a media instance or PIXI.Sound instance, applies the filter to it.
- */
- addTelephone(sound) {
- const fx = new PIXI.sound.filters.TelephoneFilter();
- soundsLib.addFilter(sound, fx, "TelephoneFilter");
- return fx;
- },
- /**
- * Remove a filter to the specified sound.
- *
- * @param {string} [name] The sound to affect. Can be a name of the sound asset
- * or the specific sound instance you get from running `sounds.play`.
- * If set to false, it affects all sounds.
- * @param {string} [filter] The name of the filter. If omitted, all the filters are removed.
- *
- * @returns {void}
- */
- removeFilter(name, filter) {
- const setFilters = (newFilters) => {
- if (typeof name === "string") {
- withSound(name, (soundInst) => {
- soundInst.filters = newFilters;
- });
- } else {
- name.filters = newFilters;
- }
- };
- if (!name && !filter) {
- PIXI.sound.filtersAll = [];
- return;
- }
- if (name && !filter) {
- setFilters([]);
- return;
- }
- let filters;
- if (!name) {
- filters = PIXI.sound.filtersAll;
- } else {
- filters = typeof name === "string" ? withSound(name, (soundInst) => soundInst.filters) : name.filters;
- }
- if (filter && !filter.includes("Filter")) {
- filter += "Filter";
- }
- const copy = [...filters];
- filters.forEach((f, i) => {
- if (f.preserved === filter) {
- copy.splice(i, 1);
- }
- });
- if (!name) {
- PIXI.sound.filtersAll = copy;
- } else {
- setFilters(copy);
- }
- },
- /**
- * Set the speed (playback rate) of a sound.
- *
- * @param {string|IMediaInstance} name Sound's name or instance
- * @param {number} [value] The new speed, where 1 is 100%.
- * If empty, will return the existing speed value.
- *
- * @returns {number} The current speed of the sound.
- */
- speed(name, value) {
- if (value) {
- if (typeof name === "string") {
- withSound(name, (sound) => {
- sound.speed = value;
- });
- } else {
- name.speed = value;
- }
- return value;
- }
- if (typeof name === "string") {
- if (name in soundMap) {
- return pixiSoundInstances[soundMap[name].variants[0].uid].speed;
- }
- if (name in pixiSoundInstances) {
- return pixiSoundInstances[name].speed;
- }
- throw new Error(`[sounds.speed] Invalid sound name: ${name}. Is it a typo?`);
- }
- return name.speed;
- },
- /**
- * Set the global speed (playback rate) for all sounds.
- * @param {number} value The new speed, where 1 is 100%.
- *
- */
- speedAll(value) {
- PIXI.sound.speedAll = value;
- },
- /**
- * Toggle muted property for all sounds.
- * @returns {boolean} `true` if all sounds are muted.
- */
- toggleMuteAll() {
- return PIXI.sound.toggleMuteAll();
- },
- /**
- * Toggle paused property for all sounds.
- * @returns {boolean} `true` if all sounds are paused.
- */
- togglePauseAll() {
- return PIXI.sound.togglePauseAll();
- }
-};
-var sounds_default = soundsLib;
-// Annotate the CommonJS export names for ESM import in node:
-0 && (module.exports = {
- exportedSounds,
- pannedSounds,
- pixiSoundInstances,
- pixiSoundPrefix,
- playRandomVariant,
- playVariant,
- playWithoutEffects,
- soundMap,
- soundsLib
-});
diff --git a/app/data/fonts/Caveat-Bold.ttf b/app/data/fonts/Caveat-Bold.ttf
new file mode 100644
index 000000000..64c12c7cd
Binary files /dev/null and b/app/data/fonts/Caveat-Bold.ttf differ
diff --git a/app/data/fonts/PermanentMarker-Regular.ttf b/app/data/fonts/PermanentMarker-Regular.ttf
new file mode 100644
index 000000000..6541e9d87
Binary files /dev/null and b/app/data/fonts/PermanentMarker-Regular.ttf differ
diff --git a/app/data/i18n/Brazilian Portuguese.json b/app/data/i18n/Brazilian Portuguese.json
index 88736d008..aecf28f2f 100644
--- a/app/data/i18n/Brazilian Portuguese.json
+++ b/app/data/i18n/Brazilian Portuguese.json
@@ -108,7 +108,7 @@
"salas",
"salas"
],
- "font": [
+ "typeface": [
"fonte",
"fontes",
"fontes"
@@ -982,7 +982,6 @@
"strokeColor": "Cor do traço:",
"strokeWeight": "Espessura da linha:",
"testText": "Um texto de teste 0123 +",
- "fontFamily": "Família da Fonte:",
"fontSize": "Tamanho da fonte:"
},
"textureView": {
diff --git a/app/data/i18n/Chinese Simplified.json b/app/data/i18n/Chinese Simplified.json
index db7d7c54a..21a7ea2c5 100644
--- a/app/data/i18n/Chinese Simplified.json
+++ b/app/data/i18n/Chinese Simplified.json
@@ -99,7 +99,7 @@
"房间",
"房间"
],
- "font": [
+ "typeface": [
"字体",
"字体",
"字体"
@@ -972,7 +972,6 @@
"strokeColor": "描边颜色:",
"strokeWeight": "线宽:",
"testText": "测试文本 0123 +",
- "fontFamily": "字体家族",
"fontSize": "字体大小:"
},
"textureView": {
diff --git a/app/data/i18n/Comments.json b/app/data/i18n/Comments.json
index aeb2a44a2..a85a821f8 100644
--- a/app/data/i18n/Comments.json
+++ b/app/data/i18n/Comments.json
@@ -99,7 +99,7 @@
"",
""
],
- "font": [
+ "typeface": [
"",
"",
""
@@ -161,7 +161,9 @@
"bottomRight": "",
"fill": "",
"Scale": ""
- }
+ },
+ "download": "",
+ "createStyleFromIt": ""
},
"colorPicker": {
"current": "",
@@ -237,7 +239,35 @@
"boosty": "Boosty is a service, similar to Patreon.",
"sponsoredBy": "",
"supportedBy": "",
- "nothingToShowFiller": ""
+ "nothingToShowFiller": "",
+ "welcomeHeaders": [
+ "Here and below you may replace any unknown in your language phrases with funny quotes you would instead prefer.\nTumblr sexyman is a term for any slender and mischievous cartoon character that Tumblr users massively like for some reason.",
+ "A reference to the Matrix film.",
+ "Just a greeting.",
+ "Just a greeting.",
+ "A reference to Freddy Fazbear from FNAF: Security breach.",
+ "A reference to the starting scene of The Elder Scrolls: Skyrim.",
+ "A StarWars reference.",
+ "A greetings gesture from StarTrek, aka \"vulkan\" gesture. You should probably leave this field as is.",
+ "A general fantasy-like greeting.",
+ "A cliche anime greeting.",
+ "idk what this one is",
+ "A reference to the edgy elf Kerillian from Warhammer: Vermintide games that calls all the mayflies lumberfoots.",
+ "A reference to Rimworld game and its announcements about enemy raids.",
+ "A reference to League of Legends and its announcer's line when the game starts.",
+ "A reference to Portal 2, especially the triple laser test chamber."
+ ],
+ "newUserHeader": "",
+ "ctDistributions": {
+ "released": "",
+ "nightly": "",
+ "dev": ""
+ },
+ "gamesFromCommunity": "",
+ "submitYourOwn": "",
+ "learningResources": "",
+ "authorBy": "\"$1\" gets replaced with the author's name.",
+ "telegram": ""
},
"modules": {
"author": "",
@@ -691,7 +721,11 @@
"HCBlack": "",
"RosePine": "",
"RosePineMoon": "",
- "RosePineDawn": ""
+ "RosePineDawn": "",
+ "GoldenEye": "",
+ "AlmaSakura": "",
+ "Synthwave": "",
+ "OneDarkPro": ""
},
"codeFontDefault": "",
"codeFontOldSchool": "",
@@ -708,7 +742,16 @@
"language": "",
"translateToYourLanguage": "",
"prideMode": "",
- "altTemplateLayout": ""
+ "altTemplateLayout": "",
+ "changeDebuggerLayout": "",
+ "debuggerLayout": "",
+ "debuggerLayouts": {
+ "split": "",
+ "multiwindow": "",
+ "automatic": ""
+ },
+ "autoapplyOnLaunch": "",
+ "scrollableCatnipLibrary": ""
},
"project": {
"save": "",
@@ -787,7 +830,8 @@
"unwrapFolder": "",
"confirmDeleteFolder": "",
"confirmUnwrapFolder": "",
- "exportBehavior": ""
+ "exportBehavior": "",
+ "exportTandem": ""
},
"soundRecorder": {
"recorderHeading": "",
@@ -972,8 +1016,9 @@
"strokeColor": "",
"strokeWeight": "",
"testText": "It is recommended that you include both a string in your language and in English, as it will help with picking fonts that have multilingual support.",
- "fontFamily": "",
- "fontSize": ""
+ "fontSize": "",
+ "fallbackFontFamily": "",
+ "notSupportedForBitmap": ""
},
"textureView": {
"center": "",
@@ -1041,7 +1086,10 @@
},
"customCharsetHint": "",
"fontWeight": "",
- "typefaceName": ""
+ "typefaceName": "",
+ "addFont": "",
+ "pixelPerfect": "",
+ "pixelPerfectTooltip": ""
},
"licensePanel": {
"ctjsLicense": "",
@@ -1102,7 +1150,8 @@
"Button": "",
"RepeatingTexture": "",
"SpritedCounter": "",
- "TextBox": ""
+ "TextBox": "",
+ "BitmapText": ""
},
"nineSliceTop": "",
"nineSliceRight": "",
@@ -1114,7 +1163,9 @@
"scrollSpeedX": "",
"scrollSpeedY": "",
"isUi": "To use u.time or u.timeUi",
- "defaultCount": "A label for a field that sets how many sprites are shown when no value has been set through code."
+ "defaultCount": "A label for a field that sets how many sprites are shown when no value has been set through code.",
+ "useBitmapText": "",
+ "errorBitmapNotConfigured": ""
},
"assetInput": {
"changeAsset": "",
@@ -1178,7 +1229,9 @@
"OnAppFocus": "",
"OnAppBlur": "",
"OnTextChange": "",
- "OnTextInput": ""
+ "OnTextInput": "",
+ "OnBehaviorAdded": "",
+ "OnBehaviorRemoved": ""
},
"coreParameterizedNames": {
"OnActionPress": "",
@@ -1218,12 +1271,16 @@
"OnAppFocus": "",
"OnAppBlur": "",
"OnTextChange": "",
- "OnTextInput": ""
+ "OnTextInput": "",
+ "OnBehaviorAdded": "",
+ "OnBehaviorRemoved": ""
},
"jumpToProblem": "",
"staticEventWarning": "",
"restrictedEventWarning": "",
- "baseClassWarning": ""
+ "baseClassWarning": "",
+ "typedefs": "",
+ "typedefsHint": ""
},
"assetConfirm": {
"confirmHeading": "",
@@ -1252,7 +1309,10 @@
"emptySound": "",
"emptyEmitter": "",
"windowsFileLock": "",
- "noTemplateTexture": ""
+ "noTemplateTexture": "",
+ "blockArgumentMissing": "",
+ "blockDeclarationMissing": "",
+ "eventMissing": ""
},
"stacktrace": "",
"jumpToProblem": "",
@@ -1271,7 +1331,10 @@
"jsAndTs": "",
"jsTsDescription": "",
"pickJsTs": "",
- "acceptAndSpecifyDirectory": ""
+ "acceptAndSpecifyDirectory": "",
+ "catnip": "",
+ "catnipDescription": "",
+ "pickCatnip": ""
},
"newAssetPrompt": {
"heading": "",
@@ -1280,7 +1343,9 @@
"scriptView": {
"runAutomatically": "",
"language": "",
- "convertToJavaScript": ""
+ "convertToJavaScript": "",
+ "confirmSwitchToCatnip": "",
+ "confirmSwitchFromCatnip": ""
},
"soundView": {
"variants": "",
@@ -1300,5 +1365,426 @@
"falloff": "",
"refDistance": "",
"positionalAudioHint": ""
+ },
+ "catnip": {
+ "trashZoneHint": "",
+ "properties": "",
+ "propertiesHint": "",
+ "variables": "",
+ "variablesHint": "",
+ "createNewProperty": "",
+ "createNewVariable": "",
+ "newPropertyPrompt": "",
+ "newVariablePrompt": "",
+ "errorBlock": "",
+ "errorBlockDeleteHint": "",
+ "asyncHint": "",
+ "optionsAdvanced": "",
+ "addCustomOption": "",
+ "changeBlockTo": "$1 will be replaced with the name of a block in context menus",
+ "placeholders": {
+ "putBlocksHere": "",
+ "doNothing": ""
+ },
+ "coreLibs": {
+ "appearance": "",
+ "arrays": "",
+ "backgrounds": "",
+ "behaviors": "",
+ "camera": "",
+ "console": "",
+ "emitter tandems": "",
+ "logic": "",
+ "math": "",
+ "misc": "",
+ "movement": "",
+ "objects": "",
+ "rooms": "",
+ "settings": "",
+ "sounds": "",
+ "strings": "",
+ "styles": "",
+ "templates": "",
+ "utilities": "",
+ "actions": "",
+ "timers": ""
+ },
+ "blockNames": {
+ "kill copy": "",
+ "move copy": "",
+ "set speed": "",
+ "set gravity": "",
+ "set gravityDir": "",
+ "set hspeed": "",
+ "set vspeed": "",
+ "set direction": "",
+ "get speed": "",
+ "get gravity": "",
+ "get gravityDir": "",
+ "get hspeed": "",
+ "get vspeed": "",
+ "get direction": "",
+ "y of copy": "",
+ "x of copy": "",
+ "set property variable": "",
+ "increment": "",
+ "decrement": "",
+ "increase": "",
+ "decrease": "",
+ "this write": "",
+ "current room write": "",
+ "write property to object": "",
+ "this read": "",
+ "room read": "",
+ "object read": "",
+ "object delete": "",
+ "new array": "",
+ "new object": "",
+ "new empty object": "",
+ "convert to string": "",
+ "convert to number": "",
+ "convert to boolean": "",
+ "note": "",
+ "plainJs": "",
+ "color": "",
+ "variable": "",
+ "property": "",
+ "behavior property": "",
+ "if else branch": "",
+ "while loop cycle": "",
+ "repeat": "",
+ "for each": "",
+ "break loop": "",
+ "NOT logic operator": "",
+ "AND logic operator": "",
+ "OR logic operator": "",
+ "AND AND logic operator": "",
+ "OR OR logic operator": "",
+ "is": "",
+ "is not": "",
+ "set texture": "",
+ "set scale": "",
+ "set scale xy": "",
+ "set angle": "",
+ "set skew": "",
+ "skew x": "",
+ "skew y": "",
+ "set alpha": "",
+ "scale x": "",
+ "scale y": "",
+ "get angle": "",
+ "get alpha": "",
+ "set tint": "",
+ "get tint": "",
+ "play animation": "",
+ "stop animation": "",
+ "goto frame play": "",
+ "goto frame stop": "",
+ "goto frame": "",
+ "get animation speed": "",
+ "set animation speed": "",
+ "this": "As a JavaScript keyword. If translation is complicated, you can use \"I\" or \"me\" instead of \"this\".",
+ "concatenate strings": "",
+ "templates Templates copy into room": "",
+ "templates Templates copy": "",
+ "templates Templates each": "",
+ "templates Templates with copy": "",
+ "templates Templates with template": "",
+ "templates templates exists": "",
+ "rooms Rooms add bg": "",
+ "rooms Rooms clear": "",
+ "rooms Rooms remove": "",
+ "rooms Rooms switch": "",
+ "rooms Rooms restart": "",
+ "rooms Rooms append": "",
+ "rooms Rooms prepend": "",
+ "rooms Rooms merge": "",
+ "rooms rooms current": "",
+ "rooms rooms list": "",
+ "rooms rooms starting": "",
+ "behaviors Behaviors add": "",
+ "behaviors Behaviors remove": "",
+ "behaviors behaviors has": "",
+ "sounds Sounds play": "",
+ "sounds Sounds play at": "",
+ "sounds Sounds stop": "",
+ "sounds Sounds pause": "",
+ "sounds Sounds resume": "",
+ "sounds Sounds global volume": "",
+ "sounds Sounds fade": "",
+ "sounds Sounds add filter": "",
+ "sounds Sounds add distortion": "",
+ "sounds Sounds add equalizer": "",
+ "sounds Sounds add mono filter": "",
+ "sounds Sounds add reverb": "",
+ "sounds Sounds add stereo filter": "",
+ "sounds Sounds add panner filter": "",
+ "sounds Sounds add telephone": "",
+ "sounds Sounds remove filter": "",
+ "sounds Sounds speed all": "",
+ "sounds sounds load": "",
+ "sounds sounds exists": "",
+ "sounds sounds playing": "",
+ "sounds sounds toggle mute all": "",
+ "sounds sounds toggle pause all": "",
+ "styles styles get": "",
+ "backgrounds Backgrounds add": "",
+ "backgrounds backgrounds list": "",
+ "emitter tandems Emitters fire": "",
+ "emitter tandems Emitters append": "",
+ "emitter tandems Emitters follow": "",
+ "utilities U reshape nine patch": "",
+ "utilities u time": "",
+ "utilities u time ui": "",
+ "utilities u get environment": "",
+ "utilities u get os": "",
+ "utilities u ldx": "",
+ "utilities u ldy": "",
+ "utilities u pdn": "",
+ "utilities u pdc": "",
+ "utilities u deg to rad": "",
+ "utilities u rad to deg": "",
+ "utilities u rotate": "",
+ "utilities u rotate rad": "",
+ "utilities u delta dir": "",
+ "utilities u clamp": "",
+ "utilities u lerp": "",
+ "utilities u unlerp": "",
+ "utilities u map": "",
+ "utilities u get rect shape": "",
+ "utilities u prect": "",
+ "utilities u pcircle": "",
+ "utilities u ui to css coord": "",
+ "utilities u game to css coord": "",
+ "utilities u ui to css scalar": "",
+ "utilities u game to css scalar": "",
+ "utilities u game to ui coord": "",
+ "utilities u ui to game coord": "",
+ "utilities u numbered string": "",
+ "utilities u get string number": "",
+ "settings settings high density": "",
+ "settings settings target fps": "",
+ "settings settings view mode": "",
+ "settings settings fullscreen": "",
+ "settings settings pixelart": "",
+ "settings settings prevent default": "",
+ "set x": "",
+ "set y": "",
+ "get x": "Probably doesn't need translation at all.",
+ "get y": "Probably doesn't need translation at all.",
+ "follow this": "",
+ "follow": "",
+ "set zoom": "",
+ "get zoom": "",
+ "set targetX": "",
+ "set targetY": "",
+ "set shiftX": "",
+ "set shiftY": "",
+ "set drift": "",
+ "set rotation": "",
+ "set followX": "",
+ "set followY": "",
+ "set borderX": "",
+ "set borderY": "",
+ "set shake": "",
+ "set shakeDecay": "",
+ "set shakeFrequency": "",
+ "set shakeX": "",
+ "set shakeY": "",
+ "set shakeMax": "",
+ "set minX": "",
+ "set maxX": "",
+ "set minY": "",
+ "set maxY": "",
+ "get targetX": "",
+ "get targetY": "",
+ "get computedX": "",
+ "get computedY": "",
+ "get shiftX": "",
+ "get shiftY": "",
+ "get drift": "",
+ "get left": "",
+ "get right": "",
+ "get top": "",
+ "get bottom": "",
+ "get rotation": "",
+ "get followX": "",
+ "get followY": "",
+ "get borderX": "",
+ "get borderY": "",
+ "get shake": "",
+ "get shakeDecay": "",
+ "get shakeFrequency": "",
+ "get shakeX": "",
+ "get shakeY": "",
+ "get shakeMax": "",
+ "get minX": "",
+ "get maxX": "",
+ "get minY": "",
+ "get maxY": "",
+ "console log": "",
+ "console warn": "",
+ "console error": "",
+ "set depth": "",
+ "get depth": "",
+ "script options": "",
+ "run script": "",
+ "get width": "",
+ "get height": "",
+ "set width": "",
+ "set height": "",
+ "const string": "",
+ "if branch": "",
+ "concatenate strings triple": "",
+ "emitter tandems Emitters stop": "",
+ "emitter tandems Emitters pause": "",
+ "emitter tandems Emitters resume": "",
+ "emitter tandems Emitters clear": "",
+ "utilities U wait": "",
+ "utilities U wait ui": "",
+ "hasSubstring": "",
+ "substringPosition": "",
+ "stringLength": "",
+ "replace substring": "",
+ "replace all substrings": "",
+ "trim whitespace": "",
+ "regex passes": "",
+ "replace by regex": "",
+ "replace all by regex": "",
+ "split by a substring": "",
+ "split": "",
+ "slice a string": "",
+ "to uppercase": "",
+ "to lowercase": "",
+ "array unshift": "",
+ "array push": "",
+ "add element at position": "",
+ "array pop": "",
+ "array shift": "",
+ "remove element from array": "",
+ "remove at position": "",
+ "filter array": "",
+ "map array": "",
+ "set text": "",
+ "set disabled": "",
+ "get text": "",
+ "get disabled": "",
+ "define function": "",
+ "return": "",
+ "execute function": "",
+ "get function option": "",
+ "set timer 1": "",
+ "set timer 2": "",
+ "set timer 3": "",
+ "set timer 4": "",
+ "set timer 5": "",
+ "set timer 6": "",
+ "get timer 1": "",
+ "get timer 2": "",
+ "get timer 3": "",
+ "get timer 4": "",
+ "get timer 5": "",
+ "get timer 6": "",
+ "set game speed": "",
+ "get game speed": "",
+ "deserialize object": "",
+ "serialize object": "",
+ "save to storage": "",
+ "delete from storage": "",
+ "load from storage": "",
+ "is key in storage": "",
+ "owning room": ""
+ },
+ "blockDisplayNames": {
+ "write": "",
+ "if else branch": "",
+ "while loop cycle": "",
+ "repeat": "",
+ "for each": "",
+ "NOT logic operator": "",
+ "set": "",
+ "x of": "As in a sentence \"get X of a copy\"",
+ "y of": "As in sentence \"get Y of a copy\"",
+ "options": "",
+ "lengthOf": "",
+ "split": "",
+ "join": "",
+ "add element": "",
+ "remove element": "",
+ "set timer 1 to": "",
+ "set timer 2 to": "",
+ "set timer 3 to": "",
+ "set timer 4 to": "",
+ "set timer 5 to": "",
+ "set timer 6 to": "",
+ "timer": "",
+ "read": "",
+ "set game speed to": "",
+ "game speed": ""
+ },
+ "blockLabels": {
+ "value": "",
+ "property": "",
+ "changeBy": "",
+ "is not": "",
+ "is": "",
+ "else": "",
+ "timesCount": "",
+ "toWrite": "A preposition used when referring to something we write to",
+ "fromRead": "A preposition used when referring to something we read from",
+ "atPosition": "A preposition used when referring to something placed at position",
+ "forDuring": "A preposition used when referring to something happening for a specific duration",
+ "toDestination": "A preposition used when referring to a place, to a destination",
+ "store index in": "",
+ "store in": "",
+ "of array": "",
+ "of current room": "",
+ "to current room": "",
+ "AND": "",
+ "OR": "",
+ "then": "",
+ "catch": "",
+ "and play animation": "",
+ "and stop animation": "",
+ "scale": "",
+ "position": "",
+ "inInside": "",
+ "contains": "",
+ "replace": "",
+ "replaceAll": "",
+ "replaceByRegex": "",
+ "replaceAllByRegex": "",
+ "fromDestination": "",
+ "fromSource": "",
+ "store result in": "",
+ "and": "",
+ "at position": "",
+ "with results in": "",
+ "store new array in": "",
+ "and elements": "",
+ "secondsUnits": ""
+ },
+ "blockOptions": {
+ "soundVolume": "",
+ "loop": "As in sound looping",
+ "isRoomUi": "",
+ "speed": "",
+ "start at": "",
+ "soundSingleInstance": ""
+ },
+ "goToActions": "",
+ "copyDocHtml": "",
+ "copySelection": "",
+ "duplicateBlock": "",
+ "requiredField": "",
+ "unnamedGroup": "",
+ "blockDocumentation": {
+ "serialize object": "",
+ "constant string": ""
+ }
+ },
+ "regionalLinks": {
+ "discord": "",
+ "telegram": ""
}
-}
+}
\ No newline at end of file
diff --git a/app/data/i18n/Debug.json b/app/data/i18n/Debug.json
index c29c4ede8..b925ac60a 100644
--- a/app/data/i18n/Debug.json
+++ b/app/data/i18n/Debug.json
@@ -99,10 +99,10 @@
"common.assetTypes.room.1",
"common.assetTypes.room.2"
],
- "font": [
- "common.assetTypes.font.0",
- "common.assetTypes.font.1",
- "common.assetTypes.font.2"
+ "typeface": [
+ "common.assetTypes.typeface.0",
+ "common.assetTypes.typeface.1",
+ "common.assetTypes.typeface.2"
],
"style": [
"common.assetTypes.style.0",
@@ -161,7 +161,9 @@
"bottomRight": "common.alignModes.bottomRight",
"fill": "common.alignModes.fill",
"Scale": "common.alignModes.Scale"
- }
+ },
+ "download": "common.download",
+ "createStyleFromIt": "common.createStyleFromIt"
},
"colorPicker": {
"current": "colorPicker.current",
@@ -237,7 +239,35 @@
"boosty": "intro.boosty",
"sponsoredBy": "intro.sponsoredBy",
"supportedBy": "intro.supportedBy",
- "nothingToShowFiller": "intro.nothingToShowFiller"
+ "nothingToShowFiller": "intro.nothingToShowFiller",
+ "welcomeHeaders": [
+ "intro.welcomeHeaders.0",
+ "intro.welcomeHeaders.1",
+ "intro.welcomeHeaders.2",
+ "intro.welcomeHeaders.3",
+ "intro.welcomeHeaders.4",
+ "intro.welcomeHeaders.5",
+ "intro.welcomeHeaders.6",
+ "intro.welcomeHeaders.7",
+ "intro.welcomeHeaders.8",
+ "intro.welcomeHeaders.9",
+ "intro.welcomeHeaders.10",
+ "intro.welcomeHeaders.11",
+ "intro.welcomeHeaders.12",
+ "intro.welcomeHeaders.13",
+ "intro.welcomeHeaders.14"
+ ],
+ "newUserHeader": "intro.newUserHeader",
+ "ctDistributions": {
+ "released": "intro.ctDistributions.released",
+ "nightly": "intro.ctDistributions.nightly",
+ "dev": "intro.ctDistributions.dev"
+ },
+ "gamesFromCommunity": "intro.gamesFromCommunity",
+ "submitYourOwn": "intro.submitYourOwn",
+ "learningResources": "intro.learningResources",
+ "authorBy": "intro.authorBy",
+ "telegram": "intro.telegram"
},
"modules": {
"author": "modules.author",
@@ -691,7 +721,11 @@
"HCBlack": "mainMenu.settings.themes.HCBlack",
"RosePine": "mainMenu.settings.themes.RosePine",
"RosePineMoon": "mainMenu.settings.themes.RosePineMoon",
- "RosePineDawn": "mainMenu.settings.themes.RosePineDawn"
+ "RosePineDawn": "mainMenu.settings.themes.RosePineDawn",
+ "GoldenEye": "mainMenu.settings.themes.GoldenEye",
+ "AlmaSakura": "mainMenu.settings.themes.AlmaSakura",
+ "Synthwave": "mainMenu.settings.themes.Synthwave",
+ "OneDarkPro": "mainMenu.settings.themes.OneDarkPro"
},
"codeFontDefault": "mainMenu.settings.codeFontDefault",
"codeFontOldSchool": "mainMenu.settings.codeFontOldSchool",
@@ -708,7 +742,16 @@
"language": "mainMenu.settings.language",
"translateToYourLanguage": "mainMenu.settings.translateToYourLanguage",
"prideMode": "mainMenu.settings.prideMode",
- "altTemplateLayout": "mainMenu.settings.altTemplateLayout"
+ "altTemplateLayout": "mainMenu.settings.altTemplateLayout",
+ "changeDebuggerLayout": "mainMenu.settings.changeDebuggerLayout",
+ "debuggerLayout": "mainMenu.settings.debuggerLayout",
+ "debuggerLayouts": {
+ "split": "mainMenu.settings.debuggerLayouts.split",
+ "multiwindow": "mainMenu.settings.debuggerLayouts.multiwindow",
+ "automatic": "mainMenu.settings.debuggerLayouts.automatic"
+ },
+ "autoapplyOnLaunch": "mainMenu.settings.autoapplyOnLaunch",
+ "scrollableCatnipLibrary": "mainMenu.settings.scrollableCatnipLibrary"
},
"project": {
"save": "mainMenu.project.save",
@@ -787,7 +830,8 @@
"unwrapFolder": "assetViewer.unwrapFolder",
"confirmDeleteFolder": "assetViewer.confirmDeleteFolder",
"confirmUnwrapFolder": "assetViewer.confirmUnwrapFolder",
- "exportBehavior": "assetViewer.exportBehavior"
+ "exportBehavior": "assetViewer.exportBehavior",
+ "exportTandem": "assetViewer.exportTandem"
},
"soundRecorder": {
"recorderHeading": "soundRecorder.recorderHeading",
@@ -972,8 +1016,9 @@
"strokeColor": "styleView.strokeColor",
"strokeWeight": "styleView.strokeWeight",
"testText": "styleView.testText",
- "fontFamily": "styleView.fontFamily",
- "fontSize": "styleView.fontSize"
+ "fontSize": "styleView.fontSize",
+ "fallbackFontFamily": "styleView.fallbackFontFamily",
+ "notSupportedForBitmap": "styleView.notSupportedForBitmap"
},
"textureView": {
"center": "textureView.center",
@@ -1041,7 +1086,10 @@
},
"customCharsetHint": "fontView.customCharsetHint",
"fontWeight": "fontView.fontWeight",
- "typefaceName": "fontView.typefaceName"
+ "typefaceName": "fontView.typefaceName",
+ "addFont": "fontView.addFont",
+ "pixelPerfect": "fontView.pixelPerfect",
+ "pixelPerfectTooltip": "fontView.pixelPerfectTooltip"
},
"licensePanel": {
"ctjsLicense": "licensePanel.ctjsLicense",
@@ -1102,7 +1150,8 @@
"Button": "templateView.baseClass.Button",
"RepeatingTexture": "templateView.baseClass.RepeatingTexture",
"SpritedCounter": "templateView.baseClass.SpritedCounter",
- "TextBox": "templateView.baseClass.TextBox"
+ "TextBox": "templateView.baseClass.TextBox",
+ "BitmapText": "templateView.baseClass.BitmapText"
},
"nineSliceTop": "templateView.nineSliceTop",
"nineSliceRight": "templateView.nineSliceRight",
@@ -1114,7 +1163,9 @@
"scrollSpeedX": "templateView.scrollSpeedX",
"scrollSpeedY": "templateView.scrollSpeedY",
"isUi": "templateView.isUi",
- "defaultCount": "templateView.defaultCount"
+ "defaultCount": "templateView.defaultCount",
+ "useBitmapText": "templateView.useBitmapText",
+ "errorBitmapNotConfigured": "templateView.errorBitmapNotConfigured"
},
"assetInput": {
"changeAsset": "assetInput.changeAsset",
@@ -1178,7 +1229,9 @@
"OnAppFocus": "scriptables.coreEvents.OnAppFocus",
"OnAppBlur": "scriptables.coreEvents.OnAppBlur",
"OnTextChange": "scriptables.coreEvents.OnTextChange",
- "OnTextInput": "scriptables.coreEvents.OnTextInput"
+ "OnTextInput": "scriptables.coreEvents.OnTextInput",
+ "OnBehaviorAdded": "scriptables.coreEvents.OnBehaviorAdded",
+ "OnBehaviorRemoved": "scriptables.coreEvents.OnBehaviorRemoved"
},
"coreParameterizedNames": {
"OnActionPress": "scriptables.coreParameterizedNames.OnActionPress",
@@ -1218,12 +1271,16 @@
"OnAppFocus": "scriptables.coreEventsDescriptions.OnAppFocus",
"OnAppBlur": "scriptables.coreEventsDescriptions.OnAppBlur",
"OnTextChange": "scriptables.coreEventsDescriptions.OnTextChange",
- "OnTextInput": "scriptables.coreEventsDescriptions.OnTextInput"
+ "OnTextInput": "scriptables.coreEventsDescriptions.OnTextInput",
+ "OnBehaviorAdded": "scriptables.coreEventsDescriptions.OnBehaviorAdded",
+ "OnBehaviorRemoved": "scriptables.coreEventsDescriptions.OnBehaviorRemoved"
},
"jumpToProblem": "scriptables.jumpToProblem",
"staticEventWarning": "scriptables.staticEventWarning",
"restrictedEventWarning": "scriptables.restrictedEventWarning",
- "baseClassWarning": "scriptables.baseClassWarning"
+ "baseClassWarning": "scriptables.baseClassWarning",
+ "typedefs": "scriptables.typedefs",
+ "typedefsHint": "scriptables.typedefsHint"
},
"assetConfirm": {
"confirmHeading": "assetConfirm.confirmHeading",
@@ -1252,7 +1309,10 @@
"emptySound": "exporterError.clueSolutions.emptySound",
"emptyEmitter": "exporterError.clueSolutions.emptyEmitter",
"windowsFileLock": "exporterError.clueSolutions.windowsFileLock",
- "noTemplateTexture": "exporterError.clueSolutions.noTemplateTexture"
+ "noTemplateTexture": "exporterError.clueSolutions.noTemplateTexture",
+ "blockArgumentMissing": "exporterError.clueSolutions.blockArgumentMissing",
+ "blockDeclarationMissing": "exporterError.clueSolutions.blockDeclarationMissing",
+ "eventMissing": "exporterError.clueSolutions.eventMissing"
},
"stacktrace": "exporterError.stacktrace",
"jumpToProblem": "exporterError.jumpToProblem",
@@ -1271,7 +1331,10 @@
"jsAndTs": "languageSelector.jsAndTs",
"jsTsDescription": "languageSelector.jsTsDescription",
"pickJsTs": "languageSelector.pickJsTs",
- "acceptAndSpecifyDirectory": "languageSelector.acceptAndSpecifyDirectory"
+ "acceptAndSpecifyDirectory": "languageSelector.acceptAndSpecifyDirectory",
+ "catnip": "languageSelector.catnip",
+ "catnipDescription": "languageSelector.catnipDescription",
+ "pickCatnip": "languageSelector.pickCatnip"
},
"newAssetPrompt": {
"heading": "newAssetPrompt.heading",
@@ -1280,7 +1343,9 @@
"scriptView": {
"runAutomatically": "scriptView.runAutomatically",
"language": "scriptView.language",
- "convertToJavaScript": "scriptView.convertToJavaScript"
+ "convertToJavaScript": "scriptView.convertToJavaScript",
+ "confirmSwitchToCatnip": "scriptView.confirmSwitchToCatnip",
+ "confirmSwitchFromCatnip": "scriptView.confirmSwitchFromCatnip"
},
"soundView": {
"variants": "soundView.variants",
@@ -1300,5 +1365,426 @@
"falloff": "soundView.falloff",
"refDistance": "soundView.refDistance",
"positionalAudioHint": "soundView.positionalAudioHint"
+ },
+ "catnip": {
+ "trashZoneHint": "catnip.trashZoneHint",
+ "properties": "catnip.properties",
+ "propertiesHint": "catnip.propertiesHint",
+ "variables": "catnip.variables",
+ "variablesHint": "catnip.variablesHint",
+ "createNewProperty": "catnip.createNewProperty",
+ "createNewVariable": "catnip.createNewVariable",
+ "newPropertyPrompt": "catnip.newPropertyPrompt",
+ "newVariablePrompt": "catnip.newVariablePrompt",
+ "errorBlock": "catnip.errorBlock",
+ "errorBlockDeleteHint": "catnip.errorBlockDeleteHint",
+ "asyncHint": "catnip.asyncHint",
+ "optionsAdvanced": "catnip.optionsAdvanced",
+ "addCustomOption": "catnip.addCustomOption",
+ "changeBlockTo": "catnip.changeBlockTo",
+ "placeholders": {
+ "putBlocksHere": "catnip.placeholders.putBlocksHere",
+ "doNothing": "catnip.placeholders.doNothing"
+ },
+ "coreLibs": {
+ "appearance": "catnip.coreLibs.appearance",
+ "arrays": "catnip.coreLibs.arrays",
+ "backgrounds": "catnip.coreLibs.backgrounds",
+ "behaviors": "catnip.coreLibs.behaviors",
+ "camera": "catnip.coreLibs.camera",
+ "console": "catnip.coreLibs.console",
+ "emitter tandems": "catnip.coreLibs.emitter tandems",
+ "logic": "catnip.coreLibs.logic",
+ "math": "catnip.coreLibs.math",
+ "misc": "catnip.coreLibs.misc",
+ "movement": "catnip.coreLibs.movement",
+ "objects": "catnip.coreLibs.objects",
+ "rooms": "catnip.coreLibs.rooms",
+ "settings": "catnip.coreLibs.settings",
+ "sounds": "catnip.coreLibs.sounds",
+ "strings": "catnip.coreLibs.strings",
+ "styles": "catnip.coreLibs.styles",
+ "templates": "catnip.coreLibs.templates",
+ "utilities": "catnip.coreLibs.utilities",
+ "actions": "catnip.coreLibs.actions",
+ "timers": "catnip.coreLibs.timers"
+ },
+ "blockNames": {
+ "kill copy": "catnip.blockNames.kill copy",
+ "move copy": "catnip.blockNames.move copy",
+ "set speed": "catnip.blockNames.set speed",
+ "set gravity": "catnip.blockNames.set gravity",
+ "set gravityDir": "catnip.blockNames.set gravityDir",
+ "set hspeed": "catnip.blockNames.set hspeed",
+ "set vspeed": "catnip.blockNames.set vspeed",
+ "set direction": "catnip.blockNames.set direction",
+ "get speed": "catnip.blockNames.get speed",
+ "get gravity": "catnip.blockNames.get gravity",
+ "get gravityDir": "catnip.blockNames.get gravityDir",
+ "get hspeed": "catnip.blockNames.get hspeed",
+ "get vspeed": "catnip.blockNames.get vspeed",
+ "get direction": "catnip.blockNames.get direction",
+ "y of copy": "catnip.blockNames.y of copy",
+ "x of copy": "catnip.blockNames.x of copy",
+ "set property variable": "catnip.blockNames.set property variable",
+ "increment": "catnip.blockNames.increment",
+ "decrement": "catnip.blockNames.decrement",
+ "increase": "catnip.blockNames.increase",
+ "decrease": "catnip.blockNames.decrease",
+ "this write": "catnip.blockNames.this write",
+ "current room write": "catnip.blockNames.current room write",
+ "write property to object": "catnip.blockNames.write property to object",
+ "this read": "catnip.blockNames.this read",
+ "room read": "catnip.blockNames.room read",
+ "object read": "catnip.blockNames.object read",
+ "object delete": "catnip.blockNames.object delete",
+ "new array": "catnip.blockNames.new array",
+ "new object": "catnip.blockNames.new object",
+ "new empty object": "catnip.blockNames.new empty object",
+ "convert to string": "catnip.blockNames.convert to string",
+ "convert to number": "catnip.blockNames.convert to number",
+ "convert to boolean": "catnip.blockNames.convert to boolean",
+ "note": "catnip.blockNames.note",
+ "plainJs": "catnip.blockNames.plainJs",
+ "color": "catnip.blockNames.color",
+ "variable": "catnip.blockNames.variable",
+ "property": "catnip.blockNames.property",
+ "behavior property": "catnip.blockNames.behavior property",
+ "if else branch": "catnip.blockNames.if else branch",
+ "while loop cycle": "catnip.blockNames.while loop cycle",
+ "repeat": "catnip.blockNames.repeat",
+ "for each": "catnip.blockNames.for each",
+ "break loop": "catnip.blockNames.break loop",
+ "NOT logic operator": "catnip.blockNames.NOT logic operator",
+ "AND logic operator": "catnip.blockNames.AND logic operator",
+ "OR logic operator": "catnip.blockNames.OR logic operator",
+ "AND AND logic operator": "catnip.blockNames.AND AND logic operator",
+ "OR OR logic operator": "catnip.blockNames.OR OR logic operator",
+ "is": "catnip.blockNames.is",
+ "is not": "catnip.blockNames.is not",
+ "set texture": "catnip.blockNames.set texture",
+ "set scale": "catnip.blockNames.set scale",
+ "set scale xy": "catnip.blockNames.set scale xy",
+ "set angle": "catnip.blockNames.set angle",
+ "set skew": "catnip.blockNames.set skew",
+ "skew x": "catnip.blockNames.skew x",
+ "skew y": "catnip.blockNames.skew y",
+ "set alpha": "catnip.blockNames.set alpha",
+ "scale x": "catnip.blockNames.scale x",
+ "scale y": "catnip.blockNames.scale y",
+ "get angle": "catnip.blockNames.get angle",
+ "get alpha": "catnip.blockNames.get alpha",
+ "set tint": "catnip.blockNames.set tint",
+ "get tint": "catnip.blockNames.get tint",
+ "play animation": "catnip.blockNames.play animation",
+ "stop animation": "catnip.blockNames.stop animation",
+ "goto frame play": "catnip.blockNames.goto frame play",
+ "goto frame stop": "catnip.blockNames.goto frame stop",
+ "goto frame": "catnip.blockNames.goto frame",
+ "get animation speed": "catnip.blockNames.get animation speed",
+ "set animation speed": "catnip.blockNames.set animation speed",
+ "this": "catnip.blockNames.this",
+ "concatenate strings": "catnip.blockNames.concatenate strings",
+ "templates Templates copy into room": "catnip.blockNames.templates Templates copy into room",
+ "templates Templates copy": "catnip.blockNames.templates Templates copy",
+ "templates Templates each": "catnip.blockNames.templates Templates each",
+ "templates Templates with copy": "catnip.blockNames.templates Templates with copy",
+ "templates Templates with template": "catnip.blockNames.templates Templates with template",
+ "templates templates exists": "catnip.blockNames.templates templates exists",
+ "rooms Rooms add bg": "catnip.blockNames.rooms Rooms add bg",
+ "rooms Rooms clear": "catnip.blockNames.rooms Rooms clear",
+ "rooms Rooms remove": "catnip.blockNames.rooms Rooms remove",
+ "rooms Rooms switch": "catnip.blockNames.rooms Rooms switch",
+ "rooms Rooms restart": "catnip.blockNames.rooms Rooms restart",
+ "rooms Rooms append": "catnip.blockNames.rooms Rooms append",
+ "rooms Rooms prepend": "catnip.blockNames.rooms Rooms prepend",
+ "rooms Rooms merge": "catnip.blockNames.rooms Rooms merge",
+ "rooms rooms current": "catnip.blockNames.rooms rooms current",
+ "rooms rooms list": "catnip.blockNames.rooms rooms list",
+ "rooms rooms starting": "catnip.blockNames.rooms rooms starting",
+ "behaviors Behaviors add": "catnip.blockNames.behaviors Behaviors add",
+ "behaviors Behaviors remove": "catnip.blockNames.behaviors Behaviors remove",
+ "behaviors behaviors has": "catnip.blockNames.behaviors behaviors has",
+ "sounds Sounds play": "catnip.blockNames.sounds Sounds play",
+ "sounds Sounds play at": "catnip.blockNames.sounds Sounds play at",
+ "sounds Sounds stop": "catnip.blockNames.sounds Sounds stop",
+ "sounds Sounds pause": "catnip.blockNames.sounds Sounds pause",
+ "sounds Sounds resume": "catnip.blockNames.sounds Sounds resume",
+ "sounds Sounds global volume": "catnip.blockNames.sounds Sounds global volume",
+ "sounds Sounds fade": "catnip.blockNames.sounds Sounds fade",
+ "sounds Sounds add filter": "catnip.blockNames.sounds Sounds add filter",
+ "sounds Sounds add distortion": "catnip.blockNames.sounds Sounds add distortion",
+ "sounds Sounds add equalizer": "catnip.blockNames.sounds Sounds add equalizer",
+ "sounds Sounds add mono filter": "catnip.blockNames.sounds Sounds add mono filter",
+ "sounds Sounds add reverb": "catnip.blockNames.sounds Sounds add reverb",
+ "sounds Sounds add stereo filter": "catnip.blockNames.sounds Sounds add stereo filter",
+ "sounds Sounds add panner filter": "catnip.blockNames.sounds Sounds add panner filter",
+ "sounds Sounds add telephone": "catnip.blockNames.sounds Sounds add telephone",
+ "sounds Sounds remove filter": "catnip.blockNames.sounds Sounds remove filter",
+ "sounds Sounds speed all": "catnip.blockNames.sounds Sounds speed all",
+ "sounds sounds load": "catnip.blockNames.sounds sounds load",
+ "sounds sounds exists": "catnip.blockNames.sounds sounds exists",
+ "sounds sounds playing": "catnip.blockNames.sounds sounds playing",
+ "sounds sounds toggle mute all": "catnip.blockNames.sounds sounds toggle mute all",
+ "sounds sounds toggle pause all": "catnip.blockNames.sounds sounds toggle pause all",
+ "styles styles get": "catnip.blockNames.styles styles get",
+ "backgrounds Backgrounds add": "catnip.blockNames.backgrounds Backgrounds add",
+ "backgrounds backgrounds list": "catnip.blockNames.backgrounds backgrounds list",
+ "emitter tandems Emitters fire": "catnip.blockNames.emitter tandems Emitters fire",
+ "emitter tandems Emitters append": "catnip.blockNames.emitter tandems Emitters append",
+ "emitter tandems Emitters follow": "catnip.blockNames.emitter tandems Emitters follow",
+ "utilities U reshape nine patch": "catnip.blockNames.utilities U reshape nine patch",
+ "utilities u time": "catnip.blockNames.utilities u time",
+ "utilities u time ui": "catnip.blockNames.utilities u time ui",
+ "utilities u get environment": "catnip.blockNames.utilities u get environment",
+ "utilities u get os": "catnip.blockNames.utilities u get os",
+ "utilities u ldx": "catnip.blockNames.utilities u ldx",
+ "utilities u ldy": "catnip.blockNames.utilities u ldy",
+ "utilities u pdn": "catnip.blockNames.utilities u pdn",
+ "utilities u pdc": "catnip.blockNames.utilities u pdc",
+ "utilities u deg to rad": "catnip.blockNames.utilities u deg to rad",
+ "utilities u rad to deg": "catnip.blockNames.utilities u rad to deg",
+ "utilities u rotate": "catnip.blockNames.utilities u rotate",
+ "utilities u rotate rad": "catnip.blockNames.utilities u rotate rad",
+ "utilities u delta dir": "catnip.blockNames.utilities u delta dir",
+ "utilities u clamp": "catnip.blockNames.utilities u clamp",
+ "utilities u lerp": "catnip.blockNames.utilities u lerp",
+ "utilities u unlerp": "catnip.blockNames.utilities u unlerp",
+ "utilities u map": "catnip.blockNames.utilities u map",
+ "utilities u get rect shape": "catnip.blockNames.utilities u get rect shape",
+ "utilities u prect": "catnip.blockNames.utilities u prect",
+ "utilities u pcircle": "catnip.blockNames.utilities u pcircle",
+ "utilities u ui to css coord": "catnip.blockNames.utilities u ui to css coord",
+ "utilities u game to css coord": "catnip.blockNames.utilities u game to css coord",
+ "utilities u ui to css scalar": "catnip.blockNames.utilities u ui to css scalar",
+ "utilities u game to css scalar": "catnip.blockNames.utilities u game to css scalar",
+ "utilities u game to ui coord": "catnip.blockNames.utilities u game to ui coord",
+ "utilities u ui to game coord": "catnip.blockNames.utilities u ui to game coord",
+ "utilities u numbered string": "catnip.blockNames.utilities u numbered string",
+ "utilities u get string number": "catnip.blockNames.utilities u get string number",
+ "settings settings high density": "catnip.blockNames.settings settings high density",
+ "settings settings target fps": "catnip.blockNames.settings settings target fps",
+ "settings settings view mode": "catnip.blockNames.settings settings view mode",
+ "settings settings fullscreen": "catnip.blockNames.settings settings fullscreen",
+ "settings settings pixelart": "catnip.blockNames.settings settings pixelart",
+ "settings settings prevent default": "catnip.blockNames.settings settings prevent default",
+ "set x": "catnip.blockNames.set x",
+ "set y": "catnip.blockNames.set y",
+ "get x": "catnip.blockNames.get x",
+ "get y": "catnip.blockNames.get y",
+ "follow this": "catnip.blockNames.follow this",
+ "follow": "catnip.blockNames.follow",
+ "set zoom": "catnip.blockNames.set zoom",
+ "get zoom": "catnip.blockNames.get zoom",
+ "set targetX": "catnip.blockNames.set targetX",
+ "set targetY": "catnip.blockNames.set targetY",
+ "set shiftX": "catnip.blockNames.set shiftX",
+ "set shiftY": "catnip.blockNames.set shiftY",
+ "set drift": "catnip.blockNames.set drift",
+ "set rotation": "catnip.blockNames.set rotation",
+ "set followX": "catnip.blockNames.set followX",
+ "set followY": "catnip.blockNames.set followY",
+ "set borderX": "catnip.blockNames.set borderX",
+ "set borderY": "catnip.blockNames.set borderY",
+ "set shake": "catnip.blockNames.set shake",
+ "set shakeDecay": "catnip.blockNames.set shakeDecay",
+ "set shakeFrequency": "catnip.blockNames.set shakeFrequency",
+ "set shakeX": "catnip.blockNames.set shakeX",
+ "set shakeY": "catnip.blockNames.set shakeY",
+ "set shakeMax": "catnip.blockNames.set shakeMax",
+ "set minX": "catnip.blockNames.set minX",
+ "set maxX": "catnip.blockNames.set maxX",
+ "set minY": "catnip.blockNames.set minY",
+ "set maxY": "catnip.blockNames.set maxY",
+ "get targetX": "catnip.blockNames.get targetX",
+ "get targetY": "catnip.blockNames.get targetY",
+ "get computedX": "catnip.blockNames.get computedX",
+ "get computedY": "catnip.blockNames.get computedY",
+ "get shiftX": "catnip.blockNames.get shiftX",
+ "get shiftY": "catnip.blockNames.get shiftY",
+ "get drift": "catnip.blockNames.get drift",
+ "get left": "catnip.blockNames.get left",
+ "get right": "catnip.blockNames.get right",
+ "get top": "catnip.blockNames.get top",
+ "get bottom": "catnip.blockNames.get bottom",
+ "get rotation": "catnip.blockNames.get rotation",
+ "get followX": "catnip.blockNames.get followX",
+ "get followY": "catnip.blockNames.get followY",
+ "get borderX": "catnip.blockNames.get borderX",
+ "get borderY": "catnip.blockNames.get borderY",
+ "get shake": "catnip.blockNames.get shake",
+ "get shakeDecay": "catnip.blockNames.get shakeDecay",
+ "get shakeFrequency": "catnip.blockNames.get shakeFrequency",
+ "get shakeX": "catnip.blockNames.get shakeX",
+ "get shakeY": "catnip.blockNames.get shakeY",
+ "get shakeMax": "catnip.blockNames.get shakeMax",
+ "get minX": "catnip.blockNames.get minX",
+ "get maxX": "catnip.blockNames.get maxX",
+ "get minY": "catnip.blockNames.get minY",
+ "get maxY": "catnip.blockNames.get maxY",
+ "console log": "catnip.blockNames.console log",
+ "console warn": "catnip.blockNames.console warn",
+ "console error": "catnip.blockNames.console error",
+ "set depth": "catnip.blockNames.set depth",
+ "get depth": "catnip.blockNames.get depth",
+ "script options": "catnip.blockNames.script options",
+ "run script": "catnip.blockNames.run script",
+ "get width": "catnip.blockNames.get width",
+ "get height": "catnip.blockNames.get height",
+ "set width": "catnip.blockNames.set width",
+ "set height": "catnip.blockNames.set height",
+ "const string": "catnip.blockNames.const string",
+ "if branch": "catnip.blockNames.if branch",
+ "concatenate strings triple": "catnip.blockNames.concatenate strings triple",
+ "emitter tandems Emitters stop": "catnip.blockNames.emitter tandems Emitters stop",
+ "emitter tandems Emitters pause": "catnip.blockNames.emitter tandems Emitters pause",
+ "emitter tandems Emitters resume": "catnip.blockNames.emitter tandems Emitters resume",
+ "emitter tandems Emitters clear": "catnip.blockNames.emitter tandems Emitters clear",
+ "utilities U wait": "catnip.blockNames.utilities U wait",
+ "utilities U wait ui": "catnip.blockNames.utilities U wait ui",
+ "hasSubstring": "catnip.blockNames.hasSubstring",
+ "substringPosition": "catnip.blockNames.substringPosition",
+ "stringLength": "catnip.blockNames.stringLength",
+ "replace substring": "catnip.blockNames.replace substring",
+ "replace all substrings": "catnip.blockNames.replace all substrings",
+ "trim whitespace": "catnip.blockNames.trim whitespace",
+ "regex passes": "catnip.blockNames.regex passes",
+ "replace by regex": "catnip.blockNames.replace by regex",
+ "replace all by regex": "catnip.blockNames.replace all by regex",
+ "split by a substring": "catnip.blockNames.split by a substring",
+ "split": "catnip.blockNames.split",
+ "slice a string": "catnip.blockNames.slice a string",
+ "to uppercase": "catnip.blockNames.to uppercase",
+ "to lowercase": "catnip.blockNames.to lowercase",
+ "array unshift": "catnip.blockNames.array unshift",
+ "array push": "catnip.blockNames.array push",
+ "add element at position": "catnip.blockNames.add element at position",
+ "array pop": "catnip.blockNames.array pop",
+ "array shift": "catnip.blockNames.array shift",
+ "remove element from array": "catnip.blockNames.remove element from array",
+ "remove at position": "catnip.blockNames.remove at position",
+ "filter array": "catnip.blockNames.filter array",
+ "map array": "catnip.blockNames.map array",
+ "set text": "catnip.blockNames.set text",
+ "set disabled": "catnip.blockNames.set disabled",
+ "get text": "catnip.blockNames.get text",
+ "get disabled": "catnip.blockNames.get disabled",
+ "define function": "catnip.blockNames.define function",
+ "return": "catnip.blockNames.return",
+ "execute function": "catnip.blockNames.execute function",
+ "get function option": "catnip.blockNames.get function option",
+ "set timer 1": "catnip.blockNames.set timer 1",
+ "set timer 2": "catnip.blockNames.set timer 2",
+ "set timer 3": "catnip.blockNames.set timer 3",
+ "set timer 4": "catnip.blockNames.set timer 4",
+ "set timer 5": "catnip.blockNames.set timer 5",
+ "set timer 6": "catnip.blockNames.set timer 6",
+ "get timer 1": "catnip.blockNames.get timer 1",
+ "get timer 2": "catnip.blockNames.get timer 2",
+ "get timer 3": "catnip.blockNames.get timer 3",
+ "get timer 4": "catnip.blockNames.get timer 4",
+ "get timer 5": "catnip.blockNames.get timer 5",
+ "get timer 6": "catnip.blockNames.get timer 6",
+ "set game speed": "catnip.blockNames.set game speed",
+ "get game speed": "catnip.blockNames.get game speed",
+ "deserialize object": "catnip.blockNames.deserialize object",
+ "serialize object": "catnip.blockNames.serialize object",
+ "save to storage": "catnip.blockNames.save to storage",
+ "delete from storage": "catnip.blockNames.delete from storage",
+ "load from storage": "catnip.blockNames.load from storage",
+ "is key in storage": "catnip.blockNames.is key in storage",
+ "owning room": "catnip.blockNames.owning room"
+ },
+ "blockDisplayNames": {
+ "write": "catnip.blockDisplayNames.write",
+ "if else branch": "catnip.blockDisplayNames.if else branch",
+ "while loop cycle": "catnip.blockDisplayNames.while loop cycle",
+ "repeat": "catnip.blockDisplayNames.repeat",
+ "for each": "catnip.blockDisplayNames.for each",
+ "NOT logic operator": "catnip.blockDisplayNames.NOT logic operator",
+ "set": "catnip.blockDisplayNames.set",
+ "x of": "catnip.blockDisplayNames.x of",
+ "y of": "catnip.blockDisplayNames.y of",
+ "options": "catnip.blockDisplayNames.options",
+ "lengthOf": "catnip.blockDisplayNames.lengthOf",
+ "split": "catnip.blockDisplayNames.split",
+ "join": "catnip.blockDisplayNames.join",
+ "add element": "catnip.blockDisplayNames.add element",
+ "remove element": "catnip.blockDisplayNames.remove element",
+ "set timer 1 to": "catnip.blockDisplayNames.set timer 1 to",
+ "set timer 2 to": "catnip.blockDisplayNames.set timer 2 to",
+ "set timer 3 to": "catnip.blockDisplayNames.set timer 3 to",
+ "set timer 4 to": "catnip.blockDisplayNames.set timer 4 to",
+ "set timer 5 to": "catnip.blockDisplayNames.set timer 5 to",
+ "set timer 6 to": "catnip.blockDisplayNames.set timer 6 to",
+ "timer": "catnip.blockDisplayNames.timer",
+ "read": "catnip.blockDisplayNames.read",
+ "set game speed to": "catnip.blockDisplayNames.set game speed to",
+ "game speed": "catnip.blockDisplayNames.game speed"
+ },
+ "blockLabels": {
+ "value": "catnip.blockLabels.value",
+ "property": "catnip.blockLabels.property",
+ "changeBy": "catnip.blockLabels.changeBy",
+ "is not": "catnip.blockLabels.is not",
+ "is": "catnip.blockLabels.is",
+ "else": "catnip.blockLabels.else",
+ "timesCount": "catnip.blockLabels.timesCount",
+ "toWrite": "catnip.blockLabels.toWrite",
+ "fromRead": "catnip.blockLabels.fromRead",
+ "atPosition": "catnip.blockLabels.atPosition",
+ "forDuring": "catnip.blockLabels.forDuring",
+ "toDestination": "catnip.blockLabels.toDestination",
+ "store index in": "catnip.blockLabels.store index in",
+ "store in": "catnip.blockLabels.store in",
+ "of array": "catnip.blockLabels.of array",
+ "of current room": "catnip.blockLabels.of current room",
+ "to current room": "catnip.blockLabels.to current room",
+ "AND": "catnip.blockLabels.AND",
+ "OR": "catnip.blockLabels.OR",
+ "then": "catnip.blockLabels.then",
+ "catch": "catnip.blockLabels.catch",
+ "and play animation": "catnip.blockLabels.and play animation",
+ "and stop animation": "catnip.blockLabels.and stop animation",
+ "scale": "catnip.blockLabels.scale",
+ "position": "catnip.blockLabels.position",
+ "inInside": "catnip.blockLabels.inInside",
+ "contains": "catnip.blockLabels.contains",
+ "replace": "catnip.blockLabels.replace",
+ "replaceAll": "catnip.blockLabels.replaceAll",
+ "replaceByRegex": "catnip.blockLabels.replaceByRegex",
+ "replaceAllByRegex": "catnip.blockLabels.replaceAllByRegex",
+ "fromDestination": "catnip.blockLabels.fromDestination",
+ "fromSource": "catnip.blockLabels.fromSource",
+ "store result in": "catnip.blockLabels.store result in",
+ "and": "catnip.blockLabels.and",
+ "at position": "catnip.blockLabels.at position",
+ "with results in": "catnip.blockLabels.with results in",
+ "store new array in": "catnip.blockLabels.store new array in",
+ "and elements": "catnip.blockLabels.and elements",
+ "secondsUnits": "catnip.blockLabels.secondsUnits"
+ },
+ "blockOptions": {
+ "soundVolume": "catnip.blockOptions.soundVolume",
+ "loop": "catnip.blockOptions.loop",
+ "isRoomUi": "catnip.blockOptions.isRoomUi",
+ "speed": "catnip.blockOptions.speed",
+ "start at": "catnip.blockOptions.start at",
+ "soundSingleInstance": "catnip.blockOptions.soundSingleInstance"
+ },
+ "goToActions": "catnip.goToActions",
+ "copyDocHtml": "catnip.copyDocHtml",
+ "copySelection": "catnip.copySelection",
+ "duplicateBlock": "catnip.duplicateBlock",
+ "requiredField": "catnip.requiredField",
+ "unnamedGroup": "catnip.unnamedGroup",
+ "blockDocumentation": {
+ "serialize object": "catnip.blockDocumentation.serialize object",
+ "constant string": "catnip.blockDocumentation.constant string"
+ }
+ },
+ "regionalLinks": {
+ "discord": "regionalLinks.discord",
+ "telegram": "regionalLinks.telegram"
}
-}
+}
\ No newline at end of file
diff --git a/app/data/i18n/Dutch.json b/app/data/i18n/Dutch.json
index 37f52d696..37d8fe29e 100644
--- a/app/data/i18n/Dutch.json
+++ b/app/data/i18n/Dutch.json
@@ -99,7 +99,7 @@
"kamers",
"kamers"
],
- "font": [
+ "typeface": [
"lettertype",
"lettertypes",
"lettertypes"
@@ -965,7 +965,6 @@
"strokeColor": "Lijnkleur:",
"strokeWeight": "Lijn breedte:",
"testText": "Test tekst 0123 +",
- "fontFamily": "Lettertypefamilie:",
"fontSize": "Lettertype grootte:"
},
"textureView": {
diff --git a/app/data/i18n/English.json b/app/data/i18n/English.json
index 9d0b7b4ef..ebd57d347 100644
--- a/app/data/i18n/English.json
+++ b/app/data/i18n/English.json
@@ -4,6 +4,10 @@
"native": "English",
"eng": "English"
},
+ "regionalLinks": {
+ "discord": "https://comigo.games/discord",
+ "telegram": "https://t.me/ctjsen"
+ },
"common": {
"add": "Add",
"addBehavior": "Add a Behavior",
@@ -27,6 +31,7 @@
"docsLong": "Documentation",
"donate": "Donate",
"done": "Done!",
+ "download": "Download",
"duplicate": "Duplicate",
"edit": "Edit",
"exit": "Exit",
@@ -95,6 +100,7 @@
"tileLayer": "tile layer",
"ctSite": "ct.js homepage",
"openAssetGallery": "Gallery",
+ "createStyleFromIt": "Create a style from it",
"alignModes": {
"left": "Left",
"right": "Right",
@@ -136,10 +142,10 @@
"rooms",
"rooms"
],
- "font": [
- "font",
- "fonts",
- "fonts"
+ "typeface": [
+ "typeface",
+ "typefaces",
+ "typefaces"
],
"script": [
"script",
@@ -201,6 +207,431 @@
"visitAuthorsTwitter": "Visit author's Twitter page",
"tipAuthor": "Tip the author for their hard work :D"
},
+ "catnip": {
+ "trashZoneHint": "Drop blocks here to quickly delete them",
+ "properties": "Properties",
+ "propertiesHint": "Properties are stored in the copy or room and can be accessed later, including from other copies.",
+ "variables": "Variables",
+ "variablesHint": "Variables are temporary and exist only for this event's run. They're good for storing results of quick calculations.",
+ "globalVariables": "Global variables",
+ "globalVariablesHint": "Global variables are accessible from anywhere in your project. They're not saved between runs; for that, use \"Save to storage\" and \"Load from storage\" blocks.",
+ "createNewProperty": "New property",
+ "createNewVariable": "New variable",
+ "createNewGlobalVariable": "New global variable",
+ "newPropertyPrompt": "Input the name for the new property:",
+ "newVariablePrompt": "Input the name for the new variable. The name must not contain whitespace or any special letters, and must start with a letter.",
+ "newGlobalVariablePrompt": "Input the name for the new global variable. The name must not contain whitespace or any special letters, and must start with a letter.",
+ "invalidVarNameError": "Invalid variable name. The name must not contain whitespace or any special letters, and must start with a letter.",
+ "renamePropertyPrompt": "Input the new name for this property:",
+ "renameVariablePrompt": "Input the new name for this variable:",
+ "renamingAcrossProject": "Replacing variable name in other assets…",
+ "errorBlock": "Missing block from library",
+ "errorBlockDeleteHint": "Right-click to delete it.",
+ "asyncHint": "This block runs asynchronously, meaning that it will execute later and won't block the rest of the script. Use block areas inside this one to run commands on its completion, but do note that things can change while this block runs: for example, the copy that runs this block may be deleted (depending on your gameplay logic) and thus will become unusable when this block finishes.",
+ "optionsAdvanced": "Advanced",
+ "addCustomOption": "Add a custom property",
+ "changeBlockTo": "Change to \"$1\"",
+ "goToActions": "Open Actions settings",
+ "copyDocHtml": "Copy as HTML for docs",
+ "copySelection": "Copy selected blocks",
+ "duplicateBlock": "Duplicate this block",
+ "requiredField": "This field is required and is missing a value.",
+ "unnamedGroup": "Unnamed group",
+ "placeholders": {
+ "putBlocksHere": "Put your blocks here",
+ "doNothing": "Do nothing"
+ },
+ "coreLibs": {
+ "appearance": "Appearance",
+ "arrays": "Arrays",
+ "backgrounds": "Backgrounds",
+ "behaviors": "Behaviors",
+ "camera": "Camera",
+ "console": "Console",
+ "emitter tandems": "Emitters",
+ "logic": "Logic",
+ "math": "Math",
+ "misc": "Miscellaneous",
+ "movement": "Movement",
+ "objects": "Objects",
+ "rooms": "Rooms",
+ "settings": "Settings",
+ "sounds": "Sounds",
+ "strings": "Strings",
+ "templates": "Templates",
+ "utilities": "Utilities",
+ "actions": "Actions",
+ "timers": "Timers"
+ },
+ "blockNames": {
+ "kill copy": "Destroy this copy",
+ "move copy": "Move this copy",
+ "set speed": "Set speed to",
+ "set gravity": "Set gravity to",
+ "set gravityDir": "Set gravity direction to",
+ "set hspeed": "Set horizontal speed to",
+ "set vspeed": "Set vertical speed to",
+ "set direction": "Set direction to",
+ "get speed": "speed",
+ "get gravity": "gravity",
+ "get gravityDir": "gravity direction",
+ "get hspeed": "horizontal speed",
+ "get vspeed": "vertical speed",
+ "get direction": "direction",
+ "y of copy": "y of a copy",
+ "x of copy": "x of a copy",
+ "get width": "width",
+ "get height": "height",
+ "set width": "Set width to",
+ "set height": "Set height to",
+ "set property variable": "Set property/variable",
+ "increment": "Increment",
+ "decrement": "Decrement",
+ "increase": "Increase",
+ "decrease": "Decrease",
+ "this write": "Write",
+ "current room write": "Write to the current room",
+ "write property to object": "Write to the object",
+ "this read": "read",
+ "room read": "current room's property",
+ "object read": "object's property",
+ "object delete": "Delete property in an object",
+ "new array": "new array",
+ "new object": "Create a new object",
+ "new empty object": "new empy object",
+ "convert to string": "to string",
+ "const string": "String (a constant value)",
+ "convert to number": "to number",
+ "convert to boolean": "to boolean",
+ "note": "Note",
+ "plainJs": "Execute JavaScript",
+ "color": "color",
+ "variable": "Variable",
+ "property": "Property",
+ "behavior property": "Behavior's property",
+ "content type entries": "Content type entries",
+ "if else branch": "If-else branch",
+ "if branch": "If branch",
+ "while loop cycle": "While loop",
+ "repeat": "Repeat N times",
+ "for each": "For each element of array",
+ "break loop": "Stop this loop",
+ "NOT logic operator": "NOT logic operator",
+ "AND logic operator": "AND logic operator",
+ "OR logic operator": "OR logic operator",
+ "AND AND logic operator": "double AND logic operator",
+ "OR OR logic operator": "double OR logic operator",
+ "is": "Is (equal to)",
+ "is not": "Is not (not equal to)",
+ "set texture": "Set texture to",
+ "set scale": "Set scale to",
+ "set scale xy": "Set scale to",
+ "set angle": "Set texture rotation to",
+ "set skew": "Set skew to",
+ "skew x": "skew by x",
+ "skew y": "skew by y",
+ "set alpha": "Set opacity to",
+ "scale x": "scale by x",
+ "scale y": "scale by y",
+ "get angle": "texture rotation",
+ "get alpha": "opacity",
+ "set tint": "Set tint to",
+ "get tint": "tint",
+ "play animation": "Play animation",
+ "stop animation": "Stop animation",
+ "goto frame play": "Go to a frame and play the animation",
+ "goto frame stop": "Go to a frame and stop the animation",
+ "goto frame": "Go to a frame",
+ "get animation speed": "animation speed",
+ "set animation speed": "Set animation speed to",
+ "this": "this",
+ "concatenate strings": "Concatenate strings",
+ "concatenate strings triple": "Concatenate strings (triple)",
+ "templates Templates copy into room": "Copy a template into room",
+ "templates Templates copy": "Copy a template",
+ "templates Templates each": "For each copy",
+ "templates Templates with copy": "With copy",
+ "templates Templates with template": "With all copies of a template",
+ "templates templates exists": "template's copies exist",
+ "rooms Rooms add bg": "Add background",
+ "rooms Rooms clear": "Clear the current room",
+ "rooms Rooms remove": "Remove a room",
+ "rooms Rooms switch": "Switch to",
+ "rooms Rooms restart": "Restart the current room",
+ "rooms Rooms append": "Append a room",
+ "rooms Rooms prepend": "Prepend a room",
+ "rooms Rooms merge": "Merge into current room",
+ "rooms rooms current": "current room",
+ "rooms rooms list": "rooms list",
+ "rooms rooms starting": "starting room",
+ "behaviors Behaviors add": "Add a behavior to",
+ "behaviors Behaviors remove": "Remove a behavior from",
+ "behaviors behaviors has": "has behavior",
+ "sounds Sounds play": "Play a sound",
+ "sounds Sounds play at": "Play a 3D sound",
+ "sounds Sounds stop": "Stop sound",
+ "sounds Sounds pause": "Pause sound",
+ "sounds Sounds resume": "Resume sound",
+ "sounds Sounds global volume": "Set global volume",
+ "sounds Sounds fade": "Fade a sound",
+ "sounds Sounds add filter": "Add a filter to a sound",
+ "sounds Sounds add distortion": "Add a distortion filter",
+ "sounds Sounds add equalizer": "Add an equalizer filter",
+ "sounds Sounds add mono filter": "Add a mono filter",
+ "sounds Sounds add reverb": "Add a reverb filter",
+ "sounds Sounds add stereo filter": "Add a stereo filter",
+ "sounds Sounds add panner filter": "Add a 3D panner filter",
+ "sounds Sounds add telephone": "Add a telephone filter",
+ "sounds Sounds remove filter": "Remove a filter from a sound",
+ "sounds Sounds speed all": "Set global sound speed",
+ "sounds sounds load": "Load a sound",
+ "sounds sounds exists": "sound exists",
+ "sounds sounds playing": "is sound playing",
+ "sounds sounds toggle mute all": "all sounds muted",
+ "sounds sounds toggle pause all": "all sounds paused",
+ "styles styles get": "get a style",
+ "backgrounds Backgrounds add": "Add a background",
+ "backgrounds backgrounds list": "list of backgrounds",
+ "emitter tandems Emitters fire": "Fire an emitter at location",
+ "emitter tandems Emitters append": "Append an emitter",
+ "emitter tandems Emitters follow": "Create an emitter and follow",
+ "emitter tandems Emitters stop": "Stop and destroy the emitter",
+ "emitter tandems Emitters pause": "Pause the emitter",
+ "emitter tandems Emitters resume": "Resume the emitter",
+ "emitter tandems Emitters clear": "Clear the emitter's particles",
+ "utilities U reshape nine patch": "Reshape a nine-slice panel",
+ "utilities u time": "time",
+ "utilities u time ui": "ui time",
+ "utilities u get environment": "environment",
+ "utilities u get os": "current os",
+ "utilities u ldx": "x length of a vector",
+ "utilities u ldy": "y length of a vector",
+ "utilities u pdn": "2-point direction",
+ "utilities u pdc": "2-point distance",
+ "utilities u deg to rad": "degrees to radians",
+ "utilities u rad to deg": "radians to degrees",
+ "utilities u rotate": "rotate a vector",
+ "utilities u rotate rad": "rotate a vector in radians",
+ "utilities u delta dir": "direction difference",
+ "utilities u clamp": "clamp",
+ "utilities u lerp": "interpolate",
+ "utilities u unlerp": "un-interpolate",
+ "utilities u map": "remap a value",
+ "utilities u get rect shape": "get rectangular shape",
+ "utilities u prect": "is point in rectangle",
+ "utilities u pcircle": "is point in circle",
+ "utilities u ui to css coord": "convert ui coord to css pixels",
+ "utilities u game to css coord": "convert game coord to css pixels",
+ "utilities u ui to css scalar": "convert scalar from ui to css length",
+ "utilities u game to css scalar": "convert game length to css scalar",
+ "utilities u game to ui coord": "convert game coord to ui pixels",
+ "utilities u ui to game coord": "convert ui coord to game pixels",
+ "utilities U wait": "Delay, in milliseconds",
+ "utilities U wait ui": "UI delay, in milliseconds",
+ "utilities u numbered string": "numbered string",
+ "utilities u get string number": "get string number",
+ "settings settings high density": "hight dpi",
+ "settings settings target fps": "target fps",
+ "settings settings view mode": "view mode",
+ "settings settings fullscreen": "fullscreen",
+ "settings settings pixelart": "pixelart mode",
+ "settings settings prevent default": "prevent browser events",
+ "set x": "Set x to",
+ "set y": "Set y to",
+ "get x": "x",
+ "get y": "y",
+ "follow this": "Follow this copy",
+ "follow": "Follow",
+ "set zoom": "Set zoom to",
+ "get zoom": "zoom",
+ "set targetX": "Set camera's target x to",
+ "set targetY": "Set camera's target y to",
+ "set shiftX": "Set camera's horizontal shift",
+ "set shiftY": "Set camera's vertical shift",
+ "set drift": "Set camera's drift",
+ "set rotation": "Set rotation",
+ "set followX": "Enable following by x",
+ "set followY": "Enable following by y",
+ "set borderX": "Set horizontal borders for following to",
+ "set borderY": "Set vertical borders for following to",
+ "set shake": "Set screen shake power to",
+ "set shakeDecay": "Set screen shake decay speed to",
+ "set shakeFrequency": "Set screen shake frequency to",
+ "set shakeX": "Set horizontal shake multiplier to",
+ "set shakeY": "Set vertical shake multiplier to",
+ "set shakeMax": "Set maximum shake power to",
+ "set minX": "Set left boundary to",
+ "set maxX": "Set right boundary to",
+ "set minY": "Set top boundary to",
+ "set maxY": "Set right boundary to",
+ "get targetX": "target x",
+ "get targetY": "target y",
+ "get computedX": "current x",
+ "get computedY": "current y",
+ "get shiftX": "horizontal shift",
+ "get shiftY": "vertical shift",
+ "get drift": "drift power",
+ "get left": "left side",
+ "get right": "right side",
+ "get top": "top side",
+ "get bottom": "bottom side",
+ "get rotation": "rotation",
+ "get followX": "follow horizontally",
+ "get followY": "follow vertically",
+ "get borderX": "follow horizontal borders",
+ "get borderY": "follow vertical borders",
+ "get shake": "screen shake power",
+ "get shakeDecay": "screen shake decay speed",
+ "get shakeFrequency": "screen shake frequency",
+ "get shakeX": "horizontal shake multiplier",
+ "get shakeY": "vertical shake multiplier",
+ "get shakeMax": "maximum shake power",
+ "get minX": "left boundary",
+ "get maxX": "right boundary",
+ "get minY": "top boundary",
+ "get maxY": "bottom boundary",
+ "console log": "Log to console",
+ "console warn": "Send a warning to the console",
+ "console error": "Send an error to the console",
+ "set depth": "Set depth to",
+ "get depth": "depth",
+ "script options": "Script options",
+ "run script": "Run a script",
+ "hasSubstring": "has substring",
+ "substringPosition": "substring position",
+ "stringLength": "string length",
+ "replace substring": "replace substring",
+ "replace all substrings": "replace all substrings",
+ "trim whitespace": "trim whitespace",
+ "regex passes": "regex passes",
+ "replace by regex": "replace by regex",
+ "replace all by regex": "replace all substrings by regex",
+ "split by a substring": "split by a substring",
+ "split": "split a string into an array",
+ "slice a string": "slice a string",
+ "to uppercase": "to uppercase",
+ "to lowercase": "to lowercase",
+ "array unshift": "Add an element at start",
+ "array push": "Add an element at end",
+ "add element at position": "Add an element at position",
+ "array pop": "Remove the last array element",
+ "array shift": "Remove the first array element",
+ "remove element from array": "Remove the element from array",
+ "remove at position": "Remove an element at position",
+ "filter array": "Filter array",
+ "map array": "Map elements of array",
+ "set text": "Set text",
+ "set disabled": "Set disabled state",
+ "get text": "get text",
+ "get disabled": "get disabled",
+ "define function": "Define a function",
+ "return": "Return the result",
+ "execute function": "Run a function",
+ "get function option": "get an option",
+ "set timer 1": "Set 1st timer",
+ "set timer 2": "Set 2nd timer",
+ "set timer 3": "Set 3rd timer",
+ "set timer 4": "Set 4th timer",
+ "set timer 5": "Set 5th timer",
+ "set timer 6": "Set 6th timer",
+ "get timer 1": "Get 1st timer's value",
+ "get timer 2": "Get 2nd timer's value",
+ "get timer 3": "Get 3rd timer's value",
+ "get timer 4": "Get 4th timer's value",
+ "get timer 5": "Get 5th timer's value",
+ "get timer 6": "Get 6th timer's value",
+ "set game speed": "Set game speed",
+ "get game speed": "Get game speed",
+ "deserialize object": "Deserialize object",
+ "serialize object": "serialize object",
+ "save to storage": "Save to storage in key",
+ "delete from storage": "Delete from storage the key",
+ "load from storage": "load from storage from key",
+ "is key in storage": "is key in storage",
+ "owning room": "copy's owning room"
+ },
+ "blockDisplayNames": {
+ "write": "Write",
+ "if else branch": "If",
+ "while loop cycle": "While",
+ "repeat": "Repeat",
+ "for each": "For each",
+ "NOT logic operator": "not",
+ "set": "Set",
+ "x of": "x of",
+ "y of": "y of",
+ "options": "options",
+ "lengthOf": "length of",
+ "split": "split",
+ "join": "join",
+ "add element": "Add an element",
+ "remove element": "Remove element",
+ "set timer 1 to": "Set 1st timer to",
+ "set timer 2 to": "Set 2nd timer to",
+ "set timer 3 to": "Set 3rd timer to",
+ "set timer 4 to": "Set 4th timer to",
+ "set timer 5 to": "Set 5th timer to",
+ "set timer 6 to": "Set 6th timer to",
+ "timer": "timer",
+ "read": "read",
+ "set game speed to": "Set game speed to",
+ "game speed": "game speed"
+ },
+ "blockLabels": {
+ "value": "value",
+ "property": "property",
+ "changeBy": "by",
+ "is not": "is not",
+ "is": "is",
+ "else": "Else",
+ "timesCount": "times",
+ "toWrite": "to",
+ "fromRead": "from",
+ "atPosition": "at",
+ "inInside": "in",
+ "contains": "contains",
+ "forDuring": "for",
+ "replace": "replace",
+ "replaceAll": "replace all",
+ "replaceByRegex": "replace by regex",
+ "replaceAllByRegex": "replace all by regex",
+ "fromDestination": "from",
+ "fromSource": "from",
+ "toDestination": "to",
+ "store index in": "store index in",
+ "store in": "store in",
+ "store result in": "store the result in",
+ "of array": "of array",
+ "of current room": "of the current room",
+ "to current room": "to the current room",
+ "AND": "and",
+ "OR": "or",
+ "and": "and",
+ "then": "Then",
+ "catch": "On error",
+ "and play animation": "and play the animation",
+ "and stop animation": "and stop the animation",
+ "scale": "scale",
+ "position": "position",
+ "at position": "at position",
+ "with results in": "with results stored in",
+ "store new array in": "store new array in",
+ "and elements": "and elements",
+ "secondsUnits": "second(s)"
+ },
+ "blockOptions": {
+ "soundVolume": "Volume",
+ "loop": "Loop",
+ "isRoomUi": "Is this room a UI layer?",
+ "speed": "Speed",
+ "start at": "Start at",
+ "soundSingleInstance": "Stop other sound instances"
+ },
+ "blockDocumentation": {
+ "serialize object": "This block serializes an object into a string that can be later safely saved or transferred. This method does not support dates, functions, and structures that form cyclic references. Objects serialized with this block should be deserialized with the \"Deserialize object\" block.",
+ "constant string": "You can use this block to force creating a string: for example, when you want to write a number in a string or convert \\n to a linebreak when putting this value into wildcard slots."
+ }
+ },
"colorPicker": {
"current": "New",
"globalPalette": "Global Palette",
@@ -274,10 +705,13 @@
"clueSolutions": {
"syntax": "This is a syntax error in your code. Go to the asset and fix it — the code editor will highlight the problematic place.",
"eventConfiguration": "One of the events is misconfigured, having empty fields. Go to the asset and edit its event's parameters.",
+ "eventMissing": "There is an event in your asset that uses a missing module. Check if you have installed all the required modules, and, if you have recently disabled catmods, try turning them on again.",
"emptySound": "One of your sounds does not have any sound files attached. Import a sound file to it or remove this empty sound.",
"emptyEmitter": "One of your particle systems is missing a texture in its emitter. You will need to either set a texture to it or remove the emitter.",
"windowsFileLock": "This is a Windows-specific problem with a locked file. Make sure you've closed all external browsers that launched the game, then try exporting again. If it doesn't help, restart ct.js.",
- "noTemplateTexture": "One of your templates is missing a texture. You need to set a texture to it."
+ "noTemplateTexture": "One of your templates is missing a texture. You need to set a texture to it.",
+ "blockArgumentMissing": "An argument in a catnip code is not set or was referring to a now removed asset. Go to the asset and set a value to the block mentioned above.",
+ "blockDeclarationMissing": "A block in your catnip code uses a missing catmod. If you have recently disabled catmods, try turning them back on, or remove the problematic blocks."
},
"stacktrace": "Call stack",
"jumpToProblem": "Jump to the problem",
@@ -299,6 +733,24 @@
},
"intro": {
"loading": "Please wait: kittens are gathering speed of light!",
+ "newUserHeader": "Welcome to ct.js!",
+ "welcomeHeaders": [
+ "Welcome back, Tumblr sexyman!",
+ "Welcome back, Neo!",
+ "Isn't it our epic coder? Welcome back!",
+ "Nice to see you again!",
+ "Welcome back, Superstar!",
+ "You're finally awake. Welcome back!",
+ "General Kenobi!",
+ "🖖",
+ "Greetings, traveller!",
+ "Ohayo, sempai uwu",
+ "Hallo :D hallo :D hallo :D",
+ "Nice to see you, lumberfoot.",
+ "✉️ Raid: Hackerman pirates",
+ "Welcome to Summoner's Rift!",
+ "Welcome to test chamber 20"
+ ],
"newProject": {
"header": "Create new",
"projectName": "Name:",
@@ -309,6 +761,15 @@
"nameError": "Wrong project name",
"languageError": "You must specify a programming language"
},
+ "ctDistributions": {
+ "released": "Release branch",
+ "nightly": "Nightly build 🌚",
+ "dev": "Running from sources 🤓"
+ },
+ "gamesFromCommunity": "Games from the Community",
+ "submitYourOwn": "Submit Your Own",
+ "learningResources": "Learning Resources",
+ "authorBy": "by $1",
"recovery": {
"message": "Recovery ct.js has found a recovery file. Possibly, your project was not saved correctly or ct.js was shut down in case of some emergency. Here is when these files were lastly modified:
Your chosen file: {0} {1} Recovery file: {2} {3}
What file should ct.js open?
",
"loadTarget": "Target File",
@@ -330,6 +791,7 @@
"templatesInfo": "You can kickstart your game development by using one of these templates. They contain placeholder graphics only but have working mechanics. Selecting a project will open a save directory selector for your new project.",
"unableToWriteToFolders": "Ct.js could not find an appropriate place for projects! Make sure you store ct.js app inside a folder you have access to write to.",
"twitter": "Twitter channel",
+ "telegram": "Telegram group chat",
"discord": "Discord community",
"github": "Ct.js at Github",
"itch": "Ct.js' store page on itch.io",
@@ -351,13 +813,16 @@
},
"languageSelector": {
"chooseLanguageHeader": "Choose your coding language",
- "chooseLanguageExplanation": "This is the language you will write events with to describe your gameplay logic. Previously, all the projects used JavaScript+TypeScript. Note that you can only convert CoffeeScript projects to JavaScript, but not the other way around, so choose carefully!",
+ "chooseLanguageExplanation": "This is the language you will write events with to describe your gameplay logic. Previously, all the projects used JavaScript+TypeScript. Note that you can only convert CoffeeScript or Catnip projects to JavaScript, but not the other way around, so choose carefully!",
"coffeeScriptDescription": "A good language for beginners with a simple syntax. Pick this language if you don't have prior experience with programming with code, or if you love Python.",
"pickCoffeeScript": "I choose CoffeeScript!",
"jsAndTs": "JavaScript (and TypeScript)",
"jsTsDescription": "The language of the web. Its syntax is more complex but it has in-editor error highlighting and code suggestions. Choose it if you worked with JS, C# or Java code before.",
"pickJsTs": "I choose JavaScript!",
- "acceptAndSpecifyDirectory": "Accept and pick project folder"
+ "acceptAndSpecifyDirectory": "Accept and pick project folder",
+ "catnip": "Catnip",
+ "catnipDescription": "A visual scripting language made for ct.js. You can put blocks with drag-and-drop and with keyboard. A good choice if you have little to zero experience with coding.",
+ "pickCatnip": "I choose Catnip!"
},
"settings": {
"actions": {
@@ -486,10 +951,15 @@
"deleteScript": "Delete the script",
"moveDown": "Move down",
"moveUp": "Move up",
- "newScriptComment": "Use scripts to define frequent functions and import small libraries"
+ "newScriptComment": "Use scripts to define frequent functions and import small libraries",
+ "scriptsHint": "Scripts created here will be injected in the root of your game and thus will always run at the start of the game. Only JavaScript and TypeScript are supported. Variables and types defined here will be available everywhere in your project."
},
"export": {
"heading": "Export settings",
+ "errorReporting": "Error reporting",
+ "showErrors": "Display errors in the game window (strongly recommended)",
+ "showErrorsHint": "Ct.js will show uncaught errors in a custom window from which players can copy error messages and navigate the report link you specify in the next field. This will help your players report such errors without using devtools.",
+ "errorsLink": "Link to report errors: (Github issues, contact form, forum, etc.)",
"functionWrap": "Wrap all the code in a function. (Makes debugging harder, but isolates the game's code from outer context. Do not enable while developing the game.)",
"codeModifier": "Code transformations",
"obfuscateWarning": "This option will make your code run 15-80% slower, but will make your code extremely hard to revert back to the original.",
@@ -783,7 +1253,11 @@
"HCBlack": "High-contrast Black",
"RosePine": "Rosé Pine",
"RosePineMoon": "Rosé Pine Moon",
- "RosePineDawn": "Rosé Pine Dawn"
+ "RosePineDawn": "Rosé Pine Dawn",
+ "GoldenEye": "Golden Eye",
+ "AlmaSakura": "Alma Sakura",
+ "Synthwave": "Synthwave '84",
+ "OneDarkPro": "One Dark Pro"
},
"prideMode": "Pride mode",
"language": "Language",
@@ -796,7 +1270,16 @@
"codeFont": "Font for code",
"codeLigatures": "Ligatures",
"codeDense": "Dense layout",
+ "changeDebuggerLayout": "Change debugger's layout",
+ "debuggerLayout": "Debugger's layout",
+ "debuggerLayouts": {
+ "split": "split layout",
+ "multiwindow": "multiple windows",
+ "automatic": "automatic"
+ },
+ "autoapplyOnLaunch": "Apply assets on game launch",
"altTemplateLayout": "Alternative layout for template editor",
+ "scrollableCatnipLibrary": "Scrollable block library for Catnip",
"disableSounds": "Disable UI sounds",
"changeDataFolder": "Set data folder location",
"forceProductionForDebug": "Force production tasks for debug exports"
@@ -840,6 +1323,7 @@
"runWithoutApplying": "Launch anyway",
"applyAndRun": "Apply and run",
"cantAddEditor": "Cannot add another editor. Please close some tabs with room, style, or tandem editors.",
+ "loadingPreviouslyOpened": "Loading previously opened assets…",
"tour": {
"header": "Ct.js overview",
"aboutTour": "Welcome to ct.js! This little tour will show you the main controls in this editor, so you know how to configure ct.js and create new assets.",
@@ -1044,8 +1528,9 @@
"strokeColor": "Stroke color:",
"strokeWeight": "Line weight:",
"testText": "Test text 0123 +",
- "fontFamily": "Font family:",
- "fontSize": "Font size:"
+ "fallbackFontFamily": "Fallback font family:",
+ "fontSize": "Font size:",
+ "notSupportedForBitmap": "Note that these settings are not supported for bitmap fonts"
},
"textureView": {
"slicing": "Slicing",
@@ -1097,7 +1582,9 @@
"scriptView": {
"runAutomatically": "Execute at game start",
"language": "Language:",
- "convertToJavaScript": "Convert to JavaScript"
+ "convertToJavaScript": "Convert to JavaScript",
+ "confirmSwitchToCatnip": "Switching to Catnip will remove all the code in this script. Are you sure you want to continue?",
+ "confirmSwitchFromCatnip": "Switching from Catnip will remove all the code in this script. If you want to preserve the code, convert the script to JavaScript first. Are you sure you want to continue and clear the code?"
},
"soundView": {
"variants": "Variants",
@@ -1126,6 +1613,7 @@
"bitmapFontLineHeight": "Line height:",
"resultingBitmapFontName": "Resource name",
"charset": "Charset:",
+ "addFont": "Add a font…",
"charsets": {
"punctuation": "Digits and punctuation (you usually do need this)",
"basicLatin": "Basic Latin",
@@ -1137,7 +1625,9 @@
},
"customCharsetHint": "Type all the letters you want to include, both in upper and lower case.",
"fontWeight": "Font weight:",
- "typefaceName": "Typeface name:"
+ "typefaceName": "Typeface name:",
+ "pixelPerfect": "Pixel-perfect precision",
+ "pixelPerfectTooltip": "This should be turned on for pixelart fonts. Enabling this will improve drawing precision of 1-pixel-wide lines, but will reduce the max texture size for each font's characters to be 4k by 4k. (Which is still a lot for pixel fonts.) Besides that, remember that room and style editors will use a different method of drawing fonts anyways and pixel fonts will appear blurry in them — this is normal."
},
"licensePanel": {
"ctjsLicense": "Ct.js License (MIT)",
@@ -1167,6 +1657,8 @@
"staticEventWarning": "This event makes this behavior static. You will not be able to add or remove it dynamically in-game with the Behaviors API, but otherwise it will be perfectly usable.",
"restrictedEventWarning": "This event will work only on templates with the following base classes: $1. This event won't work when applied to templates of other base classes.",
"baseClassWarning": "This event doesn't work with the current base class.",
+ "typedefs": "Additional type definitions:",
+ "typedefsHint": "You can describe additional properties in this asset so they are definitely typed. Example:\n\nname: string;\nhp: number;\nmana: number;\ninventory: any[];\n\nThis is completely optional.",
"coreEventsCategories": {
"lifecycle": "Lifecycle",
"actions": "Actions",
@@ -1184,6 +1676,8 @@
"OnDraw": "Frame end",
"OnDestroy": "Destruction",
"OnRoomEnd": "Room end",
+ "OnBehaviorAdded": "Behavior added",
+ "OnBehaviorRemoved": "Behavior removed",
"OnPointerClick": "Click",
"OnPointerSecondaryClick": "Secondary click",
"OnPointerEnter": "Pointer enter",
@@ -1232,6 +1726,8 @@
"OnStep": "Happens at the beginning of every frame.",
"OnDraw": "Happens at the end of every frame. Good for animation updates.",
"OnDestroy": "Happens between \"frame start\" and \"frame end\" when this copy gets destroyed.",
+ "OnBehaviorAdded": "This gets called when a behavior is dynamically added to this copy. This event won't work with static behaviors; for those, use the Creation event instead.",
+ "OnBehaviorRemoved": "This gets called when you remove this behavior from a copy dynamically. This event won't work with static behaviors; for those, use the Descruction event instead.",
"OnRoomEnd": "Triggers when you switch to another room, or when this room is removed after it was added as a layer.",
"OnActionPress": "Happens when an action's input becomes active — by pressing, clicking, flicking a joystick, etc.",
"OnActionRelease": "Happens when an action's input becomes inactive — by releasing buttons, resting joysticks, etc.",
@@ -1265,6 +1761,8 @@
"animationFPS": "Animation FPS:",
"playAnimationOnStart": "Play animation on start",
"loopAnimation": "Loop animation",
+ "useBitmapText": "Use bitmap fonts",
+ "errorBitmapNotConfigured": "The style you selected is not linked to a typeface that uses a bitmap font. Go to the style, link it to a typeface, and make sure that this typeface is configured to export a bitmap, and apply the changes.",
"blendModes": {
"normal": "Normal",
"add": "Add (burn)",
@@ -1283,6 +1781,7 @@
"baseClass": {
"AnimatedSprite": "Animated sprite",
"Text": "Text",
+ "BitmapText": "Bitmap text",
"NineSlicePlane": "Panel",
"Container": "Container",
"Button": "Button",
diff --git a/app/data/i18n/French.json b/app/data/i18n/French.json
index 5519ceb51..e713bea4c 100644
--- a/app/data/i18n/French.json
+++ b/app/data/i18n/French.json
@@ -126,7 +126,7 @@
"salles",
"salles"
],
- "font": [
+ "typeface": [
"police",
"polices",
"polices"
@@ -795,7 +795,6 @@
"strokeColor": "Couleur de bordure :",
"strokeWeight": "Épaisseur du contour :",
"testText": "Texte de test 0123 + éùïêçÉÙÏÊÇ",
- "fontFamily": "Famille de police :",
"fontSize": "Taille de la police :"
},
"textureView": {
diff --git a/app/data/i18n/German.json b/app/data/i18n/German.json
index baeaa441b..4d8184403 100644
--- a/app/data/i18n/German.json
+++ b/app/data/i18n/German.json
@@ -99,7 +99,7 @@
"",
""
],
- "font": [
+ "typeface": [
"",
"",
""
@@ -795,7 +795,6 @@
"strokeColor": "Konturfarbe:",
"strokeWeight": "Konturstärke:",
"testText": "Test Text 0123 +",
- "fontFamily": "Schriftfamilie:",
"fontSize": "Schriftgröße:"
},
"textureView": {
diff --git a/app/data/i18n/Japanese.json b/app/data/i18n/Japanese.json
index 03e6c32fb..efe364323 100644
--- a/app/data/i18n/Japanese.json
+++ b/app/data/i18n/Japanese.json
@@ -103,7 +103,7 @@
"ルーム",
"ルーム"
],
- "font": [
+ "typeface": [
"フォント",
"フォント",
"フォント"
@@ -844,7 +844,6 @@
"strokeColor": "ストロークの色:",
"strokeWeight": "線の横幅:",
"testText": "テストテキスト Test text 0123 +",
- "fontFamily": "フォントファミリー:",
"fontSize": "フォントサイズ:"
},
"textureView": {
diff --git a/app/data/i18n/Polish.json b/app/data/i18n/Polish.json
index ba913b1d2..803bb9b8b 100644
--- a/app/data/i18n/Polish.json
+++ b/app/data/i18n/Polish.json
@@ -99,7 +99,7 @@
"",
""
],
- "font": [
+ "typeface": [
"",
"",
""
@@ -795,7 +795,6 @@
"strokeColor": "Kolor przekreślenia:",
"strokeWeight": "Grubość linii:",
"testText": "Testowy tekst 0123 +",
- "fontFamily": "Rodzina czcionek:",
"fontSize": "Rozmiar czcionki:"
},
"textureView": {
diff --git a/app/data/i18n/Romanian.json b/app/data/i18n/Romanian.json
index c3c59b669..3254c5ba7 100644
--- a/app/data/i18n/Romanian.json
+++ b/app/data/i18n/Romanian.json
@@ -99,7 +99,7 @@
"",
""
],
- "font": [
+ "typeface": [
"",
"",
""
@@ -795,7 +795,6 @@
"strokeColor": "Culoarea conturului:",
"strokeWeight": "Greutatea liniei:",
"testText": "Test text 0123 +",
- "fontFamily": "Familia font-ului:",
"fontSize": "Mărimea font-ului:"
},
"textureView": {
diff --git a/app/data/i18n/Russian.json b/app/data/i18n/Russian.json
index 0e2f60cbb..728d50948 100644
--- a/app/data/i18n/Russian.json
+++ b/app/data/i18n/Russian.json
@@ -4,6 +4,10 @@
"native": "Русский",
"eng": "Russian"
},
+ "regionalLinks": {
+ "discord": "https://comigo.games/rudiscord",
+ "telegram": "https://t.me/ctjsru"
+ },
"common": {
"add": "Добавить",
"apply": "Применить",
@@ -99,10 +103,10 @@
"комнаты",
"комнат"
],
- "font": [
- "шрифт",
- "шрифта",
- "шрифтов"
+ "typeface": [
+ "семейство шрифтов",
+ "семейства шрифтов",
+ "семейств шрифтов"
],
"style": [
"стиль",
@@ -161,7 +165,425 @@
"fill": "Заполнить",
"Scale": "Менять размер"
},
- "experimentalFeature": "Это экспериментальная функция."
+ "experimentalFeature": "Это экспериментальная функция.",
+ "download": "Скачать",
+ "createStyleFromIt": "Создать стиль с этим ассетом"
+ },
+ "catnip": {
+ "trashZoneHint": "Перетащи сюда блоки, чтобы быстро удалить их",
+ "properties": "Свойства",
+ "propertiesHint": "Свойства хранятся в копии или комнате и могут быть прочитаны позже, в том числе и из других копий.",
+ "variables": "Переменные",
+ "variablesHint": "Переменные — временные ячейки данных, существующие только пока работает событие. Они хорошо подходят для хранения быстрых вычислений.",
+ "createNewProperty": "Новое свойство",
+ "createNewVariable": "Новая переменная",
+ "newPropertyPrompt": "Введи название для нового свойства:",
+ "newVariablePrompt": "Введи название для новой переменной:",
+ "errorBlock": "Блок отсутствует в библиотеке",
+ "errorBlockDeleteHint": "Нажми правой кнопкой мыши, чтобы удалить его.",
+ "placeholders": {
+ "putBlocksHere": "Положи блоки сюда",
+ "doNothing": "Ничего не делать"
+ },
+ "coreLibs": {
+ "templates": "Шаблоны",
+ "logic": "Логика",
+ "misc": "Разное",
+ "math": "Математика",
+ "sounds": "Звуки",
+ "movement": "Движение",
+ "appearance": "Appearance",
+ "rooms": "Комнаты",
+ "behaviors": "Поведения",
+ "backgrounds": "Фоны",
+ "emitter tandems": "Эмиттеры",
+ "utilities": "Утилиты",
+ "settings": "Настройки",
+ "arrays": "Массивы",
+ "camera": "Камера",
+ "console": "Консоль",
+ "objects": "Объекты",
+ "strings": "Строки",
+ "actions": "Действия",
+ "timers": "Таймеры"
+ },
+ "blockNames": {
+ "kill copy": "Удалить эту копию",
+ "set speed": "Назначить скорость",
+ "set gravity": "Назначить силу гравитации",
+ "set gravityDir": "Назначить направление гравитации",
+ "set hspeed": "Назначить горизонтальную скорость",
+ "set vspeed": "Назначить вертикальную скорость",
+ "set direction": "Назначить направление движения",
+ "get speed": "скорость",
+ "get gravity": "сила гравитации",
+ "get gravityDir": "направление гравитации",
+ "get hspeed": "горизонтальная скорость",
+ "get vspeed": "вертикальная скорость",
+ "get direction": "направление движения",
+ "increment": "Увеличить на 1",
+ "decrement": "Уменьшить на 1",
+ "this write": "Записать себе",
+ "current room write": "Записать в текущую комнату",
+ "write property to object": "Записать в объект",
+ "this read": "своё свойство",
+ "room read": "свойство текущей комнаты",
+ "object read": "свойство объекта",
+ "convert to string": "в строку",
+ "convert to number": "в число",
+ "convert to boolean": "в булево",
+ "note": "Заметка",
+ "plainJs": "Выполнить JavaScript",
+ "variable": "Переменная",
+ "property": "Свойство",
+ "behavior property": "Свойство поведения",
+ "if else branch": "Если … то",
+ "while loop cycle": "Цикл \"Пока\"",
+ "repeat": "Повторить N раз",
+ "for each": "Цикл для каждого элемента массива",
+ "break loop": "Остановить цикл",
+ "NOT logic operator": "Логическое НЕ",
+ "AND logic operator": "Логическое И",
+ "OR logic operator": "Логическое ИЛИ",
+ "is": "Является (равен)",
+ "is not": "Не является (не равен)",
+ "set texture": "Сменить текстуру на",
+ "set scale": "Установить размер",
+ "set scale xy": "Установить размер",
+ "set angle": "Повернуть текстуру",
+ "set alpha": "Установить прозрачность",
+ "scale x": "размер по x",
+ "scale y": "размер по y",
+ "get angle": "поворот текстуры",
+ "get alpha": "прозрачность",
+ "move copy": "Передвинуть эту копию",
+ "y of copy": "y копии",
+ "x of copy": "x копии",
+ "set property variable": "Задать значение свойства/переменной",
+ "increase": "Увеличить",
+ "decrease": "Уменьшить",
+ "object delete": "Удалить свойство в объекте",
+ "new array": "новый массив",
+ "new object": "Создать новый объект",
+ "new empty object": "новый пустой объект",
+ "color": "цвет",
+ "AND AND logic operator": "двойное логическое И",
+ "OR OR logic operator": "двойное логическое ИЛИ",
+ "set skew": "Задать наклон",
+ "skew x": "наклон по x",
+ "skew y": "наклон по y",
+ "set tint": "Задать оттенок",
+ "get tint": "оттенок",
+ "play animation": "Воспроизвести анимацию",
+ "stop animation": "Остановить анимацию",
+ "goto frame play": "Перейти к кадру и воспроизвести",
+ "goto frame stop": "Перейти к кадру и остановить",
+ "goto frame": "Перейти к кадру",
+ "get animation speed": "скорость анимации",
+ "set animation speed": "Задать скорость анимации",
+ "this": "я",
+ "concatenate strings": "Соединить строки",
+ "templates Templates copy into room": "Скопировать шаблон в комнату",
+ "templates Templates copy": "Скопировать шаблон",
+ "templates Templates each": "Для каждой копии",
+ "templates Templates with copy": "С копией",
+ "templates Templates with template": "Со всеми копиями шаблона",
+ "templates templates exists": "копии шаблона существуют",
+ "rooms Rooms add bg": "Добавить фон",
+ "rooms Rooms clear": "Очистить текущую комнату",
+ "rooms Rooms remove": "Удалить комнату",
+ "rooms Rooms switch": "Переключиться на",
+ "rooms Rooms restart": "Перезапустить текущую комнату",
+ "rooms Rooms append": "Добавить комнату поверх",
+ "rooms Rooms prepend": "Добавить комнату сзади",
+ "rooms Rooms merge": "Внедрить комнату",
+ "rooms rooms current": "текущая комната",
+ "rooms rooms list": "список комнат",
+ "rooms rooms starting": "стартовая комната",
+ "behaviors Behaviors add": "Добавить поведение",
+ "behaviors Behaviors remove": "Удалить поведение у",
+ "behaviors behaviors has": "есть поведение",
+ "sounds Sounds play": "Играть звук",
+ "sounds Sounds play at": "Играть 3D звук",
+ "sounds Sounds stop": "Остановить звук",
+ "sounds Sounds pause": "Приостановить звук",
+ "sounds Sounds resume": "Возобновить звук",
+ "sounds Sounds global volume": "Задать громкость игры",
+ "sounds Sounds fade": "Сделать затухание",
+ "sounds Sounds add filter": "Добавить звуку фильтр",
+ "sounds Sounds add distortion": "Добавить фильтр искажения",
+ "sounds Sounds add equalizer": "Добавить фильтр-эквалайзер",
+ "sounds Sounds add mono filter": "Добавить моно-фильтр",
+ "sounds Sounds add reverb": "Добавить фильтр ревербации",
+ "sounds Sounds add stereo filter": "Добавить стерео-фильтр",
+ "sounds Sounds add panner filter": "Добавить фильтр 3D-звука",
+ "sounds Sounds add telephone": "Добавить фильтр \"телефон\"",
+ "sounds Sounds remove filter": "Удалить фильтр у звука",
+ "sounds Sounds speed all": "Задать скорость всех звуков",
+ "sounds sounds load": "Загрузить звук",
+ "sounds sounds exists": "звук существует",
+ "sounds sounds playing": "звук играет",
+ "sounds sounds toggle mute all": "все звуки заглушены",
+ "sounds sounds toggle pause all": "все звуки приостановлены",
+ "styles styles get": "получить стиль",
+ "backgrounds Backgrounds add": "Добавить фон",
+ "backgrounds backgrounds list": "список фонов",
+ "emitter tandems Emitters fire": "Запустить эффект в позиции",
+ "emitter tandems Emitters append": "Прикрепить эффект",
+ "emitter tandems Emitters follow": "Создать эффект и следовать",
+ "utilities U reshape nine patch": "Обновить форму столкновений у панели",
+ "utilities u time": "время",
+ "utilities u time ui": "время интерфейса",
+ "utilities u get environment": "окружение",
+ "utilities u get os": "текущая ос",
+ "utilities u ldx": "длина вектора по x",
+ "utilities u ldy": "длина вектора по y",
+ "utilities u pdn": "направление меж точек",
+ "utilities u pdc": "расстояние меж точек",
+ "utilities u deg to rad": "градусы в радианы",
+ "utilities u rad to deg": "радианы в градусы",
+ "utilities u rotate": "повернуть вектор",
+ "utilities u rotate rad": "повернуть вектор в радианах",
+ "utilities u delta dir": "разница меж углами",
+ "utilities u clamp": "ограничить",
+ "utilities u lerp": "интерполировать",
+ "utilities u unlerp": "разынтерполировать",
+ "utilities u map": "привести к диапазону",
+ "utilities u get rect shape": "прямоугольная форма столкновений",
+ "utilities u prect": "точка в прямоугольнике?",
+ "utilities u pcircle": "точка в круге?",
+ "utilities u ui to css coord": "координаты интерфейса в css",
+ "utilities u game to css coord": "координаты игры в css",
+ "utilities u ui to css scalar": "скаляр интерфейса в css",
+ "utilities u game to css scalar": "скаляр игры в css",
+ "utilities u game to ui coord": "координаты игры в интерфейсные",
+ "utilities u ui to game coord": "координаты интерфейса в игровые",
+ "utilities U wait": "Задержка, в мс",
+ "utilities U wait ui": "Задержка в интерфейсном времени, в мс",
+ "utilities u numbered string": "строка с числом",
+ "utilities u get string number": "число строки",
+ "settings settings high density": "высокое разрешение",
+ "settings settings target fps": "целевой fps",
+ "settings settings view mode": "режим отображения",
+ "settings settings fullscreen": "полноэкранный",
+ "settings settings pixelart": "пиксельарт",
+ "settings settings prevent default": "запретить события браузера",
+ "set x": "Задать x",
+ "set y": "Задать y",
+ "get x": "x",
+ "get y": "y",
+ "follow this": "Следовать за этой копией",
+ "follow": "Следовать",
+ "set zoom": "Задать зум камеры",
+ "get zoom": "зум",
+ "set targetX": "Задать целевое x",
+ "set targetY": "Задать целевое y",
+ "set shiftX": "Задать сдвиг по горизонтали",
+ "set shiftY": "Задать сдвиг по вертикали",
+ "set drift": "Задать силу дрифта",
+ "set rotation": "Задать поворот",
+ "set followX": "Включить следование по x",
+ "set followY": "Включить следование по y",
+ "set borderX": "Задать горизонтальные рамки для следования",
+ "set borderY": "Задать вертикальные рамки для следования",
+ "set shake": "Задать силу тряски экрана",
+ "set shakeDecay": "Задать скорость затухания тряски экрана",
+ "set shakeFrequency": "Задать частоту тряски экрана",
+ "set shakeX": "Задать силу горизонтальной тряски",
+ "set shakeY": "Задать силу вертикальной тряски",
+ "set shakeMax": "Задать максимально возможную силу тряски",
+ "set minX": "Задать левую границу камеры",
+ "set maxX": "Задать правую границу камеры",
+ "set minY": "Задать верхнюю границу камеры",
+ "set maxY": "Задать правую границу камеры",
+ "get targetX": "целевой x",
+ "get targetY": "целевой y",
+ "get computedX": "текущий x",
+ "get computedY": "текущий y",
+ "get shiftX": "горизонтальный сдвиг",
+ "get shiftY": "вертикальный сдвиг",
+ "get drift": "сила дрифта",
+ "get left": "левая сторона",
+ "get right": "правая сторона",
+ "get top": "верхняя сторона",
+ "get bottom": "нижняя сторона",
+ "get rotation": "поворот",
+ "get followX": "следовать по горизонтали",
+ "get followY": "следовать по вертикали",
+ "get borderX": "горизонтальные рамки",
+ "get borderY": "вертикальные рамки",
+ "get shake": "сила тряски",
+ "get shakeDecay": "скорость угасания тряски",
+ "get shakeFrequency": "частота тряски",
+ "get shakeX": "сила тряски по горизонтали",
+ "get shakeY": "сила тряски по вертикали",
+ "get shakeMax": "макс. сила тряски",
+ "get minX": "левая граница",
+ "get maxX": "правая граница",
+ "get minY": "верхняя граница",
+ "get maxY": "нижняя граница",
+ "console log": "Записать в консоль",
+ "console warn": "Отправить предупреждение в консоль",
+ "console error": "Отправить ошибку в консоль",
+ "set depth": "Задать глубину",
+ "get depth": "глубина",
+ "script options": "Настройки скрипта",
+ "run script": "Запустить скрипт",
+ "hasSubstring": "содержит строку",
+ "substringPosition": "расположение строки",
+ "stringLength": "длина строки",
+ "replace substring": "заменить строку",
+ "replace all substrings": "заменить все строки",
+ "trim whitespace": "обрезать пробелы",
+ "regex passes": "regex проходит",
+ "replace by regex": "заменить по regex",
+ "replace all by regex": "заменить всё по regex",
+ "split by a substring": "разделить по строке",
+ "split": "разделить в массив",
+ "slice a string": "обрезать строку",
+ "to uppercase": "большими буквами",
+ "to lowercase": "малыми буквами",
+ "array unshift": "Добавить элемент в начало",
+ "array push": "Добавить элемент в конец",
+ "add element at position": "Вставить элемент в позиции",
+ "array pop": "Удалить последний элемент массива",
+ "array shift": "Удалить первый элемент массива",
+ "remove element from array": "Удалить элемент из массива",
+ "remove at position": "Удалить элемент в определённой позиции",
+ "filter array": "Отфильтровать массив",
+ "map array": "Преобразовать элементы массива",
+ "set text": "Задать текст",
+ "set disabled": "Задать выключенное состояние",
+ "get text": "получить текст",
+ "get disabled": "выключен ли",
+ "set timer 1": "Завести 1-й таймер",
+ "set timer 2": "Завести 2-й таймер",
+ "set timer 3": "Завести 3-й таймер",
+ "set timer 4": "Завести 4-й таймер",
+ "set timer 5": "Завести 5-й таймер",
+ "set timer 6": "Завести 6-й таймер",
+ "get timer 1": "Получить значение 1-го таймера",
+ "get timer 2": "Получить значение 2-го таймера",
+ "get timer 3": "Получить значение 3-го таймера",
+ "get timer 4": "Получить значение 4-го таймера",
+ "get timer 5": "Получить значение 5-го таймера",
+ "get timer 6": "Получить значение 6-го таймера",
+ "get width": "ширина",
+ "get height": "высота",
+ "set width": "Поменять ширину на",
+ "set height": "Поменять высоту на",
+ "const string": "Строка (константа)",
+ "if branch": "Условие Если",
+ "concatenate strings triple": "Объединить три строки",
+ "emitter tandems Emitters stop": "Остановить и удалить эмиттер",
+ "emitter tandems Emitters pause": "Приостановить эмиттер",
+ "emitter tandems Emitters resume": "Возобновить эмиттер",
+ "emitter tandems Emitters clear": "Очистить все частицы эмиттера",
+ "define function": "Объявить функцию",
+ "return": "Вернуть результат",
+ "execute function": "Выполнить функцию",
+ "get function option": "считать опцию",
+ "set game speed": "Поменять скорость игры",
+ "get game speed": "Считать скорость игры",
+ "deserialize object": "Десериализировать объект",
+ "serialize object": "сериализировать объект",
+ "save to storage": "Сохранить под ключом",
+ "delete from storage": "Удалить ключ",
+ "load from storage": "загрузить из ключа",
+ "is key in storage": "ключ в хранилище?",
+ "owning room": "комната-родитель копии"
+ },
+ "blockDisplayNames": {
+ "if else branch": "Если",
+ "while loop cycle": "Пока",
+ "repeat": "Повторить",
+ "for each": "Для каждого",
+ "NOT logic operator": "не",
+ "write": "Записать",
+ "set": "Задать",
+ "x of": "x",
+ "y of": "y",
+ "options": "настройки",
+ "lengthOf": "длина",
+ "split": "разделить",
+ "join": "объединить",
+ "add element": "Добавить элемент",
+ "remove element": "Удалить элемент",
+ "set timer 1 to": "Завести 1-й таймер на",
+ "set timer 2 to": "Завести 2-й таймер на",
+ "set timer 3 to": "Завести 3-й таймер на",
+ "set timer 4 to": "Завести 4-й таймер на",
+ "set timer 5 to": "Завести 5-й таймер на",
+ "set timer 6 to": "Завести 6-й таймер на",
+ "timer": "таймер",
+ "read": "считать",
+ "set game speed to": "Поменять скорость игры на",
+ "game speed": "скорость игры"
+ },
+ "blockLabels": {
+ "value": "значение",
+ "property": "свойство",
+ "changeBy": "на",
+ "is not": "не равен",
+ "is": "равен",
+ "else": "Иначе",
+ "timesCount": "раз",
+ "store index in": "хранить индекс в",
+ "store in": "сохранить в",
+ "of array": "массива",
+ "AND": "и",
+ "OR": "или",
+ "toWrite": "в",
+ "fromRead": "у",
+ "atPosition": "у",
+ "forDuring": "в течение",
+ "toDestination": "к",
+ "of current room": "текущей комнаты",
+ "to current room": "текущей комнате",
+ "then": "Затем",
+ "catch": "При ошибке",
+ "and play animation": "и играть анимацию",
+ "and stop animation": "и остановить анимацию",
+ "scale": "размер",
+ "position": "положение",
+ "inInside": "в",
+ "contains": "содержит",
+ "replace": "заменить",
+ "replaceAll": "заменить всё",
+ "replaceByRegex": "заменить по regex",
+ "replaceAllByRegex": "заменить всё по regex",
+ "fromDestination": "от",
+ "fromSource": "из",
+ "and": "и",
+ "at position": "в позиции",
+ "with results in": "и сохранить результат в",
+ "store new array in": "сохранить новый массив в",
+ "and elements": "и элементы",
+ "secondsUnits": "сек.",
+ "store result in": "сохранить результат в"
+ },
+ "asyncHint": "Этот блок выполняется асинхронно, т.е. он выполнится позднее и не будет блокировать выполнение скрипта. Используй зоны для блоков ниже чтобы выполнить команды при завершении работы этого блока, но обрати внимание, что к этому времени обстоятельства могут поменяться: например, копия, которая выполнила этот блок, может быть уже удалена к завершению (в зависимости от твоей игровой логики).",
+ "optionsAdvanced": "Расширенные настройки",
+ "addCustomOption": "Добавить свойство",
+ "changeBlockTo": "Поменять на \"$1\"",
+ "blockOptions": {
+ "soundVolume": "Громкость",
+ "loop": "Играть циклично",
+ "isRoomUi": "Это комната для интерфейса?",
+ "speed": "Скорость",
+ "start at": "Начать с",
+ "soundSingleInstance": "Остановить другие звуки этого ассета"
+ },
+ "goToActions": "Перейти в настройки Действий",
+ "copyDocHtml": "Скопировать HTML для документации",
+ "copySelection": "Скопировать выбранные блоки",
+ "duplicateBlock": "Дублировать этот блок",
+ "requiredField": "Это поле обязательно для заполнения.",
+ "unnamedGroup": "Безымянная группа",
+ "blockDocumentation": {
+ "serialize object": "Этот блок сериализирует объект в строку, которую позднее можно безопасно сохранить или передать. Этот метод не поддерживает объект Date, функции, и структуры с цикличными ссылками. Объекты, сериализированные этим блоком, должны десериализироваться блоком \"Десериализировать объекта\"",
+ "constant string": "Этот блок можно использовать, чтобы явно создать строку: например, когда нужно написать числа в строке или конвертировать \\n в перенос строки при записи переменной в слот-джокер."
+ }
},
"colorPicker": {
"old": "Старый",
@@ -205,7 +627,10 @@
"emptySound": "В одном из звуковых ассетов не было прикреплено никаких звуковых файлов. Зайди в него и добавь звук, или удали ассет.",
"emptyEmitter": "В одной из систем частиц есть эмиттер без текстуры. Тебе нужно либо поставить текстуру, либо удалить этот эмиттер.",
"windowsFileLock": "Это проблема Windows с блокировкой файлов. Закрой все внешние браузеры, что запускали эту игру, и попробуй ещё. Если это не поможет, перезапусти ct.js.",
- "noTemplateTexture": "В одном из твоих шаблонов не указана текстура. Тебе нужно указать текстуру для него."
+ "noTemplateTexture": "В одном из твоих шаблонов не указана текстура. Тебе нужно указать текстуру для него.",
+ "blockArgumentMissing": "В скрипте на Котомяте не был указан аргумент, либо он ссылается на удалённый ассет. Перейди в ассет и укажи новое значение в блоке, упомянутом выше.",
+ "blockDeclarationMissing": "В твоём коде на Котомяте есть блок, для которого отсутствует котомод. Если недавно были отключены котомоды, попробуй включить их обратно, или же удали проблемные блоки.",
+ "eventMissing": "Одно из событий твоего ассета использует отсутсвующий котомод. Проверь, установлены ли все требуемые котомоды и, если недавно какие-то из них были отключены тобой, попробуй включить их обратно."
},
"stacktrace": "Стек вызова",
"jumpToProblem": "Перейти к проблеме",
@@ -246,13 +671,41 @@
"github": "Котэ на Гитхабе",
"itch": "Страница ct.js на itch.io",
"vkontakte": "Паблик Вконтакте",
+ "telegram": "Чат в телеге",
"patreon": "Поддержи кота на Патреоне!",
"sponsoredBy": "Спонсируется $1!",
"supportedBy": "Спасибо за поддержку $1!",
"templates": "Шаблоны",
"templatesInfo": "Начни разработку игры с одним из этих шаблонов. В них графика-заглушка, но прекрасно работающие механики. При выборе шаблона откроется выбор папки для твоего нового проекта.",
"boosty": "Поддержи ct.js на Boosty!",
- "nothingToShowFiller": "Тут пока нечего показывать! Попробуй Примеры или создай свой собственный проект."
+ "nothingToShowFiller": "Тут пока нечего показывать! Попробуй Примеры или создай свой собственный проект.",
+ "newUserHeader": "Добро пожаловать в ct.js!",
+ "welcomeHeaders": [
+ "С возвращением, Tumblr sexyman!",
+ "С возвращением, Нео!",
+ "Это же наш крутой программист! С возвращением!",
+ "Рад тебя видеть снова!",
+ "С возвращением, Суперстар!",
+ "Ты наконец проснулся. С возвращением!",
+ "Генерал Кеноби!",
+ "🖖",
+ "Здравствуй, путник!",
+ "Охаё, семпай uwu",
+ "Халло :D Халло :D Халло :D",
+ "Рада тебя видеть, увалень.",
+ "✉️ Рейд: Хакермен пираты",
+ "Добро пожаловать в Ущелье Призывателей!",
+ "Добро пожаловать в 20-ю тестовую камеру."
+ ],
+ "ctDistributions": {
+ "released": "Релизная версия",
+ "nightly": "Ночная сборка 🌚",
+ "dev": "Запускаемся с сорсов 🤓"
+ },
+ "gamesFromCommunity": "Игры от сообщества",
+ "submitYourOwn": "Отправить своё",
+ "learningResources": "Обучающие материалы",
+ "authorBy": "от $1"
},
"onboarding": {
"hoorayHeader": "Ух-ты! Мы сделали новый проект!",
@@ -706,7 +1159,11 @@
"HCBlack": "Высококонтрастная чёрная",
"RosePine": "Rosé Pine",
"RosePineMoon": "Rosé Pine Лунная",
- "RosePineDawn": "Rosé Pine Рассветная"
+ "RosePineDawn": "Rosé Pine Рассветная",
+ "GoldenEye": "Золотой Глаз",
+ "AlmaSakura": "Альма Сакура",
+ "Synthwave": "Синтвейв '84",
+ "OneDarkPro": "One Dark Pro"
},
"prideMode": "Цветная навигация",
"codeFontDefault": "По умолчанию (Iosevka Light)",
@@ -723,7 +1180,16 @@
"disableSounds": "Отключить звуки интерфейса",
"changeDataFolder": "Изменить папку данных ct.js",
"forceProductionForDebug": " Включить релизные функции для дебаг-экспортов",
- "altTemplateLayout": "Альт. вёрстка редактора шаблонов"
+ "altTemplateLayout": "Альт. вёрстка редактора шаблонов",
+ "changeDebuggerLayout": "Поменять вёрстку дебаггера",
+ "debuggerLayout": "Вёрстка дебаггера",
+ "debuggerLayouts": {
+ "split": "разделённая",
+ "multiwindow": "несколько окон",
+ "automatic": "автоматическая"
+ },
+ "scrollableCatnipLibrary": "Прокручиваемая библиотека блоков Котомяты",
+ "autoapplyOnLaunch": "Применять все изменения перед запуском"
},
"project": {
"save": "Сохранить проект",
@@ -988,8 +1454,9 @@
"strokeColor": "Цвет обводки",
"strokeWeight": "Толщина обводки:",
"testText": "Тест Test 0123 +",
- "fontFamily": "Семейство шрифтов:",
- "fontSize": "Размер шрифта:"
+ "fallbackFontFamily": "Резервное семейство шрифтов:",
+ "fontSize": "Размер шрифта:",
+ "notSupportedForBitmap": "Эти настройки не поддерживаются битмап-шрифтами"
},
"textureView": {
"center": "Ось вращения",
@@ -1057,7 +1524,10 @@
},
"customCharsetHint": "Впишите все буквы, которые нужно добавить в шрифт — как в верхнем, так и в нижнем регистре.",
"fontWeight": "Жирность:",
- "typefaceName": "Название семейства:"
+ "typefaceName": "Название семейства:",
+ "addFont": "Добавить шрифт…",
+ "pixelPerfect": "Пиксельарт-точность",
+ "pixelPerfectTooltip": "Должно быть включено для пиксельных шрифтов. Включение этой опции улучшит отрисовку линий толщиной в один пиксель, но уменьшит максимальный размер холста шрифта до 4k на 4k (но для пиксельных шрифтов этого предостаточно). Помимо этого, помни, что в редакторах комнат и стилей все надписи рисуются другим методом, и пиксельные шрифты в них будут мыльными — это норма."
},
"licensePanel": {
"ctjsLicense": "Лицензия Ct.js (MIT)",
@@ -1109,7 +1579,8 @@
"Button": "Кнопка",
"RepeatingTexture": "Повторяющаяся текстура",
"SpritedCounter": "Спрайтовый счётчик",
- "TextBox": "Поле ввода"
+ "TextBox": "Поле ввода",
+ "BitmapText": "Битмап-текст"
},
"nineSliceTop": "Верхний срез, в пикселях",
"nineSliceRight": "Правый срез, в пикселях",
@@ -1130,7 +1601,9 @@
"scrollSpeedX": "Скорость прокрутки по X:",
"scrollSpeedY": "Скорость прокрутки по Y:",
"isUi": "Использовать UI время",
- "defaultCount": "Кол-во спрайтов по умолчанию:"
+ "defaultCount": "Кол-во спрайтов по умолчанию:",
+ "useBitmapText": "Использовать битмап-шрифты",
+ "errorBitmapNotConfigured": "Выбранный стиль не привязан к семейству шрифтов с битмап-шрифтом. Открой этот стиль, привяжи его к семейству шрифтов, и убедись, что выбранное семейство шрифтов настроено для экспорта битмап-шрифтов. После этого примени изменения."
},
"assetInput": {
"changeAsset": "Нажмите, чтобы заменить ассет",
@@ -1194,7 +1667,9 @@
"OnAppFocus": "Приложение активно",
"OnAppBlur": "Приложение в фоне",
"OnTextChange": "Когда сменился текст",
- "OnTextInput": "Когда вводят текст"
+ "OnTextInput": "Когда вводят текст",
+ "OnBehaviorAdded": "Поведение добавлено",
+ "OnBehaviorRemoved": "Поведение удалено"
},
"coreParameterizedNames": {
"OnActionPress": "При нажатии %%action%%",
@@ -1234,12 +1709,16 @@
"OnAppFocus": "Срабатывает, когда пользователь возвращается к твоему приложению.",
"OnAppBlur": "Срабатывает, когда пользователь переключается с твоей игры на что-то другое — переходя по вкладкам, переключаясь между окнами, или сворачивая игру.",
"OnTextChange": "Срабатывает, когда пользователь заканчивает редактирование нажатием вне поля или кнопкой Enter.",
- "OnTextInput": "Срабатывает каждый раз, когда пользователь меняет текст в этом поле."
+ "OnTextInput": "Срабатывает каждый раз, когда пользователь меняет текст в этом поле.",
+ "OnBehaviorAdded": "Вызывается каждый раз, когда поведение динамически добавляется копии. Это событие не работает для статичных поведений; для них используй событие Создания.",
+ "OnBehaviorRemoved": "Вызывается каждый раз, когда поведение динамически удаляется из копии. Это событие не работает для статичных поведений; для них используй событие Уничтожения."
},
"jumpToProblem": "Перейти к проблеме",
"staticEventWarning": "Это событие делает это поведение статичным. Ты не сможешь добавлять его в игре динамически через API поведений, но в остальном оно прекрасно работает.",
"restrictedEventWarning": "Это событие будет работать только с шаблонами следующих базовых классов: $1. Оно не будет работать, если будет применено к другим базовым классам.",
- "baseClassWarning": "Это событие не работает с текущим базовым классом."
+ "baseClassWarning": "Это событие не работает с текущим базовым классом.",
+ "typedefs": "Дополнительные типы свойств:",
+ "typedefsHint": "Здесь можно описать типы свойств этого ассета, чтобы они были однозначно типизированы в коде. Например:\n\n\n\nname: string;\nhp: number;\nmana: number;\ninventory: any[];\n Это необязательная настройка."
},
"languageSelector": {
"chooseLanguageHeader": "Выбери язык программирования",
@@ -1249,7 +1728,10 @@
"jsAndTs": "JavaScript (и TypeScript)",
"jsTsDescription": "Язык интернета. Синтаксис более сложный, но редактор кода будет подсвечивать ошибки и подсказывать названия функций. Выбери его, если у тебя есть навыки работы с JS, C# или Java.",
"pickJsTs": "JavaScript, я выбираю тебя!",
- "acceptAndSpecifyDirectory": "Принять и выбрать папку проекта"
+ "acceptAndSpecifyDirectory": "Принять и выбрать папку проекта",
+ "catnip": "Котомята (Catnip)",
+ "catnipDescription": "Язык визуального программирования, созданный специально для ct.js. Блоки размещаются мышью и с клавиатуры. Хороший выбор для новичков.",
+ "pickCatnip": "Котомята, я выбираю тебя!"
},
"assetConfirm": {
"confirmHeading": "Выберите действие",
@@ -1300,6 +1782,8 @@
"scriptView": {
"runAutomatically": "Запустить при старте игры",
"language": "Язык:",
- "convertToJavaScript": "Конвертировать в JavaScript"
+ "convertToJavaScript": "Конвертировать в JavaScript",
+ "confirmSwitchToCatnip": "Переключение на Котомяту удалит весь код в этом скрипте. Ты точно хочешь продолжить?",
+ "confirmSwitchFromCatnip": "Переключение с котомяты удалит весь код в этом скрипте. Если ты хочешь сохранить код, сконвертируй его в JavaScript. Ты точно хочешь продолжить и очистить код?"
}
}
diff --git a/app/data/i18n/Spanish.json b/app/data/i18n/Spanish.json
index f2ebc17fb..04ae4bbb0 100644
--- a/app/data/i18n/Spanish.json
+++ b/app/data/i18n/Spanish.json
@@ -99,7 +99,7 @@
"",
""
],
- "font": [
+ "typeface": [
"",
"",
""
@@ -795,7 +795,6 @@
"strokeColor": "Color del trazo:",
"strokeWeight": "Grosor de línea:",
"testText": "Texto de prueba 0123 +",
- "fontFamily": "Familia de Fuente:",
"fontSize": "Tamaño de fuente:"
},
"textureView": {
diff --git a/app/data/i18n/Turkish.json b/app/data/i18n/Turkish.json
index 5f0922467..d8b7a591d 100644
--- a/app/data/i18n/Turkish.json
+++ b/app/data/i18n/Turkish.json
@@ -93,7 +93,7 @@
"odalar",
"odalar"
],
- "font": [
+ "typeface": [
"font",
"fontlar",
"fontlar"
@@ -965,7 +965,6 @@
"strokeColor": "Hat rengi:",
"strokeWeight": "Çizgi ağırlığı:",
"testText": "Deneme yazısı 0123 +",
- "fontFamily": "Font ailesi:",
"fontSize": "Font boyutu:"
},
"textureView": {
diff --git a/app/data/i18n/Ukranian.json b/app/data/i18n/Ukranian.json
index 723f59672..e28a8ab90 100644
--- a/app/data/i18n/Ukranian.json
+++ b/app/data/i18n/Ukranian.json
@@ -99,7 +99,7 @@
"кімнати",
"кімнат"
],
- "font": [
+ "typeface": [
"шрифт",
"шрифту",
"шрифтів"
@@ -795,7 +795,6 @@
"strokeColor": "Колір обведення",
"strokeWeight": "Товщина обведення:",
"testText": "Тест Test 0123+",
- "fontFamily": "Родина шрифтів:",
"fontSize": "Розмір шрифту:"
},
"textureView": {
diff --git a/app/data/img/bg.png b/app/data/img/bg.png
deleted file mode 100644
index 9b33d6782..000000000
Binary files a/app/data/img/bg.png and /dev/null differ
diff --git a/app/data/img/ctjsLogo.svg b/app/data/img/ctjsLogo.svg
new file mode 100644
index 000000000..c09d379bf
--- /dev/null
+++ b/app/data/img/ctjsLogo.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/package-lock.json b/app/package-lock.json
index b1fb24965..425ca9226 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -1,220 +1,272 @@
{
"name": "ctjs",
- "version": "4.0.2",
+ "version": "5.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ctjs",
- "version": "4.0.2",
+ "version": "5.0.0",
"license": "MIT",
"dependencies": {
- "@capacitor/cli": "^5.5.0",
- "@capacitor/core": "^5.5.0",
- "@neutralinojs/neu": "^10.1.0",
- "@pixi/particle-emitter": "5.0.8",
- "@pixi/sound": "^5.2.2",
- "@trapezedev/project": "^7.0.10",
- "archiver": "^3.1.1",
- "coffeescript": "^2.7.0",
- "csswring": "7.0.0",
- "dragonbones-tools": "^0.1.2",
- "electron-packager": "^16.0.0",
- "execa": "^5.1.1",
- "extract-zip": "^2.0.1",
- "fs-extra": "^10.1.0",
- "fuse.js": "^3.6.1",
- "highlight.js": "^10.4.1",
- "html-minifier": "^3.5.21",
- "html2pug": "^4.0.0",
- "is-expression": "^4.0.0",
- "javascript-obfuscator": "^4.0.2",
- "js-yaml": "^3.14.0",
- "markdown-it": "12.3.2",
- "maxrects-packer": "^2.7.3",
- "microm": "^0.2.4",
- "monaco-editor": "^0.34.0",
- "monaco-themes": "^0.4.2",
- "nanoid": "^3.1.31",
- "on-change": "^4.0.2",
- "opentype.js": "^1.3.3",
- "pixi-ease": "^3.0.7",
- "pixi.js": "7.3.2",
- "pixi.js-legacy": "7.3.2",
+ "@neutralinojs/neu": "^11.0.1",
"png2icons": "^2.0.1",
- "resedit-cli": "^2.0.0",
- "serve-handler": "^6.1.5",
- "sucrase": "^3.25.0",
- "terser": "^5.14.2",
- "ttf2woff": "^2.0.2"
+ "resedit-cli": "^2.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.24.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+ "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.24.2",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
+ "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
- "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
+ "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
+ "@babel/helper-validator-identifier": "^7.24.5",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@capacitor/cli": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.5.1.tgz",
- "integrity": "sha512-/oGd2IIc+k1H/fc7tUzP7vqMtZi0gNcJ4/4wUE2kzAnETxxxHXMM/2V62KfjCby/OOAzJbtI7n5OPlnWE9un1A==",
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dependencies": {
- "@ionic/cli-framework-output": "^2.2.5",
- "@ionic/utils-fs": "^3.1.6",
- "@ionic/utils-subprocess": "^2.1.11",
- "@ionic/utils-terminal": "^2.3.3",
- "commander": "^9.3.0",
- "debug": "^4.3.4",
- "env-paths": "^2.2.0",
- "kleur": "^4.1.4",
- "native-run": "^1.7.3",
- "open": "^8.4.0",
- "plist": "^3.0.5",
- "prompts": "^2.4.2",
- "rimraf": "^4.4.1",
- "semver": "^7.3.7",
- "tar": "^6.1.11",
- "tslib": "^2.4.0",
- "xml2js": "^0.5.0"
+ "color-convert": "^1.9.0"
},
- "bin": {
- "cap": "bin/capacitor",
- "capacitor": "bin/capacitor"
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=4"
}
},
- "node_modules/@capacitor/cli/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "color-name": "1.1.3"
}
},
- "node_modules/@capacitor/cli/node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">=4"
}
},
- "node_modules/@capacitor/cli/node_modules/glob": {
- "version": "9.3.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
- "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "minimatch": "^8.0.2",
- "minipass": "^4.2.4",
- "path-scurry": "^1.6.1"
+ "has-flag": "^3.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=4"
}
},
- "node_modules/@capacitor/cli/node_modules/minimatch": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
- "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
+ "node_modules/@neutralinojs/neu": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/@neutralinojs/neu/-/neu-11.0.1.tgz",
+ "integrity": "sha512-GIQW8KUi3X3Bb90ozFBRq5ZjsN6ktY+AK+w8y8tErHw2nkn/NGt4Nuu+nssutnJawR87EgCmZ7FXoa3wx2UCqg==",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "archiver": "^4.0.2",
+ "asar": "^3.0.3",
+ "chalk": "^4.1.0",
+ "chokidar": "^3.5.1",
+ "commander": "^7.2.0",
+ "configstore": "^5.0.1",
+ "decompress": "^4.2.1",
+ "edit-json-file": "^1.6.2",
+ "figlet": "^1.5.0",
+ "follow-redirects": "^1.13.1",
+ "fs-extra": "^9.0.1",
+ "recursive-readdir": "^2.2.2",
+ "spawn-command": "^0.0.2-1",
+ "tcp-port-used": "^1.0.2",
+ "uuid": "^8.3.2",
+ "websocket": "^1.0.34"
},
- "engines": {
- "node": ">=16 || 14 >=14.17"
+ "bin": {
+ "neu": "bin/neu.js"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "patreon",
+ "url": "https://www.patreon.com/shalithasuranga"
}
},
- "node_modules/@capacitor/cli/node_modules/minipass": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
- "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "optional": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "optional": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.12.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
+ "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
+ "optional": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"engines": {
"node": ">=8"
}
},
- "node_modules/@capacitor/cli/node_modules/rimraf": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
- "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dependencies": {
- "glob": "^9.2.0"
- },
- "bin": {
- "rimraf": "dist/cjs/src/bin.js"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=14"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@capacitor/core": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.5.1.tgz",
- "integrity": "sha512-VG6Iv8Q7ZAbvjodxpvjcSe0jfxUwZXnvjbi93ehuJ6eYP8U926qLSXyrT/DToZq+F6v/HyGyVgn3mrE/9jW2Tg==",
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dependencies": {
- "tslib": "^2.1.0"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@cspotcode/source-map-consumer": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
- "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
+ "node_modules/archiver": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz",
+ "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==",
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^3.2.0",
+ "buffer-crc32": "^0.2.1",
+ "glob": "^7.1.6",
+ "readable-stream": "^3.6.0",
+ "tar-stream": "^2.1.2",
+ "zip-stream": "^3.0.1"
+ },
"engines": {
- "node": ">= 12"
+ "node": ">= 8"
}
},
- "node_modules/@cspotcode/source-map-support": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
- "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
"dependencies": {
- "@cspotcode/source-map-consumer": "0.8.0"
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/archiver-utils/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
}
},
- "node_modules/@electron/asar": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.2.tgz",
- "integrity": "sha512-32fMU68x8a6zvxtC1IC/BhPDKTh8rQjdmwEplj3CDpnkcwBzZVN9v/8cK0LJqQ0FOQQVZW8BWZ1S6UU53TYR4w==",
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/asar": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz",
+ "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==",
+ "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change",
"dependencies": {
"chromium-pickle-js": "^0.2.0",
"commander": "^5.0.0",
@@ -231,7 +283,7 @@
"@types/glob": "^7.1.1"
}
},
- "node_modules/@electron/asar/node_modules/commander": {
+ "node_modules/asar/node_modules/commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
"integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
@@ -239,8077 +291,1353 @@
"node": ">= 6"
}
},
- "node_modules/@electron/get": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.1.tgz",
- "integrity": "sha512-8nmTGC/3/6IaEfeTcQwtJdjLA/L3sb0XQJUv9x3ZfM0pfmKvkSdelbT4pgF3dpCQOvSmJ97kYAvFltikVjfepA==",
- "dependencies": {
- "debug": "^4.1.1",
- "env-paths": "^2.2.0",
- "fs-extra": "^8.1.0",
- "got": "^11.8.5",
- "progress": "^2.0.3",
- "semver": "^6.2.0",
- "sumchecker": "^3.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "global-agent": "^3.0.0",
- "global-tunnel-ng": "^2.7.1"
- }
+ "node_modules/async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
},
- "node_modules/@electron/get/node_modules/@sindresorhus/is": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
- "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
+ "node": ">= 4.0.0"
}
},
- "node_modules/@electron/get/node_modules/@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
- "dependencies": {
- "defer-to-connect": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/@electron/get/node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "node_modules/@electron/get/node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@electron/get/node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "engines": {
- "node": ">=10"
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "node_modules/@electron/get/node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/@electron/get/node_modules/got": {
- "version": "11.8.5",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz",
- "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==",
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
+ "fill-range": "^7.0.1"
},
"engines": {
- "node": ">=10.19.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/@electron/get/node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
- },
- "node_modules/@electron/get/node_modules/keyv": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz",
- "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==",
- "dependencies": {
- "json-buffer": "3.0.1"
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
}
},
- "node_modules/@electron/get/node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "engines": {
- "node": ">=8"
+ "node_modules/buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dependencies": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
}
},
- "node_modules/@electron/get/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "node_modules/buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
},
- "node_modules/@electron/get/node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "*"
}
},
- "node_modules/@electron/get/node_modules/p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "engines": {
- "node": ">=8"
- }
+ "node_modules/buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ=="
},
- "node_modules/@electron/get/node_modules/responselike": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
- "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
+ "node_modules/bufferutil": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz",
+ "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==",
+ "hasInstallScript": true,
"dependencies": {
- "lowercase-keys": "^2.0.0"
+ "node-gyp-build": "^4.3.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@electron/get/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
+ "engines": {
+ "node": ">=6.14.2"
}
},
- "node_modules/@electron/universal": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.3.4.tgz",
- "integrity": "sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==",
- "dependencies": {
- "@electron/asar": "^3.2.1",
- "@malept/cross-spawn-promise": "^1.1.0",
- "debug": "^4.3.1",
- "dir-compare": "^3.0.0",
- "fs-extra": "^9.0.1",
- "minimatch": "^3.0.4",
- "plist": "^3.0.4"
- },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"engines": {
- "node": ">=8.6"
+ "node": ">=6"
}
},
- "node_modules/@electron/universal/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@electron/universal/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dependencies": {
- "universalify": "^2.0.0"
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
},
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/universal/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"engines": {
- "node": ">= 10.0.0"
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
}
},
- "node_modules/@hutson/parse-repository-url": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz",
- "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==",
- "engines": {
- "node": ">=6.9.0"
- }
+ "node_modules/chromium-pickle-js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
+ "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw=="
},
- "node_modules/@ionic/cli-framework-output": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.7.tgz",
- "integrity": "sha512-/BXeclqu3y+bsBF7VFRS9xtNbrXf2JYCj/LeJoyLpWA9PeXNfvFrn91W2lwS2HVDjEDWKl4Ye6edJDdtn76EnA==",
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dependencies": {
- "@ionic/utils-terminal": "2.3.4",
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=12"
}
},
- "node_modules/@ionic/utils-array": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz",
- "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==",
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=7.0.0"
}
},
- "node_modules/@ionic/utils-fs": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz",
- "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==",
- "dependencies": {
- "@types/fs-extra": "^8.0.0",
- "debug": "^4.0.0",
- "fs-extra": "^9.0.0",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
- }
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "node_modules/@ionic/utils-fs/node_modules/@types/fs-extra": {
- "version": "8.1.5",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz",
- "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==",
- "dependencies": {
- "@types/node": "*"
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@ionic/utils-fs/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "node_modules/compress-commons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz",
+ "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==",
"dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^3.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.3.7"
},
"engines": {
- "node": ">=10"
+ "node": ">= 8"
}
},
- "node_modules/@ionic/utils-fs/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/compress-commons/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "node_modules/@ionic/utils-fs/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "engines": {
- "node": ">= 10.0.0"
- }
+ "node_modules/compress-commons/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
- "node_modules/@ionic/utils-object": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
- "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
+ "node_modules/compress-commons/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
+ "safe-buffer": "~5.1.0"
}
},
- "node_modules/@ionic/utils-process": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.11.tgz",
- "integrity": "sha512-Uavxn+x8j3rDlZEk1X7YnaN6wCgbCwYQOeIjv/m94i1dzslqWhqIHEqxEyeE8HsT5Negboagg7GtQiABy+BLbA==",
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
"dependencies": {
- "@ionic/utils-object": "2.1.6",
- "@ionic/utils-terminal": "2.3.4",
- "debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "tree-kill": "^1.2.2",
- "tslib": "^2.0.1"
+ "dot-prop": "^5.2.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^3.0.0",
+ "unique-string": "^2.0.0",
+ "write-file-atomic": "^3.0.0",
+ "xdg-basedir": "^4.0.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=8"
}
},
- "node_modules/@ionic/utils-stream": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.6.tgz",
- "integrity": "sha512-4+Kitey1lTA1yGtnigeYNhV/0tggI3lWBMjC7tBs1K9GXa/q7q4CtOISppdh8QgtOhrhAXS2Igp8rbko/Cj+lA==",
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@ionic/utils-subprocess": {
- "version": "2.1.14",
- "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.14.tgz",
- "integrity": "sha512-nGYvyGVjU0kjPUcSRFr4ROTraT3w/7r502f5QJEsMRKTqa4eEzCshtwRk+/mpASm0kgBN5rrjYA5A/OZg8ahqg==",
+ "node_modules/crc": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
+ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
"dependencies": {
- "@ionic/utils-array": "2.1.6",
- "@ionic/utils-fs": "3.1.7",
- "@ionic/utils-process": "2.1.11",
- "@ionic/utils-stream": "3.1.6",
- "@ionic/utils-terminal": "2.3.4",
- "cross-spawn": "^7.0.3",
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
+ "buffer": "^5.1.0"
}
},
- "node_modules/@ionic/utils-terminal": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.4.tgz",
- "integrity": "sha512-cEiMFl3jklE0sW60r8JHH3ijFTwh/jkdEKWbylSyExQwZ8pPuwoXz7gpkWoJRLuoRHHSvg+wzNYyPJazIHfoJA==",
- "dependencies": {
- "@types/slice-ansi": "^4.0.0",
- "debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "tslib": "^2.0.1",
- "untildify": "^4.0.0",
- "wrap-ansi": "^7.0.0"
+ "node_modules/crc32-stream": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
+ "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
+ "dependencies": {
+ "crc": "^3.4.4",
+ "readable-stream": "^3.4.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">= 6.9.0"
}
},
- "node_modules/@javascript-obfuscator/escodegen": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz",
- "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==",
+ "node_modules/crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/d": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"dependencies": {
- "@javascript-obfuscator/estraverse": "^5.3.0",
- "esprima": "^4.0.1",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
+ "es5-ext": "^0.10.64",
+ "type": "^2.7.2"
},
"engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
+ "node": ">=0.12"
}
},
- "node_modules/@javascript-obfuscator/estraverse": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz",
- "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==",
+ "node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
"engines": {
- "node": ">=4.0"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "node_modules/decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=4"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "node_modules/decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dependencies": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=4"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "engines": {
- "node": ">=6.0.0"
+ "node_modules/decompress-tar/node_modules/bl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
}
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
+ "node_modules/decompress-tar/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ "node_modules/decompress-tar/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
- "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "node_modules/decompress-tar/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "safe-buffer": "~5.1.0"
}
},
- "node_modules/@malept/cross-spawn-promise": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz",
- "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/malept"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund"
- }
- ],
+ "node_modules/decompress-tar/node_modules/tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
"dependencies": {
- "cross-spawn": "^7.0.1"
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
},
"engines": {
- "node": ">= 10"
+ "node": ">= 0.8.0"
}
},
- "node_modules/@neutralinojs/neu": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/@neutralinojs/neu/-/neu-10.1.0.tgz",
- "integrity": "sha512-QUaoFsS18tpU5CfWUUSQjmNiIll5uKseuGYHKcqOR+E6eSX3+nwuMNgyHVKHtNwlVuD+iSBjcVCWatoPNSxBYA==",
+ "node_modules/decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
"dependencies": {
- "archiver": "^4.0.2",
- "asar": "^3.0.3",
- "chalk": "^4.1.0",
- "chokidar": "^3.5.1",
- "commander": "^7.2.0",
- "configstore": "^5.0.1",
- "decompress": "^4.2.1",
- "edit-json-file": "^1.6.2",
- "figlet": "^1.5.0",
- "follow-redirects": "^1.13.1",
- "fs-extra": "^9.0.1",
- "recursive-readdir": "^2.2.2",
- "spawn-command": "^0.0.2-1",
- "tcp-port-used": "^1.0.2",
- "uuid": "^8.3.2",
- "websocket": "^1.0.34"
- },
- "bin": {
- "neu": "bin/neu.js"
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
},
- "funding": {
- "type": "patreon",
- "url": "https://www.patreon.com/shalithasuranga"
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
+ "node_modules/decompress-tarbz2/node_modules/file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/archiver": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz",
- "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==",
+ "node_modules/decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
"dependencies": {
- "archiver-utils": "^2.1.0",
- "async": "^3.2.0",
- "buffer-crc32": "^0.2.1",
- "glob": "^7.1.6",
- "readable-stream": "^3.6.0",
- "tar-stream": "^2.1.2",
- "zip-stream": "^3.0.1"
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/async": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
- "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
- },
- "node_modules/@neutralinojs/neu/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/decompress-unzip/node_modules/file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress/node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dependencies": {
- "color-name": "~1.1.4"
+ "pify": "^3.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/@neutralinojs/neu/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "node_modules/decompress/node_modules/make-dir/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"engines": {
- "node": ">= 10"
+ "node": ">=4"
}
},
- "node_modules/@neutralinojs/neu/node_modules/compress-commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz",
- "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==",
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
"dependencies": {
- "buffer-crc32": "^0.2.13",
- "crc32-stream": "^3.0.1",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.3.7"
+ "is-obj": "^2.0.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=8"
}
},
- "node_modules/@neutralinojs/neu/node_modules/compress-commons/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "node_modules/edit-json-file": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/edit-json-file/-/edit-json-file-1.8.0.tgz",
+ "integrity": "sha512-IBOpbe2aQufNl5oZ4jsr2AmNVUy5bO7jS5hk0cCyWhOLdH59Xv41B3XQObE/JB89Ae5qDY9hVsq13/hgGhFBZg==",
"dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "find-value": "^1.0.12",
+ "iterate-object": "^1.3.4",
+ "r-json": "^1.2.10",
+ "set-value": "^4.1.0",
+ "w-json": "^1.3.10"
}
},
- "node_modules/@neutralinojs/neu/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
+ "once": "^1.4.0"
}
},
- "node_modules/@neutralinojs/neu/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
}
},
- "node_modules/@neutralinojs/neu/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/es5-ext": {
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+ "hasInstallScript": true,
"dependencies": {
- "universalify": "^2.0.0"
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
+ "next-tick": "^1.1.0"
},
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "engines": {
+ "node": ">=0.10"
}
},
- "node_modules/@neutralinojs/neu/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
}
},
- "node_modules/@neutralinojs/neu/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/es6-symbol": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
"dependencies": {
- "has-flag": "^4.0.0"
+ "d": "^1.0.2",
+ "ext": "^1.7.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.12"
}
},
- "node_modules/@neutralinojs/neu/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=6"
}
},
- "node_modules/@neutralinojs/neu/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
}
},
- "node_modules/@neutralinojs/neu/node_modules/zip-stream": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz",
- "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==",
+ "node_modules/esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
"dependencies": {
- "archiver-utils": "^2.1.0",
- "compress-commons": "^3.0.0",
- "readable-stream": "^3.6.0"
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
},
"engines": {
- "node": ">= 8"
+ "node": ">=0.10"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dependencies": {
+ "type": "^2.7.2"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
+ "pend": "~1.2.0"
}
},
- "node_modules/@pixi/assets": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/assets/-/assets-7.2.2.tgz",
- "integrity": "sha512-YtudMqxyPx1yZ3oczP1OIMQJlb0/psymZGU7PMyea0wSYol14imMOdNa0sNFz/at6a6kM1w/vQdlz+8AqML1vw==",
- "peer": true,
- "dependencies": {
- "@types/css-font-loading-module": "^0.0.7"
+ "node_modules/figlet": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz",
+ "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==",
+ "bin": {
+ "figlet": "bin/index.js"
},
- "peerDependencies": {
- "@pixi/core": "7.2.2",
- "@pixi/utils": "7.2.2"
+ "engines": {
+ "node": ">= 0.4.0"
}
},
- "node_modules/@pixi/color": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/color/-/color-7.2.2.tgz",
- "integrity": "sha512-rg3zrwnkCtfX73sbIDuXyBlQWdRlREs4UlvC6gJ0EGHbGtwAK0Zz041fDW8isYYLcjd3LopVlNrjrFGE+v+adQ==",
- "peer": true,
- "dependencies": {
- "colord": "^2.9.3"
+ "node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/@pixi/colord": {
- "version": "2.9.6",
- "resolved": "https://registry.npmjs.org/@pixi/colord/-/colord-2.9.6.tgz",
- "integrity": "sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA=="
- },
- "node_modules/@pixi/constants": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-7.2.2.tgz",
- "integrity": "sha512-hHdXfhRNOCEg/5LbR4izY9feEyxtjNKs6l4Np87iiglvK5oj2hjiLz3c1VHWooNy8VQmndcLC11Tl0krxuQjiw==",
- "peer": true
- },
- "node_modules/@pixi/core": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/core/-/core-7.2.2.tgz",
- "integrity": "sha512-grDYsthKpb9OPlAPrzutogodciky6x8eWz+0ER+I5KBzK/1w1fBYnYiQZCH0MByNJMABE75cynWv9inMJu0rEQ==",
- "peer": true,
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dependencies": {
- "@pixi/color": "7.2.2",
- "@pixi/constants": "7.2.2",
- "@pixi/extensions": "7.2.2",
- "@pixi/math": "7.2.2",
- "@pixi/runner": "7.2.2",
- "@pixi/settings": "7.2.2",
- "@pixi/ticker": "7.2.2",
- "@pixi/utils": "7.2.2",
- "@types/offscreencanvas": "^2019.6.4"
+ "to-regex-range": "^5.0.1"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/pixijs"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@pixi/display": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/display/-/display-7.2.2.tgz",
- "integrity": "sha512-zUkFhwnqsKatwB1I3ZAD1on1RCvuTLZ1MV1JQd97pMBAJBC9UvDuKIJ6Zcr377YXKFnIFGFFxat9LyVTUxTWvQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.2.2"
- }
+ "node_modules/find-value": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/find-value/-/find-value-1.0.12.tgz",
+ "integrity": "sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ=="
},
- "node_modules/@pixi/extensions": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-7.2.2.tgz",
- "integrity": "sha512-b54qLl/GQK6VKgTiaeCg8tyujykfBhLn6PGGoY0fyWXEOYXRPyZ/oZDadz0bhLURwPzfnHbblINkK8L6JJpCSQ==",
- "peer": true
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
},
- "node_modules/@pixi/math": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/math/-/math-7.2.2.tgz",
- "integrity": "sha512-h4Qb2BOhiGoWQnG7RdS0nK5P9k33950S158GqLAXf+jN19fENPJibfh05ckdUwkVtYnd+PuBqcriH/vrRPICfQ==",
- "peer": true
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
- "node_modules/@pixi/particle-emitter": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.8.tgz",
- "integrity": "sha512-OzuZ4+esQo+zJ0u3htuNHHMAE8Ixmr3nz3tEfrTGZHje1vnGyie3ANQj9F0V4OM47oi9jd70njVCmeb7bTkS9A==",
- "peerDependencies": {
- "@pixi/constants": ">=6.0.4 <8.0.0",
- "@pixi/core": ">=6.0.4 <8.0.0",
- "@pixi/display": ">=6.0.4 <8.0.0",
- "@pixi/math": ">=6.0.4 <8.0.0",
- "@pixi/sprite": ">=6.0.4 <8.0.0",
- "@pixi/ticker": ">=6.0.4 <8.0.0"
- }
- },
- "node_modules/@pixi/runner": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-7.2.2.tgz",
- "integrity": "sha512-rXbMGtk1aS8OSR/yMzdHxdWQIaEKAIV6k37L8Zt/wAD1lmTDqvDTjm8BSxPLQMkNGNFL+3YoBgTev1e7aNgWxw==",
- "peer": true
- },
- "node_modules/@pixi/settings": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-7.2.2.tgz",
- "integrity": "sha512-IqkiEZ3c/XAU1iPCuUy+MkzfzI3Hw7xHL24C+QrwbaJtJTodoKyfuKsk/H7T7Sz2f0gop1lfqwC3jGRiYzS/2g==",
- "peer": true,
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"dependencies": {
- "@pixi/constants": "7.2.2",
- "@types/css-font-loading-module": "^0.0.7",
- "ismobilejs": "^1.1.0"
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/@pixi/sound": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/sound/-/sound-5.2.2.tgz",
- "integrity": "sha512-WjUDD24nQaAA2+aHbvDbgB/9l/kni3aNlZSmunU99KBGrQ9NfGS/VvAUxA88b7eOLXNvskzW2cvEnGMbltRiFA==",
- "peerDependencies": {
- "@pixi/assets": "^7.0.0",
- "@pixi/core": "^7.0.0"
- }
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
- "node_modules/@pixi/sprite": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-7.2.2.tgz",
- "integrity": "sha512-GFt7Vyy41rVqQJOtstTD5mC+Dgyc6duySWrsRvCTSD6Q7nvJC+y7Zpgl6If9wbq2wx8CRGk9KlLeBI16rra69Q==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.2.2",
- "@pixi/display": "7.2.2"
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/@pixi/ticker": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-7.2.2.tgz",
- "integrity": "sha512-fNW1WWnDfyc7pk+AUokUeurK19gG3bIX/NQGB+Y7KiP84EwKZbLwMXQWIhc3aRZt7lzEA8yFXQ0+Oqi5IIGFUQ==",
- "peer": true,
- "dependencies": {
- "@pixi/extensions": "7.2.2",
- "@pixi/settings": "7.2.2",
- "@pixi/utils": "7.2.2"
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
}
},
- "node_modules/@pixi/utils": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-7.2.2.tgz",
- "integrity": "sha512-+EMCAA+lDe8AmLzrwAhCNybevuOcGyFHSo1NtRpd7Z1ocrG0atzq4gjKxUX8VoqJ89rWFZdhZpdGPMh0xRELaQ==",
- "peer": true,
+ "node_modules/get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==",
"dependencies": {
- "@pixi/color": "7.2.2",
- "@pixi/constants": "7.2.2",
- "@pixi/settings": "7.2.2",
- "@types/earcut": "^2.1.0",
- "earcut": "^2.2.4",
- "eventemitter3": "^4.0.0",
- "url": "^0.11.0"
- }
- },
- "node_modules/@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
- "node_modules/@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dependencies": {
- "defer-to-connect": "^1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@trapezedev/gradle-parse": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.0.10.tgz",
- "integrity": "sha512-k822Is3jGroqOTKF0gAFm80LmhFJWBAyZvNtyuXq6uQUzDDe2fj/gHwixP6VFzlpaWKLP7IuR609Xv8gwJCXyg=="
- },
- "node_modules/@trapezedev/project": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@trapezedev/project/-/project-7.0.10.tgz",
- "integrity": "sha512-UjwsStjhHq/+D1bWREmFDoyKql+qFIgJX93zQLg7R6CyWZUdtlGP2hU3l7tsVRtjJBVXpVu5mj8tdwJJoABO3A==",
- "dependencies": {
- "@ionic/utils-fs": "^3.1.5",
- "@ionic/utils-subprocess": "^2.1.8",
- "@prettier/plugin-xml": "^2.2.0",
- "@trapezedev/gradle-parse": "7.0.10",
- "@xmldom/xmldom": "^0.7.5",
- "conventional-changelog": "^3.1.4",
- "cross-fetch": "^3.1.5",
- "cross-spawn": "^7.0.3",
- "diff": "^5.1.0",
- "env-paths": "^3.0.0",
- "gradle-to-js": "^2.0.0",
- "ini": "^2.0.0",
- "kleur": "^4.1.5",
- "lodash": "^4.17.21",
- "mergexml": "^1.2.3",
- "npm-watch": "^0.9.0",
- "plist": "^3.0.4",
- "prettier": "^2.7.1",
- "prompts": "^2.4.2",
- "replace": "^1.1.0",
- "tempy": "^1.0.1",
- "tmp": "^0.2.1",
- "ts-node": "^10.2.1",
- "xcode": "^3.0.1",
- "xml-js": "^1.6.11",
- "xpath": "^0.0.32",
- "yargs": "^17.2.1"
- }
- },
- "node_modules/@trapezedev/project/node_modules/@prettier/plugin-xml": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz",
- "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==",
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dependencies": {
- "@xml-tools/parser": "^1.0.11",
- "prettier": ">=2.4.0"
- }
- },
- "node_modules/@trapezedev/project/node_modules/diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "is-glob": "^4.0.1"
+ },
"engines": {
- "node": ">=0.3.1"
+ "node": ">= 6"
}
},
- "node_modules/@trapezedev/project/node_modules/env-paths": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
- "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
- "node_modules/@trapezedev/project/node_modules/ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/@tsconfig/node10": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
- "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg=="
- },
- "node_modules/@tsconfig/node12": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
- "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw=="
- },
- "node_modules/@tsconfig/node14": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
- "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg=="
- },
- "node_modules/@tsconfig/node16": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
- "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA=="
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
- "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@types/css-font-loading-module": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz",
- "integrity": "sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q=="
- },
- "node_modules/@types/earcut": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz",
- "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ=="
- },
- "node_modules/@types/fs-extra": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.12.tgz",
- "integrity": "sha512-alTHKMXq1kGPB9sddbbjJ4OJ9UJ/xiXaaoDzbLhontmlnZLwlJpvIUE8lI7YtcO45gcI9Cwt8hPfmU1rgmVHSQ==",
- "dependencies": {
- "@types/node": "*"
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
}
},
- "node_modules/@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "optional": true,
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "node_modules/@types/keyv": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
- "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
- "dependencies": {
- "@types/node": "*"
+ "node_modules/ip-regex": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
+ "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
- },
- "node_modules/@types/minimist": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
- "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
- },
- "node_modules/@types/node": {
- "version": "12.12.28",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.28.tgz",
- "integrity": "sha512-g73GJYJDXgf0jqg+P9S8h2acWbDXNkoCX8DLtJVu7Fkn788pzQ/oJsrdJz/2JejRf/SjfZaAhsw+3nd1D5EWGg=="
- },
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
- },
- "node_modules/@types/offscreencanvas": {
- "version": "2019.7.0",
- "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz",
- "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg=="
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
},
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dependencies": {
- "@types/node": "*"
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ=="
- },
- "node_modules/@types/validator": {
- "version": "13.7.12",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz",
- "integrity": "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA=="
- },
- "node_modules/@types/yauzl": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
- "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
- "optional": true,
- "dependencies": {
- "@types/node": "*"
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/@xml-tools/parser": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz",
- "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==",
- "dependencies": {
- "chevrotain": "7.1.1"
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@xmldom/xmldom": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.9.tgz",
- "integrity": "sha512-yceMpm/xd4W2a85iqZyO09gTnHvXF6pyiWjD2jcOJs7hRoZtNNOO1eJlhHj1ixA+xip2hOyGn+LgcvLCMo5zXA==",
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
"engines": {
- "node": ">=10.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ "node_modules/is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ=="
},
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "bin": {
- "acorn": "bin/acorn"
- },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"engines": {
- "node": ">=0.4.0"
+ "node": ">=0.12.0"
}
},
- "node_modules/acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"engines": {
- "node": ">=0.4.0"
+ "node": ">=8"
}
},
- "node_modules/add-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
- "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo="
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
+ "isobject": "^3.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/ansi-align": {
+ "node_modules/is-primitive": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dependencies": {
- "string-width": "^4.1.0"
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz",
+ "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "node_modules/is2": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz",
+ "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==",
"dependencies": {
- "color-convert": "^1.9.0"
+ "deep-is": "^0.1.3",
+ "ip-regex": "^4.1.0",
+ "is-url": "^1.2.4"
},
"engines": {
- "node": ">=4"
+ "node": ">=v0.10.0"
}
},
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"engines": {
- "node": ">= 8"
+ "node": ">=0.10.0"
}
},
- "node_modules/archiver": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz",
- "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==",
+ "node_modules/iterate-object": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz",
+ "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw=="
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dependencies": {
- "archiver-utils": "^2.1.0",
- "async": "^2.6.3",
- "buffer-crc32": "^0.2.1",
- "glob": "^7.1.4",
- "readable-stream": "^3.4.0",
- "tar-stream": "^2.1.0",
- "zip-stream": "^2.1.2"
+ "argparse": "^2.0.1"
},
- "engines": {
- "node": ">= 6"
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/archiver-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
- "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.0",
- "lazystream": "^1.0.0",
- "lodash.defaults": "^4.2.0",
- "lodash.difference": "^4.5.0",
- "lodash.flatten": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.union": "^4.6.0",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.0.0"
+ "universalify": "^2.0.0"
},
- "engines": {
- "node": ">= 6"
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
}
},
- "node_modules/archiver/node_modules/readable-stream": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
- "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "readable-stream": "^2.0.5"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 0.6.3"
}
},
- "node_modules/arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
- },
- "node_modules/argparse": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
- },
- "node_modules/array-ify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4="
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asar": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz",
- "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==",
- "dependencies": {
- "chromium-pickle-js": "^0.2.0",
- "commander": "^5.0.0",
- "glob": "^7.1.6",
- "minimatch": "^3.0.4"
- },
- "bin": {
- "asar": "bin/asar.js"
- },
- "engines": {
- "node": ">=10.12.0"
- },
- "optionalDependencies": {
- "@types/glob": "^7.1.1"
- }
- },
- "node_modules/asar/node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/assert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
- "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
- "dependencies": {
- "es6-object-assign": "^1.1.0",
- "is-nan": "^1.2.1",
- "object-is": "^1.0.1",
- "util": "^0.12.0"
- }
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/author-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
- "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
- "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
- "dependencies": {
- "array-filter": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/bl/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
- },
- "node_modules/boolean": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
- "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
- "optional": true
- },
- "node_modules/boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/boxen/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/boxen/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bplist-creator": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz",
- "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==",
- "dependencies": {
- "stream-buffers": "2.2.x"
- }
- },
- "node_modules/bplist-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
- "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
- "dependencies": {
- "big-integer": "1.6.x"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dependencies": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "node_modules/buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/buffer-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz",
- "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==",
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ=="
- },
- "node_modules/buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "node_modules/bufferutil": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz",
- "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==",
- "hasInstallScript": true,
- "dependencies": {
- "node-gyp-build": "^4.3.0"
- },
- "engines": {
- "node": ">=6.14.2"
- }
- },
- "node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "engines": {
- "node": ">=10.6.0"
- }
- },
- "node_modules/cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cacheable-request/node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "dependencies": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
- "dependencies": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chance": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz",
- "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ=="
- },
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chevrotain": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz",
- "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==",
- "dependencies": {
- "regexp-to-ast": "0.5.0"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chromium-pickle-js": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
- "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw=="
- },
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
- "node_modules/class-validator": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz",
- "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==",
- "dependencies": {
- "@types/validator": "^13.7.10",
- "libphonenumber-js": "^1.10.14",
- "validator": "^13.7.0"
- }
- },
- "node_modules/clean-css": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
- "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
- "dependencies": {
- "source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
- "node_modules/coffeescript": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz",
- "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==",
- "bin": {
- "cake": "bin/cake",
- "coffee": "bin/coffee"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "peer": true
- },
- "node_modules/commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
- },
- "node_modules/compare-func": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
- "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
- "dependencies": {
- "array-ify": "^1.0.0",
- "dot-prop": "^5.1.0"
- }
- },
- "node_modules/compare-version": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
- "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/compress-commons": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz",
- "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==",
- "dependencies": {
- "buffer-crc32": "^0.2.13",
- "crc32-stream": "^3.0.1",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.3.6"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "node_modules/config-chain": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
- "optional": true,
- "dependencies": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "node_modules/configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dependencies": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/conventional-changelog": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz",
- "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==",
- "dependencies": {
- "conventional-changelog-angular": "^5.0.12",
- "conventional-changelog-atom": "^2.0.8",
- "conventional-changelog-codemirror": "^2.0.8",
- "conventional-changelog-conventionalcommits": "^4.5.0",
- "conventional-changelog-core": "^4.2.1",
- "conventional-changelog-ember": "^2.0.9",
- "conventional-changelog-eslint": "^3.0.9",
- "conventional-changelog-express": "^2.0.6",
- "conventional-changelog-jquery": "^3.0.11",
- "conventional-changelog-jshint": "^2.0.9",
- "conventional-changelog-preset-loader": "^2.3.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-angular": {
- "version": "5.0.13",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz",
- "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==",
- "dependencies": {
- "compare-func": "^2.0.0",
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-atom": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz",
- "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-codemirror": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz",
- "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-conventionalcommits": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
- "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==",
- "dependencies": {
- "compare-func": "^2.0.0",
- "lodash": "^4.17.15",
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz",
- "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==",
- "dependencies": {
- "add-stream": "^1.0.0",
- "conventional-changelog-writer": "^5.0.0",
- "conventional-commits-parser": "^3.2.0",
- "dateformat": "^3.0.0",
- "get-pkg-repo": "^4.0.0",
- "git-raw-commits": "^2.0.8",
- "git-remote-origin-url": "^2.0.0",
- "git-semver-tags": "^4.1.1",
- "lodash": "^4.17.15",
- "normalize-package-data": "^3.0.0",
- "q": "^1.5.1",
- "read-pkg": "^3.0.0",
- "read-pkg-up": "^3.0.0",
- "through2": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dependencies": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dependencies": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/conventional-changelog-ember": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz",
- "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-eslint": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz",
- "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-express": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz",
- "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-jquery": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz",
- "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==",
- "dependencies": {
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-jshint": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz",
- "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==",
- "dependencies": {
- "compare-func": "^2.0.0",
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-preset-loader": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
- "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-writer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz",
- "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==",
- "dependencies": {
- "conventional-commits-filter": "^2.0.7",
- "dateformat": "^3.0.0",
- "handlebars": "^4.7.7",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "semver": "^6.0.0",
- "split": "^1.0.0",
- "through2": "^4.0.0"
- },
- "bin": {
- "conventional-changelog-writer": "cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-writer/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/conventional-commits-filter": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz",
- "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==",
- "dependencies": {
- "lodash.ismatch": "^4.4.0",
- "modify-values": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-commits-parser": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
- "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
- "dependencies": {
- "is-text-path": "^1.0.1",
- "JSONStream": "^1.0.4",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
- },
- "bin": {
- "conventional-commits-parser": "cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/cosmiconfig/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "node_modules/cosmiconfig/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/cosmiconfig/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cosmiconfig/node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/crc": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
- "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
- "dependencies": {
- "buffer": "^5.1.0"
- }
- },
- "node_modules/crc32-stream": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
- "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
- "dependencies": {
- "crc": "^3.4.4",
- "readable-stream": "^3.4.0"
- },
- "engines": {
- "node": ">= 6.9.0"
- }
- },
- "node_modules/crc32-stream/node_modules/readable-stream": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
- "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
- },
- "node_modules/cross-fetch": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
- "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
- "dependencies": {
- "node-fetch": "^2.6.12"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cross-spawn-windows-exe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz",
- "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/malept"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/subscription/pkg/npm-cross-spawn-windows-exe?utm_medium=referral&utm_source=npm_fund"
- }
- ],
- "dependencies": {
- "@malept/cross-spawn-promise": "^1.1.0",
- "is-wsl": "^2.2.0",
- "which": "^2.0.2"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/csswring": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/csswring/-/csswring-7.0.0.tgz",
- "integrity": "sha512-yl9lWqdhVn4gD0Vf00BMKKFuLq19hpz87VTDBRYFa+xWjRdfa/+bddCsWN7mbwfXWFoL5RwDOJmKakkC/VaH7w==",
- "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.",
- "dependencies": {
- "minimist": "^1.2.0",
- "onecolor": "^3.0.5",
- "postcss": "^7.0.0"
- },
- "bin": {
- "csswring": "bin/csswring.js"
- }
- },
- "node_modules/d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dependencies": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "node_modules/dargs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
- "dependencies": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decamelize-keys/node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
- "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
- "dependencies": {
- "decompress-tar": "^4.0.0",
- "decompress-tarbz2": "^4.0.0",
- "decompress-targz": "^4.0.0",
- "decompress-unzip": "^4.0.1",
- "graceful-fs": "^4.1.10",
- "make-dir": "^1.0.0",
- "pify": "^2.3.0",
- "strip-dirs": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-tar": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
- "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
- "dependencies": {
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0",
- "tar-stream": "^1.5.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-tar/node_modules/bl": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
- "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
- "dependencies": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/decompress-tar/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-tar/node_modules/tar-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
- "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
- "dependencies": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.2.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.1",
- "xtend": "^4.0.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/decompress-tarbz2": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
- "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
- "dependencies": {
- "decompress-tar": "^4.1.0",
- "file-type": "^6.1.0",
- "is-stream": "^1.1.0",
- "seek-bzip": "^1.0.5",
- "unbzip2-stream": "^1.0.9"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-tarbz2/node_modules/file-type": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-tarbz2/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-targz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
- "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
- "dependencies": {
- "decompress-tar": "^4.1.1",
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-targz/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-unzip": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
- "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==",
- "dependencies": {
- "file-type": "^3.8.0",
- "get-stream": "^2.2.0",
- "pify": "^2.3.0",
- "yauzl": "^2.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress-unzip/node_modules/file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-unzip/node_modules/get-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
- "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==",
- "dependencies": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-unzip/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress/node_modules/make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress/node_modules/make-dir/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/decompress/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
- },
- "node_modules/defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
- },
- "node_modules/define-lazy-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/del": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
- "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
- "dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/detect-node": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
- "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
- "optional": true
- },
- "node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dir-compare": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz",
- "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==",
- "dependencies": {
- "buffer-equal": "^1.0.0",
- "minimatch": "^3.0.4"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dir-glob/node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dragonbones-tools": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dragonbones-tools/-/dragonbones-tools-0.1.2.tgz",
- "integrity": "sha512-4OPCse4ZjBLyBX7IcQsYpJcHBimlOmfhR5OFJAKbKC4h2Lp677JwNDvU1paAuNz+0N3mEBiSFTm5PUZWsiRpgw==",
- "dependencies": {
- "@types/fs-extra": "^4.0.0",
- "commander": "^2.11.0",
- "fs-extra": "^4.0.1"
- },
- "bin": {
- "2db": "out/convertFrom.js",
- "db-test-demos": "out/test/testDemos.js",
- "db2": "out/convertTo.js"
- }
- },
- "node_modules/dragonbones-tools/node_modules/fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "node_modules/duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "node_modules/earcut": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
- "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
- },
- "node_modules/edit-json-file": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/edit-json-file/-/edit-json-file-1.7.0.tgz",
- "integrity": "sha512-eIkLJ9i4ija7b2TbaLHy3scyjWFLzwM2Wa6kHbV4ppVLcCqn7FzqnO1vmCG3dLrkd+teWE3mvACfv166mO0VZg==",
- "dependencies": {
- "find-value": "^1.0.12",
- "iterate-object": "^1.3.4",
- "r-json": "^1.2.10",
- "set-value": "^4.1.0",
- "w-json": "^1.3.10"
- }
- },
- "node_modules/electron-notarize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.2.1.tgz",
- "integrity": "sha512-u/ECWhIrhkSQpZM4cJzVZ5TsmkaqrRo5LDC/KMbGF0sPkm53Ng59+M0zp8QVaql0obfJy9vlVT+4iOkAi2UDlA==",
- "dependencies": {
- "debug": "^4.1.1",
- "fs-extra": "^9.0.1"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/electron-notarize/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/electron-notarize/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/electron-notarize/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/electron-osx-sign": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz",
- "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==",
- "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different",
- "dependencies": {
- "bluebird": "^3.5.0",
- "compare-version": "^0.1.2",
- "debug": "^2.6.8",
- "isbinaryfile": "^3.0.2",
- "minimist": "^1.2.0",
- "plist": "^3.0.1"
- },
- "bin": {
- "electron-osx-flat": "bin/electron-osx-flat.js",
- "electron-osx-sign": "bin/electron-osx-sign.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/electron-osx-sign/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/electron-osx-sign/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/electron-packager": {
- "version": "16.0.0",
- "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-16.0.0.tgz",
- "integrity": "sha512-7Ey4UUaHg3FYhA7ktsAvCWP8srp9+iPljGdeJBsNaZBakU6HWhvRC+Pc7LWXGCgAVIN5BQsUwR3xrCbFno91VA==",
- "dependencies": {
- "@electron/get": "^2.0.0",
- "@electron/universal": "^1.2.1",
- "asar": "^3.1.0",
- "cross-spawn-windows-exe": "^1.2.0",
- "debug": "^4.0.1",
- "electron-notarize": "^1.1.1",
- "electron-osx-sign": "^0.5.0",
- "extract-zip": "^2.0.0",
- "filenamify": "^4.1.0",
- "fs-extra": "^10.1.0",
- "galactus": "^0.2.1",
- "get-package-info": "^1.0.0",
- "junk": "^3.1.0",
- "parse-author": "^2.0.0",
- "plist": "^3.0.0",
- "rcedit": "^3.0.1",
- "resolve": "^1.1.6",
- "semver": "^7.1.3",
- "yargs-parser": "^21.1.1"
- },
- "bin": {
- "electron-packager": "bin/electron-packager.js"
- },
- "engines": {
- "node": ">= 14.17.5"
- },
- "funding": {
- "url": "https://github.com/electron/electron-packager?sponsor=1"
- }
- },
- "node_modules/electron-packager/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/elementtree": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
- "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==",
- "dependencies": {
- "sax": "1.1.4"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "optional": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
- "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.18.0-next.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
- "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
- "dependencies": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-negative-zero": "^2.0.0",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es5-ext": {
- "version": "0.10.62",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
- "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
- "hasInstallScript": true,
- "dependencies": {
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.3",
- "next-tick": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "optional": true
- },
- "node_modules/es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
- "dependencies": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "node_modules/es6-object-assign": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
- "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw="
- },
- "node_modules/es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "dependencies": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/execa/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ext": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
- "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
- "dependencies": {
- "type": "^2.7.2"
- }
- },
- "node_modules/ext/node_modules/type": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
- "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
- },
- "node_modules/extend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
- "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ="
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
- },
- "node_modules/fast-plist": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz",
- "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg="
- },
- "node_modules/fast-url-parser": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
- "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
- "dependencies": {
- "punycode": "^1.3.2"
- }
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/figlet": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz",
- "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==",
- "bin": {
- "figlet": "bin/index.js"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/filename-reserved-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
- "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/filenamify": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.1.0.tgz",
- "integrity": "sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg==",
- "dependencies": {
- "filename-reserved-regex": "^2.0.0",
- "strip-outer": "^1.0.1",
- "trim-repeated": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/find-value": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/find-value/-/find-value-1.0.12.tgz",
- "integrity": "sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ=="
- },
- "node_modules/flora-colossus": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz",
- "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==",
- "dependencies": {
- "debug": "^4.1.1",
- "fs-extra": "^7.0.0"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/flora-colossus/node_modules/fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
- },
- "node_modules/formidable": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
- "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==",
- "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
- "funding": {
- "url": "https://ko-fi.com/tunnckoCore/commissions"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/fs-extra/node_modules/jsonfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
- "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
- "dependencies": {
- "universalify": "^1.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/fs-extra/node_modules/jsonfile/node_modules/universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/fuse.js": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz",
- "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/galactus": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz",
- "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=",
- "dependencies": {
- "debug": "^3.1.0",
- "flora-colossus": "^1.0.0",
- "fs-extra": "^4.0.0"
- }
- },
- "node_modules/galactus/node_modules/debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/galactus/node_modules/fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-package-info": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
- "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
- "dependencies": {
- "bluebird": "^3.1.1",
- "debug": "^2.2.0",
- "lodash.get": "^4.0.0",
- "read-pkg-up": "^2.0.0"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/get-package-info/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/get-package-info/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/get-pkg-repo": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz",
- "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==",
- "dependencies": {
- "@hutson/parse-repository-url": "^3.0.0",
- "hosted-git-info": "^4.0.0",
- "through2": "^2.0.0",
- "yargs": "^16.2.0"
- },
- "bin": {
- "get-pkg-repo": "src/cli.js"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-pkg-repo/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/get-pkg-repo/node_modules/through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/get-pkg-repo/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/get-pkg-repo/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/get-stdin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
- "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/get-stream": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/git-raw-commits": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
- "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
- "dependencies": {
- "dargs": "^7.0.0",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
- },
- "bin": {
- "git-raw-commits": "cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/git-remote-origin-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
- "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
- "dependencies": {
- "gitconfiglocal": "^1.0.0",
- "pify": "^2.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/git-remote-origin-url/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/git-semver-tags": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
- "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==",
- "dependencies": {
- "meow": "^8.0.0",
- "semver": "^6.0.0"
- },
- "bin": {
- "git-semver-tags": "cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/git-semver-tags/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/gitconfiglocal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
- "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
- "dependencies": {
- "ini": "^1.3.2"
- }
- },
- "node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/global-agent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
- "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
- "optional": true,
- "dependencies": {
- "boolean": "^3.0.1",
- "es6-error": "^4.1.1",
- "matcher": "^3.0.0",
- "roarr": "^2.15.3",
- "semver": "^7.3.2",
- "serialize-error": "^7.0.1"
- },
- "engines": {
- "node": ">=10.0"
- }
- },
- "node_modules/global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "dependencies": {
- "ini": "2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/global-dirs/node_modules/ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/global-tunnel-ng": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
- "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
- "optional": true,
- "dependencies": {
- "encodeurl": "^1.0.2",
- "lodash": "^4.17.10",
- "npm-conf": "^1.1.3",
- "tunnel": "^0.0.6"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "optional": true,
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dependencies": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/got/node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "node_modules/gradle-to-js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/gradle-to-js/-/gradle-to-js-2.0.0.tgz",
- "integrity": "sha512-eoYJiSoreHG0cS5aUmv7ISJhajuULlqdqG3QKVti6x1EFkBXE8rGH6ipGKWEesXpCkfNgzBrhzo5ztIH1JWZMw==",
- "dependencies": {
- "lodash.merge": "4.6.2"
- },
- "bin": {
- "gradle-to-js": "cli.js"
- }
- },
- "node_modules/handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
- "dependencies": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.0",
- "source-map": "^0.6.1",
- "wordwrap": "^1.0.0"
- },
- "bin": {
- "handlebars": "bin/handlebars"
- },
- "engines": {
- "node": ">=0.4.7"
- },
- "optionalDependencies": {
- "uglify-js": "^3.1.4"
- }
- },
- "node_modules/hard-rejection": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/highlight.js": {
- "version": "10.4.1",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz",
- "integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/html-minifier": {
- "version": "3.5.21",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
- "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
- "dependencies": {
- "camel-case": "3.0.x",
- "clean-css": "4.2.x",
- "commander": "2.17.x",
- "he": "1.2.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
- },
- "bin": {
- "html-minifier": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/html2pug": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html2pug/-/html2pug-4.0.0.tgz",
- "integrity": "sha512-CeOvSspLyo6F/hKflOF1W1XjgvQ1FJkl6hM9SjUFBDe9o2+HG7V+F2HtRGDwxvJvn/bH7M0namSWpsBVj5vzLQ==",
- "dependencies": {
- "get-stdin": "^6.0.0",
- "has-flag": "^4.0.0",
- "html-minifier": "^4.0.0",
- "parse5": "^5.1.0"
- },
- "bin": {
- "html2pug": "src/cli.js"
- }
- },
- "node_modules/html2pug/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/html2pug/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/html2pug/node_modules/html-minifier": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
- "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
- "dependencies": {
- "camel-case": "^3.0.0",
- "clean-css": "^4.2.1",
- "commander": "^2.19.0",
- "he": "^1.2.0",
- "param-case": "^2.1.1",
- "relateurl": "^0.2.7",
- "uglify-js": "^3.5.1"
- },
- "bin": {
- "html-minifier": "cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/html2pug/node_modules/uglify-js": {
- "version": "3.14.5",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz",
- "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==",
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
- },
- "node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
- "node_modules/http2-wrapper/node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
- },
- "node_modules/ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk="
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "node_modules/inversify": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz",
- "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ=="
- },
- "node_modules/ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-arguments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
- "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "node_modules/is-callable": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
- "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-expression": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
- "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
- "dependencies": {
- "acorn": "^7.1.1",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/is-expression/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz",
- "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dependencies": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-nan": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.0.tgz",
- "integrity": "sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ==",
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-natural-number": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
- "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ=="
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
- "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-npm": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
- "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-primitive": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz",
- "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
- "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
- "dependencies": {
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dependencies": {
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
- "dependencies": {
- "text-extensions": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz",
- "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==",
- "dependencies": {
- "available-typed-arrays": "^1.0.0",
- "es-abstract": "^1.17.4",
- "foreach": "^2.0.5",
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array/node_modules/es-abstract": {
- "version": "1.17.7",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
- "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
- "dependencies": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "node_modules/is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="
- },
- "node_modules/is2": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz",
- "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==",
- "dependencies": {
- "deep-is": "^0.1.3",
- "ip-regex": "^4.1.0",
- "is-url": "^1.2.4"
- },
- "engines": {
- "node": ">=v0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/isbinaryfile": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
- "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
- "dependencies": {
- "buffer-alloc": "^1.2.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "node_modules/ismobilejs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz",
- "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw=="
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/iterate-object": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz",
- "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw=="
- },
- "node_modules/javascript-obfuscator": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz",
- "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==",
- "hasInstallScript": true,
- "dependencies": {
- "@javascript-obfuscator/escodegen": "2.3.0",
- "@javascript-obfuscator/estraverse": "5.4.0",
- "acorn": "8.8.2",
- "assert": "2.0.0",
- "chalk": "4.1.2",
- "chance": "1.1.9",
- "class-validator": "0.14.0",
- "commander": "10.0.0",
- "eslint-scope": "7.1.1",
- "eslint-visitor-keys": "3.3.0",
- "fast-deep-equal": "3.1.3",
- "inversify": "6.0.1",
- "js-string-escape": "1.0.1",
- "md5": "2.3.0",
- "mkdirp": "2.1.3",
- "multimatch": "5.0.0",
- "opencollective-postinstall": "2.0.3",
- "process": "0.11.10",
- "reflect-metadata": "0.1.13",
- "source-map-support": "0.5.21",
- "string-template": "1.0.0",
- "stringz": "2.1.0",
- "tslib": "2.5.0"
- },
- "bin": {
- "javascript-obfuscator": "bin/javascript-obfuscator"
- },
- "engines": {
- "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/javascript-obfuscator"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/javascript-obfuscator/node_modules/commander": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz",
- "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/mkdirp": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz",
- "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==",
- "bin": {
- "mkdirp": "dist/cjs/src/bin.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/javascript-obfuscator/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "engines": [
- "node >= 0.2.0"
- ]
- },
- "node_modules/JSONStream": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
- "dependencies": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- },
- "bin": {
- "JSONStream": "bin.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dependencies": {
- "json-buffer": "3.0.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dependencies": {
- "package-json": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "dependencies": {
- "readable-stream": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.6.3"
- }
- },
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/libphonenumber-js": {
- "version": "1.10.20",
- "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.20.tgz",
- "integrity": "sha512-kQovlKNdLcVzerbTPmJ+Fx4R+7/pYXmPDIllHjg7IxL4X6MsMG7jaT5opfYrBok0uqkByVif//JUR8e11l/V7w=="
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
- },
- "node_modules/linkify-it": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
- "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
- "dependencies": {
- "uc.micro": "^1.0.1"
- }
- },
- "node_modules/load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/load-json-file/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
- },
- "node_modules/lodash.difference": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
- },
- "node_modules/lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
- },
- "node_modules/lodash.ismatch": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
- "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc="
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "node_modules/lodash.union": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
- "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
- },
- "node_modules/loglevel": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz",
- "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==",
- "engines": {
- "node": ">= 0.6.0"
- },
- "funding": {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/loglevel"
- }
- },
- "node_modules/lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
- },
- "node_modules/lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
- },
- "node_modules/map-obj": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/markdown-it": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "~2.1.0",
- "linkify-it": "^3.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.js"
- }
- },
- "node_modules/markdown-it/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "node_modules/markdown-it/node_modules/entities": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
- "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/matcher": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
- "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
- "optional": true,
- "dependencies": {
- "escape-string-regexp": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/matcher/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "optional": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/maxrects-packer": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.3.tgz",
- "integrity": "sha512-bG6qXujJ1QgttZVIH4WDanhoJtvbud/xP/XPyf6A69C9RdA61BM4TomFALCq2nrTa+tARRIBB4LuIFsnUQU2wA=="
- },
- "node_modules/md5": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
- "dependencies": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "~1.1.6"
- }
- },
- "node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
- },
- "node_modules/meow": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
- "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
- "dependencies": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/meow/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/meow/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/meow/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/meow/node_modules/type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mergexml": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/mergexml/-/mergexml-1.2.3.tgz",
- "integrity": "sha512-sNc9qswtLUoGmN0MB3dY+MCIJqCGEZZrtYp0Z5Iwsk6ELc/V96SFIuv5Y6O6tYAsFtdpJcPFV0FgOSHSciJLbA==",
- "dependencies": {
- "@xmldom/xmldom": "^0.7.0",
- "formidable": "^1.2.1",
- "xpath": "0.0.27"
- }
- },
- "node_modules/mergexml/node_modules/xpath": {
- "version": "0.0.27",
- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz",
- "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==",
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/microbuffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz",
- "integrity": "sha1-izgy7UDIfVH0e7I0kTppinVtGdI="
- },
- "node_modules/microm": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/microm/-/microm-0.2.4.tgz",
- "integrity": "sha1-CMYfufyBAJByc/tTHlme/320UBE=",
- "dependencies": {
- "extend": "3.0.0",
- "rsvp": "^3.1.0"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "dependencies": {
- "mime-db": "~1.33.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/min-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
- },
- "node_modules/minimist-options": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "dependencies": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/minimist-options/node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/minipass": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
- "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/modify-values": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/monaco-editor": {
- "version": "0.34.0",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.0.tgz",
- "integrity": "sha512-VF+S5zG8wxfinLKLrWcl4WUizMx+LeJrG4PM/M78OhcwocpV0jiyhX/pG6Q9jIOhrb/ckYi6nHnaR5OojlOZCQ=="
- },
- "node_modules/monaco-themes": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/monaco-themes/-/monaco-themes-0.4.2.tgz",
- "integrity": "sha512-T3kp6SC5MPJvwYGXZENCd0UOIKVgUVV5SjsiXLBhgEZBnScY+6gEbwNRK1oYmfwbf+dGVqF1bSLN5YcrFu3HmA==",
- "dependencies": {
- "fast-plist": "^0.1.2"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/multimatch": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
- "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
- "dependencies": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.1.31",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.31.tgz",
- "integrity": "sha512-ZivnJm0o9bb13p2Ot5CpgC2rQdzB9Uxm/mFZweqm5eMViqOJe3PV6LU2E30SiLgheesmcPrjquqraoolONSA0A==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/native-run": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.4.tgz",
- "integrity": "sha512-yDEwTp66vmXpqFiSQzz4sVQgyq5U58gGRovglY4GHh12ITyWa6mh6Lbpm2gViVOVD1JYFtYnwcgr7GTFBinXNA==",
- "dependencies": {
- "@ionic/utils-fs": "^3.1.6",
- "@ionic/utils-terminal": "^2.3.3",
- "bplist-parser": "^0.3.2",
- "debug": "^4.3.4",
- "elementtree": "^0.1.7",
- "ini": "^3.0.1",
- "plist": "^3.0.6",
- "split2": "^4.1.0",
- "through2": "^4.0.2",
- "tslib": "^2.4.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "native-run": "bin/native-run"
- },
- "engines": {
- "node": ">=12.13.0"
- }
- },
- "node_modules/native-run/node_modules/bplist-parser": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
- "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
- "dependencies": {
- "big-integer": "1.6.x"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/native-run/node_modules/ini": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
- "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/native-run/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
- },
- "node_modules/next-tick": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
- },
- "node_modules/no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
- "dependencies": {
- "lower-case": "^1.1.1"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-forge": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
- "engines": {
- "node": ">= 6.13.0"
- }
- },
- "node_modules/node-gyp-build": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz",
- "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/nodemon": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz",
- "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==",
- "hasInstallScript": true,
- "dependencies": {
- "chokidar": "^3.5.2",
- "debug": "^3.2.7",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.0.4",
- "pstree.remy": "^1.1.8",
- "semver": "^5.7.1",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5",
- "update-notifier": "^5.1.0"
- },
- "bin": {
- "nodemon": "bin/nodemon.js"
- },
- "engines": {
- "node": ">=8.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
- }
- },
- "node_modules/nodemon/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/nodemon/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-url": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm-conf": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
- "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
- "optional": true,
- "dependencies": {
- "config-chain": "^1.1.11",
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm-watch": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.9.0.tgz",
- "integrity": "sha512-C5Rgh5+jvY33K1EH8Qjr1hfpH9Nhasc90QJ0W+JyKg2ogE0LOCZI4xirC8QmywW7XinyBpynwxlrN6aPfjc3Hw==",
- "dependencies": {
- "nodemon": "^2.0.7",
- "through2": "^4.0.2"
- },
- "bin": {
- "npm-watch": "cli.js"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
- "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-is": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz",
- "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz",
- "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.0",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-change": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
- "integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/on-change?sponsor=1"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onecolor": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz",
- "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=",
- "engines": {
- "node": ">=0.4.8"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
- "dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/opencollective-postinstall": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
- "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
- "bin": {
- "opencollective-postinstall": "index.js"
- }
- },
- "node_modules/opentype.js": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.3.tgz",
- "integrity": "sha512-/qIY/+WnKGlPIIPhbeNjynfD2PO15G9lA/xqlX2bDH+4lc3Xz5GCQ68mqxj3DdUv6AJqCeaPvuAoH8mVL0zcuA==",
- "dependencies": {
- "string.prototype.codepointat": "^0.2.1",
- "tiny-inflate": "^1.0.3"
- },
- "bin": {
- "ot": "bin/ot"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dependencies": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/package-json/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "node_modules/param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "dependencies": {
- "no-case": "^2.2.0"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-author": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
- "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=",
- "dependencies": {
- "author-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dependencies": {
- "error-ex": "^1.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
- },
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
- "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
- "engines": {
- "node": "14 || >=16.14"
- }
- },
- "node_modules/path-scurry/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
- "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ=="
- },
- "node_modules/path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dependencies": {
- "pify": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-type/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pe-library": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.0.tgz",
- "integrity": "sha512-yZ+4d3YHKUjO0BX03oXFfHRKLdYKDO2HmCt1RcApPxme/P5ASPbbKnuQkzFrmT482wi2kfO+sPgqasrz5QeU1w==",
- "engines": {
- "node": ">=14",
- "npm": ">=7"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
- },
- "node_modules/penner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/penner/-/penner-0.1.3.tgz",
- "integrity": "sha512-UzkaC2L6d9J1VzJAFH0TQwuKE/rerpTZkgW6aPLVeu/LdjWn6rnuY9lXcVN1AE9tZVfHrsJ2gZOBsRjpQECNHA=="
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "dependencies": {
- "pinkie": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pixi-ease": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/pixi-ease/-/pixi-ease-3.0.7.tgz",
- "integrity": "sha512-ew1IzAi2layygHrk8+tk6XTuue3WM6Po5LsA46v+9BtQNMa2sX0PMLzQ4nq1UpTbLg4Dwqep9RTzDRsFhCYJJw==",
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "penner": "^0.1.3"
- },
- "peerDependencies": {
- "pixi.js": ">=4.6.0"
- }
- },
- "node_modules/pixi.js": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-7.3.2.tgz",
- "integrity": "sha512-GJickUrT3UcBInGT1CU6cv2oktCdocE5QM74CD3t+weiJPPWIzleNlp7zrBR5QIDdU6bEO8CUgUXH2Y9QvlCMw==",
- "dependencies": {
- "@pixi/accessibility": "7.3.2",
- "@pixi/app": "7.3.2",
- "@pixi/assets": "7.3.2",
- "@pixi/compressed-textures": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/events": "7.3.2",
- "@pixi/extensions": "7.3.2",
- "@pixi/extract": "7.3.2",
- "@pixi/filter-alpha": "7.3.2",
- "@pixi/filter-blur": "7.3.2",
- "@pixi/filter-color-matrix": "7.3.2",
- "@pixi/filter-displacement": "7.3.2",
- "@pixi/filter-fxaa": "7.3.2",
- "@pixi/filter-noise": "7.3.2",
- "@pixi/graphics": "7.3.2",
- "@pixi/mesh": "7.3.2",
- "@pixi/mesh-extras": "7.3.2",
- "@pixi/mixin-cache-as-bitmap": "7.3.2",
- "@pixi/mixin-get-child-by-name": "7.3.2",
- "@pixi/mixin-get-global-position": "7.3.2",
- "@pixi/particle-container": "7.3.2",
- "@pixi/prepare": "7.3.2",
- "@pixi/sprite": "7.3.2",
- "@pixi/sprite-animated": "7.3.2",
- "@pixi/sprite-tiling": "7.3.2",
- "@pixi/spritesheet": "7.3.2",
- "@pixi/text": "7.3.2",
- "@pixi/text-bitmap": "7.3.2",
- "@pixi/text-html": "7.3.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/pixijs"
- }
- },
- "node_modules/pixi.js-legacy": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/pixi.js-legacy/-/pixi.js-legacy-7.3.2.tgz",
- "integrity": "sha512-10nZf8jG0z7GJmg0cy53wWYzVDVCbMOMKTyhKm+NrWX8XmbIbsodYWAg1IdabnVbWKKg+zLX1dL+Wn6TakEeqw==",
- "dependencies": {
- "@pixi/canvas-display": "7.3.2",
- "@pixi/canvas-extract": "7.3.2",
- "@pixi/canvas-graphics": "7.3.2",
- "@pixi/canvas-mesh": "7.3.2",
- "@pixi/canvas-particle-container": "7.3.2",
- "@pixi/canvas-prepare": "7.3.2",
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/canvas-sprite": "7.3.2",
- "@pixi/canvas-sprite-tiling": "7.3.2",
- "@pixi/canvas-text": "7.3.2",
- "pixi.js": "7.3.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/pixijs"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-display": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-display/-/canvas-display-7.3.2.tgz",
- "integrity": "sha512-VqeZ/6kwhzwaDWbdFD532HD9eDYu7h7ny8JfFDxGpdgzfhTVed/4mpYfSD6OmLxGcnnNhAUEc2QfS+hgamTKZg==",
- "peerDependencies": {
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-extract": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-extract/-/canvas-extract-7.3.2.tgz",
- "integrity": "sha512-d96oQQlNNfeEV4cmN3MJV4vcn0xBVN8WVvTahQTtGqX+0FphLoe5G/4y/l5V3tyOy5OaRZ4l2mXw6RS9wfBcFA==",
- "peerDependencies": {
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/extract": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-graphics": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-graphics/-/canvas-graphics-7.3.2.tgz",
- "integrity": "sha512-r/nPcriocJXqbiieWHpXWGL+5KcQPZGFDkJR28bGDKX6XBv0h7hhY1zX15bKa9zhbGK+MXrahSMYr6I+bLCAow==",
- "peerDependencies": {
- "@pixi/canvas-display": "7.3.2",
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/graphics": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-mesh": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-mesh/-/canvas-mesh-7.3.2.tgz",
- "integrity": "sha512-z97rrQS/rZ0bC+laB5Id7LCFl9WBU7UPb6tJflFL6iIBQrtAFmfvfjLfXWEXJk/1AcbN6W61AD6I2EEbBEG2Rw==",
- "peerDependencies": {
- "@pixi/canvas-display": "7.3.2",
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/mesh": "7.3.2",
- "@pixi/mesh-extras": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-particle-container": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-particle-container/-/canvas-particle-container-7.3.2.tgz",
- "integrity": "sha512-qk7gw8ILrRvl8N6+CkGzrsNp1fBOUmPRxJlb3tfAn9dNOITwKCszysZHoMFNZy1rIpbe6oPgHNZ3/okSSHsw1A==",
- "peerDependencies": {
- "@pixi/particle-container": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-prepare": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-prepare/-/canvas-prepare-7.3.2.tgz",
- "integrity": "sha512-btUzzPv1/tKI/QIzbdA8wMk0W7QXdb5dYntX64UIqh1lU2QAzHlOJmCQ1QzJGKKiuSnxZLPCXo7UGogNENf/5A==",
- "peerDependencies": {
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/prepare": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-renderer": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-renderer/-/canvas-renderer-7.3.2.tgz",
- "integrity": "sha512-LnZefvP8OhAagHQP3NvE03JYiJJkLucHd9Wdx7n7rcR8l2GYWqEPPtxgC7z+ZmWWFXTGXZJwGGRVj/RUPJWKdQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-sprite": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-sprite/-/canvas-sprite-7.3.2.tgz",
- "integrity": "sha512-MwBt9zJHMQONK//cApnMIGl5PO+iHDh8BfqoETUocEPKWLTS0CWeP0Sj05n+014wpqIQfpmpzkBLGiw3C1m2Dw==",
- "peerDependencies": {
- "@pixi/canvas-display": "7.3.2",
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-sprite-tiling": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-sprite-tiling/-/canvas-sprite-tiling-7.3.2.tgz",
- "integrity": "sha512-8d1uugMYBkTQ4tfGu4bcuM2E6o7RQmPdX2BwyD1gYcS1lUHx888tV2Fe8hBL4yiEcIY7dzsfoGWvvhRSKTh5oQ==",
- "peerDependencies": {
- "@pixi/canvas-renderer": "7.3.2",
- "@pixi/canvas-sprite": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/sprite-tiling": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/canvas-text": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/canvas-text/-/canvas-text-7.3.2.tgz",
- "integrity": "sha512-DI4nu2efdjZq9XciewwkdiMzp7jPhFy/Dhz233nXT5B3KeR/2IOetUIHvam9n12aPmrLhhdVR+NYD8omIm8UXg==",
- "peerDependencies": {
- "@pixi/canvas-sprite": "7.3.2",
- "@pixi/sprite": "7.3.2",
- "@pixi/text": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/color": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/color/-/color-7.3.2.tgz",
- "integrity": "sha512-jur5PvdOtUBEUTjmPudW5qdQq6yYGlVGsi3HyhasJw14bN+GKJwiCKgIsyrsiNL5HBUXmje4ICwQohf6BqKqxA==",
- "peer": true,
- "dependencies": {
- "@pixi/colord": "^2.9.6"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/constants": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-7.3.2.tgz",
- "integrity": "sha512-Q8W3ncsFxmfgC5EtokpG92qJZabd+Dl+pbQAdHwiPY3v+8UNq77u4VN2qtl1Z04864hCcg7AStIYEDrzqTLF6Q==",
- "peer": true
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/core": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/core/-/core-7.3.2.tgz",
- "integrity": "sha512-Pta3ee8MtJ3yKxGXzglBWgwbEOKMB6Eth+FpLTjL0rgxiqTB550YX6jsNEQQAzcGjCBlO3rC/IF57UZ2go/X6w==",
- "peer": true,
- "dependencies": {
- "@pixi/color": "7.3.2",
- "@pixi/constants": "7.3.2",
- "@pixi/extensions": "7.3.2",
- "@pixi/math": "7.3.2",
- "@pixi/runner": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@pixi/ticker": "7.3.2",
- "@pixi/utils": "7.3.2",
- "@types/offscreencanvas": "^2019.6.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/pixijs"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/display": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/display/-/display-7.3.2.tgz",
- "integrity": "sha512-cY5AnZ3TWt5GYGx4e5AQ2/2U9kP+RorBg/O30amJ+8e9bFk9rS8cjh/DDq/hc4lql96BkXAInTl40eHnAML5lQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/extensions": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-7.3.2.tgz",
- "integrity": "sha512-Qw84ADfvmVu4Mwj+zTik/IEEK9lWS5n4trbrpQCcEZ+Mb8oRAXWvKz199mi1s7+LaZXDqeCY1yr2PHQaFf1KBA==",
- "peer": true
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/extract": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-7.3.2.tgz",
- "integrity": "sha512-KsoflvQZV/XD8A8xbtRnmI4reYekbI4MOi7ilwQe5tMz6O1mO7IzrSukxkSMD02f6SpbAqbi7a1EayTjvY0ECQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/graphics": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-7.3.2.tgz",
- "integrity": "sha512-PhU6j1yub4tH/s+/gqByzgZ3mLv1mfb6iGXbquycg3+WypcxHZn0opFtI/axsazaQ9SEaWxw1m3i40WG5ANH5g==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/math": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/math/-/math-7.3.2.tgz",
- "integrity": "sha512-dutoZ0IVJ5ME7UtYNo2szu4D7qsgtJB7e3ylujBVu7BOP2e710BVtFwFSFV768N14h9H5roGnuzVoDiJac2u+w==",
- "peer": true
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/mesh": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-7.3.2.tgz",
- "integrity": "sha512-LFkt7ELYXQLgbgHpjl68j6JD5ejUwma8zoPn2gqSBbY+6pK/phjvV1Wkh76muF46VvNulgXF0+qLIDdCsfrDaA==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/mesh-extras": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-7.3.2.tgz",
- "integrity": "sha512-s/tg9TsTZZxLEdCDKWnBChDGkc041HCTP7ykJv4fEROzb9B0lskULYyvv+/YNNKa2Ugb9WnkMknpOdOXCpjyyg==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/mesh": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/particle-container": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/particle-container/-/particle-container-7.3.2.tgz",
- "integrity": "sha512-JYc4j4z97KmxyLp+1Lg0SNi8hy6RxcBBNQGk+CSLNXeDWxx3hykT5gj/ORX1eXyzHh1ZCG1XzeVS9Yr8QhlFHA==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/prepare": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-7.3.2.tgz",
- "integrity": "sha512-aLPAXSYLUhMwxzJtn9m0TSZe+dQlZCt09QNBqYbSi8LZId54QMDyvfBb4zBOJZrD2xAZgYL5RIJuKHwZtFX6lQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/graphics": "7.3.2",
- "@pixi/text": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/runner": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-7.3.2.tgz",
- "integrity": "sha512-maKotoKJCQiQGBJwfM+iYdQKjrPN/Tn9+72F4WIf706zp/5vKoxW688Rsktg5BX4Mcn7ZkZvcJYTxj2Mv87lFA==",
- "peer": true
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/settings": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-7.3.2.tgz",
- "integrity": "sha512-vtxzuARDTbFe0fRYSqB53B+mPpX7v+QjjnCUmVMVvZiWr3QcngMWVml6c6dQDln7IakWoKZRrNG4FpggvDgLVg==",
- "peer": true,
- "dependencies": {
- "@pixi/constants": "7.3.2",
- "@types/css-font-loading-module": "^0.0.7",
- "ismobilejs": "^1.1.0"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/sprite": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-7.3.2.tgz",
- "integrity": "sha512-IpWTKXExJNXVcY7ITopJ+JW48DahdbCo/81D2IYzBImq3jyiJM2Km5EoJgvAM5ZQ3Ev3KPPIBzYLD+HoPWcxdw==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/sprite-tiling": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-7.3.2.tgz",
- "integrity": "sha512-tWVVb/rMIx5AczfUrVxa0dZaIufP5C0IOL7IGfFUDQqDu5JSAUC0mwLe4F12jAXBVsqYhCGYx5bIHbPiI5vcSQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/text": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/text/-/text-7.3.2.tgz",
- "integrity": "sha512-LdtNj+K5tPB/0UcDcO52M/C7xhwFTGFhtdF42fPhRuJawM23M3zm1Y8PapXv+mury+IxCHT1w30YlAi0qTVpKQ==",
- "peer": true,
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/ticker": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-7.3.2.tgz",
- "integrity": "sha512-5kIPhBeXwDJohCzKzJJ6T7f1oAGbHAgeiwOjlTO+9lNXUX8ZPj0407V3syuF+64kFqJzIBCznBRpI+fmT4c9SA==",
- "peer": true,
- "dependencies": {
- "@pixi/extensions": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@pixi/utils": "7.3.2"
- }
- },
- "node_modules/pixi.js-legacy/node_modules/@pixi/utils": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-7.3.2.tgz",
- "integrity": "sha512-KhNvj9YcY7Zi2dTKZgDpx8C6OxKKR541vwtG6JgdBZZYDeMBOIghN2Vi5zn4diW5BhDfHBmdSJ1wZXEtE2MDwg==",
- "peer": true,
- "dependencies": {
- "@pixi/color": "7.3.2",
- "@pixi/constants": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@types/earcut": "^2.1.0",
- "earcut": "^2.2.4",
- "eventemitter3": "^4.0.0",
- "url": "^0.11.0"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/accessibility": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-7.3.2.tgz",
- "integrity": "sha512-MdkU22HTauRvq9cMeWZIQGaDDa86sr+m12rKNdLV+FaDQgP/AhP+qCVpK7IKeJa9BrWGXaYMw/vueij7HkyDSA==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/events": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/app": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/app/-/app-7.3.2.tgz",
- "integrity": "sha512-3YRFSMvAxDebAz3/JJv+2jzbPkT8cHC0IHmmLRN8krDL1pZV+YjMLgMwN/Oeyv5TSbwNqnrF5su5whNkRaxeZQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/assets": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/assets/-/assets-7.3.2.tgz",
- "integrity": "sha512-yteq6ptAxA09EcwU9D9hl7qr5yWIqy+c2PsXkTDkc76vTAwIamLY3KxLq2aR5y1U4L4O6aHFJd26uNhHcuTPmw==",
- "dependencies": {
- "@types/css-font-loading-module": "^0.0.7"
- },
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/utils": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/color": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/color/-/color-7.3.2.tgz",
- "integrity": "sha512-jur5PvdOtUBEUTjmPudW5qdQq6yYGlVGsi3HyhasJw14bN+GKJwiCKgIsyrsiNL5HBUXmje4ICwQohf6BqKqxA==",
- "dependencies": {
- "@pixi/colord": "^2.9.6"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/compressed-textures": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/compressed-textures/-/compressed-textures-7.3.2.tgz",
- "integrity": "sha512-J3ENMHDPQO6CJRei55gqI0WmiZJIK6SgsW5AEkShT0aAe5miEBSomv70pXw/58ru+4/Hx8cXjamsGt4aQB2D0Q==",
- "peerDependencies": {
- "@pixi/assets": "7.3.2",
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/constants": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-7.3.2.tgz",
- "integrity": "sha512-Q8W3ncsFxmfgC5EtokpG92qJZabd+Dl+pbQAdHwiPY3v+8UNq77u4VN2qtl1Z04864hCcg7AStIYEDrzqTLF6Q=="
- },
- "node_modules/pixi.js/node_modules/@pixi/core": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/core/-/core-7.3.2.tgz",
- "integrity": "sha512-Pta3ee8MtJ3yKxGXzglBWgwbEOKMB6Eth+FpLTjL0rgxiqTB550YX6jsNEQQAzcGjCBlO3rC/IF57UZ2go/X6w==",
- "dependencies": {
- "@pixi/color": "7.3.2",
- "@pixi/constants": "7.3.2",
- "@pixi/extensions": "7.3.2",
- "@pixi/math": "7.3.2",
- "@pixi/runner": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@pixi/ticker": "7.3.2",
- "@pixi/utils": "7.3.2",
- "@types/offscreencanvas": "^2019.6.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/pixijs"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/display": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/display/-/display-7.3.2.tgz",
- "integrity": "sha512-cY5AnZ3TWt5GYGx4e5AQ2/2U9kP+RorBg/O30amJ+8e9bFk9rS8cjh/DDq/hc4lql96BkXAInTl40eHnAML5lQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/events": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/events/-/events-7.3.2.tgz",
- "integrity": "sha512-Moca9epu8jk1wIQCdVYjhz2pD9Ol21m50wvWUKvpgt9yM/AjkCLSDt8HO/PmTpavDrkhx5pVVWeDDA6FyUNaGA==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/extensions": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-7.3.2.tgz",
- "integrity": "sha512-Qw84ADfvmVu4Mwj+zTik/IEEK9lWS5n4trbrpQCcEZ+Mb8oRAXWvKz199mi1s7+LaZXDqeCY1yr2PHQaFf1KBA=="
- },
- "node_modules/pixi.js/node_modules/@pixi/extract": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-7.3.2.tgz",
- "integrity": "sha512-KsoflvQZV/XD8A8xbtRnmI4reYekbI4MOi7ilwQe5tMz6O1mO7IzrSukxkSMD02f6SpbAqbi7a1EayTjvY0ECQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-alpha": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-7.3.2.tgz",
- "integrity": "sha512-nZMdn310wH5ZK1slwv3X4qT8eLoAGO7SgYGCy5IsMtpCtNObzE9XA4tAfhXrjihyzPS9KvszgAbnv1Qpfh0/uw==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-blur": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-7.3.2.tgz",
- "integrity": "sha512-unu3zhwHMhN+iAe7Td2rK40i2UJ2GOhzWK+6jcU3ZkMOsFCT5kgBoMRTejeQVcvCs6GoYK8imbkE7mXt05Vj6A==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-color-matrix": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-7.3.2.tgz",
- "integrity": "sha512-rbyjes/9SMoV9jjPiK0sLMkmLfN8D17GoTJIfq/KLv1x9646W5fL2QSKkN04UkZ+020ndWvIOxK1S97tvRyCfg==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-displacement": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-7.3.2.tgz",
- "integrity": "sha512-ZHl7Sfb8JYd9Z6j96OHCC0NhMKhhXJRE5AbkSDohjEMVCK1BV5rDGAHV8WVt/2MJ/j83CXUpydzyMhdM4lMchg==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-fxaa": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-7.3.2.tgz",
- "integrity": "sha512-9brtlxDnQTZk2XiFBKdBK9e+8CX9LdxxcL7LRpjEyiHuAPvTlQgu9B85LrJ4GzWKqJJKaIIZBzhIoiCLUnfeXg==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/filter-noise": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-7.3.2.tgz",
- "integrity": "sha512-F8GQQ20n7tCjThX6GCXckiXz2YffOCxicTJ0oat9aVDZh+sVsAxYX0aKSdHh0hhv18F0yuc6tPsSL5DYb63xFg==",
- "peerDependencies": {
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/graphics": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-7.3.2.tgz",
- "integrity": "sha512-PhU6j1yub4tH/s+/gqByzgZ3mLv1mfb6iGXbquycg3+WypcxHZn0opFtI/axsazaQ9SEaWxw1m3i40WG5ANH5g==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/math": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/math/-/math-7.3.2.tgz",
- "integrity": "sha512-dutoZ0IVJ5ME7UtYNo2szu4D7qsgtJB7e3ylujBVu7BOP2e710BVtFwFSFV768N14h9H5roGnuzVoDiJac2u+w=="
- },
- "node_modules/pixi.js/node_modules/@pixi/mesh": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-7.3.2.tgz",
- "integrity": "sha512-LFkt7ELYXQLgbgHpjl68j6JD5ejUwma8zoPn2gqSBbY+6pK/phjvV1Wkh76muF46VvNulgXF0+qLIDdCsfrDaA==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/mesh-extras": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-7.3.2.tgz",
- "integrity": "sha512-s/tg9TsTZZxLEdCDKWnBChDGkc041HCTP7ykJv4fEROzb9B0lskULYyvv+/YNNKa2Ugb9WnkMknpOdOXCpjyyg==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/mesh": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/mixin-cache-as-bitmap": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-7.3.2.tgz",
- "integrity": "sha512-bZRlyUN5+9kCUjn67V0IFtYIrbmx9Vs4sMOmXyrX3Q4B4gPLE46IzZz3v0IVaTjp32udlQztfJalIaWbuqgb3A==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/mixin-get-child-by-name": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-7.3.2.tgz",
- "integrity": "sha512-mbUi3WxXrkViH7qOgjk4fu2BN36NwNb7u+Fy1J5dS8Bntj57ZVKmEV9PbUy0zYjXE8rVmeAvSu/2kbn5n9UutQ==",
- "peerDependencies": {
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/mixin-get-global-position": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-7.3.2.tgz",
- "integrity": "sha512-1nhWbBgmw6rK7yQJxzeI9yjKYYEkM5i3pee8qVu4YWo3b1xWVQA7osQG7aGM/4qywDkXaA1ZvciA5hfg6f4Q5Q==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/particle-container": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/particle-container/-/particle-container-7.3.2.tgz",
- "integrity": "sha512-JYc4j4z97KmxyLp+1Lg0SNi8hy6RxcBBNQGk+CSLNXeDWxx3hykT5gj/ORX1eXyzHh1ZCG1XzeVS9Yr8QhlFHA==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/prepare": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-7.3.2.tgz",
- "integrity": "sha512-aLPAXSYLUhMwxzJtn9m0TSZe+dQlZCt09QNBqYbSi8LZId54QMDyvfBb4zBOJZrD2xAZgYL5RIJuKHwZtFX6lQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/graphics": "7.3.2",
- "@pixi/text": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/runner": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-7.3.2.tgz",
- "integrity": "sha512-maKotoKJCQiQGBJwfM+iYdQKjrPN/Tn9+72F4WIf706zp/5vKoxW688Rsktg5BX4Mcn7ZkZvcJYTxj2Mv87lFA=="
- },
- "node_modules/pixi.js/node_modules/@pixi/settings": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-7.3.2.tgz",
- "integrity": "sha512-vtxzuARDTbFe0fRYSqB53B+mPpX7v+QjjnCUmVMVvZiWr3QcngMWVml6c6dQDln7IakWoKZRrNG4FpggvDgLVg==",
- "dependencies": {
- "@pixi/constants": "7.3.2",
- "@types/css-font-loading-module": "^0.0.7",
- "ismobilejs": "^1.1.0"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/sprite": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-7.3.2.tgz",
- "integrity": "sha512-IpWTKXExJNXVcY7ITopJ+JW48DahdbCo/81D2IYzBImq3jyiJM2Km5EoJgvAM5ZQ3Ev3KPPIBzYLD+HoPWcxdw==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/sprite-animated": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-7.3.2.tgz",
- "integrity": "sha512-j9pyUe4cefxE9wecNfbWQyL5fBQKvCGYaOA0DE1X46ukBHrIuhA8u3jg2X3N3r4IcbVvxpWFYDrDsWXWeiBmSw==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/sprite-tiling": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-7.3.2.tgz",
- "integrity": "sha512-tWVVb/rMIx5AczfUrVxa0dZaIufP5C0IOL7IGfFUDQqDu5JSAUC0mwLe4F12jAXBVsqYhCGYx5bIHbPiI5vcSQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/spritesheet": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-7.3.2.tgz",
- "integrity": "sha512-UkwqrPYDqrEdK5ub9qn/9VBvt5caA8ffV5iYR6ssCvrpaQovBKmS+b5pr/BYf8xNTExDpR3OmPIo8iDEYWWLuw==",
- "peerDependencies": {
- "@pixi/assets": "7.3.2",
- "@pixi/core": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/text": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/text/-/text-7.3.2.tgz",
- "integrity": "sha512-LdtNj+K5tPB/0UcDcO52M/C7xhwFTGFhtdF42fPhRuJawM23M3zm1Y8PapXv+mury+IxCHT1w30YlAi0qTVpKQ==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/sprite": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/text-bitmap": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-7.3.2.tgz",
- "integrity": "sha512-p8KLgtZSPowWU/Zj+GVtfsUT8uGYo4TtKKYbLoWuxkRA5Pc1+4C9/rV/EOSFfoZIdW5C+iFg5VxRgBllUQf+aA==",
- "peerDependencies": {
- "@pixi/assets": "7.3.2",
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/mesh": "7.3.2",
- "@pixi/text": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/text-html": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/text-html/-/text-html-7.3.2.tgz",
- "integrity": "sha512-IYhBWEPOvqUtlHkS5/c1Hseuricj5jrrGd21ivcvHmcnK/x2m+CRGvvzeBp1mqoYBnDbQVrD2wSXSe4Dv9tEJA==",
- "peerDependencies": {
- "@pixi/core": "7.3.2",
- "@pixi/display": "7.3.2",
- "@pixi/sprite": "7.3.2",
- "@pixi/text": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/ticker": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-7.3.2.tgz",
- "integrity": "sha512-5kIPhBeXwDJohCzKzJJ6T7f1oAGbHAgeiwOjlTO+9lNXUX8ZPj0407V3syuF+64kFqJzIBCznBRpI+fmT4c9SA==",
- "dependencies": {
- "@pixi/extensions": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@pixi/utils": "7.3.2"
- }
- },
- "node_modules/pixi.js/node_modules/@pixi/utils": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-7.3.2.tgz",
- "integrity": "sha512-KhNvj9YcY7Zi2dTKZgDpx8C6OxKKR541vwtG6JgdBZZYDeMBOIghN2Vi5zn4diW5BhDfHBmdSJ1wZXEtE2MDwg==",
- "dependencies": {
- "@pixi/color": "7.3.2",
- "@pixi/constants": "7.3.2",
- "@pixi/settings": "7.3.2",
- "@types/earcut": "^2.1.0",
- "earcut": "^2.2.4",
- "eventemitter3": "^4.0.0",
- "url": "^0.11.0"
- }
- },
- "node_modules/plist": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
- "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
- "dependencies": {
- "@xmldom/xmldom": "^0.8.8",
- "base64-js": "^1.5.1",
- "xmlbuilder": "^15.1.1"
- },
- "engines": {
- "node": ">=10.4.0"
- }
- },
- "node_modules/plist/node_modules/@xmldom/xmldom": {
- "version": "0.8.10",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
- "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/png2icons": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/png2icons/-/png2icons-2.0.1.tgz",
- "integrity": "sha512-GDEQJr8OG4e6JMp7mABtXFSEpgJa1CCpbQiAR+EjhkHJHnUL9zPPtbOrjsMD8gUbikgv3j7x404b0YJsV3aVFA==",
- "bin": {
- "png2icons": "png2icons-cli.js"
- }
- },
- "node_modules/postcss": {
- "version": "7.0.36",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
- "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
- "dependencies": {
- "chalk": "^2.4.2",
- "source-map": "^0.6.1",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss/node_modules/chalk/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prompts/node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
- "optional": true
- },
- "node_modules/pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "node_modules/pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dependencies": {
- "escape-goat": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
- "node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
- "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/quick-lru": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/r-json": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/r-json/-/r-json-1.2.10.tgz",
- "integrity": "sha512-hu9vyLjSlHXT62NAS7DjI9WazDlvjN0lgp3n431dCVnirVcLkZIpzSwA3orhZEKzdDD2jqNYI+w0yG0aFf4kpA=="
- },
- "node_modules/range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/rcedit": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-3.0.1.tgz",
- "integrity": "sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw==",
- "dependencies": {
- "cross-spawn-windows-exe": "^1.1.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dependencies": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dependencies": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/recursive-readdir": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
- "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
- "dependencies": {
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
- "dependencies": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/reflect-metadata": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
- },
- "node_modules/regexp-to-ast": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz",
- "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="
- },
- "node_modules/registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "dependencies": {
- "rc": "^1.2.8"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dependencies": {
- "rc": "^1.2.8"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/replace": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/replace/-/replace-1.2.2.tgz",
- "integrity": "sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==",
- "dependencies": {
- "chalk": "2.4.2",
- "minimatch": "3.0.5",
- "yargs": "^15.3.1"
- },
- "bin": {
- "replace": "bin/replace.js",
- "search": "bin/search.js"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/replace/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/replace/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/replace/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/replace/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/replace/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/replace/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/replace/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/replace/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/replace/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/replace/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/replace/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/replace/node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/lazystream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "node_modules/replace/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ "node_modules/lazystream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
- "node_modules/replace/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "node_modules/lazystream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "engines": {
- "node": ">=0.10.0"
+ "safe-buffer": "~5.1.0"
}
},
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "node_modules/resedit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.0.tgz",
- "integrity": "sha512-vrrJCabKxAW4MT1QivtAAb0poGp8KT2qhnSzfN9tFIxb2rQu1hRHNn1VgGSZR7nmxGaW5Yz0YeW1bjgvRfNoKA==",
- "dependencies": {
- "pe-library": "^1.0.0"
- },
- "engines": {
- "node": ">=14",
- "npm": ">=7"
- }
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
- "node_modules/resedit-cli": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resedit-cli/-/resedit-cli-2.0.0.tgz",
- "integrity": "sha512-LLFFXZHs2r+EqhcUyBXq5j28baBjfvI84Is3+X1+v+pIhtWFU+qoOhDzN4os2c9TBEB7KktG6bS3B9i/rpRGtQ==",
- "dependencies": {
- "cosmiconfig": "^8.1.0",
- "loglevel": "^1.8.1",
- "node-forge": "^1.3.1",
- "pe-library": "^1.0.0",
- "resedit": "^2.0.0",
- "yargs": "^17.7.1"
- },
- "bin": {
- "resedit": "dist/cli.js"
- },
- "engines": {
- "node": ">=14",
- "npm": ">=7"
- }
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
},
- "node_modules/resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dependencies": {
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="
},
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
},
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "engines": {
- "node": ">=4"
- }
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
- "node_modules/responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dependencies": {
- "lowercase-keys": "^1.0.0"
- }
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="
},
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "node_modules/loglevel": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz",
+ "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==",
"engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
+ "node": ">= 0.6.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/loglevel"
}
},
- "node_modules/roarr": {
- "version": "2.15.4",
- "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
- "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
- "optional": true,
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dependencies": {
- "boolean": "^3.0.1",
- "detect-node": "^2.0.4",
- "globalthis": "^1.0.1",
- "json-stringify-safe": "^5.0.1",
- "semver-compare": "^1.0.0",
- "sprintf-js": "^1.1.2"
+ "semver": "^6.0.0"
},
"engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/roarr/node_modules/sprintf-js": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
- "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
- "optional": true
- },
- "node_modules/rsvp": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
- "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
- "engines": {
- "node": "0.12.* || 4.* || 6.* || >= 7.*"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/sax": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
- "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg=="
- },
- "node_modules/seek-bzip": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
- "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
- "dependencies": {
- "commander": "^2.8.1"
+ "node": ">=8"
},
- "bin": {
- "seek-bunzip": "bin/seek-bunzip",
- "seek-table": "bin/seek-bzip-table"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=10"
+ "node": "*"
}
},
- "node_modules/semver-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
- "optional": true
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "dependencies": {
- "semver": "^6.3.0"
- },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
+ },
+ "node_modules/node-forge": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"engines": {
- "node": ">=8"
+ "node": ">= 6.13.0"
}
},
- "node_modules/semver-diff/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "node_modules/node-gyp-build": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz",
+ "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==",
"bin": {
- "semver": "bin/semver.js"
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
}
},
- "node_modules/serialize-error": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
- "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
- "optional": true,
- "dependencies": {
- "type-fest": "^0.13.1"
- },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
- "node_modules/serve-handler": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
- "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
- "dependencies": {
- "bytes": "3.0.0",
- "content-disposition": "0.5.2",
- "fast-url-parser": "1.1.3",
- "mime-types": "2.1.18",
- "minimatch": "3.1.2",
- "path-is-inside": "1.0.2",
- "path-to-regexp": "2.2.1",
- "range-parser": "1.2.0"
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/serve-handler/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
+ "wrappy": "1"
}
},
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "node_modules/set-value": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz",
- "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==",
- "funding": [
- "https://github.com/sponsors/jonschlinkert",
- "https://paypal.me/jonathanschlinkert",
- "https://jonschlinkert.dev/sponsor"
- ],
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dependencies": {
- "is-plain-object": "^2.0.4",
- "is-primitive": "^3.0.1"
+ "callsites": "^3.0.0"
},
"engines": {
- "node": ">=11.0"
+ "node": ">=6"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
- "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ=="
- },
- "node_modules/simple-plist": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz",
- "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==",
- "dependencies": {
- "bplist-creator": "0.1.0",
- "bplist-parser": "0.3.1",
- "plist": "^3.0.5"
+ "node": ">=0.10.0"
}
},
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"engines": {
"node": ">=8"
}
},
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
+ "node_modules/pe-library": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.1.tgz",
+ "integrity": "sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==",
"engines": {
- "node": ">=10"
+ "node": ">=14",
+ "npm": ">=7"
},
"funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ "type": "github",
+ "url": "https://github.com/sponsors/jet2jet"
}
},
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"engines": {
- "node": ">=8"
+ "node": ">=8.6"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/slice-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"engines": {
- "node": ">=7.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/slice-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2-1",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
- "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg=="
- },
- "node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "node_modules/png2icons": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/png2icons/-/png2icons-2.0.1.tgz",
+ "integrity": "sha512-GDEQJr8OG4e6JMp7mABtXFSEpgJa1CCpbQiAR+EjhkHJHnUL9zPPtbOrjsMD8gUbikgv3j7x404b0YJsV3aVFA==",
+ "bin": {
+ "png2icons": "png2icons-cli.js"
}
},
- "node_modules/spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
- },
- "node_modules/split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dependencies": {
- "through": "2"
- },
- "engines": {
- "node": "*"
- }
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
- "node_modules/split2": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
- "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "node_modules/r-json": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/r-json/-/r-json-1.3.0.tgz",
+ "integrity": "sha512-xesd+RHCpymPCYd9DvDvUr1w1IieSChkqYF1EpuAYrvCfLXji9NP36DvyYZJZZB5soVDvZ0WUtBoZaU1g5Yt9A==",
"dependencies": {
- "readable-stream": "^3.0.0"
+ "w-json": "1.3.10"
}
},
- "node_modules/split2/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -8319,259 +1647,200 @@
"node": ">= 6"
}
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "node_modules/stream-buffers": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
- "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string-template": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz",
- "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y="
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "picomatch": "^2.2.1"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.codepointat": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
- "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
- "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=8.10.0"
}
},
- "node_modules/string.prototype.trimend/node_modules/es-abstract": {
- "version": "1.17.7",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
- "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+ "node_modules/recursive-readdir": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
+ "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
"dependencies": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
+ "minimatch": "^3.0.5"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=6.0.0"
}
},
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
- "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/string.prototype.trimstart/node_modules/es-abstract": {
- "version": "1.17.7",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
- "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+ "node_modules/resedit": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.2.tgz",
+ "integrity": "sha512-UKTnq602iVe+W5SyRAQx/WdWMnlDiONfXBLFg/ur4QE4EQQ8eP7Jgm5mNXdK12kKawk1vvXPja2iXKqZiGDW6Q==",
"dependencies": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
+ "pe-library": "^1.0.1"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=14",
+ "npm": ">=7"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/stringz": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz",
- "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==",
- "dependencies": {
- "char-regex": "^1.0.2"
+ "type": "github",
+ "url": "https://github.com/sponsors/jet2jet"
}
},
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/resedit-cli": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resedit-cli/-/resedit-cli-2.0.0.tgz",
+ "integrity": "sha512-LLFFXZHs2r+EqhcUyBXq5j28baBjfvI84Is3+X1+v+pIhtWFU+qoOhDzN4os2c9TBEB7KktG6bS3B9i/rpRGtQ==",
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "cosmiconfig": "^8.1.0",
+ "loglevel": "^1.8.1",
+ "node-forge": "^1.3.1",
+ "pe-library": "^1.0.0",
+ "resedit": "^2.0.0",
+ "yargs": "^17.7.1"
+ },
+ "bin": {
+ "resedit": "dist/cli.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=14",
+ "npm": ">=7"
}
},
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"engines": {
"node": ">=4"
}
},
- "node_modules/strip-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
- "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
"dependencies": {
- "is-natural-number": "^4.0.1"
+ "commander": "^2.8.1"
+ },
+ "bin": {
+ "seek-bunzip": "bin/seek-bunzip",
+ "seek-table": "bin/seek-bzip-table"
}
},
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "engines": {
- "node": ">=6"
+ "node_modules/seek-bzip/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "node_modules/set-value": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz",
+ "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==",
+ "funding": [
+ "https://github.com/sponsors/jonschlinkert",
+ "https://paypal.me/jonathanschlinkert",
+ "https://jonschlinkert.dev/sponsor"
+ ],
"dependencies": {
- "min-indent": "^1.0.0"
+ "is-plain-object": "^2.0.4",
+ "is-primitive": "^3.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=11.0"
}
},
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "engines": {
- "node": ">=0.10.0"
- }
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
- "node_modules/strip-outer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "node_modules/spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg=="
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": {
- "escape-string-regexp": "^1.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "safe-buffer": "~5.2.0"
}
},
- "node_modules/sucrase": {
- "version": "3.25.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.25.0.tgz",
- "integrity": "sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ==",
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
- "commander": "^4.0.0",
- "glob": "7.1.6",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/sucrase/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/sumchecker": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
- "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
- "debug": "^4.1.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">= 8.0"
+ "node": ">=8"
}
},
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
"dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
+ "is-natural-number": "^4.0.1"
}
},
- "node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">= 10"
+ "node": ">=8"
}
},
"node_modules/tar-stream": {
@@ -8589,19 +1858,6 @@
"node": ">=6"
}
},
- "node_modules/tar-stream/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/tcp-port-used": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz",
@@ -8611,163 +1867,16 @@
"is2": "^2.0.6"
}
},
- "node_modules/tcp-port-used/node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/temp-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
- "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tempy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
- "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
- "dependencies": {
- "del": "^6.0.0",
- "is-stream": "^2.0.0",
- "temp-dir": "^2.0.0",
- "type-fest": "^0.16.0",
- "unique-string": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/type-fest": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
- "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser": {
- "version": "5.14.2",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
- "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
- "dependencies": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/text-extensions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
- "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "node_modules/through2": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
- "dependencies": {
- "readable-stream": "3"
- }
- },
- "node_modules/through2/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/tiny-inflate": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
- "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
- },
- "node_modules/tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dependencies": {
- "rimraf": "^3.0.0"
- },
- "engines": {
- "node": ">=8.17.0"
- }
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
},
"node_modules/to-buffer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
},
- "node_modules/to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -8779,195 +1888,19 @@
"node": ">=8.0"
}
},
- "node_modules/touch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
- "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "dependencies": {
- "nopt": "~1.0.10"
- },
- "bin": {
- "nodetouch": "bin/nodetouch.js"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/trim-newlines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/trim-repeated": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
- "dependencies": {
- "escape-string-regexp": "^1.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "node_modules/ts-node": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz",
- "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==",
- "dependencies": {
- "@cspotcode/source-map-support": "0.7.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "yn": "3.1.1"
- },
- "bin": {
- "ts-node": "dist/bin.js",
- "ts-node-cwd": "dist/bin-cwd.js",
- "ts-node-script": "dist/bin-script.js",
- "ts-node-transpile-only": "dist/bin-transpile.js",
- "ts-script": "dist/bin-script-deprecated.js"
- },
- "peerDependencies": {
- "@swc/core": ">=1.2.50",
- "@swc/wasm": ">=1.2.50",
- "@types/node": "*",
- "typescript": ">=2.7"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "@swc/wasm": {
- "optional": true
- }
- }
- },
- "node_modules/tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
- },
- "node_modules/ttf2woff": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ttf2woff/-/ttf2woff-2.0.2.tgz",
- "integrity": "sha512-X68badwBjAy/+itU49scLjXUL094up+rHuYk+YAOTTBYSUMOmLZ7VyhZJuqQESj1gnyLAC2/5V8Euv+mExmyPA==",
- "dependencies": {
- "argparse": "^1.0.6",
- "microbuffer": "^1.0.0",
- "pako": "^1.0.0"
- },
- "bin": {
- "ttf2woff": "ttf2woff.js"
- }
- },
- "node_modules/tunnel": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "optional": true,
- "engines": {
- "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
- }
- },
"node_modules/type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "optional": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
},
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
- "node_modules/typescript": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
- "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
- },
- "node_modules/uglify-js": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
- "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
- "dependencies": {
- "commander": "~2.19.0",
- "source-map": "~0.6.1"
- },
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
- "engines": {
- "node": ">=0.8.0"
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dependencies": {
+ "is-typedarray": "^1.0.0"
}
},
- "node_modules/uglify-js/node_modules/commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
- },
"node_modules/unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
@@ -8977,10 +1910,11 @@
"through": "^2.3.8"
}
},
- "node_modules/undefsafe": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
- "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "optional": true
},
"node_modules/unique-string": {
"version": "2.0.0",
@@ -8994,142 +1928,13 @@
}
},
"node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/update-notifier": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
- "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
- "dependencies": {
- "boxen": "^5.0.0",
- "chalk": "^4.1.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^5.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.1.0",
- "pupa": "^2.1.1",
- "semver": "^7.3.4",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/yeoman/update-notifier?sponsor=1"
- }
- },
- "node_modules/update-notifier/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/update-notifier/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/update-notifier/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/update-notifier/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/update-notifier/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/update-notifier/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
- },
- "node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
- "dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "node_modules/url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dependencies": {
- "prepend-http": "^2.0.0"
- },
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
- "node": ">=4"
+ "node": ">= 10.0.0"
}
},
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
- },
"node_modules/utf-8-validate": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
@@ -9142,59 +1947,24 @@
"node": ">=6.14.2"
}
},
- "node_modules/util": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz",
- "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==",
- "dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "safe-buffer": "^5.1.2",
- "which-typed-array": "^1.1.2"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/validator": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz",
- "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==",
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/w-json": {
"version": "1.3.10",
"resolved": "https://registry.npmjs.org/w-json/-/w-json-1.3.10.tgz",
"integrity": "sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw=="
},
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
"node_modules/websocket": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz",
@@ -9224,101 +1994,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "node_modules/which-typed-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz",
- "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==",
- "dependencies": {
- "available-typed-arrays": "^1.0.2",
- "es-abstract": "^1.17.5",
- "foreach": "^2.0.5",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.1",
- "is-typed-array": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array/node_modules/es-abstract": {
- "version": "1.17.7",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
- "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
- "dependencies": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
- },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -9335,40 +2010,10 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
@@ -9381,18 +2026,6 @@
"typedarray-to-buffer": "^3.1.5"
}
},
- "node_modules/xcode": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz",
- "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==",
- "dependencies": {
- "simple-plist": "^1.1.0",
- "uuid": "^7.0.3"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/xdg-basedir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
@@ -9401,58 +2034,6 @@
"node": ">=8"
}
},
- "node_modules/xml-js": {
- "version": "1.6.11",
- "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
- "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
- "dependencies": {
- "sax": "^1.2.4"
- },
- "bin": {
- "xml-js": "bin/cli.js"
- }
- },
- "node_modules/xml-js/node_modules/sax": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
- "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
- },
- "node_modules/xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/xml2js/node_modules/xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/xmlbuilder": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/xpath": {
- "version": "0.0.32",
- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz",
- "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==",
- "engines": {
- "node": ">=0.6.0"
- }
- },
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -9477,11 +2058,6 @@
"node": ">=0.10.32"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
@@ -9500,31 +2076,6 @@
}
},
"node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs/node_modules/yargs-parser": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
@@ -9535,44 +2086,23 @@
"node_modules/yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
},
- "node_modules/yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/zip-stream": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.2.tgz",
- "integrity": "sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz",
+ "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==",
"dependencies": {
"archiver-utils": "^2.1.0",
- "compress-commons": "^2.1.1",
- "readable-stream": "^3.4.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/zip-stream/node_modules/readable-stream": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
- "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "compress-commons": "^3.0.0",
+ "readable-stream": "^3.6.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 8"
}
}
}
diff --git a/app/package.json b/app/package.json
index 719d1d932..26b34f2ac 100644
--- a/app/package.json
+++ b/app/package.json
@@ -2,7 +2,7 @@
"main": "index.html",
"name": "ctjs",
"description": "ct.js — a free 2D game engine",
- "version": "4.0.2",
+ "version": "5.0.0",
"homepage": "https://ctjs.rocks/",
"author": {
"name": "Cosmo Myzrail Gorynych",
@@ -50,45 +50,10 @@
"webkit": {
"plugin": false
},
- "chromium-args": "--mixed-context --enable-features=nw2 --load-extensions --force-color-profile=srgb --disable-features=ColorCorrectRendering",
+ "chromium-args": "--enable-features=nw2 --load-extensions --force-color-profile=srgb --disable-features=ColorCorrectRendering",
"dependencies": {
- "@capacitor/cli": "^5.5.0",
- "@capacitor/core": "^5.5.0",
- "@neutralinojs/neu": "^10.1.0",
- "@pixi/particle-emitter": "5.0.8",
- "@pixi/sound": "^5.2.2",
- "@trapezedev/project": "^7.0.10",
- "archiver": "^3.1.1",
- "coffeescript": "^2.7.0",
- "csswring": "7.0.0",
- "dragonbones-tools": "^0.1.2",
- "electron-packager": "^16.0.0",
- "execa": "^5.1.1",
- "extract-zip": "^2.0.1",
- "fs-extra": "^10.1.0",
- "fuse.js": "^3.6.1",
- "highlight.js": "^10.4.1",
- "html-minifier": "^3.5.21",
- "html2pug": "^4.0.0",
- "is-expression": "^4.0.0",
- "javascript-obfuscator": "^4.0.2",
- "js-yaml": "^3.14.0",
- "markdown-it": "12.3.2",
- "maxrects-packer": "^2.7.3",
- "microm": "^0.2.4",
- "monaco-editor": "^0.34.0",
- "monaco-themes": "^0.4.2",
- "nanoid": "^3.1.31",
- "on-change": "^4.0.2",
- "opentype.js": "^1.3.3",
- "pixi-ease": "^3.0.7",
- "pixi.js": "7.3.2",
- "pixi.js-legacy": "7.3.2",
+ "@neutralinojs/neu": "^11.0.1",
"png2icons": "^2.0.1",
- "resedit-cli": "^2.0.0",
- "serve-handler": "^6.1.5",
- "sucrase": "^3.25.0",
- "terser": "^5.14.2",
- "ttf2woff": "^2.0.2"
+ "resedit-cli": "^2.0.0"
}
}
diff --git a/app/projects/.gitkeep b/app/projects/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/branding/catnipLogo.blend b/branding/catnipLogo.blend
new file mode 100644
index 000000000..950b7034c
Binary files /dev/null and b/branding/catnipLogo.blend differ
diff --git a/builtinModules.json b/builtinModules.json
new file mode 100644
index 000000000..a3c5a27b4
--- /dev/null
+++ b/builtinModules.json
@@ -0,0 +1,55 @@
+[
+ "assert",
+ "assert/strict",
+ "async_hooks",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "dgram",
+ "diagnostics_channel",
+ "dns",
+ "dns/promises",
+ "domain",
+ "events",
+ "fs",
+ "fs/promises",
+ "http",
+ "http2",
+ "https",
+ "inspector",
+ "inspector/promises",
+ "module",
+ "net",
+ "os",
+ "path",
+ "path/posix",
+ "path/win32",
+ "perf_hooks",
+ "process",
+ "punycode",
+ "querystring",
+ "readline",
+ "readline/promises",
+ "repl",
+ "stream",
+ "stream/consumers",
+ "stream/promises",
+ "stream/web",
+ "string_decoder",
+ "timers",
+ "timers/promises",
+ "tls",
+ "trace_events",
+ "tty",
+ "url",
+ "util",
+ "util/types",
+ "v8",
+ "vm",
+ "wasi",
+ "worker_threads",
+ "zlib"
+]
diff --git a/bundledAssets b/bundledAssets
index 286066bb4..9aedca8ad 160000
--- a/bundledAssets
+++ b/bundledAssets
@@ -1 +1 @@
-Subproject commit 286066bb43260496852a3ce6ad61d9cc5c9f0f8d
+Subproject commit 9aedca8ad8903e2df4e99f4b7b40a5c7df6c3d9e
diff --git a/devSetup.gulpfile.js b/devSetup.gulpfile.js
index 23c1f7f3d..5beba9d03 100644
--- a/devSetup.gulpfile.js
+++ b/devSetup.gulpfile.js
@@ -25,7 +25,8 @@ const cleanup = () => {
const npmInstall = path => done => {
console.log(`Running 'npm install' for ${path}…`);
spawnise.spawn((/^win/).test(process.platform) ? 'npm.cmd' : 'npm', ['install'], {
- cwd: path || './'
+ cwd: path || './',
+ shell: true
})
.then(done)
.catch(err => {
@@ -38,7 +39,8 @@ const bakeDocs = async () => {
const npm = (/^win/).test(process.platform) ? 'npm.cmd' : 'npm';
await fs.remove('./app/data/docs/');
await spawnise.spawn(npm, ['run', 'build'], {
- cwd: './docs'
+ cwd: './docs',
+ shell: true
});
await fs.copy('./docs/docs/.vuepress/dist', './app/data/docs/');
};
diff --git a/docs b/docs
index 977188ba1..296e50170 160000
--- a/docs
+++ b/docs
@@ -1 +1 @@
-Subproject commit 977188ba163fc2793b06243d76620178b292eae3
+Subproject commit 296e50170da1a5ebe5ae053fc71192938653064e
diff --git a/gulpfile.mjs b/gulpfile.mjs
index 2bb336ed3..d9e94db36 100644
--- a/gulpfile.mjs
+++ b/gulpfile.mjs
@@ -6,6 +6,7 @@ import versions from './versions.js';
/* eslint no-console: 0 */
import path from 'path';
import gulp from 'gulp';
+import log from 'gulplog';
import concat from 'gulp-concat';
import sourcemaps from 'gulp-sourcemaps';
import minimist from 'minimist';
@@ -18,7 +19,7 @@ import sprite from 'gulp-svgstore';
import zip from 'gulp-zip';
import stylelint from 'stylelint';
-import eslint from 'gulp-eslint';
+import eslint from 'gulp-eslint-new';
import streamQueue from 'streamqueue';
import replaceExt from 'gulp-ext-replace';
@@ -29,8 +30,7 @@ import spawnise from './node_requires/spawnise/index.js';
import execute from './node_requires/execute.js';
import i18n from './node_requires/i18n/index.js';
-import nwBuilderArm from './node_modules/nw-builder-arm/lib/index.cjs';
-import nwBuilder from './node_modules/nw-builder/lib/index.cjs';
+import nwBuilder from 'nw-builder';
import resedit from 'resedit-cli';
import {$} from 'execa';
@@ -54,13 +54,32 @@ import {$} from 'execa';
*
* Also note that you may need to clear the `ct-js/cache` folder.
*/
-const nwVersion = versions.nwjs,
- nwArmVersion = versions.nwjsArm,
- platforms = ['linux32', 'linux64', 'osx64', 'osxarm', 'win32', 'win64'],
- nwFiles = ['./app/**', '!./app/export/**', '!./app/projects/**', '!./app/exportDesktop/**', '!./app/cache/**', '!./app/.vscode/**', '!./app/JamGames/**'];
+const nwVersion = versions.nwjs;
+/**
+ * Array of tuples with platform — arch — itch.io channel name in each element.
+ * Note how win32 platform is written as just 'win' (that's how nw.js binaries are released).
+ */
+let platforms = [
+ ['linux', 'ia32', 'linux32'],
+ ['linux', 'x64', 'linux64'],
+ ['osx', 'x64', 'osx64'],
+ // ['osx', 'arm64', 'osxarm'],
+ ['win', 'ia32', 'win32'],
+ ['win', 'x64', 'win64']
+];
+if (process.platform === 'win32') {
+ platforms = platforms.filter(p => p[0] !== 'osx');
+ log.warn('⚠️ Building packages for MacOS is not supported on Windows. This platform will be skipped.');
+}
+const nwBuilderOptions = {
+ version: nwVersion,
+ flavor: 'sdk',
+ srcDir: './app/',
+ glob: false
+};
const argv = minimist(process.argv.slice(2));
-const npm = (/^win/).test(process.platform) ? 'npm.cmd' : 'npm';
+const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const pack = fs.readJsonSync('./app/package.json');
@@ -133,8 +152,8 @@ const compilePug = () =>
pretty: false
}))
.on('error', err => {
- notifier.notify(makeErrorObj('Pug failure', err));
console.error('[pug error]', err);
+ notifier.notify(makeErrorObj('Pug failure', err));
})
.pipe(sourcemaps.write())
.pipe(gulp.dest('./app/'));
@@ -147,30 +166,26 @@ const compileRiot = () =>
gulp.src('./src/riotTags/**/*.tag')
.pipe(riot(riotSettings))
.pipe(concat('riotTags.js'))
- .pipe(gulp.dest('./app/data/'));
-
-const compileRiotPartial = path => {
- console.log(`Updating tag at ${path}…`);
- return gulp.src(path)
- .pipe(riot(riotSettings))
- .pipe(gulp.dest('./app/data/hotLoadTags/'));
-};
+ .pipe(gulp.dest('./temp/'));
const concatScripts = () =>
streamQueue(
{
objectMode: true
},
- gulp.src('./src/js/3rdparty/riot.min.js'),
- gulp.src(['./src/js/**', '!./src/js/3rdparty/riot.min.js'])
+ // PIXI.js is used as window.PIXI
+ gulp.src('./src/js/exposeGlobalNodeModules.js'),
+ gulp.src('./temp/riotTags.js'),
+ gulp.src(['./src/js/**', '!./src/js/exposeGlobalNodeModules.js'])
)
.pipe(sourcemaps.init({
largeFile: true
}))
.pipe(concat('bundle.js'))
.pipe(sourcemaps.write())
- .pipe(gulp.dest('./app/data/'))
+ .pipe(gulp.dest('./temp/'))
.on('error', err => {
+ console.error('[scripts error]', err);
notifier.notify({
title: 'Scripts error',
message: err.toString(),
@@ -178,32 +193,69 @@ const concatScripts = () =>
sound: true,
wait: true
});
- console.error('[scripts error]', err);
})
.on('change', fileChangeNotifier);
-const copyRequires = () =>
- gulp.src([
- './src/node_requires/**/*',
- '!./src/node_requires/**/*.ts'
- ])
- .pipe(sourcemaps.init())
- // ¯\_(ツ)_/¯
- .pipe(sourcemaps.mapSources((sourcePath) => '../../src/' + sourcePath))
- .pipe(sourcemaps.write())
- .pipe(gulp.dest('./app/data/node_requires'));
-const tsProject = gulpTs.createProject('tsconfig.json');
+const workerEntryPoints = [
+ 'vs/language/json/json.worker.js',
+ 'vs/language/css/css.worker.js',
+ 'vs/language/html/html.worker.js',
+ 'vs/language/typescript/ts.worker.js',
+ 'vs/editor/editor.worker.js'
+];
+/**
+ * Bundles language workers and the editor's worker for monaco-editor.
+ * It is needed to be packaged this way to actually work with worker threads.
+ * The workers are then linked in src/js/3rdParty/mountMonaco.js
+ * @see https://github.com/microsoft/monaco-editor/blob/b400f83fe3ac6a1780b7eed419dc4d83dbf32919/samples/browser-esm-esbuild/build.js
+ */
+const bundleMonacoWorkers = () => esbuild({
+ entryPoints: workerEntryPoints.map((entry) => `node_modules/monaco-editor/esm/${entry}`),
+ bundle: true,
+ format: 'iife',
+ outbase: 'node_modules/monaco-editor/esm/',
+ outdir: './app/data/monaco-workers/'
+});
-const processRequiresTS = () =>
- gulp.src('./src/node_requires/**/*.ts')
- .pipe(sourcemaps.init())
- .pipe(tsProject())
- .pipe(sourcemaps.write())
- .pipe(gulp.dest('./app/data/node_requires'));
-const processRequires = gulp.series(copyRequires, processRequiresTS);
+const builtinModules = JSON.parse(fs.readFileSync('./builtinModules.json'));
+builtinModules.push(...builtinModules.map(m => `node:${m}`));
+/**
+ * Bundles all the JS scripts into a single bundle.js file.
+ * This file is then loaded with a regular
diff --git a/src/ct.release/index.pixi.ts b/src/ct.release/index.pixi.ts
index a7a0abdc0..bb3c41133 100644
--- a/src/ct.release/index.pixi.ts
+++ b/src/ct.release/index.pixi.ts
@@ -1,6 +1,6 @@
-import * as pixi from 'node_modules/pixi.js';
-import * as particles from 'node_modules/@pixi/particle-emitter';
-import {sound as pixiSound, filters as pixiSoundFilters} from 'node_modules/@pixi/sound';
+import * as pixi from 'pixi.js';
+import * as particles from '@pixi/particle-emitter';
+import {sound as pixiSound, filters as pixiSoundFilters} from '@pixi/sound';
/* eslint-disable @typescript-eslint/no-explicit-any */
export const PIXI = pixi;
diff --git a/src/ct.release/index.ts b/src/ct.release/index.ts
index c6fb7c196..3ce4570dd 100644
--- a/src/ct.release/index.ts
+++ b/src/ct.release/index.ts
@@ -1,6 +1,6 @@
///
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
/*! Made with ct.js http://ctjs.rocks/ */
@@ -21,12 +21,13 @@ import tilemapsM, {Tilemap} from './tilemaps';
import timerM from './timer';
import {scriptsLib as scriptsM} from './scripts';
import uM from './u';
+import {mount as mountErrorListener} from './errors';
import type {ExportedMeta, viewMode} from '../node_requires/exporter/_exporterContracts';
// eslint-disable-next-line no-console
console.log(
- '%c 😺 %c ct.js game editor %c v/*!@ctversion@*/ %c https://ctjs.rocks/ ',
+ '%c 😺 %c ct.js game engine %c v/*!@ctversion@*/ %c https://ctjs.rocks/ ',
'background: #446adb; color: #fff; padding: 0.5em 0;',
'background: #5144db; color: #fff; padding: 0.5em 0;',
'background: #446adb; color: #fff; padding: 0.5em 0;',
@@ -61,6 +62,11 @@ if ('NL_OS' in window) {
*/
export const deadPool: pixiMod.DisplayObject[] = [];
export const copyTypeSymbol = Symbol('I am a ct.js copy');
+/**
+ * A set of copies that must be destroyed
+ * in addition to being removed from stack when a main room changes.
+ */
+export const forceDestroy = new Set();
setInterval(function cleanDeadPool() {
deadPool.length = 0;
}, 1000 * 60);
@@ -165,7 +171,7 @@ export let pixiApp: pixiMod.Application;
console.error(e);
// eslint-disable-next-line no-console
console.warn('[ct.js] Something bad has just happened. This is usually due to hardware problems. I\'ll try to fix them now, but if the game still doesn\'t run, try including a legacy renderer in the project\'s settings.');
- PIXI.settings.SPRITE_MAX_TEXTURES = Math.min(PIXI.settings.SPRITE_MAX_TEXTURES, 16);
+ PIXI.settings.SPRITE_MAX_TEXTURES = Math.min(PIXI.settings.SPRITE_MAX_TEXTURES || 16, 16);
pixiApp = new PIXI.Application(pixiAppSettings);
}
// eslint-disable-next-line prefer-destructuring
@@ -175,7 +181,7 @@ export let pixiApp: pixiMod.Application;
}
settings.targetFps = [/*!@maxfps@*/][0] || 60;
// eslint-disable-next-line prefer-destructuring
- document.getElementById('ct').appendChild(pixiApp.view as HTMLCanvasElement);
+ (document.getElementById('ct') as HTMLDivElement).appendChild(pixiApp.view as HTMLCanvasElement);
}
let loading: Promise;
@@ -186,9 +192,11 @@ let loading: Promise;
templatesM.onDestroy.apply(copy);
(copy as BasicCopy).onDestroy.apply(copy);
}
- for (const child of copy.children) {
- if (templatesM.isCopy(child)) {
- killRecursive(child as (BasicCopy & pixiMod.DisplayObject)); // bruh
+ if (copy.children) {
+ for (const child of copy.children) {
+ if (templatesM.isCopy(child)) {
+ killRecursive(child as (BasicCopy & pixiMod.DisplayObject)); // bruh
+ }
}
}
const stackIndex = stack.indexOf(copy);
@@ -196,12 +204,17 @@ let loading: Promise;
stack.splice(stackIndex, 1);
}
if (templatesM.isCopy(copy) && (copy as BasicCopy).template) {
- const templatelistIndex = templatesM
- .list[(copy as BasicCopy & pixiMod.DisplayObject).template]
- .indexOf((copy as BasicCopy & pixiMod.DisplayObject));
- if (templatelistIndex !== -1) {
- templatesM.list[(copy as BasicCopy & pixiMod.DisplayObject).template]
- .splice(templatelistIndex, 1);
+ if ((copy as BasicCopy).template) {
+ const {template} = (copy as BasicCopy);
+ if (template) {
+ const templatelistIndex = templatesM
+ .list[template]
+ .indexOf((copy as BasicCopy));
+ if (templatelistIndex !== -1) {
+ templatesM.list[template]
+ .splice(templatelistIndex, 1);
+ }
+ }
}
}
deadPool.push(copy);
@@ -288,6 +301,9 @@ let loading: Promise;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(window as any).PIXI = PIXI;
+mountErrorListener();
+
+/*!@globalVars@*/
{
const actions = actionsM;
diff --git a/src/ct.release/res.ts b/src/ct.release/res.ts
index 1a1254c5a..2cbbbc941 100644
--- a/src/ct.release/res.ts
+++ b/src/ct.release/res.ts
@@ -1,12 +1,12 @@
import {required, default as uLib} from './u';
import type {TextureShape, ExportedTiledTexture, ExportedFolder, ExportedAsset} from '../node_requires/exporter/_exporterContracts';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-import type {sound as pixiSound, Sound} from 'node_modules/@pixi/sound';
+import type {sound as pixiSound, Sound, Options as SoundOptions} from 'node_modules/@pixi/sound';
import {pixiSoundPrefix, exportedSounds, soundMap, pixiSoundInstances} from './sounds.js';
type AssetType = 'template' | 'room' | 'sound' | 'style' | 'texture' | 'tandem' | 'font' | 'behavior' | 'script';
-import * as pixiMod from 'node_modules/pixi.js';
+import * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod & {
sound: typeof pixiSound
};
@@ -118,8 +118,8 @@ const resLib = {
const ctTexture = [texture] as CtjsAnimation;
ctTexture.shape = texture.shape = textureOptions.shape || ({} as TextureShape);
texture.defaultAnchor = ctTexture.defaultAnchor = new PIXI.Point(
- textureOptions.anchor.x || 0,
- textureOptions.anchor.x || 0
+ textureOptions.anchor ? textureOptions.anchor.x : 0,
+ textureOptions.anchor ? textureOptions.anchor.y : 0
);
const hitArea = uLib.getHitArea(texture.shape);
if (hitArea) {
@@ -139,7 +139,7 @@ const resLib = {
const sheet = await PIXI.Assets.load(url);
for (const animation in sheet.animations) {
const tex = sheet.animations[animation];
- const animData = sheet.data.animations;
+ const animData = sheet.data.animations as pixiMod.utils.Dict;
for (let i = 0, l = animData[animation].length; i < l; i++) {
const a = animData[animation],
f = a[i];
@@ -202,20 +202,21 @@ const resLib = {
preload = true
): Promise {
return new Promise((resolve, reject) => {
- const asset = PIXI.sound.add(name, {
+ const opts: SoundOptions = {
url: path,
- preload,
- loaded: preload ?
- (err) => {
- if (err) {
- reject(err);
- } else {
- resLib.pixiSounds[name] = asset;
- resolve(name);
- }
- } :
- void 0
- });
+ preload
+ };
+ if (preload) {
+ opts.loaded = (err) => {
+ if (err) {
+ reject(err);
+ } else {
+ resLib.pixiSounds[name] = asset;
+ resolve(name);
+ }
+ };
+ }
+ const asset = PIXI.sound.add(name, opts);
if (!preload) {
resolve(name);
}
@@ -281,6 +282,7 @@ const resLib = {
* Gets a pixi.js texture from a ct.js' texture name,
* so that it can be used in pixi.js objects.
* @param name The name of the ct.js texture, or -1 for an empty texture
+ * @catnipAsset name:texture
* @param [frame] The frame to extract
* @returns {PIXI.Texture|PIXI.Texture[]} If `frame` was specified,
* returns a single PIXI.Texture. Otherwise, returns an array
@@ -317,6 +319,7 @@ const resLib = {
/**
* Returns the collision shape of the given texture.
* @param name The name of the ct.js texture, or -1 for an empty collision shape
+ * @catnipAsset name:texture
*/
getTextureShape(name: string | -1): TextureShape {
if (name === -1) {
@@ -331,6 +334,7 @@ const resLib = {
},
/**
* Gets direct children of a folder
+ * @catnipIcon folder
*/
getChildren(path?: string): ExportedAsset[] {
return getEntriesByPath(normalizeAssetPath(path || ''))
@@ -338,6 +342,7 @@ const resLib = {
},
/**
* Gets direct children of a folder, filtered by asset type
+ * @catnipIcon folder
*/
getOfType(type: AssetType | 'folder', path?: string): (ExportedAsset | ExportedFolder)[] {
return getEntriesByPath(normalizeAssetPath(path || ''))
@@ -345,10 +350,11 @@ const resLib = {
},
/**
* Gets all the assets inside of a folder, including in subfolders.
+ * @catnipIcon folder
*/
getAll(path?: string): ExportedAsset[] {
const folderEntries = getEntriesByPath(normalizeAssetPath(path || '')),
- entries = [];
+ entries: ExportedAsset[] = [];
const walker = (currentList: (ExportedFolder | ExportedAsset)[]) => {
for (const entry of currentList) {
if (entry.type === 'folder') {
@@ -363,10 +369,11 @@ const resLib = {
},
/**
* Get all the assets inside of a folder, including in subfolders, filtered by type.
+ * @catnipIcon folder
*/
getAllOfType(type: AssetType | 'folder', path?: string): (ExportedAsset | ExportedFolder)[] {
const folderEntries = getEntriesByPath(normalizeAssetPath(path || '')),
- entries = [];
+ entries: (ExportedAsset | ExportedFolder)[] = [];
const walker = (currentList: (ExportedFolder | ExportedAsset)[]) => {
for (const entry of currentList) {
if (entry.type === 'folder') {
diff --git a/src/ct.release/rooms.ts b/src/ct.release/rooms.ts
index 87ad94c78..567cdbfb6 100644
--- a/src/ct.release/rooms.ts
+++ b/src/ct.release/rooms.ts
@@ -3,12 +3,12 @@ import backgrounds, {Background} from './backgrounds';
import templatesLib, {BasicCopy} from './templates';
import {Tilemap} from './tilemaps';
import mainCamera from './camera';
-import {copyTypeSymbol, deadPool, pixiApp, stack} from '.';
+import {copyTypeSymbol, deadPool, pixiApp, stack, forceDestroy} from '.';
import {ExportedRoom} from './../node_requires/exporter/_exporterContracts';
import {updateViewport} from 'fittoscreen';
import {runBehaviors} from './behaviors';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
type RoomMergeResult = {
@@ -33,7 +33,7 @@ export class Room extends PIXI.Container {
* for more info on UI layers.
*/
isUi: boolean;
- alignElements: BasicCopy[] = [];
+ alignElements: (BasicCopy | (pixiMod.Sprite & {align: ExportedRoom['objects'][0]['align']}))[] = [];
kill = false;
tileLayers: Tilemap[] = [];
backgrounds: Background[] = [];
@@ -96,69 +96,137 @@ export class Room extends PIXI.Container {
newHeight: number
): void {
for (const copy of this.alignElements) {
- if (!copy.align) {
- continue;
- }
- // get the old reference frame
- const {padding, frame} = copy.align;
- const xref = oldWidth * frame.x1 / 100 + padding.left,
- yref = oldHeight * frame.y1 / 100 + padding.top;
- const wref = oldWidth * (frame.x2 - frame.x1) / 100 - padding.left - padding.right,
- href = oldHeight * (frame.y2 - frame.y1) / 100 - padding.top - padding.bottom;
- // get the new reference frame
- const xnew = newWidth * frame.x1 / 100 + padding.left,
- ynew = newHeight * frame.y1 / 100 + padding.top;
- const wnew = newWidth * (frame.x2 - frame.x1) / 100 - padding.left - padding.right,
- hnew = newHeight * (frame.y2 - frame.y1) / 100 - padding.top - padding.bottom;
- if (oldWidth !== newWidth) {
- switch (copy.align.alignX) {
- case 'start':
- copy.x += xnew - xref;
- break;
- case 'both':
- copy.x += xnew - xref;
- copy.width += wnew - wref;
- break;
- case 'end':
- copy.x += wnew - wref + xnew - xref;
- break;
- case 'center':
- copy.x += (wnew - wref) / 2 + xnew - xref;
- break;
- case 'scale': {
- const k = wnew / wref || 1;
- copy.width *= k;
- copy.x = (copy.x - xref) * k + xnew;
- } break;
- default:
- }
+ Room.realignElement(copy, oldWidth, oldHeight, newWidth, newHeight);
+ }
+ }
+ static realignElement(
+ copy: BasicCopy | (pixiMod.Sprite & {align: ExportedRoom['objects'][0]['align']}),
+ oldWidth: number,
+ oldHeight: number,
+ newWidth: number,
+ newHeight: number
+ ): void {
+ if (!copy.align) {
+ return;
+ }
+ // get the old reference frame
+ const {padding, frame} = copy.align;
+ const xref = oldWidth * frame.x1 / 100 + padding.left,
+ yref = oldHeight * frame.y1 / 100 + padding.top;
+ const wref = oldWidth * (frame.x2 - frame.x1) / 100 - padding.left - padding.right,
+ href = oldHeight * (frame.y2 - frame.y1) / 100 - padding.top - padding.bottom;
+ // get the new reference frame
+ const xnew = newWidth * frame.x1 / 100 + padding.left,
+ ynew = newHeight * frame.y1 / 100 + padding.top;
+ const wnew = newWidth * (frame.x2 - frame.x1) / 100 - padding.left - padding.right,
+ hnew = newHeight * (frame.y2 - frame.y1) / 100 - padding.top - padding.bottom;
+ if (oldWidth !== newWidth) {
+ switch (copy.align.alignX) {
+ case 'start':
+ copy.x += xnew - xref;
+ break;
+ case 'both':
+ copy.x += xnew - xref;
+ copy.width += wnew - wref;
+ break;
+ case 'end':
+ copy.x += wnew - wref + xnew - xref;
+ break;
+ case 'center':
+ copy.x += (wnew - wref) / 2 + xnew - xref;
+ break;
+ case 'scale': {
+ const k = wnew / wref || 1;
+ copy.width *= k;
+ copy.x = (copy.x - xref) * k + xnew;
+ } break;
+ default:
}
-
- if (oldHeight !== newHeight) {
- switch (copy.align.alignY) {
- case 'start':
- copy.y += ynew - yref;
- break;
- case 'both':
- copy.y += ynew - yref;
- copy.height += hnew - href;
- break;
- case 'end':
- copy.y += hnew - href + ynew - yref;
- break;
- case 'center':
- copy.y += (hnew - href) / 2 + ynew - yref;
- break;
- case 'scale': {
- const k = hnew / href || 1;
- copy.height *= k;
- copy.y = (copy.y - yref) * k + ynew;
- } break;
- default:
- }
+ }
+ if (oldHeight !== newHeight) {
+ switch (copy.align.alignY) {
+ case 'start':
+ copy.y += ynew - yref;
+ break;
+ case 'both':
+ copy.y += ynew - yref;
+ copy.height += hnew - href;
+ break;
+ case 'end':
+ copy.y += hnew - href + ynew - yref;
+ break;
+ case 'center':
+ copy.y += (hnew - href) / 2 + ynew - yref;
+ break;
+ case 'scale': {
+ const k = hnew / href || 1;
+ copy.height *= k;
+ copy.y = (copy.y - yref) * k + ynew;
+ } break;
+ default:
}
}
}
+ /**
+ * Adds a new copy to the list of elements that should be aligned when window size changes,
+ * with the specified alignment settings.
+ * The copy must be positioned relative to the current camera dimensions beforehand.
+ * @param copy The copy to add
+ * @param align The alignment settings
+ */
+ makeCopyAligned(copy: BasicCopy | pixiMod.Sprite, align: {
+ alignX: 'start' | 'center' | 'end' | 'scale' | 'both',
+ alignY: 'start' | 'center' | 'end' | 'scale' | 'both',
+ frame?: {
+ x1: number,
+ y1: number,
+ x2: number,
+ y2: number
+ },
+ padding?: {
+ left: number,
+ top: number,
+ right: number,
+ bottom: number
+ }
+ }): void {
+ const alignObj = Object.assign({}, align);
+ if (!align.frame) {
+ alignObj.frame = {
+ x1: 0,
+ y1: 0,
+ x2: 100,
+ y2: 100
+ };
+ }
+ if (!align.padding) {
+ alignObj.padding = {
+ left: 0,
+ top: 0,
+ right: 0,
+ bottom: 0
+ };
+ }
+ (copy as (pixiMod.Sprite & {align: ExportedRoom['objects'][0]['align']})).align = alignObj as ExportedRoom['objects'][0]['align'];
+ this.alignElements.push(copy as (pixiMod.Sprite & {align: ExportedRoom['objects'][0]['align']}));
+ }
+ /**
+ * Adds a new copy to the list of elements that should be aligned when window size changes,
+ * with the specified alignment settings.
+ * The copy must be positioned relative to the room's template beforehand.
+ * @param copy The copy to add
+ * @param align The alignment settings
+ */
+ makeCopyAlignedRef(copy: BasicCopy | pixiMod.Sprite, align: Parameters[1]): void {
+ this.makeCopyAligned(copy, align);
+ Room.realignElement(
+ copy as BasicCopy | (pixiMod.Sprite & {align: ExportedRoom['objects'][0]['align']}),
+ this.template.width,
+ this.template.height,
+ mainCamera.width,
+ mainCamera.height
+ );
+ }
// eslint-disable-next-line max-lines-per-function
constructor(template: ExportedRoom, isRoot: boolean) {
@@ -192,7 +260,7 @@ export class Room extends PIXI.Container {
// so we don't use ct.backgrounds.add
const bg = new Background(
template.bgs[i].texture,
- null,
+ 0,
template.bgs[i].depth,
template.bgs[i].exts
);
@@ -264,30 +332,40 @@ export class Room extends PIXI.Container {
}
Room.roomId = 0;
-let nextRoom: string;
+let nextRoom: string | undefined;
const roomsLib = {
/**
* All the existing room templates that can be used in the game.
* It is usually prefilled by ct.IDE.
+ * @catnipIgnore
*/
templates: {} as Record,
+ /**
+ * @catnipIgnore
+ */
Room,
/** The current top-level room in the game. */
- current: null as Room,
+ current: null as (Room | null),
/**
* An object that contains arrays of currently present rooms.
* These include the current room (`rooms.current`), as well as any rooms
* appended or prepended through `rooms.append` and `rooms.prepend`.
+ * @catnipList room
*/
list: {} as Record,
/**
* Creates and adds a background to the current room, at the given depth.
* @param {string} texture The name of the texture to use
+ * @catnipAsset texture:texture
* @param {number} depth The depth of the new background
* @returns {Background} The created background
+ * @catnipSaveReturn
*/
addBg(texture: string, depth: number): Background {
- const bg = new Background(texture, null, depth);
+ if (!roomsLib.current) {
+ throw new Error('[rooms.addBg] You cannot add a background before a room is created');
+ }
+ const bg = new Background(texture, 0, depth);
roomsLib.current.addChild(bg);
return bg;
},
@@ -348,6 +426,7 @@ const roomsLib = {
/**
* Switches to the given room. Note that this transition happens at the end
* of the frame, so the name of a new room may be overridden.
+ * @catnipAsset roomName:room
*/
'switch'(roomName: string): void {
if (roomsLib.templates[roomName]) {
@@ -357,12 +436,19 @@ const roomsLib = {
console.error('[rooms] The room "' + roomName + '" does not exist!');
}
},
+ /**
+ * Whether a room switch is scheduled.
+ * @catnipIgnore
+ */
switching: false,
/**
* Restarts the current room.
* @returns {void}
*/
restart(): void {
+ if (!roomsLib.current) {
+ throw new Error('[rooms.restart] Cannot restart a room before it is created');
+ }
roomsLib.switch(roomsLib.current.name);
},
/**
@@ -370,17 +456,18 @@ const roomsLib = {
* from existing ones.
* This room is added to `ct.stage` after all the other rooms.
* @param {string} roomName The name of the room to be appended
- * @param {object} [exts] Any additional parameters applied to the new room.
+ * @param {object} [params] Any additional parameters applied to the new room.
* Useful for passing settings and data to new widgets and prefabs.
* @returns {Room} A newly created room
+ * @catnipIgnore Defined in catnip/stdLib/rooms.ts
*/
- append(roomName: string, exts?: Record): Room {
+ append(roomName: string, params?: Record): Room {
if (!(roomName in roomsLib.templates)) {
throw new Error(`[rooms.append] append failed: the room ${roomName} does not exist!`);
}
const room = new Room(roomsLib.templates[roomName], false);
- if (exts) {
- Object.assign(room, exts);
+ if (params) {
+ Object.assign(room, params);
}
pixiApp.stage.addChild(room);
room.onCreate.apply(room);
@@ -393,17 +480,18 @@ const roomsLib = {
* from existing ones.
* This room is added to `ct.stage` before all the other rooms.
* @param {string} roomName The name of the room to be prepended
- * @param {object} [exts] Any additional parameters applied to the new room.
+ * @param {object} [params] Any additional parameters applied to the new room.
* Useful for passing settings and data to new widgets and prefabs.
* @returns {Room} A newly created room
+ * @catnipIgnore Defined in catnip/stdLib/rooms.ts
*/
- prepend(roomName: string, exts?: Record): Room {
+ prepend(roomName: string, params?: Record): Room {
if (!(roomName in roomsLib.templates)) {
throw new Error(`[rooms] prepend failed: the room ${roomName} does not exist!`);
}
const room = new Room(roomsLib.templates[roomName], false);
- if (exts) {
- Object.assign(room, exts);
+ if (params) {
+ Object.assign(room, params);
}
pixiApp.stage.addChildAt(room, 0);
room.onCreate.apply(room);
@@ -415,11 +503,16 @@ const roomsLib = {
* Merges a given room into the current one. Skips room's OnCreate event.
*
* @param roomName The name of the room that needs to be merged
+ * @catnipAsset roomName:room
* @returns Arrays of created copies, backgrounds, tile layers,
* added to the current room (`rooms.current`). Note: it does not get updated,
* so beware of memory leaks if you keep a reference to this array for a long time!
+ * @catnipSaveReturn
*/
merge(roomName: string): RoomMergeResult | false {
+ if (!roomsLib.current) {
+ throw new Error('[rooms.merge] Cannot merge in a room before the main one is created');
+ }
if (!(roomName in roomsLib.templates)) {
console.error(`[rooms] merge failed: the room ${roomName} does not exist!`);
return false;
@@ -432,7 +525,7 @@ const roomsLib = {
const template = roomsLib.templates[roomName];
const target = roomsLib.current;
for (const t of template.bgs) {
- const bg = new Background(t.texture, null, t.depth, t.exts);
+ const bg = new Background(t.texture, 0, t.depth, t.exts);
target.backgrounds.push(bg);
target.addChild(bg);
generated.backgrounds.push(bg);
@@ -458,6 +551,9 @@ const roomsLib = {
}
return generated;
},
+ /**
+ * @catnipIgnore
+ */
forceSwitch(roomName?: string): void {
if (nextRoom) {
roomName = nextRoom;
@@ -466,11 +562,15 @@ const roomsLib = {
roomsLib.rootRoomOnLeave.apply(roomsLib.current);
roomsLib.current.onLeave();
roomsLib.onLeave.apply(roomsLib.current);
- roomsLib.current = void 0;
+ roomsLib.current = null;
}
roomsLib.clear();
+ for (const copy of forceDestroy) {
+ copy.destroy();
+ }
+ forceDestroy.clear();
deadPool.length = 0;
- var template = roomsLib.templates[roomName];
+ var template = roomsLib.templates[roomName as string];
mainCamera.reset(
template.width / 2,
template.height / 2,
@@ -489,27 +589,39 @@ const roomsLib = {
roomsLib.rootRoomOnCreate.apply(roomsLib.current);
roomsLib.current.onCreate();
roomsLib.onCreate.apply(roomsLib.current);
- roomsLib.list[roomName].push(roomsLib.current);
+ roomsLib.list[roomName as string].push(roomsLib.current);
/*!%switch%*/
mainCamera.manageStage();
roomsLib.switching = false;
nextRoom = void 0;
},
+ /**
+ * @catnipIgnore
+ */
onCreate(this: Room): void {
/*!%roomoncreate%*/
if (this.behaviors.length) {
runBehaviors(this, 'rooms', 'thisOnCreate');
}
},
+ /**
+ * @catnipIgnore
+ */
onLeave(this: Room): void {
/*!%roomonleave%*/
if (this.behaviors.length) {
runBehaviors(this, 'rooms', 'thisOnDestroy');
}
},
+ /**
+ * @catnipIgnore
+ */
beforeStep(this: Room): void {
/*!%beforeroomstep%*/
},
+ /**
+ * @catnipIgnore
+ */
afterStep(this: Room): void {
/*!%afterroomstep%*/
if (this.behaviors.length) {
@@ -519,9 +631,15 @@ const roomsLib = {
c.tick();
}
},
+ /**
+ * @catnipIgnore
+ */
beforeDraw(this: Room): void {
/*!%beforeroomdraw%*/
},
+ /**
+ * @catnipIgnore
+ */
afterDraw(this: Room): void {
/*!%afterroomdraw%*/
if (this.behaviors.length) {
@@ -531,15 +649,27 @@ const roomsLib = {
fn();
}
},
+ /**
+ * @catnipIgnore
+ */
rootRoomOnCreate(this: Room): void {
/*!@rootRoomOnCreate@*/
},
+ /**
+ * @catnipIgnore
+ */
rootRoomOnStep(this: Room): void {
/*!@rootRoomOnStep@*/
},
+ /**
+ * @catnipIgnore
+ */
rootRoomOnDraw(this: Room): void {
/*!@rootRoomOnDraw@*/
},
+ /**
+ * @catnipIgnore
+ */
rootRoomOnLeave(this: Room): void {
/*!@rootRoomOnLeave@*/
},
diff --git a/src/ct.release/sounds.ts b/src/ct.release/sounds.ts
index 38bbb12e8..7e28143cd 100644
--- a/src/ct.release/sounds.ts
+++ b/src/ct.release/sounds.ts
@@ -14,7 +14,7 @@ import type {webaudio} from 'node_modules/@pixi/sound/lib';
import type {ExportedSound} from '../node_requires/exporter/_exporterContracts';
import type {Camera} from 'camera';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod & {
sound: typeof pixiSound & {
filters: typeof pixiSoundFilters;
@@ -24,7 +24,7 @@ declare var camera: Camera;
/* eslint-disable no-underscore-dangle */
class PannerFilter extends PIXI.sound.filters.Filter {
- private _panner: PannerNode;
+ private _panner: PannerNode | null;
constructor(refDistance: number, rolloffFactor: number) {
const {audioContext} = PIXI.sound.context;
const panner = audioContext.createPanner();
@@ -40,8 +40,8 @@ class PannerFilter extends PIXI.sound.filters.Filter {
if (tracked.kill) {
return;
}
- this._panner.positionX.value = tracked.x / camera.referenceLength;
- this._panner.positionY.value = tracked.y / camera.referenceLength;
+ this._panner!.positionX.value = tracked.x / camera.referenceLength;
+ this._panner!.positionY.value = tracked.y / camera.referenceLength;
}
destroy() {
super.destroy();
@@ -50,11 +50,20 @@ class PannerFilter extends PIXI.sound.filters.Filter {
}
/* eslint-enable no-underscore-dangle */
+/**
+ * @catnipIgnore
+ */
export const pannedSounds = new Map<{x: number, y: number}, PannerFilter>();
// ⚠️ DO NOT put into res.ts, see the start of the file.
+/**
+ * @catnipIgnore
+ */
export const exportedSounds = [/*!@sounds@*/][0] as ExportedSound[] ?? [];
-/** All the sound data objects exported from ct.IDE, mapped by their asset name. */
+/**
+ * All the sound data objects exported from ct.IDE, mapped by their asset name.
+ * @catnipIgnore
+ */
export const soundMap = {} as Record;
for (const exportedSound of exportedSounds) {
soundMap[exportedSound.name] = exportedSound;
@@ -62,6 +71,7 @@ for (const exportedSound of exportedSounds) {
/**
* A map of Sound instances of both exported sounds' variants
* and user-loaded ones with res.loadSound.
+ * @catnipIgnore
*/
export const pixiSoundInstances = {} as Record;
@@ -79,7 +89,10 @@ for (const fxName of fxNames) {
fxNamesToClasses[fxName] = PIXI.sound.filters[fxName];
}
-/** A prefix for PIXI.Loader to distinguish between sounds and other asset types like textures. */
+/**
+ * A prefix for PIXI.Loader to distinguish between sounds and other asset types like textures.
+ * @catnipIgnore
+ */
export const pixiSoundPrefix = 'pixiSound-';
const randomRange = (min: number, max: number): number => Math.random() * (max - min) + min;
@@ -102,7 +115,7 @@ const withSound = (name: string, fn: (sound: Sound, assetName: string) => T):
const assetName = `${pixiSoundPrefix}${variant.uid}`;
lastVal = fn(pixiSoundInstances[assetName], assetName);
}
- return lastVal;
+ return lastVal!;
}
throw new Error(`[sounds] Sound "${name}" was not found. Is it a typo?`);
};
@@ -110,8 +123,7 @@ const withSound = (name: string, fn: (sound: Sound, assetName: string) => T):
/**
* Plays a variant of a sound by applying randomized filters (if applicable)
* as exported from ct.IDE.
- *
- * @param {string} name Sound's name
+ * @catnipIgnore
*/
export const playVariant = (
sound: ExportedSound,
@@ -157,6 +169,9 @@ export const playVariant = (
return pixiSoundInst;
};
+/**
+ * @catnipIgnore
+ */
export const playWithoutEffects = (
sound: ExportedSound,
variant: ExportedSound['variants'][0],
@@ -167,6 +182,9 @@ export const playWithoutEffects = (
return pixiSoundInst;
};
+/**
+ * @catnipIgnore
+ */
export const playRandomVariant = (
sound: ExportedSound,
options?: PlayOptions
@@ -184,7 +202,7 @@ export const soundsLib = {
* @returns {Promise} A promise that resolves into the name of the loaded sound asset.
*/
async load(name: string): Promise {
- const promises = [];
+ const promises: Promise[] = [];
withSound(name, (soundRes, resName) => {
const s = PIXI.sound.play(resName, {
muted: true
@@ -206,6 +224,7 @@ export const soundsLib = {
* Plays a sound.
*
* @param {string} name Sound's name
+ * @catnipAsset name:sound
* @param {PlayOptions} [options] Options used for sound playback.
* @param {Function} options.complete When completed.
* @param {number} options.end End time in seconds.
@@ -218,6 +237,7 @@ export const soundsLib = {
* @param {number} options.start Start time offset in seconds.
* @param {number} options.volume Override default volume.
* @returns Either a sound instance, or a promise that resolves into a sound instance.
+ * @catnipIgnore It is defined in stdLib/sounds.ts.
*/
play(name: string, options?: PlayOptions): Promise | IMediaInstance {
if (name in soundMap) {
@@ -231,6 +251,10 @@ export const soundsLib = {
}
throw new Error(`[sounds.play] Sound "${name}" was not found. Is it a typo?`);
},
+ /**
+ * Plays a sound in 3D space.
+ * @catnipIgnore It is defined in stdLib/sounds.ts.
+ */
playAt(
name: string,
position: {x: number, y: number},
@@ -262,6 +286,7 @@ export const soundsLib = {
* Stops a sound if a name is specified, otherwise stops all sound.
*
* @param {string|IMediaInstance} [name] Sound's name, or the sound instance.
+ * @catnipAsset name:sound
*
* @returns {void}
*/
@@ -281,6 +306,7 @@ export const soundsLib = {
* Pauses a sound if a name is specified, otherwise pauses all sound.
*
* @param {string} [name] Sound's name
+ * @catnipAsset name:sound
*
* @returns {void}
*/
@@ -296,6 +322,7 @@ export const soundsLib = {
* Resumes a sound if a name is specified, otherwise resumes all sound.
*
* @param {string} [name] Sound's name
+ * @catnipAsset name:sound
*
* @returns {void}
*/
@@ -313,6 +340,7 @@ export const soundsLib = {
* for existance of sound's metadata in your game.
*
* @param {string} name Sound's name
+ * @catnipAsset name:sound
*
* @returns {boolean}
*/
@@ -325,6 +353,7 @@ export const soundsLib = {
* otherwise if any sound is currently playing.
*
* @param {string} [name] Sound's name
+ * @catnipAsset name:sound
*
* @returns {boolean} `true` if the sound is playing, `false` otherwise.
*/
@@ -350,10 +379,12 @@ export const soundsLib = {
* Get or set the volume for a sound.
*
* @param {string|IMediaInstance} name Sound's name or instance
+ * @catnipAsset name:sound
* @param {number} [volume] The new volume where 1 is 100%.
* If empty, will return the existing volume.
*
* @returns {number} The current volume of the sound.
+ * @catnipIgnore
*/
volume(name: string | IMediaInstance, volume?: number): number {
if (volume !== void 0) {
@@ -374,7 +405,6 @@ export const soundsLib = {
/**
* Set the global volume for all sounds.
* @param {number} value The new volume where 1 is 100%.
- *
*/
globalVolume(value: number): void {
PIXI.sound.volumeAll = value;
@@ -384,19 +414,17 @@ export const soundsLib = {
* Fades a sound to a given volume. Can affect either a specific instance or the whole group.
*
* @param [name] Sound's name or instance to affect. If null, all sounds are faded.
+ * @catnipAsset name:sound
* @param [newVolume] The new volume where 1 is 100%. Default is 0.
* @param [duration] The duration of transition, in milliseconds. Default is 1000.
*/
fade(name?: string | IMediaInstance | SoundLibrary, newVolume = 0, duration = 1000): void {
const start = {
time: performance.now(),
- value: null
+ value: name ?
+ soundsLib.volume(name as string | IMediaInstance) :
+ PIXI.sound.context.volume
};
- if (name) {
- start.value = soundsLib.volume(name as string | IMediaInstance);
- } else {
- start.value = PIXI.sound.context.volume;
- }
const updateVolume = (currentTime: number) => {
const elapsed = currentTime - start.time;
const progress = Math.min(elapsed / duration, 1);
@@ -420,6 +448,8 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
+ * @catnipSaveReturn
*/
addFilter(
sound: false | string | Sound | webaudio.WebAudioInstance,
@@ -447,7 +477,9 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
* @param {number} amount The amount of distortion to set from 0 to 1. Default is 0.
+ * @catnipSaveReturn
*/
addDistortion(
sound: false | string | Sound | webaudio.WebAudioInstance,
@@ -464,6 +496,7 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
* @param {number} f32 Default gain for 32 Hz. Default is 0.
* @param {number} f64 Default gain for 64 Hz. Default is 0.
* @param {number} f125 Default gain for 125 Hz. Default is 0.
@@ -474,8 +507,12 @@ export const soundsLib = {
* @param {number} f4k Default gain for 4000 Hz. Default is 0.
* @param {number} f8k Default gain for 8000 Hz. Default is 0.
* @param {number} f16k Default gain for 16000 Hz. Default is 0.
+ * @catnipSaveReturn
*/
+ /**
+ * @catnipAsset sound:sound
+ */
// eslint-disable-next-line max-params
addEqualizer(
sound: false | string | Sound | webaudio.WebAudioInstance,
@@ -502,6 +539,8 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
+ * @catnipSaveReturn
*/
addMonoFilter(sound: false | string | Sound | webaudio.WebAudioInstance):
pixiSoundFilters.MonoFilter {
@@ -516,9 +555,11 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
* @param {number} seconds Seconds for reverb. Default is 3.
* @param {number} decay The decay length. Default is 2.
* @param {boolean} reverse Reverse reverb. Default is false.
+ * @catnipSaveReturn
*/
addReverb(
sound: false | string | Sound | webaudio.WebAudioInstance,
@@ -537,7 +578,9 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
* @param {number} pan The amount of panning: -1 is left, 1 is right. Default is 0 (centered).
+ * @catnipSaveReturn
*/
addStereoFilter(
sound: false | string | Sound | webaudio.WebAudioInstance,
@@ -553,7 +596,9 @@ export const soundsLib = {
* This filter can only be applied to sound instances.
*
* @param sound The sound to apply effect to.
+ * @catnipAsset sound:sound
* @param position Any object with x and y properties — for example, copies.
+ * @catnipSaveReturn
*/
addPannerFilter(
sound: webaudio.WebAudioInstance,
@@ -576,6 +621,8 @@ export const soundsLib = {
* @param sound If set to false, applies the filter globally.
* If set to a string, applies the filter to the specified sound asset.
* If set to a media instance or PIXI.Sound instance, applies the filter to it.
+ * @catnipAsset sound:sound
+ * @catnipSaveReturn
*/
addTelephone(sound: false | string | Sound | webaudio.WebAudioInstance):
pixiSoundFilters.TelephoneFilter {
@@ -590,6 +637,7 @@ export const soundsLib = {
* @param {string} [name] The sound to affect. Can be a name of the sound asset
* or the specific sound instance you get from running `sounds.play`.
* If set to false, it affects all sounds.
+ * @catnipAsset name:sound
* @param {string} [filter] The name of the filter. If omitted, all the filters are removed.
*
* @returns {void}
@@ -644,10 +692,12 @@ export const soundsLib = {
* Set the speed (playback rate) of a sound.
*
* @param {string|IMediaInstance} name Sound's name or instance
+ * @catnipAsset name:sound
* @param {number} [value] The new speed, where 1 is 100%.
* If empty, will return the existing speed value.
*
* @returns {number} The current speed of the sound.
+ * @catnipIgnore
*/
speed(name: string | IMediaInstance, value?: number): number { // TODO: make an overload
if (value) {
diff --git a/src/ct.release/styles.ts b/src/ct.release/styles.ts
index 63a74492f..f71b2520e 100644
--- a/src/ct.release/styles.ts
+++ b/src/ct.release/styles.ts
@@ -1,10 +1,14 @@
import {ExportedStyle} from './../node_requires/exporter/_exporterContracts';
const stylesLib = {
+ /**
+ * @catnipIgnore
+ */
types: {} as Record,
/**
* Creates a new style with a given name.
* Technically, it just writes `data` to `styles.types`
+ * @catnipIgnore
*/
new(name: string, styleTemplate: ExportedStyle): ExportedStyle {
stylesLib.types[name] = styleTemplate;
@@ -13,6 +17,7 @@ const stylesLib = {
/**
* Returns a style of a given name. The actual behavior strongly depends on `copy` parameter.
* @param name The name of the style to load
+ * @catnipAsset name:style
* @param [copy] If not set, returns the source style object.
* Editing it will affect all new style calls.
* When set to `true`, will create a new object, which you can safely modify
diff --git a/src/ct.release/templateBaseClasses/PixiAnimatedSprite.ts b/src/ct.release/templateBaseClasses/PixiAnimatedSprite.ts
index cac25c237..a02c37a7f 100644
--- a/src/ct.release/templateBaseClasses/PixiAnimatedSprite.ts
+++ b/src/ct.release/templateBaseClasses/PixiAnimatedSprite.ts
@@ -1,7 +1,7 @@
-import res from '../res';
+import res, {CtjsAnimation} from '../res';
import {ExportedTemplate} from '../../node_requires/exporter/_exporterContracts';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiAnimateSprite extends PIXI.AnimatedSprite {
@@ -9,7 +9,7 @@ export default class PixiAnimateSprite extends PIXI.AnimatedSprite {
if (t?.baseClass !== 'AnimatedSprite') {
throw new Error('Don\'t call PixiButton class directly! Use templates.copy to create an instance instead.');
}
- const textures = res.getTexture(t.texture);
+ const textures: CtjsAnimation | pixiMod.Texture[] = res.getTexture(t.texture!);
super(textures);
this.anchor.x = t.anchorX ?? textures[0].defaultAnchor.x ?? 0;
this.anchor.y = t.anchorY ?? textures[0].defaultAnchor.y ?? 0;
diff --git a/src/ct.release/templateBaseClasses/PixiBitmapText.ts b/src/ct.release/templateBaseClasses/PixiBitmapText.ts
new file mode 100644
index 000000000..b9f366978
--- /dev/null
+++ b/src/ct.release/templateBaseClasses/PixiBitmapText.ts
@@ -0,0 +1,53 @@
+import {ExportedStyle, ExportedTemplate} from '../../node_requires/exporter/_exporterContracts';
+import uLib from '../u';
+import {CopyText} from '.';
+
+import type * as pixiMod from 'pixi.js';
+import stylesLib from '../styles';
+declare var PIXI: typeof pixiMod;
+
+// PIXI.BitmapText accepts ITextStyle but ofc doesn't support outlines and shadows.
+// With that, PixiBitmapText class accepts exported ct.js styles,
+// and IDE warns about shadows and outlines.
+export default class PixiBitmapText extends PIXI.BitmapText {
+ constructor(t: ExportedTemplate, exts: Record) {
+ if (t?.baseClass !== 'BitmapText') {
+ throw new Error('Don\'t call PixiBitmapText class directly! Use templates.copy to create an instance instead.');
+ }
+ let style: ExportedStyle;
+ if (t.textStyle && t.textStyle !== -1) {
+ style = stylesLib.get(t.textStyle, true);
+ } else {
+ style = {} as ExportedStyle;
+ }
+ if (exts.customWordWrap) {
+ style.wordWrap = true;
+ style.wordWrapWidth = Number(exts.customWordWrap);
+ }
+ if (exts.customSize) {
+ style.fontSize = Number(exts.customSize);
+ }
+ super(
+ (exts.customText as string) || t.defaultText || '',
+ {
+ ...style,
+ fontName: style.fontFamily.split(',')[0].trim(),
+ tint: new PIXI.Color(style.fill as string)
+ }
+ );
+ this.tint = new PIXI.Color(style.fill as string);
+ if (exts.customAnchor) {
+ const anchor = exts.customAnchor as {
+ x?: number,
+ y?: number
+ };
+ (this as CopyText).anchor.set(anchor?.x ?? 0, anchor?.y ?? 0);
+ }
+ (this as CopyText).shape = uLib.getRectShape(this);
+ (this as CopyText).scale.set(
+ (exts.scaleX as number) ?? 1,
+ (exts.scaleY as number) ?? 1
+ );
+ return this;
+ }
+}
diff --git a/src/ct.release/templateBaseClasses/PixiButton.ts b/src/ct.release/templateBaseClasses/PixiButton.ts
index bdccfdf05..05e736443 100644
--- a/src/ct.release/templateBaseClasses/PixiButton.ts
+++ b/src/ct.release/templateBaseClasses/PixiButton.ts
@@ -4,12 +4,12 @@ import resLib from '../res';
import uLib from '../u';
import {CopyButton} from '../templateBaseClasses';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiButton extends PIXI.Container {
panel: pixiMod.NineSlicePlane;
- textLabel: pixiMod.Text;
+ textLabel: pixiMod.Text | pixiMod.BitmapText;
normalTexture: pixiMod.Texture;
hoverTexture: pixiMod.Texture;
pressedTexture: pixiMod.Texture;
@@ -76,7 +76,16 @@ export default class PixiButton extends PIXI.Container {
if (exts.customSize) {
style.fontSize = Number(exts.customSize);
}
- this.textLabel = new PIXI.Text((exts.customText as string) || t.defaultText || '', style);
+ if (t.useBitmapText) {
+ this.textLabel = new PIXI.BitmapText((exts.customText as string) || t.defaultText || '', {
+ ...style,
+ fontSize: Number(style.fontSize),
+ fontName: (style.fontFamily as string).split(',')[0].trim()
+ });
+ this.textLabel.tint = new PIXI.Color(style.fill as string);
+ } else {
+ this.textLabel = new PIXI.Text((exts.customText as string) || t.defaultText || '', style);
+ }
this.textLabel.anchor.set(0.5);
this.addChild(this.panel, this.textLabel);
@@ -93,7 +102,7 @@ export default class PixiButton extends PIXI.Container {
this.on('pointerupoutside', this.blur);
this.on('pointerupoutsidecapture', this.blur);
- this.updateNineSliceShape = t.nineSliceSettings.autoUpdate;
+ this.updateNineSliceShape = t.nineSliceSettings!.autoUpdate;
let baseWidth = this.panel.width,
baseHeight = this.panel.height;
if ('scaleX' in exts) {
diff --git a/src/ct.release/templateBaseClasses/PixiContainer.ts b/src/ct.release/templateBaseClasses/PixiContainer.ts
index 7309df551..65516c71e 100644
--- a/src/ct.release/templateBaseClasses/PixiContainer.ts
+++ b/src/ct.release/templateBaseClasses/PixiContainer.ts
@@ -1,4 +1,4 @@
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiContainer extends PIXI.Container {
diff --git a/src/ct.release/templateBaseClasses/PixiNineSlicePlane.ts b/src/ct.release/templateBaseClasses/PixiNineSlicePlane.ts
index f6b1d9829..6bc839c73 100644
--- a/src/ct.release/templateBaseClasses/PixiNineSlicePlane.ts
+++ b/src/ct.release/templateBaseClasses/PixiNineSlicePlane.ts
@@ -3,7 +3,7 @@ import resLib from '../res';
import uLib from '../u';
import {CopyPanel} from '../templateBaseClasses';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiPanel extends PIXI.NineSlicePlane {
@@ -25,7 +25,7 @@ export default class PixiPanel extends PIXI.NineSlicePlane {
t.nineSliceSettings?.right ?? 16,
t.nineSliceSettings?.bottom ?? 16
);
- this.updateNineSliceShape = t.nineSliceSettings.autoUpdate;
+ this.updateNineSliceShape = t.nineSliceSettings!.autoUpdate;
const baseWidth = this.width,
baseHeight = this.height;
if ('scaleX' in exts) {
diff --git a/src/ct.release/templateBaseClasses/PixiScrollingTexture.ts b/src/ct.release/templateBaseClasses/PixiScrollingTexture.ts
index 4dbf7bf2a..40ec81caa 100644
--- a/src/ct.release/templateBaseClasses/PixiScrollingTexture.ts
+++ b/src/ct.release/templateBaseClasses/PixiScrollingTexture.ts
@@ -4,7 +4,7 @@ import uLib from '../u';
import roomsLib from '../rooms';
import {BasicCopy} from '../templates';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiScrollingTexture extends PIXI.TilingSprite {
@@ -38,10 +38,10 @@ export default class PixiScrollingTexture extends PIXI.TilingSprite {
this.height = this.#baseHeight * (exts.scaleY as number ?? 1);
}
this.on('added', () => {
- roomsLib.current.tickerSet.add(this as typeof this & BasicCopy);
+ roomsLib.current!.tickerSet.add(this as typeof this & BasicCopy);
});
this.on('removed', () => {
- roomsLib.current.tickerSet.delete(this as typeof this & BasicCopy);
+ roomsLib.current!.tickerSet.delete(this as typeof this & BasicCopy);
});
this.shape = {
type: 'rect',
diff --git a/src/ct.release/templateBaseClasses/PixiSpritedCounter.ts b/src/ct.release/templateBaseClasses/PixiSpritedCounter.ts
index 548c6776f..4ee9f396e 100644
--- a/src/ct.release/templateBaseClasses/PixiSpritedCounter.ts
+++ b/src/ct.release/templateBaseClasses/PixiSpritedCounter.ts
@@ -1,7 +1,7 @@
import {ExportedTemplate} from '../../node_requires/exporter/_exporterContracts';
import resLib from '../res';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
export default class PixiSpritedCounter extends PIXI.TilingSprite {
diff --git a/src/ct.release/templateBaseClasses/PixiText.ts b/src/ct.release/templateBaseClasses/PixiText.ts
index 198238614..01f83ad1d 100644
--- a/src/ct.release/templateBaseClasses/PixiText.ts
+++ b/src/ct.release/templateBaseClasses/PixiText.ts
@@ -2,14 +2,14 @@ import {ExportedStyle, ExportedTemplate} from '../../node_requires/exporter/_exp
import uLib from '../u';
import {CopyText} from '.';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
import stylesLib from '../styles';
declare var PIXI: typeof pixiMod;
export default class PixiText extends PIXI.Text {
constructor(t: ExportedTemplate, exts: Record) {
if (t?.baseClass !== 'Text') {
- throw new Error('Don\'t call PixiPanel class directly! Use templates.copy to create an instance instead.');
+ throw new Error('Don\'t call PixiText class directly! Use templates.copy to create an instance instead.');
}
let style: ExportedStyle;
if (t.textStyle && t.textStyle !== -1) {
diff --git a/src/ct.release/templateBaseClasses/PixiTextBox.ts b/src/ct.release/templateBaseClasses/PixiTextBox.ts
index a1ef8c199..5e5f1fe31 100644
--- a/src/ct.release/templateBaseClasses/PixiTextBox.ts
+++ b/src/ct.release/templateBaseClasses/PixiTextBox.ts
@@ -5,9 +5,9 @@ import uLib from '../u';
import {BasicCopy} from 'templates';
import {CopyTextBox} from 'templateBaseClasses';
import {setFocusedElement} from '../templates';
-import {pixiApp, settings as settingsLib} from 'index';
+import {pixiApp, settings as settingsLib, forceDestroy} from 'index';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
const cssStyle = document.createElement('style');
@@ -15,7 +15,11 @@ document.head.appendChild(cssStyle);
export default class PixiTextBox extends PIXI.Container {
panel: pixiMod.NineSlicePlane;
- textLabel: pixiMod.Text;
+ textLabel: pixiMod.Text | pixiMod.BitmapText;
+ style: Partial & {
+ fontName: string;
+ fontSize: number;
+ };
normalTexture: pixiMod.Texture;
hoverTexture: pixiMod.Texture;
pressedTexture: pixiMod.Texture;
@@ -58,9 +62,9 @@ export default class PixiTextBox extends PIXI.Container {
if (this.maxLength > 0) {
this.#htmlInput.maxLength = this.maxLength;
} else {
- delete this.#htmlInput.maxLength;
+ this.#htmlInput.maxLength = 524288;
}
- this.#htmlInput.type = this.fieldType;
+ this.#htmlInput.type = this.fieldType || 'text';
this.#htmlInput.value = this.text;
document.body.appendChild(this.#htmlInput);
this.#htmlInput.focus();
@@ -124,9 +128,11 @@ export default class PixiTextBox extends PIXI.Container {
coord = isUi ? uLib.uiToCssCoord : uLib.gameToCssCoord;
const lt = coord(x1, y1),
br = coord(x2, y2);
- const textStyle = this.textLabel.style;
+ const textStyle = this.style;
+ // Mimic font style used in pixi.js
Object.assign(this.#htmlInput.style, {
- fontSize: scalar(parseFloat(textStyle.fontSize as string)) + 'px',
+ fontFamily: textStyle.fontFamily,
+ fontSize: scalar(textStyle.fontSize) + 'px',
left: lt.x + 'px',
top: lt.y + 'px',
width: br.x - lt.x + 'px',
@@ -140,7 +146,7 @@ export default class PixiTextBox extends PIXI.Container {
} else {
(this.#htmlInput.style as any).textStroke = this.#htmlInput.style.webkitTextStroke = 'unset';
}
- if (textStyle.dropShadow) {
+ if ('dropShadow' in textStyle) {
const angle = uLib.radToDeg(textStyle.dropShadowAngle ?? 0);
let x = uLib.ldx(textStyle.dropShadowDistance ?? 0, angle),
y = uLib.ldy(textStyle.dropShadowDistance ?? 0, angle);
@@ -149,9 +155,6 @@ export default class PixiTextBox extends PIXI.Container {
const css = `${x}px ${y}px ${scalar(textStyle.dropShadowBlur ?? 0)}px ${textStyle.dropShadowColor}`;
this.#htmlInput.style.textShadow = `${css}, ${css}`; // Make it thicc to match Canvas2D look
}
- this.#htmlInput.style.fontStyle = textStyle.fontStyle ?? 'unset';
- this.#htmlInput.style.fontFamily = (textStyle.fontFamily as string) ?? 'unset';
- this.#htmlInput.style.fontWeight = textStyle.fontWeight ?? '400';
if (this.selectionColor) {
cssStyle.innerHTML = `
::selection {
@@ -179,12 +182,13 @@ export default class PixiTextBox extends PIXI.Container {
}
}
- // eslint-disable-next-line max-lines-per-function
+ // eslint-disable-next-line max-lines-per-function, complexity
constructor(t: ExportedTemplate, exts: Record) {
if (t?.baseClass !== 'TextBox') {
throw new Error('Don\'t call PixiTextBox class directly! Use templates.copy to create an instance instead.');
}
super();
+ forceDestroy.add(this as BasicCopy);
this.normalTexture = resLib.getTexture(t.texture, 0);
this.hoverTexture = t.hoverTexture ?
resLib.getTexture(t.hoverTexture, 0) :
@@ -215,7 +219,17 @@ export default class PixiTextBox extends PIXI.Container {
if (this.fieldType === 'password') {
text = '•'.repeat(text.length);
}
- this.textLabel = new PIXI.Text(text, style);
+ this.style = {
+ ...style,
+ fontSize: Number(style.fontSize),
+ fontName: (style.fontFamily as string).split(',')[0].trim()
+ };
+ if (t.useBitmapText) {
+ this.textLabel = new PIXI.BitmapText((exts.customText as string) || t.defaultText || '', this.style);
+ this.textLabel.tint = new PIXI.Color(style.fill as string);
+ } else {
+ this.textLabel = new PIXI.Text((exts.customText as string) || t.defaultText || '', this.style);
+ }
this.textLabel.anchor.set(0.5);
this.addChild(this.panel, this.textLabel);
@@ -236,7 +250,7 @@ export default class PixiTextBox extends PIXI.Container {
this.on('pointerupoutside', this.unhover);
this.on('pointerupoutsidecapture', this.unhover);
- this.updateNineSliceShape = t.nineSliceSettings.autoUpdate;
+ this.updateNineSliceShape = t.nineSliceSettings!.autoUpdate;
let baseWidth = this.panel.width,
baseHeight = this.panel.height;
if ('scaleX' in exts) {
@@ -262,11 +276,21 @@ export default class PixiTextBox extends PIXI.Container {
this.#htmlInput.addEventListener('input', () => {
this.oninput(this.#htmlInput.value);
});
+ this.#htmlInput.addEventListener('blur', () => {
+ this.#setFocused(false);
+ });
this.on('pointerup', () => {
this.#setFocused(true);
});
}
+ destroy(options?: boolean | pixiMod.IDestroyOptions | undefined): void {
+ forceDestroy.delete(this as BasicCopy);
+ if (this.#focused) {
+ this.#setFocused(false);
+ }
+ super.destroy(options);
+ }
unsize(): void {
const {x, y} = this.scale;
diff --git a/src/ct.release/templateBaseClasses/index.ts b/src/ct.release/templateBaseClasses/index.ts
index 326e530fb..f61bb2236 100644
--- a/src/ct.release/templateBaseClasses/index.ts
+++ b/src/ct.release/templateBaseClasses/index.ts
@@ -5,12 +5,13 @@ import PixiTextBox from './PixiTextBox';
// import PixiScrollBox from './PixiScrollBox';
import PixiPanel from './PixiNineSlicePlane';
import PixiText from './PixiText';
+import PixiBitmapText from './PixiBitmapText';
import PixiContainer from './PixiContainer';
import PixiAnimatedSprite from './PixiAnimatedSprite';
import {ICopy} from '../templates';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
import {BaseClass} from '../../node_requires/exporter/_exporterContracts';
// eslint-disable-next-line @typescript-eslint/ban-types
@@ -24,6 +25,7 @@ export const baseClassToPixiClass: Record focusedElement;
-export const blurFocusedElement = () => {
+/**
+ * @catnipIgnore
+ */
+export const blurFocusedElement = (): void => {
focusedElement.blur();
};
-export const setFocusedElement = (elt: IFocusableElement) => {
+/**
+ * @catnipIgnore
+ */
+export const setFocusedElement = (elt: IFocusableElement): void => {
if (focusedElement && focusedElement !== elt) {
blurFocusedElement();
}
@@ -150,6 +159,9 @@ export const setFocusedElement = (elt: IFocusableElement) => {
export type BasicCopy = Record & pixiMod.DisplayObject & ICopy;
/* eslint-enable @typescript-eslint/no-explicit-any */
+/**
+ * @catnipIgnore
+ */
export const CopyProto: Partial = {
set tex(value: string) {
if (this._tex === value) {
@@ -254,15 +266,30 @@ export const CopyProto: Partial = {
}
};
type Mutable = {-readonly[P in keyof T]: T[P]};
+
+const assignExtends = (target: BasicCopy, exts: Record) => {
+ // Some base classes, like BitmapText, can preset tint during construction,
+ // So we need to multiply it with the set tint to preserve the effect.
+ let {tint} = target;
+ if (exts.tint || exts.tint === 0) {
+ tint = (new PIXI.Color(target.tint))
+ .multiply(exts.tint as number)
+ .toNumber();
+ }
+ Object.assign(target, exts);
+ target.tint = tint;
+};
+
// eslint-disable-next-line complexity, max-lines-per-function
/**
* A factory function that when applied to a PIXI.DisplayObject instance,
* augments it with ct.js Copy functionality.
* @param {string} template The name of the template to copy
* @param {PIXI.DisplayObject|Room} [container] A container to set as copy's parent
- * before its OnCreate event. Defaults to ct.room.
+ * before its OnCreate event. Defaults to rooms.current.
+ * @catnipIgnore
*/
-// eslint-disable-next-line max-lines-per-function, max-params
+// eslint-disable-next-line max-lines-per-function, max-params, complexity
const Copy = function (
this: BasicCopy,
x: number,
@@ -278,7 +305,7 @@ const Copy = function (
// Early linking so that `this.parent` is available in OnCreate events
this.parent = container;
if (template.baseClass === 'AnimatedSprite' || template.baseClass === 'NineSlicePlane') {
- this._tex = template.texture;
+ this._tex = template.texture || -1;
}
(this as Mutable).behaviors = [...template.behaviors];
if (template.visible === false) { // ignore nullish values
@@ -319,7 +346,7 @@ const Copy = function (
this.zIndex = template.depth;
Object.assign(this, template.extends);
if (exts) {
- Object.assign(this, exts);
+ assignExtends(this, exts);
}
if ('texture' in template && !this.shape) {
this.shape = resLib.getTextureShape(template.texture || -1);
@@ -336,7 +363,9 @@ const Copy = function (
templatesLib.templates[template.name].onCreate.apply(this);
onCreateModifier.apply(this);
} else if (exts) {
- Object.assign(this, exts);
+ // Some base classes, like BitmapText, can preset tint during construction,
+ // So we need to multiply it with the set tint to preserve the effect.
+ assignExtends(this, exts);
this.onBeforeCreateModifier.apply(this);
onCreateModifier.apply(this);
}
@@ -359,18 +388,21 @@ const mix = (
) => {
const proto = CopyProto;
const properties = Object.getOwnPropertyNames(proto);
- for (const y in properties) {
- if (properties[y] !== 'constructor') {
+ for (const i in properties) {
+ if (properties[i] !== 'constructor') {
Object.defineProperty(
target,
- properties[y],
- Object.getOwnPropertyDescriptor(proto, properties[y])
+ properties[i],
+ Object.getOwnPropertyDescriptor(proto, properties[i])!
);
}
}
Copy.apply(target, [x, y, template, parent, exts]);
};
+/**
+ * @catnipIgnore
+*/
// eslint-disable-next-line complexity, max-lines-per-function
export const makeCopy = (
template: string,
@@ -401,11 +433,21 @@ const onCreateModifier = function () {
* mainly for finding particular copies and creating new ones.
*/
const templatesLib = {
+ /**
+ * @catnipIgnore
+ */
CopyProto,
+ /**
+ * @catnipIgnore
+ */
Background,
+ /**
+ * @catnipIgnore
+ */
Tilemap,
/**
* An object that contains arrays of copies of all templates.
+ * @catnipList template
*/
list: {
BACKGROUND: [],
@@ -416,60 +458,72 @@ const templatesLib = {
} & Record,
/**
* A map of all the templates of templates exported from ct.IDE.
+ * @catnipIgnore
*/
templates: {} as Record,
+ /**
+ * Creates a new copy of a given template inside the current root room.
+ * A shorthand for `templates.copyIntoRoom(template, x, y, rooms.current, exts)`
+ * @param template The name of the template to use
+ * @catnipAsset template:template
+ * @param [x] The x coordinate of a new copy. Defaults to 0.
+ * @param [y] The y coordinate of a new copy. Defaults to 0.
+ * @param [params] An optional object which parameters will be applied
+ * to the copy prior to its OnCreate event.
+ * @returns The created copy.
+ * @catnipSaveReturn
+ * @catnipIgnore
+ */
+ copy(template: string, x = 0, y = 0, params: Record = {}): BasicCopy {
+ if (!roomsLib.current) {
+ throw new Error('[emitters.fire] An attempt to create a copy before the main room is created.');
+ }
+ return templatesLib.copyIntoRoom(template, x, y, roomsLib.current, params);
+ },
/**
* Creates a new copy of a given template inside a specific room.
* @param template The name of the template to use
+ * @catnipAsset template:template
* @param [x] The x coordinate of a new copy. Defaults to 0.
* @param [y] The y coordinate of a new copy. Defaults to 0.
* @param [room] The room to which add the copy.
* Defaults to the current room.
- * @param [exts] An optional object which parameters will be applied
+ * @param [params] An optional object which parameters will be applied
* to the copy prior to its OnCreate event.
* @returns The created copy.
+ * @catnipSaveReturn
+ * @catnipIgnore
*/
// eslint-disable-next-line max-len
- copyIntoRoom(template: string, x = 0, y = 0, room: Room, exts: Record = {}): BasicCopy {
+ copyIntoRoom(template: string, x = 0, y = 0, room: Room, params: Record = {}): BasicCopy {
// An advanced constructor. Returns a Copy
if (!room || !(room instanceof Room)) {
throw new Error(`Attempt to spawn a copy of template ${template} inside an invalid room. Room's value provided: ${room}`);
}
- const obj = makeCopy(template, x, y, room, exts);
+ const obj = makeCopy(template, x, y, room, params);
room.addChild(obj as pixiMod.DisplayObject);
stack.push(obj);
return obj;
},
- /**
- * Creates a new copy of a given template inside the current root room.
- * A shorthand for `templates.copyIntoRoom(template, x, y, ct.room, exts)`
- * @param template The name of the template to use
- * @param [x] The x coordinate of a new copy. Defaults to 0.
- * @param [y] The y coordinate of a new copy. Defaults to 0.
- * @param [exts] An optional object which parameters will be applied
- * to the copy prior to its OnCreate event.
- * @returns The created copy.
- */
- copy(template: string, x = 0, y = 0, exts: Record = {}): BasicCopy {
- return templatesLib.copyIntoRoom(template, x, y, roomsLib.current, exts);
- },
/**
* Applies a function to each copy in the current room
* @param {Function} func The function to apply
+ * @catnipIcon crosshair
* @returns {void}
*/
- each(func: (this: BasicCopy) => void): void {
+ each(func: (this: BasicCopy, me: BasicCopy) => void): void {
for (const copy of stack) {
- if (!(copy instanceof Copy)) {
+ if (!copy[copyTypeSymbol]) {
continue; // Skip backgrounds and tile layers
}
- func.apply(copy, this);
+ func.call(copy, copy);
}
},
/**
* Applies a function to a given object (e.g. to a copy)
* @param {Copy} obj The copy to perform function upon.
* @param {Function} function The function to be applied.
+ * @catnipIcon crosshair
*/
withCopy(obj: T, func: (this: T) => void): void {
func.apply(obj, this);
@@ -477,7 +531,9 @@ const templatesLib = {
/**
* Applies a function to every copy of the given template name
* @param {string} template The name of the template to perform function upon.
+ * @catnipAsset template:template
* @param {Function} function The function to be applied.
+ * @catnipIcon crosshair
*/
withTemplate(
template: string,
@@ -491,6 +547,7 @@ const templatesLib = {
* Checks whether there are any copies of this template's name.
* Will throw an error if you pass an invalid template name.
* @param {string} template The name of a template to check.
+ * @catnipAsset template:template
* @returns {boolean} Returns `true` if at least one copy exists in a room;
* `false` otherwise.
*/
@@ -505,6 +562,7 @@ const templatesLib = {
* Checks whether a given object is a ct.js copy.
* @param {any} obj The object which needs to be checked.
* @returns {boolean} Returns `true` if the passed object is a copy; `false` otherwise.
+ * @catnipIgnore
*/
isCopy: ((obj: unknown): boolean => obj && obj[copyTypeSymbol]) as {
(obj: BasicCopy): obj is BasicCopy;
@@ -513,9 +571,10 @@ const templatesLib = {
/**
* Checks whether a given object exists in game's world.
* Intended to be applied to copies, but may be used with other PIXI entities.
+ * @catnipIgnore
*/
valid: ((obj: unknown): boolean => {
- if (typeof obj !== 'object') {
+ if (typeof obj !== 'object' || obj === null) {
return false;
}
if (copyTypeSymbol in obj) {
@@ -531,19 +590,30 @@ const templatesLib = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(obj: unknown): false
},
-
+ /**
+ * @catnipIgnore
+ */
beforeStep(this: BasicCopy): void {
/*!%beforestep%*/
},
+ /**
+ * @catnipIgnore
+ */
afterStep(this: BasicCopy): void {
/*!%afterstep%*/
if (this.behaviors.length) {
runBehaviors(this, 'templates', 'thisOnStep');
}
},
+ /**
+ * @catnipIgnore
+ */
beforeDraw(this: BasicCopy): void {
/*!%beforedraw%*/
},
+ /**
+ * @catnipIgnore
+ */
afterDraw(this: BasicCopy): void {
if (this.behaviors.length) {
runBehaviors(this, 'templates', 'thisOnDraw');
@@ -560,6 +630,9 @@ const templatesLib = {
}
/*!%afterdraw%*/
},
+ /**
+ * @catnipIgnore
+ */
onDestroy(this: BasicCopy): void {
/*!%ondestroy%*/
if (this.behaviors.length) {
diff --git a/src/ct.release/tilemaps.ts b/src/ct.release/tilemaps.ts
index 89721fec6..3f88ed0af 100644
--- a/src/ct.release/tilemaps.ts
+++ b/src/ct.release/tilemaps.ts
@@ -4,7 +4,7 @@ import templatesLib from './templates';
import {settings as settingsLib} from '.';
import roomsLib from 'rooms';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
import type {ExportedTilemap, ExportedTile, TextureShape} from './../node_requires/exporter/_exporterContracts';
@@ -216,10 +216,13 @@ export class Tilemap extends PIXI.Container {
const tilemapsLib = {
/**
* Creates a new tilemap at a specified depth, and adds it to the main room (ct.room).
- * @param {number} [depth] The depth of a newly created tilemap. Defaults to 0.
+ * @param [depth] The depth of a newly created tilemap. Defaults to 0.
* @returns {Tilemap} The created tilemap.
*/
create(depth = 0): Tilemap {
+ if (!roomsLib.current) {
+ throw new Error('[emitters.fire] An attempt to create a tilemap before the main room is created.');
+ }
const tilemap = new Tilemap();
tilemap.zIndex = depth;
roomsLib.current.addChild(tilemap);
@@ -230,6 +233,7 @@ const tilemapsLib = {
* calling `tilemap.addTile(textureName, x, y, frame).
* @param tilemap The tilemap to modify.
* @param textureName The name of the texture to use.
+ * @catnipAsset textureName:texture
* @param x The horizontal location of the tile.
* @param y The vertical location of the tile.
* @param frame The frame to pick from the source texture. Defaults to 0.
diff --git a/src/ct.release/timer.ts b/src/ct.release/timer.ts
index f4f28bd44..9aa6894e9 100644
--- a/src/ct.release/timer.ts
+++ b/src/ct.release/timer.ts
@@ -33,8 +33,11 @@ export class CtTimer {
* if `false`, it will use `ct.delta` for counting time.
*/
constructor(timeMs: number, name?: string, uiDelta = false) {
- this[ctTimerRoomUid] = roomsLib.current.uid || null;
- this.name = name && name.toString();
+ if (!roomsLib.current) {
+ throw new Error('[CtTimer] Timers can only be created when a main room exists. If you need to run async tasks before ct.js game starts, use vanilla JS\' setTimeout method.');
+ }
+ this[ctTimerRoomUid] = roomsLib.current.uid;
+ this.name = name || 'unnamed';
this.isUi = uiDelta;
this[ctTimerTime] = 0;
this[ctTimerTimeLeftOriginal] = timeMs / 1000;
@@ -91,7 +94,9 @@ export class CtTimer {
return;
}
this[ctTimerTime] += this.isUi ? uLib.timeUi : uLib.time;
- if (roomsLib.current.uid !== this[ctTimerRoomUid] && this[ctTimerRoomUid] !== null) {
+ if (!roomsLib.current ||
+ (roomsLib.current.uid !== this[ctTimerRoomUid] &&
+ this[ctTimerRoomUid] !== null)) {
this.reject({
info: 'Room has been switched',
from: 'timer'
diff --git a/src/ct.release/tsconfig.json b/src/ct.release/tsconfig.json
index fd74db5e4..b3a8aca77 100644
--- a/src/ct.release/tsconfig.json
+++ b/src/ct.release/tsconfig.json
@@ -6,18 +6,21 @@
"esModuleInterop": true,
"declaration": true,
"emitDeclarationOnly": true,
+ "alwaysStrict": true,
+ "strictNullChecks": true,
+ "exactOptionalPropertyTypes": true,
"noEmitOnError": false,
"skipLibCheck": true,
"baseUrl": ".",
"rootDir": "../..",
"typeRoots": [
- "../../app/node_modules/@types/",
+ "../../node_modules/@types/",
"./desktopPack/game"
],
"outFile": "ct.d.ts",
"paths": {
"node_modules/*": [
- "../../app/node_modules/*"
+ "../../node_modules/*"
]
},
},
diff --git a/src/ct.release/u.ts b/src/ct.release/u.ts
index 6a675dab7..12834a42c 100644
--- a/src/ct.release/u.ts
+++ b/src/ct.release/u.ts
@@ -6,12 +6,13 @@ import timerLib, {CtTimer} from './timer';
import {canvasCssPosition} from './fittoscreen';
import mainCamera from './camera';
-import type * as pixiMod from 'node_modules/pixi.js';
+import type * as pixiMod from 'pixi.js';
declare var PIXI: typeof pixiMod;
/**
* An utility function to throw errors by using them
* as default values for mandatory arguments in public API.
+ * @catnipIgnore
*/
export const required = function required(paramName: string, method: string): never {
let str = 'The parameter ';
@@ -44,6 +45,7 @@ const uLib = {
* ```
*
* @deprecated Use `u.time` instead.
+ * @catnipIgnore
*/
delta: 1,
/**
@@ -56,6 +58,7 @@ const uLib = {
* both with slow-mo effects and game pause.
*
* @deprecated Use `u.timeUi` instead.
+ * @catnipIgnore
*/
deltaUi: 1,
/**
@@ -94,16 +97,21 @@ const uLib = {
*
* If you plan on changing your game's target framerate,
* you should use `u.timeUi` instead of `u.deltaUi`.
+ *
+ * @catnipIgnore
*/
timeUI: 1 / 60, // ⚠️ keep this "duplicate": it is an alias with different capitalization
/**
* Get the environment the game runs on.
- * @returns {string} Either 'ct.ide', or 'nw', or 'electron', or 'browser'.
+ * @returns {string} Either 'ct.ide', or 'nw', or 'electron', or 'browser', or 'neutralino'.
*/
- getEnvironment(): string {
+ getEnvironment(): 'ct.ide' | 'nw' | 'electron' | 'browser' | 'neutralino' {
if (window.name === 'ct.js debugger') {
return 'ct.ide';
}
+ if ('NL_OS' in window) {
+ return 'neutralino';
+ }
try {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if (('nw' in window) && ('require' in ((window as any).nw as Record))) {
@@ -292,7 +300,7 @@ const uLib = {
/**
* Returns a shape object based on the dimensions of the given sprite.
*/
- getRectShape(sprite: pixiMod.Sprite): TextureShape {
+ getRectShape(sprite: pixiMod.Sprite | pixiMod.BitmapText): TextureShape {
return {
type: 'rect',
left: sprite.width * sprite.anchor.x,
@@ -379,6 +387,9 @@ const uLib = {
copy.hitArea = hitarea;
}
},
+ /**
+ * @catnipIgnore
+ */
getHitArea(shape: TextureShape): pixiMod.Polygon | pixiMod.Circle | pixiMod.Rectangle | false {
if (shape.type === 'circle') {
return new PIXI.Circle(0, 0, shape.r);
@@ -486,6 +497,7 @@ const uLib = {
* This timer is run in gameplay time scale, meaning that it is affected by time stretching.
* @param {number} time Time to wait, in milliseconds
* @returns {CtTimer} The timer, which you can call `.then()` to
+ * @catnipPromise both
*/
wait(time: number): CtTimer {
return timerLib.add(time);
@@ -495,6 +507,7 @@ const uLib = {
* This timer runs in UI time scale and is not sensitive to time stretching.
* @param {number} time Time to wait, in milliseconds
* @returns {CtTimer} The timer, which you can call `.then()` to
+ * @catnipPromise both
*/
waitUi(time: number): CtTimer {
return timerLib.addUi(time);
@@ -504,6 +517,7 @@ const uLib = {
* on a function with a regular (err, result) => {...} callback.
* @param {Function} f The function that needs to be promisified
* @see https://javascript.info/promisify
+ * @catnipIgnore
*/
promisify(f: (
...args: [...T3, () => (err: E, result: T2) => T1]) => void) {
@@ -522,6 +536,9 @@ const uLib = {
});
};
},
+ /**
+ * @catnipIgnore
+ */
required,
/**
* Takes a prefix and a number to make a string in format Prefix_XX,
@@ -549,6 +566,9 @@ Object.assign(uLib, {// make aliases
pointCircle: uLib.pcircle
});
+/**
+ * @catnipIgnore
+ */
export default uLib as typeof uLib & {
getOs: typeof uLib.getOS,
lengthDirX: typeof uLib.ldx,
diff --git a/src/examples/2DPhysics.ict b/src/examples/2D Physics (JavaScript).ict
similarity index 99%
rename from src/examples/2DPhysics.ict
rename to src/examples/2D Physics (JavaScript).ict
index 03faf6444..b2786f75d 100644
--- a/src/examples/2DPhysics.ict
+++ b/src/examples/2D Physics (JavaScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0-next-5
+ctjsVersion: 5.0.0
notes: /* empty */
libs:
matter:
@@ -49,6 +49,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: -1
accent: '#446adb'
@@ -115,6 +118,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: AlienTarget
depth: 0
texture: 6c8a3edf-d5fe-4916-b63c-2201c099d28f
@@ -157,6 +161,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: WoodenSquare
depth: 0
texture: 41f7c3b3-abc8-4940-8919-9114a884d7f2
@@ -189,6 +194,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: WoodenPlank
depth: 0
texture: 9afd54d7-1265-4ba0-b5de-5226b3c7e2fb
@@ -222,6 +228,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: WoodenTriangle
depth: 0
texture: 0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b
@@ -256,6 +263,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Slingshot
depth: 0
texture: 37dfad62-8372-4804-8416-765039343b61
@@ -281,6 +289,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Alien_Dragging
depth: 0
texture: 8a5f385a-d547-4d2d-9641-b1856738c62a
@@ -340,6 +349,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: elementMetal013
depth: 0
texture: 56ab43ae-1b27-4b5e-9e49-fbbe74d42597
@@ -374,6 +384,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: elementMetal011
depth: 0
texture: c4d4030a-b640-44be-bded-26a5c030f542
@@ -406,6 +417,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: elementMetal000
depth: 0
texture: 3a4eba8d-8b33-478e-95e5-3833099c1a03
@@ -441,6 +453,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- type: template
name: Restart
depth: 0
@@ -467,6 +480,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- type: template
name: GravityZone
depth: 5
@@ -503,6 +517,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- type: template
name: AlienCounter
depth: 0
@@ -541,6 +556,7 @@ assets:
style: -1
textStyle: g3TB8dbChgMRjP
defaultText: 0/0
+ extendTypes: ''
- name: Level_01
onstep: ''
ondraw: ''
@@ -1193,6 +1209,7 @@ assets:
backgroundColor: '#CFF5FA'
follow: -1
behaviors: []
+ extendTypes: ''
- type: room
oncreate: ''
onstep: ''
@@ -1254,6 +1271,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_02
onstep: ''
ondraw: ''
@@ -1936,6 +1954,7 @@ assets:
backgroundColor: '#CFF5FA'
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_Empty
onstep: ''
ondraw: ''
@@ -2272,6 +2291,7 @@ assets:
backgroundColor: '#CFF5FA'
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_03
onstep: ''
ondraw: ''
@@ -2944,6 +2964,7 @@ assets:
backgroundColor: '#CFF5FA'
follow: -1
behaviors: []
+ extendTypes: ''
- name: Impact_Wooden
uid: ccfe7f50-d4d3-4570-95e9-75d5d73bef0a
lastmod: 1704096248591
@@ -3122,6 +3143,7 @@ assets:
weight: 4
lastmod: 1657008646209
type: style
+ typeface: -1
- name: WoodenPlank
untill: 0
grid:
@@ -3880,3 +3902,5 @@ assets:
readableName: Minimal impact to deal damage
lastmod: 1704096254823
uid: d7r5Pw9Q4dMTBF
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/2DPhysics/img/i03040255-0c4f-4605-aa7f-8a146a75675f.png b/src/examples/2D Physics (JavaScript)/img/i03040255-0c4f-4605-aa7f-8a146a75675f.png
similarity index 100%
rename from src/examples/2DPhysics/img/i03040255-0c4f-4605-aa7f-8a146a75675f.png
rename to src/examples/2D Physics (JavaScript)/img/i03040255-0c4f-4605-aa7f-8a146a75675f.png
diff --git a/src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png b/src/examples/2D Physics (JavaScript)/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png
similarity index 100%
rename from src/examples/2DPhysics/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png
rename to src/examples/2D Physics (JavaScript)/img/i0f0e39f3-05bd-47e1-88d2-7dbf7bc3596b.png
diff --git a/src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png b/src/examples/2D Physics (JavaScript)/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png
similarity index 100%
rename from src/examples/2DPhysics/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png
rename to src/examples/2D Physics (JavaScript)/img/i375a4a5e-64e5-410f-aa6f-3bcfc9804519.png
diff --git a/src/examples/2DPhysics/img/i37dfad62-8372-4804-8416-765039343b61.png b/src/examples/2D Physics (JavaScript)/img/i37dfad62-8372-4804-8416-765039343b61.png
similarity index 100%
rename from src/examples/2DPhysics/img/i37dfad62-8372-4804-8416-765039343b61.png
rename to src/examples/2D Physics (JavaScript)/img/i37dfad62-8372-4804-8416-765039343b61.png
diff --git a/src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png b/src/examples/2D Physics (JavaScript)/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png
similarity index 100%
rename from src/examples/2DPhysics/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png
rename to src/examples/2D Physics (JavaScript)/img/i3a4eba8d-8b33-478e-95e5-3833099c1a03.png
diff --git a/src/examples/2DPhysics/img/i41f7c3b3-abc8-4940-8919-9114a884d7f2.png b/src/examples/2D Physics (JavaScript)/img/i41f7c3b3-abc8-4940-8919-9114a884d7f2.png
similarity index 100%
rename from src/examples/2DPhysics/img/i41f7c3b3-abc8-4940-8919-9114a884d7f2.png
rename to src/examples/2D Physics (JavaScript)/img/i41f7c3b3-abc8-4940-8919-9114a884d7f2.png
diff --git a/src/examples/2DPhysics/img/i56ab43ae-1b27-4b5e-9e49-fbbe74d42597.png b/src/examples/2D Physics (JavaScript)/img/i56ab43ae-1b27-4b5e-9e49-fbbe74d42597.png
similarity index 100%
rename from src/examples/2DPhysics/img/i56ab43ae-1b27-4b5e-9e49-fbbe74d42597.png
rename to src/examples/2D Physics (JavaScript)/img/i56ab43ae-1b27-4b5e-9e49-fbbe74d42597.png
diff --git a/src/examples/2DPhysics/img/i6c8a3edf-d5fe-4916-b63c-2201c099d28f.png b/src/examples/2D Physics (JavaScript)/img/i6c8a3edf-d5fe-4916-b63c-2201c099d28f.png
similarity index 100%
rename from src/examples/2DPhysics/img/i6c8a3edf-d5fe-4916-b63c-2201c099d28f.png
rename to src/examples/2D Physics (JavaScript)/img/i6c8a3edf-d5fe-4916-b63c-2201c099d28f.png
diff --git a/src/examples/2DPhysics/img/i8a5f385a-d547-4d2d-9641-b1856738c62a.png b/src/examples/2D Physics (JavaScript)/img/i8a5f385a-d547-4d2d-9641-b1856738c62a.png
similarity index 100%
rename from src/examples/2DPhysics/img/i8a5f385a-d547-4d2d-9641-b1856738c62a.png
rename to src/examples/2D Physics (JavaScript)/img/i8a5f385a-d547-4d2d-9641-b1856738c62a.png
diff --git a/src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png b/src/examples/2D Physics (JavaScript)/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png
similarity index 100%
rename from src/examples/2DPhysics/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png
rename to src/examples/2D Physics (JavaScript)/img/i9afd54d7-1265-4ba0-b5de-5226b3c7e2fb.png
diff --git a/src/examples/2DPhysics/img/iWJ554pph1tft1W.png b/src/examples/2D Physics (JavaScript)/img/iWJ554pph1tft1W.png
similarity index 100%
rename from src/examples/2DPhysics/img/iWJ554pph1tft1W.png
rename to src/examples/2D Physics (JavaScript)/img/iWJ554pph1tft1W.png
diff --git a/src/examples/2DPhysics/img/iabdeba09-af47-4b39-a276-fa2e59b164aa.png b/src/examples/2D Physics (JavaScript)/img/iabdeba09-af47-4b39-a276-fa2e59b164aa.png
similarity index 100%
rename from src/examples/2DPhysics/img/iabdeba09-af47-4b39-a276-fa2e59b164aa.png
rename to src/examples/2D Physics (JavaScript)/img/iabdeba09-af47-4b39-a276-fa2e59b164aa.png
diff --git a/src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png b/src/examples/2D Physics (JavaScript)/img/ic4d4030a-b640-44be-bded-26a5c030f542.png
similarity index 100%
rename from src/examples/2DPhysics/img/ic4d4030a-b640-44be-bded-26a5c030f542.png
rename to src/examples/2D Physics (JavaScript)/img/ic4d4030a-b640-44be-bded-26a5c030f542.png
diff --git a/src/examples/2DPhysics/img/if6a40cf4-e9c0-47ff-afa8-6cdc259ef17e.png b/src/examples/2D Physics (JavaScript)/img/if6a40cf4-e9c0-47ff-afa8-6cdc259ef17e.png
similarity index 100%
rename from src/examples/2DPhysics/img/if6a40cf4-e9c0-47ff-afa8-6cdc259ef17e.png
rename to src/examples/2D Physics (JavaScript)/img/if6a40cf4-e9c0-47ff-afa8-6cdc259ef17e.png
diff --git a/src/examples/2DPhysics/img/if878c588-3c26-486b-a20f-b23ffab4d579.png b/src/examples/2D Physics (JavaScript)/img/if878c588-3c26-486b-a20f-b23ffab4d579.png
similarity index 100%
rename from src/examples/2DPhysics/img/if878c588-3c26-486b-a20f-b23ffab4d579.png
rename to src/examples/2D Physics (JavaScript)/img/if878c588-3c26-486b-a20f-b23ffab4d579.png
diff --git a/src/examples/2DPhysics/img/ifc52b049-910a-4e96-adcf-378553c0818c.png b/src/examples/2D Physics (JavaScript)/img/ifc52b049-910a-4e96-adcf-378553c0818c.png
similarity index 100%
rename from src/examples/2DPhysics/img/ifc52b049-910a-4e96-adcf-378553c0818c.png
rename to src/examples/2D Physics (JavaScript)/img/ifc52b049-910a-4e96-adcf-378553c0818c.png
diff --git a/src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png b/src/examples/2D Physics (JavaScript)/img/im4gCbzCRD2DmNc.png
similarity index 100%
rename from src/examples/2DPhysics/img/im4gCbzCRD2DmNc.png
rename to src/examples/2D Physics (JavaScript)/img/im4gCbzCRD2DmNc.png
diff --git a/src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png b/src/examples/2D Physics (JavaScript)/img/iwHD1gw8Jfdzk2k.png
similarity index 100%
rename from src/examples/2DPhysics/img/iwHD1gw8Jfdzk2k.png
rename to src/examples/2D Physics (JavaScript)/img/iwHD1gw8Jfdzk2k.png
diff --git a/src/examples/2DPhysics/img/splash.png b/src/examples/2D Physics (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/2DPhysics/img/splash.png
rename to src/examples/2D Physics (JavaScript)/img/splash.png
diff --git a/src/examples/2DPhysics/snd/s3142b705-6de5-4f57-9b70-c9bc3fb4cdad_rg8czqgBM5dmzT.ogg b/src/examples/2D Physics (JavaScript)/snd/s3142b705-6de5-4f57-9b70-c9bc3fb4cdad_rg8czqgBM5dmzT.ogg
similarity index 100%
rename from src/examples/2DPhysics/snd/s3142b705-6de5-4f57-9b70-c9bc3fb4cdad_rg8czqgBM5dmzT.ogg
rename to src/examples/2D Physics (JavaScript)/snd/s3142b705-6de5-4f57-9b70-c9bc3fb4cdad_rg8czqgBM5dmzT.ogg
diff --git a/src/examples/2DPhysics/snd/scbca4dd5-7369-48d5-b3b7-e9b0055e2eda_9rQwm9MWqn95Kt.ogg b/src/examples/2D Physics (JavaScript)/snd/scbca4dd5-7369-48d5-b3b7-e9b0055e2eda_9rQwm9MWqn95Kt.ogg
similarity index 100%
rename from src/examples/2DPhysics/snd/scbca4dd5-7369-48d5-b3b7-e9b0055e2eda_9rQwm9MWqn95Kt.ogg
rename to src/examples/2D Physics (JavaScript)/snd/scbca4dd5-7369-48d5-b3b7-e9b0055e2eda_9rQwm9MWqn95Kt.ogg
diff --git a/src/examples/2DPhysics/snd/sccfe7f50-d4d3-4570-95e9-75d5d73bef0a_93fkPGNF7MhgPF.ogg b/src/examples/2D Physics (JavaScript)/snd/sccfe7f50-d4d3-4570-95e9-75d5d73bef0a_93fkPGNF7MhgPF.ogg
similarity index 100%
rename from src/examples/2DPhysics/snd/sccfe7f50-d4d3-4570-95e9-75d5d73bef0a_93fkPGNF7MhgPF.ogg
rename to src/examples/2D Physics (JavaScript)/snd/sccfe7f50-d4d3-4570-95e9-75d5d73bef0a_93fkPGNF7MhgPF.ogg
diff --git a/src/examples/catsteroids.ict b/src/examples/Catsteroids (JavaScript).ict
similarity index 98%
rename from src/examples/catsteroids.ict
rename to src/examples/Catsteroids (JavaScript).ict
index 7887d0b93..bf4ca2ad8 100644
--- a/src/examples/catsteroids.ict
+++ b/src/examples/Catsteroids (JavaScript).ict
@@ -45,6 +45,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: e1452137-8cfa-4eec-b54a-0f2660326b48
accent: '#446adb'
@@ -109,7 +112,7 @@ scripts:
});
});
};
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
actions:
- name: Shoot
methods:
@@ -228,6 +231,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: GameController
depth: 0
uid: ca579f27-f97b-4ca2-98f6-c1c3e13acad5
@@ -302,6 +306,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: AbstractBonus
depth: 3
uid: bc01cee1-1b8b-4418-aeb9-a7c5eac2cd51
@@ -392,6 +397,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: InGame
width: 1920
height: 1080
@@ -538,6 +544,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: MainMenu
onstep: ''
ondraw: ''
@@ -650,6 +657,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: RetryScreen
onstep: ''
ondraw: ''
@@ -771,6 +779,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: BossTestingRoom
onstep: ''
onleave: ''
@@ -989,6 +998,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: VictoryScreen
onstep: ''
ondraw: ''
@@ -1127,6 +1137,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Music_MainMenu
uid: c5397f40-b674-4bfe-a500-91f32466e49b
lastmod: 1703596944847
@@ -1178,6 +1189,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Music_MainTheme
uid: 8759a7a8-ffb1-4998-ad6f-ae7300b90d3c
lastmod: 1703596214029
@@ -1229,6 +1243,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Music_BossTheme
uid: 97158431-4c4f-4f9c-96b9-06da025fb98a
lastmod: 1703596214030
@@ -1280,6 +1297,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Background_Blue
untill: 0
grid:
@@ -1868,6 +1888,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: PlayerShip_Blue
untill: 0
grid:
@@ -2060,6 +2081,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Bolt_Blue
depth: 0
uid: 912af24f-1569-46a3-9194-fbf0384f3b0e
@@ -2100,6 +2122,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Simple_Blue
depth: -1
uid: 92e6ec14-1de0-483a-84b8-a8669ac65937
@@ -2140,6 +2163,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Simple_Blue
untill: 0
grid:
@@ -2942,6 +2966,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Enemy_Bomber
depth: 3
uid: ebfeaaab-f16a-48fa-b97c-687945f99668
@@ -3012,6 +3037,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Enemy_Shooter
depth: 2
uid: 500fd472-19aa-41a0-9504-123c37540702
@@ -3078,6 +3104,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Enemy_Wiggler
depth: 2
uid: 9d0992a4-d0ef-4c5e-9d17-2e5167f26598
@@ -3145,6 +3172,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: EnemyBullet
depth: -1
uid: 65a71d76-039a-4e20-8433-d20277dd2402
@@ -3186,6 +3214,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Cross_Red
depth: 0
uid: 45f606db-1ce3-4b21-bc14-b84e35543509
@@ -3231,6 +3260,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- type: behavior
name: EnemyShip
behaviorType: template
@@ -3304,6 +3334,7 @@ assets:
required: true
lastmod: 1703598039523
uid: 3jpbwqRFrpJb1K
+ extendTypes: ''
- type: folder
uid: kkmcqJcKBkFMTG
colorClass: act
@@ -3362,6 +3393,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Bonus
uid: c55e02d8-e533-4126-b0d8-b5164416d0d5
lastmod: 1703596214027
@@ -3413,6 +3447,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Explosion_01
uid: 17ef15ea-b246-474e-9e50-a9211c3281d6
lastmod: 1703596214028
@@ -3464,6 +3501,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Explosion_02
uid: ba1c4845-8f8e-4326-a3c4-5c7d979d0a98
lastmod: 1703596214028
@@ -3515,6 +3555,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Explosion_03
uid: 8104f996-d422-4157-921f-76e2ffff3b49
lastmod: 1703596214028
@@ -3566,6 +3609,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Laser_Big
uid: fe3a3bb6-74ac-4835-b9f3-6c03cf8fd0b0
lastmod: 1703596214027
@@ -3617,6 +3663,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Laser_Medium
uid: 1abe65bd-fd7f-4101-803d-28fa73e21732
lastmod: 1703596905263
@@ -3668,6 +3717,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Laser_Small
uid: 684d983f-9827-4ac8-9915-bd498154c5f4
lastmod: 1703596214026
@@ -3719,6 +3771,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: SlowmoEffect
uid: db12b1db-1b93-45eb-84f4-a14c131c8ca0
lastmod: 1703596902215
@@ -3770,6 +3825,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- type: folder
uid: LTGTtn2c9z77Ng
colorClass: act
@@ -5660,6 +5718,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Button_Shoot
depth: 0
uid: b334b5ec-69b4-4c0d-bd50-709cf9bfa60d
@@ -5701,6 +5760,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: ScoreText
fill:
type: '0'
@@ -5725,6 +5785,7 @@ assets:
blur: 10
lastmod: 1703600723557
type: style
+ typeface: -1
- name: Blue12
uid: dea27cc4-bf65-4501-b855-06cbfc835321
origname: s2
@@ -5746,6 +5807,7 @@ assets:
x: -2
'y': 2
blur: 10
+ typeface: -1
- name: OhNo
depth: 0
uid: a6d37145-b35c-42d2-95c6-765069857ada
@@ -5771,6 +5833,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Button_Shoot
untill: 0
grid:
@@ -6051,6 +6114,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Healthbar_Base_Player
depth: 0
uid: 1011221c-4f7b-45e7-b45a-ce886851d32c
@@ -6122,6 +6186,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: RetryButton
depth: 0
uid: 73759c16-fba4-4134-b048-e53aa4d2f34b
@@ -6150,6 +6215,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Logo
depth: 0
uid: 319c6995-59f3-4267-a1de-cf58f77614d3
@@ -6189,6 +6255,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Victory
depth: 0
uid: ffbec9fc-299c-4aea-a4f1-1c4b27859fb6
@@ -6232,6 +6299,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: StartButton
depth: 0
uid: 972bb4d9-7cfc-4dbe-bc30-883562271057
@@ -6261,6 +6329,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Healthbar_Bar
untill: 0
grid:
@@ -6393,6 +6462,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- name: UI_Layer
oncreate: ''
onstep: ''
@@ -6446,6 +6516,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- type: template
baseClass: Text
name: ScoreLabel
@@ -6472,6 +6543,7 @@ assets:
behaviors: []
textStyle: 7da08700-988f-456d-b753-89dd1f74e741
defaultText: 'Score: 0'
+ extendTypes: ''
- type: template
baseClass: Text
name: SmallLabel
@@ -6497,10 +6569,8 @@ assets:
uid: 7KPpNjB8qk73TJ
behaviors: []
textStyle: dea27cc4-bf65-4501-b855-06cbfc835321
- - type: font
- typefaceName: PressStart2P
- weight: '400'
- italic: false
+ extendTypes: ''
+ - type: typeface
origname: f8Q7GFCD51PWH6L.ttf
lastmod: 1703600136362
bitmapFont: false
@@ -6510,3 +6580,10 @@ assets:
- allInFont
customCharset: ''
uid: 8Q7GFCD51PWH6L
+ fonts:
+ - weight: '400'
+ italic: false
+ uid: 8Q7GFCD51PWH6L
+ origname: f8Q7GFCD51PWH6L.ttf
+ name: PressStart2P
+globalVars: []
diff --git a/src/examples/catsteroids/fonts/f8Q7GFCD51PWH6L.ttf b/src/examples/Catsteroids (JavaScript)/fonts/f8Q7GFCD51PWH6L.ttf
similarity index 100%
rename from src/examples/catsteroids/fonts/f8Q7GFCD51PWH6L.ttf
rename to src/examples/Catsteroids (JavaScript)/fonts/f8Q7GFCD51PWH6L.ttf
diff --git a/src/examples/catsteroids/img/i048b77d3-e7e3-4817-99ee-8b7c0a6da8bf.png b/src/examples/Catsteroids (JavaScript)/img/i048b77d3-e7e3-4817-99ee-8b7c0a6da8bf.png
similarity index 100%
rename from src/examples/catsteroids/img/i048b77d3-e7e3-4817-99ee-8b7c0a6da8bf.png
rename to src/examples/Catsteroids (JavaScript)/img/i048b77d3-e7e3-4817-99ee-8b7c0a6da8bf.png
diff --git a/src/examples/catsteroids/img/i071162b9-d836-4145-9515-586ce289ef14.png b/src/examples/Catsteroids (JavaScript)/img/i071162b9-d836-4145-9515-586ce289ef14.png
similarity index 100%
rename from src/examples/catsteroids/img/i071162b9-d836-4145-9515-586ce289ef14.png
rename to src/examples/Catsteroids (JavaScript)/img/i071162b9-d836-4145-9515-586ce289ef14.png
diff --git a/src/examples/catsteroids/img/i09da6761-b1dd-49bb-9560-69c639bc3167.png b/src/examples/Catsteroids (JavaScript)/img/i09da6761-b1dd-49bb-9560-69c639bc3167.png
similarity index 100%
rename from src/examples/catsteroids/img/i09da6761-b1dd-49bb-9560-69c639bc3167.png
rename to src/examples/Catsteroids (JavaScript)/img/i09da6761-b1dd-49bb-9560-69c639bc3167.png
diff --git a/src/examples/catsteroids/img/i0abe6432-3fe2-4155-a39c-f054bb898c6e.png b/src/examples/Catsteroids (JavaScript)/img/i0abe6432-3fe2-4155-a39c-f054bb898c6e.png
similarity index 100%
rename from src/examples/catsteroids/img/i0abe6432-3fe2-4155-a39c-f054bb898c6e.png
rename to src/examples/Catsteroids (JavaScript)/img/i0abe6432-3fe2-4155-a39c-f054bb898c6e.png
diff --git a/src/examples/catsteroids/img/i13433dd6-9fec-4244-8188-d6ec14a51974.png b/src/examples/Catsteroids (JavaScript)/img/i13433dd6-9fec-4244-8188-d6ec14a51974.png
similarity index 100%
rename from src/examples/catsteroids/img/i13433dd6-9fec-4244-8188-d6ec14a51974.png
rename to src/examples/Catsteroids (JavaScript)/img/i13433dd6-9fec-4244-8188-d6ec14a51974.png
diff --git a/src/examples/catsteroids/img/i16c209a9-25b2-41e4-b0d5-21cb22fd1421.png b/src/examples/Catsteroids (JavaScript)/img/i16c209a9-25b2-41e4-b0d5-21cb22fd1421.png
similarity index 100%
rename from src/examples/catsteroids/img/i16c209a9-25b2-41e4-b0d5-21cb22fd1421.png
rename to src/examples/Catsteroids (JavaScript)/img/i16c209a9-25b2-41e4-b0d5-21cb22fd1421.png
diff --git a/src/examples/catsteroids/img/i1a904383-2edd-4435-a37b-17148f44e0e0.png b/src/examples/Catsteroids (JavaScript)/img/i1a904383-2edd-4435-a37b-17148f44e0e0.png
similarity index 100%
rename from src/examples/catsteroids/img/i1a904383-2edd-4435-a37b-17148f44e0e0.png
rename to src/examples/Catsteroids (JavaScript)/img/i1a904383-2edd-4435-a37b-17148f44e0e0.png
diff --git a/src/examples/catsteroids/img/i25fb712b-0aca-4b18-8e10-7c545d4bca8d.png b/src/examples/Catsteroids (JavaScript)/img/i25fb712b-0aca-4b18-8e10-7c545d4bca8d.png
similarity index 100%
rename from src/examples/catsteroids/img/i25fb712b-0aca-4b18-8e10-7c545d4bca8d.png
rename to src/examples/Catsteroids (JavaScript)/img/i25fb712b-0aca-4b18-8e10-7c545d4bca8d.png
diff --git a/src/examples/catsteroids/img/i2a454e11-3441-4f57-bfb6-ce837acd7881.png b/src/examples/Catsteroids (JavaScript)/img/i2a454e11-3441-4f57-bfb6-ce837acd7881.png
similarity index 100%
rename from src/examples/catsteroids/img/i2a454e11-3441-4f57-bfb6-ce837acd7881.png
rename to src/examples/Catsteroids (JavaScript)/img/i2a454e11-3441-4f57-bfb6-ce837acd7881.png
diff --git a/src/examples/catsteroids/img/i2aa65cbc-101f-4bfd-b1e0-b5106ab0dc99.png b/src/examples/Catsteroids (JavaScript)/img/i2aa65cbc-101f-4bfd-b1e0-b5106ab0dc99.png
similarity index 100%
rename from src/examples/catsteroids/img/i2aa65cbc-101f-4bfd-b1e0-b5106ab0dc99.png
rename to src/examples/Catsteroids (JavaScript)/img/i2aa65cbc-101f-4bfd-b1e0-b5106ab0dc99.png
diff --git a/src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png b/src/examples/Catsteroids (JavaScript)/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png
similarity index 100%
rename from src/examples/catsteroids/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png
rename to src/examples/Catsteroids (JavaScript)/img/i3935eebf-4e66-456f-9ca8-e2dc1d6a9383.png
diff --git a/src/examples/catsteroids/img/i3d256840-cbd1-4241-a8c2-4d5432e6b9ce.png b/src/examples/Catsteroids (JavaScript)/img/i3d256840-cbd1-4241-a8c2-4d5432e6b9ce.png
similarity index 100%
rename from src/examples/catsteroids/img/i3d256840-cbd1-4241-a8c2-4d5432e6b9ce.png
rename to src/examples/Catsteroids (JavaScript)/img/i3d256840-cbd1-4241-a8c2-4d5432e6b9ce.png
diff --git a/src/examples/catsteroids/img/i3d364ae5-40e9-4c13-b1c7-9e0415273865.png b/src/examples/Catsteroids (JavaScript)/img/i3d364ae5-40e9-4c13-b1c7-9e0415273865.png
similarity index 100%
rename from src/examples/catsteroids/img/i3d364ae5-40e9-4c13-b1c7-9e0415273865.png
rename to src/examples/Catsteroids (JavaScript)/img/i3d364ae5-40e9-4c13-b1c7-9e0415273865.png
diff --git a/src/examples/catsteroids/img/i43c9e15f-1c71-48a0-96fb-fb5ee2d24e59.png b/src/examples/Catsteroids (JavaScript)/img/i43c9e15f-1c71-48a0-96fb-fb5ee2d24e59.png
similarity index 100%
rename from src/examples/catsteroids/img/i43c9e15f-1c71-48a0-96fb-fb5ee2d24e59.png
rename to src/examples/Catsteroids (JavaScript)/img/i43c9e15f-1c71-48a0-96fb-fb5ee2d24e59.png
diff --git a/src/examples/catsteroids/img/i461716ca-52e1-4465-b7bf-d9fd964867a6.png b/src/examples/Catsteroids (JavaScript)/img/i461716ca-52e1-4465-b7bf-d9fd964867a6.png
similarity index 100%
rename from src/examples/catsteroids/img/i461716ca-52e1-4465-b7bf-d9fd964867a6.png
rename to src/examples/Catsteroids (JavaScript)/img/i461716ca-52e1-4465-b7bf-d9fd964867a6.png
diff --git a/src/examples/catsteroids/img/i4b86d5c4-ae3c-4edf-90d7-79a6778e9a29.png b/src/examples/Catsteroids (JavaScript)/img/i4b86d5c4-ae3c-4edf-90d7-79a6778e9a29.png
similarity index 100%
rename from src/examples/catsteroids/img/i4b86d5c4-ae3c-4edf-90d7-79a6778e9a29.png
rename to src/examples/Catsteroids (JavaScript)/img/i4b86d5c4-ae3c-4edf-90d7-79a6778e9a29.png
diff --git a/src/examples/catsteroids/img/i5180fa6f-778b-44ac-883f-0f55a294292f.png b/src/examples/Catsteroids (JavaScript)/img/i5180fa6f-778b-44ac-883f-0f55a294292f.png
similarity index 100%
rename from src/examples/catsteroids/img/i5180fa6f-778b-44ac-883f-0f55a294292f.png
rename to src/examples/Catsteroids (JavaScript)/img/i5180fa6f-778b-44ac-883f-0f55a294292f.png
diff --git a/src/examples/catsteroids/img/i6272c8f2-f8ff-4802-85ae-06daa7013296.png b/src/examples/Catsteroids (JavaScript)/img/i6272c8f2-f8ff-4802-85ae-06daa7013296.png
similarity index 100%
rename from src/examples/catsteroids/img/i6272c8f2-f8ff-4802-85ae-06daa7013296.png
rename to src/examples/Catsteroids (JavaScript)/img/i6272c8f2-f8ff-4802-85ae-06daa7013296.png
diff --git a/src/examples/catsteroids/img/i771c5c1f-ffdc-4b50-a1ce-aed472e44557.png b/src/examples/Catsteroids (JavaScript)/img/i771c5c1f-ffdc-4b50-a1ce-aed472e44557.png
similarity index 100%
rename from src/examples/catsteroids/img/i771c5c1f-ffdc-4b50-a1ce-aed472e44557.png
rename to src/examples/Catsteroids (JavaScript)/img/i771c5c1f-ffdc-4b50-a1ce-aed472e44557.png
diff --git a/src/examples/catsteroids/img/i7b0c966f-2635-4138-8628-2e634af72e2f.png b/src/examples/Catsteroids (JavaScript)/img/i7b0c966f-2635-4138-8628-2e634af72e2f.png
similarity index 100%
rename from src/examples/catsteroids/img/i7b0c966f-2635-4138-8628-2e634af72e2f.png
rename to src/examples/Catsteroids (JavaScript)/img/i7b0c966f-2635-4138-8628-2e634af72e2f.png
diff --git a/src/examples/catsteroids/img/i847c402c-dbd5-4971-ba6d-f2fca6d156bd.png b/src/examples/Catsteroids (JavaScript)/img/i847c402c-dbd5-4971-ba6d-f2fca6d156bd.png
similarity index 100%
rename from src/examples/catsteroids/img/i847c402c-dbd5-4971-ba6d-f2fca6d156bd.png
rename to src/examples/Catsteroids (JavaScript)/img/i847c402c-dbd5-4971-ba6d-f2fca6d156bd.png
diff --git a/src/examples/catsteroids/img/i850854a8-47dd-4041-9412-b4cca854dd90.png b/src/examples/Catsteroids (JavaScript)/img/i850854a8-47dd-4041-9412-b4cca854dd90.png
similarity index 100%
rename from src/examples/catsteroids/img/i850854a8-47dd-4041-9412-b4cca854dd90.png
rename to src/examples/Catsteroids (JavaScript)/img/i850854a8-47dd-4041-9412-b4cca854dd90.png
diff --git a/src/examples/catsteroids/img/i91f10290-e71c-4052-a64b-7aec34086e64.png b/src/examples/Catsteroids (JavaScript)/img/i91f10290-e71c-4052-a64b-7aec34086e64.png
similarity index 100%
rename from src/examples/catsteroids/img/i91f10290-e71c-4052-a64b-7aec34086e64.png
rename to src/examples/Catsteroids (JavaScript)/img/i91f10290-e71c-4052-a64b-7aec34086e64.png
diff --git a/src/examples/catsteroids/img/i968baf79-5ff3-443b-8834-fa3b55638500.png b/src/examples/Catsteroids (JavaScript)/img/i968baf79-5ff3-443b-8834-fa3b55638500.png
similarity index 100%
rename from src/examples/catsteroids/img/i968baf79-5ff3-443b-8834-fa3b55638500.png
rename to src/examples/Catsteroids (JavaScript)/img/i968baf79-5ff3-443b-8834-fa3b55638500.png
diff --git a/src/examples/catsteroids/img/ia27fae91-d007-4683-910b-020b4fb76d72.png b/src/examples/Catsteroids (JavaScript)/img/ia27fae91-d007-4683-910b-020b4fb76d72.png
similarity index 100%
rename from src/examples/catsteroids/img/ia27fae91-d007-4683-910b-020b4fb76d72.png
rename to src/examples/Catsteroids (JavaScript)/img/ia27fae91-d007-4683-910b-020b4fb76d72.png
diff --git a/src/examples/catsteroids/img/iafba4114-e7bc-4b35-8386-d9ca108ca777.png b/src/examples/Catsteroids (JavaScript)/img/iafba4114-e7bc-4b35-8386-d9ca108ca777.png
similarity index 100%
rename from src/examples/catsteroids/img/iafba4114-e7bc-4b35-8386-d9ca108ca777.png
rename to src/examples/Catsteroids (JavaScript)/img/iafba4114-e7bc-4b35-8386-d9ca108ca777.png
diff --git a/src/examples/catsteroids/img/ibbc6028c-d720-4f9f-be65-ced741e2ac9a.png b/src/examples/Catsteroids (JavaScript)/img/ibbc6028c-d720-4f9f-be65-ced741e2ac9a.png
similarity index 100%
rename from src/examples/catsteroids/img/ibbc6028c-d720-4f9f-be65-ced741e2ac9a.png
rename to src/examples/Catsteroids (JavaScript)/img/ibbc6028c-d720-4f9f-be65-ced741e2ac9a.png
diff --git a/src/examples/catsteroids/img/ic12edc06-ad3f-49f4-b9d4-3d33226e9ecc.png b/src/examples/Catsteroids (JavaScript)/img/ic12edc06-ad3f-49f4-b9d4-3d33226e9ecc.png
similarity index 100%
rename from src/examples/catsteroids/img/ic12edc06-ad3f-49f4-b9d4-3d33226e9ecc.png
rename to src/examples/Catsteroids (JavaScript)/img/ic12edc06-ad3f-49f4-b9d4-3d33226e9ecc.png
diff --git a/src/examples/catsteroids/img/ic7305cd4-3a22-4f4d-b42e-adbd8651ffe0.png b/src/examples/Catsteroids (JavaScript)/img/ic7305cd4-3a22-4f4d-b42e-adbd8651ffe0.png
similarity index 100%
rename from src/examples/catsteroids/img/ic7305cd4-3a22-4f4d-b42e-adbd8651ffe0.png
rename to src/examples/Catsteroids (JavaScript)/img/ic7305cd4-3a22-4f4d-b42e-adbd8651ffe0.png
diff --git a/src/examples/catsteroids/img/id4d167ee-e343-4af8-857b-691906585543.png b/src/examples/Catsteroids (JavaScript)/img/id4d167ee-e343-4af8-857b-691906585543.png
similarity index 100%
rename from src/examples/catsteroids/img/id4d167ee-e343-4af8-857b-691906585543.png
rename to src/examples/Catsteroids (JavaScript)/img/id4d167ee-e343-4af8-857b-691906585543.png
diff --git a/src/examples/catsteroids/img/id8204c3b-f004-4dc4-b7bb-2727c81b8855.png b/src/examples/Catsteroids (JavaScript)/img/id8204c3b-f004-4dc4-b7bb-2727c81b8855.png
similarity index 100%
rename from src/examples/catsteroids/img/id8204c3b-f004-4dc4-b7bb-2727c81b8855.png
rename to src/examples/Catsteroids (JavaScript)/img/id8204c3b-f004-4dc4-b7bb-2727c81b8855.png
diff --git a/src/examples/catsteroids/img/idc0d71ec-6da8-40e8-afe8-90c81f7f269a.png b/src/examples/Catsteroids (JavaScript)/img/idc0d71ec-6da8-40e8-afe8-90c81f7f269a.png
similarity index 100%
rename from src/examples/catsteroids/img/idc0d71ec-6da8-40e8-afe8-90c81f7f269a.png
rename to src/examples/Catsteroids (JavaScript)/img/idc0d71ec-6da8-40e8-afe8-90c81f7f269a.png
diff --git a/src/examples/catsteroids/img/ie1452137-8cfa-4eec-b54a-0f2660326b48.png b/src/examples/Catsteroids (JavaScript)/img/ie1452137-8cfa-4eec-b54a-0f2660326b48.png
similarity index 100%
rename from src/examples/catsteroids/img/ie1452137-8cfa-4eec-b54a-0f2660326b48.png
rename to src/examples/Catsteroids (JavaScript)/img/ie1452137-8cfa-4eec-b54a-0f2660326b48.png
diff --git a/src/examples/catsteroids/img/ie6148099-65e7-4d2b-acf1-3e6b3a8fc033.png b/src/examples/Catsteroids (JavaScript)/img/ie6148099-65e7-4d2b-acf1-3e6b3a8fc033.png
similarity index 100%
rename from src/examples/catsteroids/img/ie6148099-65e7-4d2b-acf1-3e6b3a8fc033.png
rename to src/examples/Catsteroids (JavaScript)/img/ie6148099-65e7-4d2b-acf1-3e6b3a8fc033.png
diff --git a/src/examples/catsteroids/img/ie81fc53e-4f0a-443d-a4fb-e5e11a4a98d2.png b/src/examples/Catsteroids (JavaScript)/img/ie81fc53e-4f0a-443d-a4fb-e5e11a4a98d2.png
similarity index 100%
rename from src/examples/catsteroids/img/ie81fc53e-4f0a-443d-a4fb-e5e11a4a98d2.png
rename to src/examples/Catsteroids (JavaScript)/img/ie81fc53e-4f0a-443d-a4fb-e5e11a4a98d2.png
diff --git a/src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png b/src/examples/Catsteroids (JavaScript)/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png
similarity index 100%
rename from src/examples/catsteroids/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png
rename to src/examples/Catsteroids (JavaScript)/img/ie86811b4-8d80-4d2a-8003-b490165fa078.png
diff --git a/src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png b/src/examples/Catsteroids (JavaScript)/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png
similarity index 100%
rename from src/examples/catsteroids/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png
rename to src/examples/Catsteroids (JavaScript)/img/if52c0c03-bee0-4984-a936-08aeb0dab1eb.png
diff --git a/src/examples/catsteroids/img/ifc3e2f9b-61af-4ae4-9375-dcfae65f6a34.png b/src/examples/Catsteroids (JavaScript)/img/ifc3e2f9b-61af-4ae4-9375-dcfae65f6a34.png
similarity index 100%
rename from src/examples/catsteroids/img/ifc3e2f9b-61af-4ae4-9375-dcfae65f6a34.png
rename to src/examples/Catsteroids (JavaScript)/img/ifc3e2f9b-61af-4ae4-9375-dcfae65f6a34.png
diff --git a/src/examples/catsteroids/img/splash.png b/src/examples/Catsteroids (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/catsteroids/img/splash.png
rename to src/examples/Catsteroids (JavaScript)/img/splash.png
diff --git a/src/examples/catsteroids/snd/s17ef15ea-b246-474e-9e50-a9211c3281d6_p6gD6nfzD3kPb9.wav b/src/examples/Catsteroids (JavaScript)/snd/s17ef15ea-b246-474e-9e50-a9211c3281d6_p6gD6nfzD3kPb9.wav
similarity index 100%
rename from src/examples/catsteroids/snd/s17ef15ea-b246-474e-9e50-a9211c3281d6_p6gD6nfzD3kPb9.wav
rename to src/examples/Catsteroids (JavaScript)/snd/s17ef15ea-b246-474e-9e50-a9211c3281d6_p6gD6nfzD3kPb9.wav
diff --git a/src/examples/catsteroids/snd/s1abe65bd-fd7f-4101-803d-28fa73e21732_TzgGTMQRpc769T.mp3 b/src/examples/Catsteroids (JavaScript)/snd/s1abe65bd-fd7f-4101-803d-28fa73e21732_TzgGTMQRpc769T.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/s1abe65bd-fd7f-4101-803d-28fa73e21732_TzgGTMQRpc769T.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/s1abe65bd-fd7f-4101-803d-28fa73e21732_TzgGTMQRpc769T.mp3
diff --git a/src/examples/catsteroids/snd/s684d983f-9827-4ac8-9915-bd498154c5f4_5Ng78dkfHLhnj4.mp3 b/src/examples/Catsteroids (JavaScript)/snd/s684d983f-9827-4ac8-9915-bd498154c5f4_5Ng78dkfHLhnj4.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/s684d983f-9827-4ac8-9915-bd498154c5f4_5Ng78dkfHLhnj4.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/s684d983f-9827-4ac8-9915-bd498154c5f4_5Ng78dkfHLhnj4.mp3
diff --git a/src/examples/catsteroids/snd/s8.mp3 b/src/examples/Catsteroids (JavaScript)/snd/s8.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/s8.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/s8.mp3
diff --git a/src/examples/catsteroids/snd/s8104f996-d422-4157-921f-76e2ffff3b49_KwjtpTGDzD9Djf.wav b/src/examples/Catsteroids (JavaScript)/snd/s8104f996-d422-4157-921f-76e2ffff3b49_KwjtpTGDzD9Djf.wav
similarity index 100%
rename from src/examples/catsteroids/snd/s8104f996-d422-4157-921f-76e2ffff3b49_KwjtpTGDzD9Djf.wav
rename to src/examples/Catsteroids (JavaScript)/snd/s8104f996-d422-4157-921f-76e2ffff3b49_KwjtpTGDzD9Djf.wav
diff --git a/src/examples/catsteroids/snd/s8759a7a8-ffb1-4998-ad6f-ae7300b90d3c_JGwc9h1wbgpkqC.mp3 b/src/examples/Catsteroids (JavaScript)/snd/s8759a7a8-ffb1-4998-ad6f-ae7300b90d3c_JGwc9h1wbgpkqC.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/s8759a7a8-ffb1-4998-ad6f-ae7300b90d3c_JGwc9h1wbgpkqC.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/s8759a7a8-ffb1-4998-ad6f-ae7300b90d3c_JGwc9h1wbgpkqC.mp3
diff --git a/src/examples/catsteroids/snd/s97158431-4c4f-4f9c-96b9-06da025fb98a_dkDM69zDqGNGHJ.mp3 b/src/examples/Catsteroids (JavaScript)/snd/s97158431-4c4f-4f9c-96b9-06da025fb98a_dkDM69zDqGNGHJ.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/s97158431-4c4f-4f9c-96b9-06da025fb98a_dkDM69zDqGNGHJ.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/s97158431-4c4f-4f9c-96b9-06da025fb98a_dkDM69zDqGNGHJ.mp3
diff --git a/src/examples/catsteroids/snd/sba1c4845-8f8e-4326-a3c4-5c7d979d0a98_KQbBKrW3N6br1R.wav b/src/examples/Catsteroids (JavaScript)/snd/sba1c4845-8f8e-4326-a3c4-5c7d979d0a98_KQbBKrW3N6br1R.wav
similarity index 100%
rename from src/examples/catsteroids/snd/sba1c4845-8f8e-4326-a3c4-5c7d979d0a98_KQbBKrW3N6br1R.wav
rename to src/examples/Catsteroids (JavaScript)/snd/sba1c4845-8f8e-4326-a3c4-5c7d979d0a98_KQbBKrW3N6br1R.wav
diff --git a/src/examples/catsteroids/snd/sc5397f40-b674-4bfe-a500-91f32466e49b_cJCdndhqHrm3Lz.mp3 b/src/examples/Catsteroids (JavaScript)/snd/sc5397f40-b674-4bfe-a500-91f32466e49b_cJCdndhqHrm3Lz.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/sc5397f40-b674-4bfe-a500-91f32466e49b_cJCdndhqHrm3Lz.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/sc5397f40-b674-4bfe-a500-91f32466e49b_cJCdndhqHrm3Lz.mp3
diff --git a/src/examples/catsteroids/snd/sc55e02d8-e533-4126-b0d8-b5164416d0d5_6bTnBPHBznPrRM.wav b/src/examples/Catsteroids (JavaScript)/snd/sc55e02d8-e533-4126-b0d8-b5164416d0d5_6bTnBPHBznPrRM.wav
similarity index 100%
rename from src/examples/catsteroids/snd/sc55e02d8-e533-4126-b0d8-b5164416d0d5_6bTnBPHBznPrRM.wav
rename to src/examples/Catsteroids (JavaScript)/snd/sc55e02d8-e533-4126-b0d8-b5164416d0d5_6bTnBPHBznPrRM.wav
diff --git a/src/examples/catsteroids/snd/sc8ee5675-8608-40fa-b04e-ad9ccc36c777_fqqD1h7GL6cfq5.mp3 b/src/examples/Catsteroids (JavaScript)/snd/sc8ee5675-8608-40fa-b04e-ad9ccc36c777_fqqD1h7GL6cfq5.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/sc8ee5675-8608-40fa-b04e-ad9ccc36c777_fqqD1h7GL6cfq5.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/sc8ee5675-8608-40fa-b04e-ad9ccc36c777_fqqD1h7GL6cfq5.mp3
diff --git a/src/examples/catsteroids/snd/sdb12b1db-1b93-45eb-84f4-a14c131c8ca0_DPJjCPj27qRwjR.mp3 b/src/examples/Catsteroids (JavaScript)/snd/sdb12b1db-1b93-45eb-84f4-a14c131c8ca0_DPJjCPj27qRwjR.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/sdb12b1db-1b93-45eb-84f4-a14c131c8ca0_DPJjCPj27qRwjR.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/sdb12b1db-1b93-45eb-84f4-a14c131c8ca0_DPJjCPj27qRwjR.mp3
diff --git a/src/examples/catsteroids/snd/sfe3a3bb6-74ac-4835-b9f3-6c03cf8fd0b0_7B34fgzg69WPQb.mp3 b/src/examples/Catsteroids (JavaScript)/snd/sfe3a3bb6-74ac-4835-b9f3-6c03cf8fd0b0_7B34fgzg69WPQb.mp3
similarity index 100%
rename from src/examples/catsteroids/snd/sfe3a3bb6-74ac-4835-b9f3-6c03cf8fd0b0_7B34fgzg69WPQb.mp3
rename to src/examples/Catsteroids (JavaScript)/snd/sfe3a3bb6-74ac-4835-b9f3-6c03cf8fd0b0_7B34fgzg69WPQb.mp3
diff --git a/src/examples/GameDistribution.ict b/src/examples/GameDistribution.ict
deleted file mode 100644
index b94d382aa..000000000
--- a/src/examples/GameDistribution.ict
+++ /dev/null
@@ -1,275 +0,0 @@
-ctjsVersion: 3.2.0
-notes: /* empty */
-libs:
- place:
- gridX: 1024
- gridY: 1024
- keyboard.polyfill: {}
- sound.howler: {}
- keyboard: {}
- tween: {}
- transition: {}
- pointer:
- preventdefault: false
- startlocked: false
- fittoscreen:
- mode: scaleFit
- gamedistribution:
- undefined: ''
- gameID: 45f47fe7bf964915afd6b7d87c7637fd
- autoInit: true
- gdsdkLocale: en
- gdpr: false
- debugMode: false
-textures:
- - lastmod: 1667511690381
- type: texture
- name: ShowAds
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 64
- - 16
- marginx: 0
- marginy: 0
- imgWidth: 128
- imgHeight: 32
- width: 128
- height: 32
- offx: 0
- offy: 0
- origname: ifLhp5CzQk9TrHp.png
- shape: rect
- left: 64
- right: 64
- top: 16
- bottom: 16
- uid: fLhp5CzQk9TrHp
- padding: 1
- isBlank: false
- group: ! ''
- source: >-
- C:\Users\ulise\Documents\GDevelop
- projects\Gamedistribution-1.2.8-rewarded-latest-working\StartButton3.png
-skeletons: []
-templates:
- - type: template
- name: ShowAds
- depth: 0
- texture: fLhp5CzQk9TrHp
- playAnimationOnStart: false
- loopAnimation: true
- animationFPS: 30
- visible: true
- events:
- - eventKey: OnDraw
- code: |-
- this.x = ct.camera.width/2;
- this.y = ct.camera.height/2 + this.height;
- arguments: {}
- lib: core
- - eventKey: OnPointerClick
- code: |-
- if (!ct.gamedistribution.adPlaying) {
- ct.gamedistribution.showAd();
- }
- arguments: {}
- lib: core
- extends: {}
- lastmod: 1667734402988
- uid: h8mt85WFkKJ9wk
- blendMode: normal
-sounds:
- - name: MainMusic
- uid: hKcLMCHcwrgPDQ
- isMusic: true
- type: sound
- lastmod: 1667578626642
- origname: shKcLMCHcwrgPDQ.mp3
-styles:
- - name: Coins
- uid: CnCTQm7fgCgtP6
- origname: sgCgtP6
- font:
- family: sans-serif
- size: 64
- weight: 400
- italic: false
- fill:
- type: '0'
- color: '#FFD400'
- lastmod: 1667641158420
- stroke:
- color: '#FFFFFF'
- weight: 8
- shadow:
- color: '#000000'
- x: 2
- 'y': 5
- blur: 5
-fonts: []
-rooms:
- - type: room
- oncreate: ''
- onstep: ''
- ondraw: ''
- onleave: ''
- gridX: 64
- gridY: 64
- diagonalGrid: false
- simulate: true
- width: 1280
- height: 720
- isUi: true
- name: UI_Layer
- backgroundColor: '#000000'
- restrictCamera: true
- backgrounds: []
- copies:
- - x: 608
- 'y': 536
- opacity: 1
- tint: 16777215
- scale:
- x: 3.5
- 'y': 2.5
- rotation: 0
- uid: h8mt85WFkKJ9wk
- exts: {}
- customProperties: {}
- tiles: []
- extends: {}
- lastmod: 1668100981512
- events:
- - eventKey: OnRoomStart
- code: >+
- ct.room.coins = 0;
-
-
- this.coinsCounter = new PIXI.Text("Coins x:" + ct.room.coins,
- ct.styles.get('Coins'));
-
- this.coinsCounter.x = ct.camera.width/2 - this.coinsCounter.width/2;
-
- this.coinsCounter.y = ct.camera.height/2 - this.coinsCounter.height;
-
- this.coinsCounter.anchor.y = 0.5;
-
- this.addChild(this.coinsCounter);
-
-
- ct.sound.spawn("MainMusic", {loop: true});
-
- arguments: {}
- lib: core
- - eventKey: OnDraw
- code: |-
- this.coinsCounter.text = "Coins x:" + ct.room.coins
- this.coinsCounter.x = ct.camera.width/2 - this.coinsCounter.width/2;
- this.coinsCounter.y = ct.camera.height/2 - this.coinsCounter.height;
- arguments: {}
- lib: core
- - eventKey: pausegame
- code: |-
- if(ct.sound.playing('MainMusic')){
- console.log("Ad is playing so pause the game");
- ct.sound.pause("MainMusic");
- }
- arguments: {}
- lib: gamedistribution
- - eventKey: resumegame
- code: |-
- if(!ct.sound.playing('MainMusic')){
- console.log("Resume music");
- ct.sound.resume("MainMusic");
- }
- arguments: {}
- lib: gamedistribution
- - eventKey: adfinished
- code: ct.room.coins += 1;
- arguments: {}
- lib: gamedistribution
- uid: GbBCHk9k5L862K
- follow: -1
- - type: room
- oncreate: ''
- onstep: ''
- ondraw: ''
- onleave: ''
- gridX: 64
- gridY: 64
- diagonalGrid: false
- simulate: true
- width: 1280
- height: 720
- isUi: false
- name: Room_Mb7r2Q
- backgroundColor: '#8C0000'
- restrictCamera: false
- backgrounds: []
- copies: []
- tiles: []
- extends: {}
- lastmod: 1668100936730
- events:
- - eventKey: OnRoomStart
- code: 'ct.rooms.append(''UI_Layer'', {isUi: true});'
- arguments: {}
- lib: core
- uid: wK4KjJgBMb7r2Q
- follow: -1
-actions:
- - name: ShowAd
- methods:
- - code: pointer.Primary
-emitterTandems: []
-scripts: []
-starting: 0
-contentTypes: []
-groups:
- fonts: []
- textures: []
- styles: []
- rooms: []
- templates: []
- sounds: []
- emitterTandems: []
-settings:
- authoring:
- author: Ulises Freitas
- site: 'https://www.ulisesfreitas.com'
- title: Game Distribution Example
- version:
- - 1
- - 0
- - 0
- versionPostfix: ''
- appId: com.ulisesfreitas.ctjsgamedistribution
- rendering:
- usePixiLegacy: true
- maxFPS: 60
- pixelatedrender: false
- highDensity: true
- desktopMode: maximized
- hideCursor: false
- mobileScreenOrientation: unspecified
- export:
- windows: true
- linux: true
- mac: true
- functionWrap: false
- codeModifier: none
- branding:
- accent: '#DB4444'
- invertPreloaderScheme: true
- icon: -1
- splashScreen: -1
- forceSmoothIcons: false
- forceSmoothSplashScreen: false
- hideLoadingLogo: false
- fps: 30
-palette: []
-startroom: wK4KjJgBMb7r2Q
-language: typescript
diff --git a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png b/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png
deleted file mode 100644
index 68b2d1df1..000000000
Binary files a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev.png b/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev.png
deleted file mode 100644
index 05fcf6f2e..000000000
Binary files a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev@2.png b/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev@2.png
deleted file mode 100644
index 8e8e9c7e3..000000000
Binary files a/src/examples/GameDistribution/img/ifLhp5CzQk9TrHp.png_prev@2.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/rGbBCHk9k5L862K.png b/src/examples/GameDistribution/img/rGbBCHk9k5L862K.png
deleted file mode 100644
index 6a31badb5..000000000
Binary files a/src/examples/GameDistribution/img/rGbBCHk9k5L862K.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/rGbBCHk9k5L862K@r.png b/src/examples/GameDistribution/img/rGbBCHk9k5L862K@r.png
deleted file mode 100644
index 02235fd29..000000000
Binary files a/src/examples/GameDistribution/img/rGbBCHk9k5L862K@r.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q.png b/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q.png
deleted file mode 100644
index e872888ee..000000000
Binary files a/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q@r.png b/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q@r.png
deleted file mode 100644
index 03c211c7e..000000000
Binary files a/src/examples/GameDistribution/img/rwK4KjJgBMb7r2Q@r.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/sG9475g_prev.png b/src/examples/GameDistribution/img/sG9475g_prev.png
deleted file mode 100644
index 86350600a..000000000
Binary files a/src/examples/GameDistribution/img/sG9475g_prev.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/sG9475g_prev@2.png b/src/examples/GameDistribution/img/sG9475g_prev@2.png
deleted file mode 100644
index 86350600a..000000000
Binary files a/src/examples/GameDistribution/img/sG9475g_prev@2.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/sgCgtP6_prev.png b/src/examples/GameDistribution/img/sgCgtP6_prev.png
deleted file mode 100644
index 774f2fe51..000000000
Binary files a/src/examples/GameDistribution/img/sgCgtP6_prev.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/sgCgtP6_prev@2.png b/src/examples/GameDistribution/img/sgCgtP6_prev@2.png
deleted file mode 100644
index 774f2fe51..000000000
Binary files a/src/examples/GameDistribution/img/sgCgtP6_prev@2.png and /dev/null differ
diff --git a/src/examples/GameDistribution/img/splash.png b/src/examples/GameDistribution/img/splash.png
deleted file mode 100644
index 03c211c7e..000000000
Binary files a/src/examples/GameDistribution/img/splash.png and /dev/null differ
diff --git a/src/examples/GameDistribution/snd/shKcLMCHcwrgPDQ.mp3 b/src/examples/GameDistribution/snd/shKcLMCHcwrgPDQ.mp3
deleted file mode 100644
index 2bb0890d0..000000000
Binary files a/src/examples/GameDistribution/snd/shKcLMCHcwrgPDQ.mp3 and /dev/null differ
diff --git a/src/examples/catformer.ict b/src/examples/Greed platformer (JavaScript).ict
similarity index 99%
rename from src/examples/catformer.ict
rename to src/examples/Greed platformer (JavaScript).ict
index bfe90e48a..6ee1c5bfd 100644
--- a/src/examples/catformer.ict
+++ b/src/examples/Greed platformer (JavaScript).ict
@@ -54,6 +54,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: 1da28af4-53f1-4958-82b2-a696778f910f
accent: '#446adb'
@@ -115,7 +118,7 @@ scripts:
depth: 1000
});
}
-ctjsVersion: 4.0.0-next-5
+ctjsVersion: 5.0.0
actions:
- name: Jump
methods:
@@ -187,6 +190,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Logs
depth: 0
uid: 1026c1c8-90e4-4b93-bb6a-568f53918097
@@ -209,6 +213,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Grass
depth: 0
uid: 5ff42cc3-0b4a-47e9-b6f1-06d3b3b91bb0
@@ -231,6 +236,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Spikes
depth: 0
uid: 036a2de1-89b0-48e3-b26f-d608ce2079fd
@@ -253,6 +259,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Player
depth: 0
uid: 00664f77-21c6-4b06-b310-88640b1beaf9
@@ -412,6 +419,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Coin
depth: 0
uid: 9402709c-5d0d-4198-9dce-877a5b7c77a2
@@ -441,6 +449,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Greed
depth: 0
uid: 2d29a0d5-d88d-493d-bece-8d52ed476273
@@ -462,6 +471,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Slime
depth: 0
uid: 1f91fd7d-2d6c-4542-aead-78b8010b835b
@@ -514,6 +524,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Rich
depth: 0
uid: b658efa2-360e-4a62-8640-3e3281156f4e
@@ -535,6 +546,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: ToggleFullscreen
depth: 100
uid: 8a4b8de4-7729-4936-bc7b-bc277a512975
@@ -564,6 +576,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: CoinWidget
depth: 0
uid: 1f73eb4f-8795-4234-af61-2c44c3fba073
@@ -594,6 +607,7 @@ assets:
style: -1
defaultText: 0 / 33
textStyle: 7879b9dc-6868-4c97-b71e-129d03c77ee1
+ extendTypes: ''
- name: ButtonLeft
depth: 0
uid: 45a6ee81-34af-494e-914e-51ec9d414314
@@ -636,6 +650,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: ButtonRight
depth: 0
uid: 03773b4b-e444-4a2d-9891-3ddf9575cc87
@@ -678,6 +693,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: ButtonJump
depth: 0
uid: 86f037f0-9a1c-4306-9d67-00be01bbd793
@@ -720,6 +736,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: TryAgain
depth: 0
uid: 64fac189-737e-4e56-a8fc-15eccae6bf2a
@@ -745,6 +762,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: InGame
ondraw: ''
onleave: ''
@@ -2651,6 +2669,7 @@ assets:
isUi: ! ''
follow: 00664f77-21c6-4b06-b310-88640b1beaf9
behaviors: []
+ extendTypes: ''
- name: DeadScreen
onstep: ''
ondraw: ''
@@ -2826,6 +2845,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- name: RichScreen
onstep: ''
ondraw: ''
@@ -2981,6 +3001,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- name: UI_Layer
onstep: ''
onleave: ''
@@ -3158,6 +3179,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: BodyFall
uid: 64f57367-eae3-40e1-8769-e11bd3c90f62
lastmod: 1703498508394
@@ -3502,6 +3524,7 @@ assets:
weight: 2
lastmod: 1543637142188
type: style
+ typeface: -1
- name: OhNo
uid: 0db56e97-cb4d-43bf-a067-7a7ab9f32099
origname: s2
@@ -3517,6 +3540,7 @@ assets:
color: '#257073'
lastmod: 1586656196733
type: style
+ typeface: -1
- name: OhNo_Small
uid: ad511489-1f25-4d45-bbe8-7f33d08257e4
origname: s4
@@ -3532,6 +3556,7 @@ assets:
color: '#257073'
lastmod: 1543636696741
type: style
+ typeface: -1
- name: boxAlt
untill: 0
grid:
@@ -3986,6 +4011,7 @@ assets:
uid: FgHj7141jbgtpJ
behaviors: []
textStyle: 0db56e97-cb4d-43bf-a067-7a7ab9f32099
+ extendTypes: ''
- type: template
baseClass: Text
name: OhNoLabels_Small
@@ -4007,3 +4033,5 @@ assets:
uid: 1qFLTFGNMjh6Bh
behaviors: []
textStyle: ad511489-1f25-4d45-bbe8-7f33d08257e4
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/catformer/img/i0298d848-efe7-48e5-8d68-9128ba8b4e02.png b/src/examples/Greed platformer (JavaScript)/img/i0298d848-efe7-48e5-8d68-9128ba8b4e02.png
similarity index 100%
rename from src/examples/catformer/img/i0298d848-efe7-48e5-8d68-9128ba8b4e02.png
rename to src/examples/Greed platformer (JavaScript)/img/i0298d848-efe7-48e5-8d68-9128ba8b4e02.png
diff --git a/src/examples/catformer/img/i1.png b/src/examples/Greed platformer (JavaScript)/img/i1.png
similarity index 100%
rename from src/examples/catformer/img/i1.png
rename to src/examples/Greed platformer (JavaScript)/img/i1.png
diff --git a/src/examples/catformer/img/i10.png b/src/examples/Greed platformer (JavaScript)/img/i10.png
similarity index 100%
rename from src/examples/catformer/img/i10.png
rename to src/examples/Greed platformer (JavaScript)/img/i10.png
diff --git a/src/examples/catformer/img/i11.png b/src/examples/Greed platformer (JavaScript)/img/i11.png
similarity index 100%
rename from src/examples/catformer/img/i11.png
rename to src/examples/Greed platformer (JavaScript)/img/i11.png
diff --git a/src/examples/catformer/img/i12.png b/src/examples/Greed platformer (JavaScript)/img/i12.png
similarity index 100%
rename from src/examples/catformer/img/i12.png
rename to src/examples/Greed platformer (JavaScript)/img/i12.png
diff --git a/src/examples/catformer/img/i15.png b/src/examples/Greed platformer (JavaScript)/img/i15.png
similarity index 100%
rename from src/examples/catformer/img/i15.png
rename to src/examples/Greed platformer (JavaScript)/img/i15.png
diff --git a/src/examples/catformer/img/i2.png b/src/examples/Greed platformer (JavaScript)/img/i2.png
similarity index 100%
rename from src/examples/catformer/img/i2.png
rename to src/examples/Greed platformer (JavaScript)/img/i2.png
diff --git a/src/examples/catformer/img/i3.png b/src/examples/Greed platformer (JavaScript)/img/i3.png
similarity index 100%
rename from src/examples/catformer/img/i3.png
rename to src/examples/Greed platformer (JavaScript)/img/i3.png
diff --git a/src/examples/catformer/img/i4.png b/src/examples/Greed platformer (JavaScript)/img/i4.png
similarity index 100%
rename from src/examples/catformer/img/i4.png
rename to src/examples/Greed platformer (JavaScript)/img/i4.png
diff --git a/src/examples/catformer/img/i5.png b/src/examples/Greed platformer (JavaScript)/img/i5.png
similarity index 100%
rename from src/examples/catformer/img/i5.png
rename to src/examples/Greed platformer (JavaScript)/img/i5.png
diff --git a/src/examples/catformer/img/i6.png b/src/examples/Greed platformer (JavaScript)/img/i6.png
similarity index 100%
rename from src/examples/catformer/img/i6.png
rename to src/examples/Greed platformer (JavaScript)/img/i6.png
diff --git a/src/examples/catformer/img/i8f3b23d8-3aed-429a-a66e-9572cad7919a.png b/src/examples/Greed platformer (JavaScript)/img/i8f3b23d8-3aed-429a-a66e-9572cad7919a.png
similarity index 100%
rename from src/examples/catformer/img/i8f3b23d8-3aed-429a-a66e-9572cad7919a.png
rename to src/examples/Greed platformer (JavaScript)/img/i8f3b23d8-3aed-429a-a66e-9572cad7919a.png
diff --git a/src/examples/catformer/img/i9.png b/src/examples/Greed platformer (JavaScript)/img/i9.png
similarity index 100%
rename from src/examples/catformer/img/i9.png
rename to src/examples/Greed platformer (JavaScript)/img/i9.png
diff --git a/src/examples/catformer/img/ib5121b5f-8109-45c0-9fa4-44f9f10ce88c.png b/src/examples/Greed platformer (JavaScript)/img/ib5121b5f-8109-45c0-9fa4-44f9f10ce88c.png
similarity index 100%
rename from src/examples/catformer/img/ib5121b5f-8109-45c0-9fa4-44f9f10ce88c.png
rename to src/examples/Greed platformer (JavaScript)/img/ib5121b5f-8109-45c0-9fa4-44f9f10ce88c.png
diff --git a/src/examples/catformer/img/ie706498a-bfef-4366-9481-687b01ff7bf1.png b/src/examples/Greed platformer (JavaScript)/img/ie706498a-bfef-4366-9481-687b01ff7bf1.png
similarity index 100%
rename from src/examples/catformer/img/ie706498a-bfef-4366-9481-687b01ff7bf1.png
rename to src/examples/Greed platformer (JavaScript)/img/ie706498a-bfef-4366-9481-687b01ff7bf1.png
diff --git a/src/examples/catformer/img/ifd9d7012-6826-4368-8fe5-0385b72bc902.png b/src/examples/Greed platformer (JavaScript)/img/ifd9d7012-6826-4368-8fe5-0385b72bc902.png
similarity index 100%
rename from src/examples/catformer/img/ifd9d7012-6826-4368-8fe5-0385b72bc902.png
rename to src/examples/Greed platformer (JavaScript)/img/ifd9d7012-6826-4368-8fe5-0385b72bc902.png
diff --git a/src/examples/catformer/img/splash.png b/src/examples/Greed platformer (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/catformer/img/splash.png
rename to src/examples/Greed platformer (JavaScript)/img/splash.png
diff --git a/src/examples/catformer/snd/s0f16063e-c954-4e7e-8b09-32b844511c9e_QNj791zkKm1F1F.wav b/src/examples/Greed platformer (JavaScript)/snd/s0f16063e-c954-4e7e-8b09-32b844511c9e_QNj791zkKm1F1F.wav
similarity index 100%
rename from src/examples/catformer/snd/s0f16063e-c954-4e7e-8b09-32b844511c9e_QNj791zkKm1F1F.wav
rename to src/examples/Greed platformer (JavaScript)/snd/s0f16063e-c954-4e7e-8b09-32b844511c9e_QNj791zkKm1F1F.wav
diff --git a/src/examples/catformer/snd/s1d5b2c13-0324-41be-bbd5-e69abfd5bd49_8FtK387LB9LMnw.wav b/src/examples/Greed platformer (JavaScript)/snd/s1d5b2c13-0324-41be-bbd5-e69abfd5bd49_8FtK387LB9LMnw.wav
similarity index 100%
rename from src/examples/catformer/snd/s1d5b2c13-0324-41be-bbd5-e69abfd5bd49_8FtK387LB9LMnw.wav
rename to src/examples/Greed platformer (JavaScript)/snd/s1d5b2c13-0324-41be-bbd5-e69abfd5bd49_8FtK387LB9LMnw.wav
diff --git a/src/examples/catformer/snd/s64f57367-eae3-40e1-8769-e11bd3c90f62_TpfL5QTz5hRPrw.wav b/src/examples/Greed platformer (JavaScript)/snd/s64f57367-eae3-40e1-8769-e11bd3c90f62_TpfL5QTz5hRPrw.wav
similarity index 100%
rename from src/examples/catformer/snd/s64f57367-eae3-40e1-8769-e11bd3c90f62_TpfL5QTz5hRPrw.wav
rename to src/examples/Greed platformer (JavaScript)/snd/s64f57367-eae3-40e1-8769-e11bd3c90f62_TpfL5QTz5hRPrw.wav
diff --git a/src/examples/catformer/snd/s7ed9f9ad-d9fc-436d-b97f-59aa81348543_K9McFC95PHLdCF.wav b/src/examples/Greed platformer (JavaScript)/snd/s7ed9f9ad-d9fc-436d-b97f-59aa81348543_K9McFC95PHLdCF.wav
similarity index 100%
rename from src/examples/catformer/snd/s7ed9f9ad-d9fc-436d-b97f-59aa81348543_K9McFC95PHLdCF.wav
rename to src/examples/Greed platformer (JavaScript)/snd/s7ed9f9ad-d9fc-436d-b97f-59aa81348543_K9McFC95PHLdCF.wav
diff --git a/src/examples/catformer/snd/sb614ec30-9837-466e-94a5-dda36bdf9daf_MKb13mJMMpWtpg.wav b/src/examples/Greed platformer (JavaScript)/snd/sb614ec30-9837-466e-94a5-dda36bdf9daf_MKb13mJMMpWtpg.wav
similarity index 100%
rename from src/examples/catformer/snd/sb614ec30-9837-466e-94a5-dda36bdf9daf_MKb13mJMMpWtpg.wav
rename to src/examples/Greed platformer (JavaScript)/snd/sb614ec30-9837-466e-94a5-dda36bdf9daf_MKb13mJMMpWtpg.wav
diff --git a/src/examples/catformer/snd/sd5d0b307-685d-4ecc-8ffe-e24a063d9f15_cgj48tH6tjrgCL.wav b/src/examples/Greed platformer (JavaScript)/snd/sd5d0b307-685d-4ecc-8ffe-e24a063d9f15_cgj48tH6tjrgCL.wav
similarity index 100%
rename from src/examples/catformer/snd/sd5d0b307-685d-4ecc-8ffe-e24a063d9f15_cgj48tH6tjrgCL.wav
rename to src/examples/Greed platformer (JavaScript)/snd/sd5d0b307-685d-4ecc-8ffe-e24a063d9f15_cgj48tH6tjrgCL.wav
diff --git a/src/examples/JettyCat (Catnip).ict b/src/examples/JettyCat (Catnip).ict
new file mode 100644
index 000000000..a9e0c0701
--- /dev/null
+++ b/src/examples/JettyCat (Catnip).ict
@@ -0,0 +1,2900 @@
+ctjsVersion: 5.0.0
+backups: 3
+language: catnip
+notes: /* empty */
+libs:
+ place:
+ gridX: 1024
+ gridY: 1024
+ pointer: {}
+ keyboard: {}
+ keyboard.polyfill: {}
+ pointer.polyfill: {}
+ random: {}
+ tween: {}
+ transition: {}
+startroom: gFtD4f2P4HddCC
+contentTypes: []
+actions:
+ - name: Poof
+ methods:
+ - code: pointer.Any
+scripts: []
+assets:
+ - type: folder
+ uid: KfQ28ffn7hTPbR
+ colorClass: act
+ icon: help-circle
+ name: textures
+ lastmod: 1715906169398
+ entries:
+ - lastmod: 1716071921458
+ type: texture
+ name: Button_Pause
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 98
+ - 104
+ marginx: 0
+ marginy: 0
+ imgWidth: 196
+ imgHeight: 208
+ width: 196
+ height: 208
+ offx: 0
+ offy: 0
+ origname: ic5KQMJ2D58jTLg.png
+ shape: rect
+ left: 98
+ right: 98
+ top: 104
+ bottom: 104
+ uid: c5KQMJ2D58jTLg
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Button_Pause.png
+ - lastmod: 1716038006047
+ type: texture
+ name: Button_Play
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 160
+ - 166
+ marginx: 0
+ marginy: 0
+ imgWidth: 320
+ imgHeight: 332
+ width: 320
+ height: 332
+ offx: 0
+ offy: 0
+ origname: iJ94kWM92b54ppn.png
+ shape: circle
+ left: 160
+ right: 160
+ top: 166
+ bottom: 166
+ uid: J94kWM92b54ppn
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Button_Play.png
+ r: 160
+ - lastmod: 1716037963219
+ type: texture
+ name: Jetty_Cat
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 462
+ - 174
+ marginx: 0
+ marginy: 0
+ imgWidth: 925
+ imgHeight: 349
+ width: 925
+ height: 349
+ offx: 0
+ offy: 0
+ origname: iTzNDWhj1H3fk83.png
+ shape: rect
+ left: 462
+ right: 463
+ top: 174
+ bottom: 175
+ uid: TzNDWhj1H3fk83
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Jetty Cat.png
+ - lastmod: 1715906174976
+ type: texture
+ name: Pause
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 750
+ imgHeight: 226
+ width: 750
+ height: 226
+ offx: 0
+ offy: 0
+ origname: iktrdBzgwQpKczH.png
+ shape: rect
+ left: 0
+ right: 750
+ top: 0
+ bottom: 226
+ uid: ktrdBzgwQpKczH
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Pause.png
+ - lastmod: 1715906200570
+ type: texture
+ name: BG_Ground
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 1080
+ imgHeight: 191
+ width: 1080
+ height: 191
+ offx: 0
+ offy: 0
+ origname: i8tCtzNjp7rJQMb.png
+ shape: rect
+ left: 0
+ right: 1080
+ top: 0
+ bottom: 191
+ uid: 8tCtzNjp7rJQMb
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/BG_Ground.png
+ tiled: true
+ - lastmod: 1715906202542
+ type: texture
+ name: BG_Sky
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 1080
+ imgHeight: 1920
+ width: 1080
+ height: 1920
+ offx: 0
+ offy: 0
+ origname: i4nrC5qWrr9m2Jg.png
+ shape: rect
+ left: 0
+ right: 1080
+ top: 0
+ bottom: 1920
+ uid: 4nrC5qWrr9m2Jg
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/BG_Sky.png
+ tiled: true
+ - lastmod: 1715987151660
+ type: texture
+ name: Tube_01
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 93
+ - 280
+ marginx: 0
+ marginy: 0
+ imgWidth: 225
+ imgHeight: 289
+ width: 225
+ height: 289
+ offx: 0
+ offy: 0
+ origname: i5j4GGLbMKjRJgT.png
+ shape: strip
+ left: 288
+ right: 118
+ top: 261
+ bottom: 220
+ uid: 5j4GGLbMKjRJgT
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Tube_01.png
+ stripPoints:
+ - x: -90
+ 'y': -273
+ - x: 92
+ 'y': -274
+ - x: 78
+ 'y': 5
+ - x: -72
+ 'y': 4
+ closedStrip: true
+ - lastmod: 1716399367037
+ type: texture
+ name: PressHint
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 128
+ - 134
+ marginx: 0
+ marginy: 0
+ imgWidth: 256
+ imgHeight: 268
+ width: 256
+ height: 268
+ offx: 0
+ offy: 0
+ origname: iC1wHGG9N4Htd2n.png
+ shape: rect
+ left: 128
+ right: 128
+ top: 134
+ bottom: 134
+ uid: C1wHGG9N4Htd2n
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/PressHint.png
+ - lastmod: 1715987157774
+ type: texture
+ name: Tube_04
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 94
+ - 1059
+ marginx: 0
+ marginy: 0
+ imgWidth: 225
+ imgHeight: 1067
+ width: 225
+ height: 1067
+ offx: 0
+ offy: 0
+ origname: iGLrN9N95twbLk7.png
+ shape: strip
+ left: 94
+ right: 131
+ top: 1059
+ bottom: 8
+ uid: GLrN9N95twbLk7
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Tube_04.png
+ stripPoints:
+ - x: -91
+ 'y': -1057
+ - x: 88
+ 'y': -1052
+ - x: 77
+ 'y': 1
+ - x: -82
+ 'y': 3
+ closedStrip: true
+ r: 112
+ - lastmod: 1715906174978
+ type: texture
+ name: OhNo
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 707
+ imgHeight: 351
+ width: 707
+ height: 351
+ offx: 0
+ offy: 0
+ origname: ig16LRPdTppLR96.png
+ shape: rect
+ left: 0
+ right: 707
+ top: 0
+ bottom: 351
+ uid: g16LRPdTppLR96
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/OhNo.png
+ - lastmod: 1715987153553
+ type: texture
+ name: Tube_02
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 91
+ - 501
+ marginx: 0
+ marginy: 0
+ imgWidth: 225
+ imgHeight: 505
+ width: 225
+ height: 505
+ offx: 0
+ offy: 0
+ origname: i5rK6RNPt2h3FL8.png
+ shape: strip
+ left: 93
+ right: 132
+ top: 280
+ bottom: 225
+ uid: 5rK6RNPt2h3FL8
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Tube_02.png
+ stripPoints:
+ - x: -90
+ 'y': -498
+ - x: -72
+ 'y': 0
+ - x: 74
+ 'y': 1
+ - x: 90
+ 'y': -498
+ closedStrip: true
+ - lastmod: 1715987149187
+ type: texture
+ name: PotatoCat
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 288
+ - 261
+ marginx: 0
+ marginy: 0
+ imgWidth: 406
+ imgHeight: 481
+ width: 406
+ height: 481
+ offx: 0
+ offy: 0
+ origname: i63fH1ptfzhBTgw.png
+ shape: strip
+ left: 288
+ right: 118
+ top: 261
+ bottom: 220
+ uid: 63fH1ptfzhBTgw
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/PotatoCat.png
+ stripPoints:
+ - x: -29
+ 'y': -206
+ - x: 38
+ 'y': -206
+ - x: 88
+ 'y': -166
+ - x: 115
+ 'y': -83
+ - x: 109
+ 'y': 98
+ - x: 71
+ 'y': 152
+ - x: 23
+ 'y': 176
+ - x: -67
+ 'y': 165
+ - x: -118
+ 'y': 125
+ - x: -137
+ 'y': 71
+ - x: -176
+ 'y': 55
+ - x: -164
+ 'y': -67
+ - x: -115
+ 'y': -116
+ - x: -93
+ 'y': -110
+ - x: -65
+ 'y': -171
+ closedStrip: true
+ ignoreTiledUse: true
+ - lastmod: 1715906739386
+ type: texture
+ name: Star
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 95
+ - 91
+ marginx: 0
+ marginy: 0
+ imgWidth: 190
+ imgHeight: 183
+ width: 190
+ height: 183
+ offx: 0
+ offy: 0
+ origname: iL4z1NpnJm5kFtJ.png
+ shape: strip
+ left: 95
+ right: 95
+ top: 91
+ bottom: 92
+ uid: L4z1NpnJm5kFtJ
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Star.png
+ stripPoints:
+ - x: 0
+ 'y': -92
+ - x: 90
+ 'y': -28
+ - x: 56
+ 'y': 74
+ - x: -56
+ 'y': 74
+ - x: -90
+ 'y': -28
+ closedStrip: true
+ - lastmod: 1715987156136
+ type: texture
+ name: Tube_03
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 93
+ - 776
+ marginx: 0
+ marginy: 0
+ imgWidth: 225
+ imgHeight: 780
+ width: 225
+ height: 780
+ offx: 0
+ offy: 0
+ origname: ibRGWDwL5Q4kfGC.png
+ shape: strip
+ left: 93
+ right: 132
+ top: 280
+ bottom: 500
+ uid: bRGWDwL5Q4kfGC
+ padding: 1
+ isBlank: false
+ source: /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/Tube_03.png
+ stripPoints:
+ - x: -95
+ 'y': -766
+ - x: 90
+ 'y': -771
+ - x: 76
+ 'y': -2
+ - x: -74
+ 'y': -2
+ closedStrip: true
+ - lastmod: 1715906719549
+ type: texture
+ name: PotatoCat_Stunned
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 288
+ - 261
+ marginx: 0
+ marginy: 0
+ imgWidth: 406
+ imgHeight: 481
+ width: 406
+ height: 481
+ offx: 0
+ offy: 0
+ origname: iqC1D2jBC1L4Lfr.png
+ shape: strip
+ left: 288
+ right: 118
+ top: 261
+ bottom: 220
+ uid: qC1D2jBC1L4Lfr
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/.config/itch/apps/ct/examples/JettyCat_assets/PotatoCat_Stunned.png
+ stripPoints:
+ - x: -29
+ 'y': -206
+ - x: 38
+ 'y': -206
+ - x: 88
+ 'y': -166
+ - x: 115
+ 'y': -83
+ - x: 109
+ 'y': 98
+ - x: 71
+ 'y': 152
+ - x: 23
+ 'y': 176
+ - x: -67
+ 'y': 165
+ - x: -118
+ 'y': 125
+ - x: -137
+ 'y': 71
+ - x: -176
+ 'y': 55
+ - x: -164
+ 'y': -67
+ - x: -115
+ 'y': -116
+ - x: -93
+ 'y': -110
+ - x: -65
+ 'y': -171
+ - lastmod: 1716416857753
+ type: texture
+ name: Smoke
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 25
+ - 24
+ marginx: 0
+ marginy: 0
+ imgWidth: 51
+ imgHeight: 48
+ width: 51
+ height: 48
+ offx: 0
+ offy: 0
+ origname: ibBKnhp6QMcBwNG.png
+ shape: rect
+ left: 25
+ right: 26
+ top: 24
+ bottom: 24
+ uid: bBKnhp6QMcBwNG
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Jumperpack/Smoke.png
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1080
+ height: 1920
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: InGame
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds:
+ - depth: -20
+ texture: 4nrC5qWrr9m2Jg
+ shiftX: 0
+ shiftY: 0
+ parallaxX: 0.5
+ parallaxY: 1
+ movementX: 0
+ movementY: 0
+ scaleX: 1
+ scaleY: 1
+ repeat: repeat
+ - depth: -10
+ texture: 8tCtzNjp7rJQMb
+ shiftX: 0
+ shiftY: 1736
+ parallaxX: 1
+ parallaxY: 1
+ movementX: 0
+ movementY: 0
+ scaleX: 1
+ scaleY: 1
+ repeat: repeat-x
+ copies:
+ - x: 320
+ 'y': 832
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 7g4pW86L7K2GR4
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716785581679
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.timers
+ code: set timer1
+ values:
+ time: 5
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: score
+ value: 0
+ - lib: core
+ code: rooms.append
+ values:
+ return:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: mainUi
+ name: kKhcJrbjp6NfGh
+ - lib: transition
+ code: transition.circleIn
+ values:
+ then: []
+ duration: 500
+ color: 4483803
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: Timer1
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: Wind it again
+ - lib: core.timers
+ code: set timer1
+ values:
+ time: 2
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Create two tubes, one at the bottom of the camera and one at the
+ top
+ - lib: core
+ code: templates.copy
+ values:
+ return:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube1
+ template: mJRKzt8C73FzMz
+ x:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get right
+ values: {}
+ b: 250
+ 'y':
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.camera
+ code: get bottom
+ values: {}
+ b: 130
+ - lib: core
+ code: templates.copy
+ values:
+ template: mJRKzt8C73FzMz
+ x:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get right
+ values: {}
+ b: 250
+ 'y':
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.camera
+ code: get top
+ values: {}
+ b: 70
+ return:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Change second tube's texture depending on which texture is used
+ in the first tube
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Shortest tube will result in the longest tube
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: GLrN9N95twbLk7
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ condition:
+ lib: core.logic
+ code: is
+ values:
+ a:
+ lib: core.objects
+ code: object read
+ values:
+ property: tex
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube1
+ b: Tube_01
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: bRGWDwL5Q4kfGC
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ condition:
+ lib: core.logic
+ code: is
+ values:
+ a:
+ lib: core.objects
+ code: object read
+ values:
+ property: tex
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube1
+ b: Tube_02
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: 5rK6RNPt2h3FL8
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ condition:
+ lib: core.logic
+ code: is
+ values:
+ a:
+ lib: core.objects
+ code: object read
+ values:
+ property: tex
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube1
+ b: Tube_03
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Longest will result in the shortest one
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: 5j4GGLbMKjRJgT
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ condition:
+ lib: core.logic
+ code: is
+ values:
+ a:
+ lib: core.objects
+ code: object read
+ values:
+ property: tex
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube1
+ b: Tube_04
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Thus we will always get gaps of the same size, but with random
+ tubes.
+ - lib: core.misc
+ code: note
+ values:
+ note: 'Now, flip the upper (second) tube'
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set scale xy
+ values:
+ x: 1
+ 'y': -1
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: tube2
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Create a star bonus with 30% chance somewhere in between top and
+ bottom edge, with 300px padding.
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core
+ code: templates.copy
+ values:
+ template: zkGrWq8Wqg4DW5
+ x:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: +
+ values:
+ a: 250
+ b: 500
+ a:
+ lib: core.camera
+ code: get right
+ values: {}
+ 'y':
+ lib: random
+ code: random.range
+ values:
+ x1:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get top
+ values: {}
+ b: 300
+ x2:
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.camera
+ code: get bottom
+ values: {}
+ b: 300
+ body2: []
+ condition:
+ lib: random
+ code: random.chance
+ values:
+ x: 30
+ 'y': 100
+ arguments:
+ name: TubeSpawn
+ isUi: false
+ lib: core
+ variables:
+ - tube1
+ - tube2
+ behaviors: []
+ extendTypes: ''
+ uid: nCmH6LJNq3TNnF
+ properties:
+ - score
+ - mainUi
+ - type: template
+ baseClass: AnimatedSprite
+ name: PotatoCat
+ depth: 0
+ texture: 63fH1ptfzhBTgw
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ If the cat is below the ground minus its approximate height, the
+ cat flew off the upper boundary, remove the cat.
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.logic
+ code: a OR b
+ values:
+ a:
+ lib: core.math
+ code: '>'
+ values:
+ b:
+ lib: core.math
+ code: '-'
+ values:
+ a: 1750
+ b: 200
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b:
+ lib: core.math
+ code: <
+ values:
+ b: 0
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.appearance
+ code: set angle
+ values:
+ degrees:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.math
+ code: /
+ values:
+ a:
+ lib: core.movement
+ code: get vspeed
+ values: {}
+ b: 200
+ a: -1
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 500
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees: 0
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: gravityAcceleration
+ value: 7000
+ - lib: core.camera
+ code: follow this
+ values: {}
+ - lib: core.camera
+ code: set followY
+ values:
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ - lib: core.camera
+ code: set shiftX
+ values:
+ value: 250
+ - lib: core.appearance
+ code: set scale xy
+ values:
+ x: 0.65
+ 'y': 0.65
+ - lib: core
+ code: emitters.follow
+ values:
+ return:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: jet
+ parent:
+ lib: core.propsVars
+ code: this
+ values: {}
+ name: Hg3Dk8BHCRLr3G
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: OnActionDown
+ code:
+ - lib: core.movement
+ code: set gravity
+ values:
+ gravity:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: gravityAcceleration
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed:
+ lib: core.math
+ code: '-'
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a: 2
+ b:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: gravityAcceleration
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ a:
+ lib: core.movement
+ code: get vspeed
+ values: {}
+ arguments:
+ action: Poof
+ lib: core
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ arguments:
+ group: Obstacle
+ lib: place
+ variables: []
+ - eventKey: OnDestroy
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: Stop camera movement
+ - lib: core.camera
+ code: set followX
+ values:
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ - lib: core.misc
+ code: note
+ values:
+ note: Create an animated dummy
+ - lib: core
+ code: templates.copy
+ values:
+ template: nM4gLBz9t7DG9C
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ return:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: dummy
+ - lib: core.misc
+ code: note
+ values:
+ note: Copy scale settings to the new copy
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: thisScaleX
+ value:
+ lib: core.appearance
+ code: get scale x
+ values: {}
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: thisScaleY
+ value:
+ lib: core.appearance
+ code: get scale y
+ values: {}
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.appearance
+ code: set scale xy
+ values:
+ x:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: thisScaleX
+ 'y':
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: thisScaleY
+ obj:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: dummy
+ - lib: core.misc
+ code: note
+ values:
+ note: Remove the layer with score and a pause button
+ - lib: core
+ code: rooms.remove
+ values:
+ room:
+ lib: core.objects
+ code: room read
+ values:
+ property: mainUi
+ - lib: core.misc
+ code: note
+ values:
+ note: Wait for 1000 milliseconds (for one second)
+ - lib: core
+ code: u.waitUi
+ values:
+ then:
+ - lib: core.misc
+ code: note
+ values:
+ note: Add a layer with "Lose" UI
+ - lib: core
+ code: rooms.append
+ values:
+ name: 2zFttDhBttzf95
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ catch: []
+ time: 1000
+ arguments: {}
+ lib: core
+ variables:
+ - dummy
+ - thisScaleX
+ - thisScaleY
+ - eventKey: OnActionRelease
+ code:
+ - lib: core
+ code: emitters.pause
+ values:
+ emitter:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: jet
+ arguments:
+ action: Poof
+ lib: core
+ variables: []
+ - eventKey: OnActionDown
+ code:
+ - lib: core
+ code: emitters.resume
+ values:
+ emitter:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: jet
+ arguments:
+ action: Poof
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716785357207
+ uid: 7g4pW86L7K2GR4
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - gravityAcceleration
+ - jet
+ tilingSettings:
+ scrollSpeedX: 0
+ scrollSpeedY: 0
+ isUi: false
+ repeaterSettings:
+ defaultCount: 3
+ - type: template
+ baseClass: AnimatedSprite
+ name: Tube
+ depth: 0
+ texture: bRGWDwL5Q4kfGC
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ b:
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.camera
+ code: get left
+ values: {}
+ b: 150
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ value:
+ lib: core.arrays
+ code: new array
+ values: {}
+ - lib: core.arrays
+ code: array push
+ values:
+ array:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ elt: Tube_01
+ - lib: core.arrays
+ code: array push
+ values:
+ array:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ elt: Tube_02
+ - lib: core.arrays
+ code: array push
+ values:
+ array:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ elt: Tube_03
+ - lib: core.arrays
+ code: array push
+ values:
+ array:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ elt: Tube_04
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture:
+ lib: random
+ code: random.from
+ values:
+ a:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: textureArray
+ arguments: {}
+ lib: core
+ variables:
+ - textureArray
+ extends:
+ cgroup: Obstacle
+ lastmod: 1716785378799
+ uid: mJRKzt8C73FzMz
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: PotatoCat_Stunned
+ depth: 0
+ texture: qC1D2jBC1L4Lfr
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set gravity
+ values:
+ gravity: 2700
+ - lib: core.misc
+ code: note
+ values:
+ note: Jump to the left
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 1500
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees: -135
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716390118743
+ uid: nM4gLBz9t7DG9C
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Star
+ depth: 0
+ texture: L4z1NpnJm5kFtJ
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ b:
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.camera
+ code: get left
+ values: {}
+ b: 150
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.objects
+ code: this write
+ values:
+ property: score
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.objects
+ code: this read
+ values:
+ property: score
+ b: 1
+ obj:
+ lib: core
+ code: rooms.current
+ values: {}
+ arguments:
+ template: 7g4pW86L7K2GR4
+ lib: place
+ variables: []
+ - eventKey: OnDestroy
+ code:
+ - lib: core
+ code: emitters.fire
+ values:
+ name: rGgRKm62zfPJhn
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: wiggleTime
+ value: 0
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: wiggleTime
+ value:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ b: 12
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: wiggleTime
+ - lib: core.appearance
+ code: set angle
+ values:
+ degrees:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core.math
+ code: sin
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: wiggleTime
+ b: 5
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716785408575
+ uid: zkGrWq8Wqg4DW5
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - wiggleTime
+ - type: style
+ name: Orange
+ uid: jrjFQjHg5fc1TT
+ font:
+ family: sans-serif
+ halign: left
+ italic: false
+ size: 80
+ weight: '900'
+ wrap: false
+ wrapPosition: 640
+ lineHeight: 0
+ fill:
+ type: '1'
+ color: '#ffffff'
+ color1: '#E7A66F'
+ color2: '#D28753'
+ gradtype: '1'
+ lastmod: 1716037632626
+ stroke:
+ color: '#914121'
+ weight: 10
+ typeface: -1
+ - type: template
+ baseClass: AnimatedSprite
+ name: StarCounter
+ depth: 0
+ texture: L4z1NpnJm5kFtJ
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1716037839102
+ uid: pRhGcT3KqfKfNR
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: Text
+ name: StarCounterLabel
+ depth: 0
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.appearance
+ code: set text
+ values:
+ text:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716037949272
+ uid: jQ6RJk18NMDT8q
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: '0'
+ textStyle: jrjFQjHg5fc1TT
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1080
+ height: 1920
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: true
+ name: UI_InGame
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: pRhGcT3KqfKfNR
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jQ6RJk18NMDT8q
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: fhC1LP88jBpL6H
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 960
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 1811LtJG2CzK9d
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716399592650
+ events: []
+ behaviors: []
+ extendTypes: ''
+ uid: kKhcJrbjp6NfGh
+ properties: []
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1080
+ height: 1920
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: MainMenu
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds:
+ - depth: -20
+ texture: 4nrC5qWrr9m2Jg
+ shiftX: 0
+ shiftY: 0
+ parallaxX: 1
+ parallaxY: 1
+ movementX: -30
+ movementY: 0
+ scaleX: 1
+ scaleY: 1
+ repeat: repeat
+ - depth: -10
+ texture: 8tCtzNjp7rJQMb
+ shiftX: 0
+ shiftY: 1736
+ parallaxX: 1
+ parallaxY: 1
+ movementX: 0
+ movementY: 0
+ scaleX: 1
+ scaleY: 1
+ repeat: repeat-x
+ copies:
+ - x: 540.84375
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: Kf7b2MM9hqPtTp
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 529.125
+ 'y': 1033.3125
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: BKq3GHMjnkNBnb
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716417103035
+ events: []
+ behaviors: []
+ extendTypes: ''
+ uid: gFtD4f2P4HddCC
+ properties:
+ - score
+ - mainUi
+ - type: template
+ baseClass: AnimatedSprite
+ name: Jetty_Cat
+ depth: 0
+ texture: TzNDWhj1H3fk83
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1716037995001
+ uid: Kf7b2MM9hqPtTp
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Button_Play
+ depth: 0
+ texture: J94kWM92b54ppn
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnPointerClick
+ code:
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pressed
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: transition
+ code: transition.circleOut
+ values:
+ then:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName: nCmH6LJNq3TNnF
+ duration: 1000
+ color: 4483803
+ body2: []
+ condition:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pressed
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716785641853
+ uid: BKq3GHMjnkNBnb
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - pressed
+ - type: template
+ baseClass: AnimatedSprite
+ name: Button_Pause
+ depth: 0
+ texture: c5KQMJ2D58jTLg
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnPointerClick
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: Check if we don't have any rooms called 'UI_Paused'
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Create a room UI_Paused, put it above the current one
+ (append it), and specify that it is a UI layer (isUi:
+ true)
+ - lib: core.misc
+ code: note
+ values:
+ note: 'Turns u.delta into 0, effectively stopping the game'
+ - lib: core
+ code: rooms.append
+ values:
+ name: c7jH6rDzQmkM9g
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: core.settings
+ code: set ticker speed
+ values:
+ speed: 0
+ body2: []
+ condition:
+ lib: core.logic
+ code: is
+ values:
+ b: 0
+ a:
+ lib: core.arrays
+ code: array length
+ values:
+ array:
+ lib: core
+ code: rooms.list
+ values:
+ list: c7jH6rDzQmkM9g
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716785516817
+ uid: fhC1LP88jBpL6H
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1080
+ height: 1920
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: true
+ name: UI_Paused
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 550.609375
+ 'y': 971.265625
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: bcMHd44cL9cNgH
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 170.515625
+ 'y': 349.890625
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: Mj57Ch2qckMr4z
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716416888851
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 0
+ - lib: tween
+ code: animate propVal
+ values:
+ then: []
+ catch: []
+ value:
+ lib: core.appearance
+ code: get alpha
+ values: {}
+ to: 1
+ ms: 500
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ arguments: {}
+ lib: core
+ variables: []
+ behaviors: []
+ extendTypes: ''
+ uid: c7jH6rDzQmkM9g
+ properties:
+ - score
+ - mainUi
+ - type: template
+ baseClass: AnimatedSprite
+ name: Button_Continue
+ depth: 0
+ texture: J94kWM92b54ppn
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnPointerClick
+ code:
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pressed
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: tween
+ code: animate
+ values:
+ then:
+ - lib: tween
+ code: animate propVal
+ values:
+ then: []
+ catch: []
+ value:
+ lib: core.settings
+ code: get ticker speed
+ values: {}
+ to: 1
+ ms: 1000
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: core
+ code: rooms.remove
+ values:
+ room:
+ lib: core
+ code: owning room
+ values: {}
+ catch: []
+ property: alpha
+ target:
+ lib: core
+ code: owning room
+ values: {}
+ value: 0
+ ms: 1000
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ body2: []
+ condition:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pressed
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716785874006
+ uid: bcMHd44cL9cNgH
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - pressed
+ - type: template
+ baseClass: AnimatedSprite
+ name: Pause
+ depth: 0
+ texture: ktrdBzgwQpKczH
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1716129272211
+ uid: Mj57Ch2qckMr4z
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: OhNo
+ depth: 0
+ texture: g16LRPdTppLR96
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1716326114743
+ uid: 85QGLqpWDQMFbc
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: Text
+ name: EndGame_ScoreCounter
+ depth: 0
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: roomScore
+ value:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: currentHighScore
+ value:
+ lib: core.propsVars
+ code: load localStorage
+ values:
+ key: JettyCat_HighScore
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: save localStorage
+ values:
+ key: JettyCat_HighScore
+ value:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: roomScore
+ body2:
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: save localStorage
+ values:
+ key: JettyCat_HighScore
+ value:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: roomScore
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core.utils
+ code: convert to number
+ values:
+ val:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: currentHighScore
+ b:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: roomScore
+ condition:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.propsVars
+ code: is localStorage
+ values:
+ key: JettyCat_HighScore
+ - lib: core.appearance
+ code: set text
+ values:
+ text:
+ lib: core.strings
+ code: concat3
+ values:
+ a: 'Your score: '
+ c:
+ lib: core.strings
+ code: concat
+ values:
+ a:
+ lib: core.utils
+ code: const string
+ values:
+ val: '\nHighscore: '
+ b:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: currentHighScore
+ b:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: roomScore
+ arguments: {}
+ lib: core
+ variables:
+ - roomScore
+ - currentHighScore
+ extends: {}
+ lastmod: 1716785547219
+ uid: CFLJPtzKhQkNtc
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: ''
+ textStyle: jrjFQjHg5fc1TT
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1080
+ height: 1920
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: true
+ name: UI_OhNo
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 195.453125
+ 'y': 140.765625
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 85QGLqpWDQMFbc
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 554.515625
+ 'y': 700.6875
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: CFLJPtzKhQkNtc
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ customAnchor:
+ x: 0.5
+ 'y': 0.5
+ customText: '0'
+ - x: 550.609375
+ 'y': 1131.109375
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: BKq3GHMjnkNBnb
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716785591697
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 0
+ - lib: tween
+ code: animate propVal
+ values:
+ then: []
+ catch: []
+ value:
+ lib: core.appearance
+ code: get alpha
+ values: {}
+ to: 1
+ ms: 500
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ arguments: {}
+ lib: core
+ variables: []
+ behaviors: []
+ extendTypes: ''
+ uid: 2zFttDhBttzf95
+ properties:
+ - score
+ - mainUi
+ - name: StarBurst
+ uid: rGgRKm62zfPJhn
+ emitters:
+ - uid: H46rMQ7H4Gr6Hh
+ texture: L4z1NpnJm5kFtJ
+ openedTabs:
+ - texture
+ - spawning
+ - shape
+ - velocity
+ - rotation
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 30
+ settings:
+ delay: 0
+ lifetime:
+ min: 0.5
+ max: 0.5
+ frequency: 1
+ spawnChance: 1
+ particlesPerWave: 10
+ emitterLifetime: 2
+ maxParticles: 1000
+ maxSpeed: 0
+ pos:
+ x: 0
+ 'y': 0
+ addAtBack: false
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 0
+ time: 0
+ - value: 1
+ time: 0.5
+ - value: 0
+ time: 1
+ - type: color
+ config:
+ color:
+ list:
+ - value: ffffff
+ time: 0
+ - value: ffffff
+ time: 0.5
+ - value: ffffff
+ time: 1
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 0.6799999999999999
+ time: 0
+ - value: 0.16999999999999998
+ time: 1
+ minMult: 1
+ - type: moveAcceleration
+ config:
+ minStart: 200
+ maxStart: 400
+ accel:
+ x: 0
+ 'y': 980
+ rotate: false
+ maxSpeed: 3000
+ - type: spawnShape
+ config:
+ type: torus
+ data:
+ innerRadius: 0
+ radius: 64
+ x: 0
+ 'y': 0
+ rotation: true
+ - type: rotation
+ config:
+ minStart: 0
+ maxStart: 360
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ showShapeVisualizer: false
+ lastmod: 1716416554574
+ type: tandem
+ - name: Jet
+ uid: Hg3Dk8BHCRLr3G
+ emitters:
+ - uid: H46rMQ7H4Gr6Hh
+ texture: bBKnhp6QMcBwNG
+ openedTabs:
+ - texture
+ - spawning
+ - shape
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 30
+ settings:
+ delay: 0
+ lifetime:
+ min: 0.5
+ max: 0.5
+ frequency: 0.03
+ spawnChance: 1
+ particlesPerWave: 1
+ emitterLifetime: 0
+ maxParticles: 1000
+ maxSpeed: 0
+ pos:
+ x: -144
+ 'y': 64
+ addAtBack: false
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 0
+ time: 0
+ - value: 1
+ time: 0.5
+ - value: 0
+ time: 1
+ - type: color
+ config:
+ color:
+ list:
+ - value: ffffff
+ time: 0
+ - value: ffffff
+ time: 0.5
+ - value: ffffff
+ time: 1
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 1
+ time: 0
+ - value: 0.3
+ time: 1
+ minMult: 0.47
+ - type: moveSpeed
+ config:
+ speed:
+ list:
+ - value: 500
+ time: 0
+ - value: 100
+ time: 1
+ minMult: 1
+ - type: spawnShape
+ config:
+ type: torus
+ data:
+ innerRadius: 0
+ radius: 16
+ x: 0
+ 'y': 0
+ rotation: true
+ - type: rotation
+ config:
+ minStart: 85
+ maxStart: 100
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ showShapeVisualizer: true
+ lastmod: 1716416962517
+ type: tandem
+ previewTexture: 63fH1ptfzhBTgw
+ - type: template
+ baseClass: AnimatedSprite
+ name: PressHint
+ depth: 0
+ texture: C1wHGG9N4Htd2n
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.propsVars
+ code: set
+ values:
+ value:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ b: 12
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pulsePhase
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pulsePhase
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.appearance
+ code: get scale x
+ values: {}
+ value:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core.math
+ code: sin
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pulsePhase
+ b: 0.1
+ a: 1
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.appearance
+ code: get scale y
+ values: {}
+ value:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core.math
+ code: sin
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pulsePhase
+ b: 0.1
+ a: 1
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: pulsePhase
+ value: 0
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: OnActionPress
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ arguments:
+ action: Poof
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716399552334
+ uid: 1811LtJG2CzK9d
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - pulsePhase
+settings:
+ authoring:
+ author: ''
+ site: ''
+ title: ''
+ version:
+ - 0
+ - 0
+ - 0
+ versionPostfix: ''
+ appId: ''
+ rendering:
+ usePixiLegacy: true
+ transparent: false
+ maxFPS: 60
+ pixelatedrender: false
+ highDensity: true
+ desktopMode: maximized
+ hideCursor: false
+ mobileScreenOrientation: unspecified
+ viewMode: scaleFit
+ export:
+ autocloseDesktop: true
+ windows: true
+ linux: true
+ mac: true
+ functionWrap: false
+ codeModifier: none
+ bundleAssetTree: false
+ bundleAssetTypes:
+ texture: true
+ template: true
+ room: true
+ behavior: false
+ font: false
+ sound: false
+ style: false
+ tandem: false
+ script: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
+ branding:
+ accent: '#446adb'
+ invertPreloaderScheme: true
+ icon: -1
+ splashScreen: -1
+ forceSmoothIcons: false
+ forceSmoothSplashScreen: false
+ hideLoadingLogo: false
+ alternativeLogo: false
+ customLoadingText: ''
+ fps: 30
+palette: []
+globalVars: []
diff --git a/src/examples/JettyCat/img/i5c680919-3827-4ea7-9e72-a8fc81ddfb45.png b/src/examples/JettyCat (Catnip)/img/i4nrC5qWrr9m2Jg.png
similarity index 100%
rename from src/examples/JettyCat/img/i5c680919-3827-4ea7-9e72-a8fc81ddfb45.png
rename to src/examples/JettyCat (Catnip)/img/i4nrC5qWrr9m2Jg.png
diff --git a/src/examples/JettyCat/img/i2034d885-1648-4872-b64a-e5367f1cb997.png b/src/examples/JettyCat (Catnip)/img/i5j4GGLbMKjRJgT.png
similarity index 100%
rename from src/examples/JettyCat/img/i2034d885-1648-4872-b64a-e5367f1cb997.png
rename to src/examples/JettyCat (Catnip)/img/i5j4GGLbMKjRJgT.png
diff --git a/src/examples/JettyCat/img/i2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a.png b/src/examples/JettyCat (Catnip)/img/i5rK6RNPt2h3FL8.png
similarity index 100%
rename from src/examples/JettyCat/img/i2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a.png
rename to src/examples/JettyCat (Catnip)/img/i5rK6RNPt2h3FL8.png
diff --git a/src/examples/JettyCat/img/ieb24c2bc-a36c-4118-b33e-a7348c00e5bb.png b/src/examples/JettyCat (Catnip)/img/i63fH1ptfzhBTgw.png
similarity index 100%
rename from src/examples/JettyCat/img/ieb24c2bc-a36c-4118-b33e-a7348c00e5bb.png
rename to src/examples/JettyCat (Catnip)/img/i63fH1ptfzhBTgw.png
diff --git a/src/examples/JettyCat/img/i53da7582-ae6c-4843-976e-c84d6d74a489.png b/src/examples/JettyCat (Catnip)/img/i8tCtzNjp7rJQMb.png
similarity index 100%
rename from src/examples/JettyCat/img/i53da7582-ae6c-4843-976e-c84d6d74a489.png
rename to src/examples/JettyCat (Catnip)/img/i8tCtzNjp7rJQMb.png
diff --git a/src/examples/JettyCat/img/idf915202-237f-498c-bec0-25116fc17008.png b/src/examples/JettyCat (Catnip)/img/iC1wHGG9N4Htd2n.png
similarity index 100%
rename from src/examples/JettyCat/img/idf915202-237f-498c-bec0-25116fc17008.png
rename to src/examples/JettyCat (Catnip)/img/iC1wHGG9N4Htd2n.png
diff --git a/src/examples/JettyCat/img/i2a5e9894-e02c-44d8-aa28-7decb485b8fd.png b/src/examples/JettyCat (Catnip)/img/iGLrN9N95twbLk7.png
similarity index 100%
rename from src/examples/JettyCat/img/i2a5e9894-e02c-44d8-aa28-7decb485b8fd.png
rename to src/examples/JettyCat (Catnip)/img/iGLrN9N95twbLk7.png
diff --git a/src/examples/JettyCat/img/i775ba15c-b1aa-4707-bc1e-d0811846a893.png b/src/examples/JettyCat (Catnip)/img/iJ94kWM92b54ppn.png
similarity index 100%
rename from src/examples/JettyCat/img/i775ba15c-b1aa-4707-bc1e-d0811846a893.png
rename to src/examples/JettyCat (Catnip)/img/iJ94kWM92b54ppn.png
diff --git a/src/examples/JettyCat (Catnip)/img/iL4z1NpnJm5kFtJ.png b/src/examples/JettyCat (Catnip)/img/iL4z1NpnJm5kFtJ.png
new file mode 100644
index 000000000..efc938759
Binary files /dev/null and b/src/examples/JettyCat (Catnip)/img/iL4z1NpnJm5kFtJ.png differ
diff --git a/src/examples/JettyCat/img/i2c8009c9-ccbc-459e-8562-3146d7210e12.png b/src/examples/JettyCat (Catnip)/img/iTzNDWhj1H3fk83.png
similarity index 100%
rename from src/examples/JettyCat/img/i2c8009c9-ccbc-459e-8562-3146d7210e12.png
rename to src/examples/JettyCat (Catnip)/img/iTzNDWhj1H3fk83.png
diff --git a/src/examples/JettyCat (Catnip)/img/ibBKnhp6QMcBwNG.png b/src/examples/JettyCat (Catnip)/img/ibBKnhp6QMcBwNG.png
new file mode 100644
index 000000000..0c2a9b828
Binary files /dev/null and b/src/examples/JettyCat (Catnip)/img/ibBKnhp6QMcBwNG.png differ
diff --git a/src/examples/JettyCat/img/ia565bf91-c494-4aaf-8acb-8991cc7e3eda.png b/src/examples/JettyCat (Catnip)/img/ibRGWDwL5Q4kfGC.png
similarity index 100%
rename from src/examples/JettyCat/img/ia565bf91-c494-4aaf-8acb-8991cc7e3eda.png
rename to src/examples/JettyCat (Catnip)/img/ibRGWDwL5Q4kfGC.png
diff --git a/src/examples/JettyCat/img/i343c1f60-adad-4233-bfcf-c13b8aade974.png b/src/examples/JettyCat (Catnip)/img/ic5KQMJ2D58jTLg.png
similarity index 100%
rename from src/examples/JettyCat/img/i343c1f60-adad-4233-bfcf-c13b8aade974.png
rename to src/examples/JettyCat (Catnip)/img/ic5KQMJ2D58jTLg.png
diff --git a/src/examples/JettyCat/img/iee0876e4-eece-42c2-aa93-a468dab47099.png b/src/examples/JettyCat (Catnip)/img/ig16LRPdTppLR96.png
similarity index 100%
rename from src/examples/JettyCat/img/iee0876e4-eece-42c2-aa93-a468dab47099.png
rename to src/examples/JettyCat (Catnip)/img/ig16LRPdTppLR96.png
diff --git a/src/examples/JettyCat/img/i8229085f-e4d3-406a-9e95-bf13a8fec3cb.png b/src/examples/JettyCat (Catnip)/img/iktrdBzgwQpKczH.png
similarity index 100%
rename from src/examples/JettyCat/img/i8229085f-e4d3-406a-9e95-bf13a8fec3cb.png
rename to src/examples/JettyCat (Catnip)/img/iktrdBzgwQpKczH.png
diff --git a/src/examples/JettyCat/img/ieb3dadb5-49cf-4ba1-b562-421ab360842e.png b/src/examples/JettyCat (Catnip)/img/iqC1D2jBC1L4Lfr.png
similarity index 100%
rename from src/examples/JettyCat/img/ieb3dadb5-49cf-4ba1-b562-421ab360842e.png
rename to src/examples/JettyCat (Catnip)/img/iqC1D2jBC1L4Lfr.png
diff --git a/src/examples/JettyCat (Catnip)/img/splash.png b/src/examples/JettyCat (Catnip)/img/splash.png
new file mode 100644
index 000000000..11f35f1bd
Binary files /dev/null and b/src/examples/JettyCat (Catnip)/img/splash.png differ
diff --git a/src/examples/JettyCat.ict b/src/examples/JettyCat (JavaScript).ict
similarity index 98%
rename from src/examples/JettyCat.ict
rename to src/examples/JettyCat (JavaScript).ict
index b9e63f6a2..b34630d12 100644
--- a/src/examples/JettyCat.ict
+++ b/src/examples/JettyCat (JavaScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0
+ctjsVersion: 5.0.0
notes: /* empty */
libs:
place:
@@ -37,6 +37,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: eb24c2bc-a36c-4118-b33e-a7348c00e5bb
accent: '#446adb'
@@ -89,6 +92,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Button_Play
depth: 0
uid: 25ac0f9b-57ff-461d-8eb7-a9ce800b9c71
@@ -123,6 +127,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: PotatoCat
depth: 0
uid: 8f93611e-6e95-49c4-8e2b-4cc067be2924
@@ -233,6 +238,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Tube
depth: 0
uid: 455b4c7c-2249-4b12-999e-27db667688b5
@@ -266,6 +272,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Star
depth: 0
uid: b7362b5c-811d-438c-b164-f53213eaefa7
@@ -309,6 +316,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: StarCounter
depth: 0
uid: d4c02f18-93d0-4ad4-8e5b-62fb9a0f0af9
@@ -343,6 +351,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Button_Pause
depth: 0
uid: 6a532c9b-7e32-4070-b72b-86012306c7fb
@@ -377,6 +386,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Paused_Heading
depth: 0
uid: ee7454ca-ba35-4d79-9b78-83e763fd81f5
@@ -398,6 +408,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Button_Continue
depth: 0
uid: 43938432-cf0b-416d-91e9-8bc9a1f8abcf
@@ -445,6 +456,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: OhNo_Heading
depth: 0
uid: 92049024-c0ef-41ae-8512-851ce20cad3a
@@ -466,6 +478,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: PressHint
depth: 50
uid: ba73f80b-0995-40b6-94d5-3e82712b5ecf
@@ -502,6 +515,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: EndGame_Star_Counter
depth: 0
uid: 8748598b-4494-433f-9f18-fbe985c2a583
@@ -540,6 +554,7 @@ assets:
style: -1
defaultText: 'Your score: 100500'
textStyle: 316e5f08-494c-4570-ba65-8cd45d8b946f
+ extendTypes: ''
- type: template
name: PotatoCat_Stunned
depth: 0
@@ -574,6 +589,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: InGame
ondraw: ''
onleave: ''
@@ -689,6 +705,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: MainMenu
oncreate: ''
onstep: ''
@@ -759,6 +776,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: UI_InGame
oncreate: ''
onstep: ''
@@ -818,6 +836,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: UI_Paused
onstep: ''
ondraw: ''
@@ -880,6 +899,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: UI_OhNo
onstep: ''
ondraw: ''
@@ -963,6 +983,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Orange
uid: 316e5f08-494c-4570-ba65-8cd45d8b946f
origname: s8cd45d8b946f
@@ -983,6 +1004,7 @@ assets:
weight: 10
lastmod: 1584330374714
type: style
+ typeface: -1
- name: BG_Ground
untill: 0
grid:
@@ -1751,3 +1773,4 @@ assets:
uid: pt550aaadb2b36
lastmod: 1699521109972
type: tandem
+globalVars: []
diff --git a/src/examples/JettyCat (JavaScript)/img/i2034d885-1648-4872-b64a-e5367f1cb997.png b/src/examples/JettyCat (JavaScript)/img/i2034d885-1648-4872-b64a-e5367f1cb997.png
new file mode 100644
index 000000000..bed545883
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i2034d885-1648-4872-b64a-e5367f1cb997.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i2a5e9894-e02c-44d8-aa28-7decb485b8fd.png b/src/examples/JettyCat (JavaScript)/img/i2a5e9894-e02c-44d8-aa28-7decb485b8fd.png
new file mode 100644
index 000000000..67c59df90
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i2a5e9894-e02c-44d8-aa28-7decb485b8fd.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a.png b/src/examples/JettyCat (JavaScript)/img/i2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a.png
new file mode 100644
index 000000000..28887d69a
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i2b5a51ae-c05b-4a94-b9bd-e088bf2e4b1a.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i2c8009c9-ccbc-459e-8562-3146d7210e12.png b/src/examples/JettyCat (JavaScript)/img/i2c8009c9-ccbc-459e-8562-3146d7210e12.png
new file mode 100644
index 000000000..9d7ec68bd
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i2c8009c9-ccbc-459e-8562-3146d7210e12.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i343c1f60-adad-4233-bfcf-c13b8aade974.png b/src/examples/JettyCat (JavaScript)/img/i343c1f60-adad-4233-bfcf-c13b8aade974.png
new file mode 100644
index 000000000..36f803b6c
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i343c1f60-adad-4233-bfcf-c13b8aade974.png differ
diff --git a/src/examples/JettyCat/img/i4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947.png b/src/examples/JettyCat (JavaScript)/img/i4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947.png
similarity index 100%
rename from src/examples/JettyCat/img/i4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947.png
rename to src/examples/JettyCat (JavaScript)/img/i4e0a0e06-81ea-4cd2-8f3d-569a8ad3e947.png
diff --git a/src/examples/JettyCat (JavaScript)/img/i53da7582-ae6c-4843-976e-c84d6d74a489.png b/src/examples/JettyCat (JavaScript)/img/i53da7582-ae6c-4843-976e-c84d6d74a489.png
new file mode 100644
index 000000000..57a775123
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i53da7582-ae6c-4843-976e-c84d6d74a489.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i5c680919-3827-4ea7-9e72-a8fc81ddfb45.png b/src/examples/JettyCat (JavaScript)/img/i5c680919-3827-4ea7-9e72-a8fc81ddfb45.png
new file mode 100644
index 000000000..944fb3efe
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i5c680919-3827-4ea7-9e72-a8fc81ddfb45.png differ
diff --git a/src/examples/JettyCat/img/i74cac7dc-7259-4729-8494-53ed00563c2b.png b/src/examples/JettyCat (JavaScript)/img/i74cac7dc-7259-4729-8494-53ed00563c2b.png
similarity index 100%
rename from src/examples/JettyCat/img/i74cac7dc-7259-4729-8494-53ed00563c2b.png
rename to src/examples/JettyCat (JavaScript)/img/i74cac7dc-7259-4729-8494-53ed00563c2b.png
diff --git a/src/examples/JettyCat (JavaScript)/img/i775ba15c-b1aa-4707-bc1e-d0811846a893.png b/src/examples/JettyCat (JavaScript)/img/i775ba15c-b1aa-4707-bc1e-d0811846a893.png
new file mode 100644
index 000000000..9c6eeea51
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i775ba15c-b1aa-4707-bc1e-d0811846a893.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/i8229085f-e4d3-406a-9e95-bf13a8fec3cb.png b/src/examples/JettyCat (JavaScript)/img/i8229085f-e4d3-406a-9e95-bf13a8fec3cb.png
new file mode 100644
index 000000000..2eedfda03
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/i8229085f-e4d3-406a-9e95-bf13a8fec3cb.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/ia565bf91-c494-4aaf-8acb-8991cc7e3eda.png b/src/examples/JettyCat (JavaScript)/img/ia565bf91-c494-4aaf-8acb-8991cc7e3eda.png
new file mode 100644
index 000000000..771fa615e
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/ia565bf91-c494-4aaf-8acb-8991cc7e3eda.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/idf915202-237f-498c-bec0-25116fc17008.png b/src/examples/JettyCat (JavaScript)/img/idf915202-237f-498c-bec0-25116fc17008.png
new file mode 100644
index 000000000..26f1a92c8
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/idf915202-237f-498c-bec0-25116fc17008.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/ieb24c2bc-a36c-4118-b33e-a7348c00e5bb.png b/src/examples/JettyCat (JavaScript)/img/ieb24c2bc-a36c-4118-b33e-a7348c00e5bb.png
new file mode 100644
index 000000000..edcf23c2d
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/ieb24c2bc-a36c-4118-b33e-a7348c00e5bb.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/ieb3dadb5-49cf-4ba1-b562-421ab360842e.png b/src/examples/JettyCat (JavaScript)/img/ieb3dadb5-49cf-4ba1-b562-421ab360842e.png
new file mode 100644
index 000000000..b1fe66df7
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/ieb3dadb5-49cf-4ba1-b562-421ab360842e.png differ
diff --git a/src/examples/JettyCat (JavaScript)/img/iee0876e4-eece-42c2-aa93-a468dab47099.png b/src/examples/JettyCat (JavaScript)/img/iee0876e4-eece-42c2-aa93-a468dab47099.png
new file mode 100644
index 000000000..670b9b7ff
Binary files /dev/null and b/src/examples/JettyCat (JavaScript)/img/iee0876e4-eece-42c2-aa93-a468dab47099.png differ
diff --git a/src/examples/JettyCat/img/splash.png b/src/examples/JettyCat (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/JettyCat/img/splash.png
rename to src/examples/JettyCat (JavaScript)/img/splash.png
diff --git a/src/examples/LabRaid shooter (Catnip).ict b/src/examples/LabRaid shooter (Catnip).ict
new file mode 100644
index 000000000..feba8a3c6
--- /dev/null
+++ b/src/examples/LabRaid shooter (Catnip).ict
@@ -0,0 +1,14249 @@
+ctjsVersion: 5.0.0
+notes: /* empty */
+libs:
+ keyboard: {}
+ keyboard.polyfill: {}
+ random: {}
+ tween: {}
+ transition: {}
+ place:
+ undefined: ''
+ gridX: 128
+ gridY: 128
+ debugMode: false
+ debugText: 8
+ pointer:
+ preventdefault: false
+ startlocked: false
+ desktop: {}
+actions:
+ - name: MoveX
+ methods:
+ - code: keyboard.KeyD
+ - code: keyboard.KeyA
+ multiplier: -1
+ - code: keyboard.ArrowRight
+ - code: keyboard.ArrowLeft
+ multiplier: -1
+ - name: MoveY
+ methods:
+ - code: keyboard.KeyW
+ multiplier: -1
+ - code: keyboard.KeyS
+ - code: keyboard.ArrowUp
+ multiplier: -1
+ - code: keyboard.ArrowDown
+ - name: Shoot
+ methods:
+ - code: keyboard.Space
+ - code: pointer.Any
+ - name: Interact
+ methods:
+ - code: keyboard.KeyE
+scripts: []
+starting: 0
+settings:
+ authoring:
+ author: Cosmo Myzrail Gorynych
+ site: 'https://ctjs.rocks/'
+ title: Dungeon Crawler demo
+ version:
+ - 1
+ - 0
+ - 0
+ versionPostfix: ''
+ appId: rocks.ctjs.labraid
+ rendering:
+ usePixiLegacy: true
+ maxFPS: 60
+ pixelatedrender: true
+ highDensity: true
+ desktopMode: fullscreen
+ hideCursor: true
+ mobileScreenOrientation: unspecified
+ viewMode: scaleFit
+ export:
+ windows: true
+ linux: true
+ mac: true
+ functionWrap: true
+ codeModifier: none
+ bundleAssetTree: false
+ bundleAssetTypes:
+ texture: true
+ template: true
+ room: true
+ behavior: false
+ font: false
+ sound: false
+ style: false
+ tandem: false
+ typefaces: ! ''
+ autocloseDesktop: true
+ showErrors: true
+ errorsLink: ''
+ branding:
+ icon: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
+ accent: '#446adb'
+ invertPreloaderScheme: true
+ splashScreen: dc7b9662-c746-403c-9f3e-67425fd480a3
+ forceSmoothIcons: false
+ forceSmoothSplashScreen: false
+ fps: 30
+palette:
+ - '#000337'
+ - '#4FE77F'
+startroom: eed8a427-1c70-425d-b633-7b6ea00c7b7c
+contentTypes: []
+language: catnip
+assets:
+ - name: Slime
+ depth: 0
+ texture: 4733fb53-5e41-4cf8-b9a8-91ad700f2246
+ extends:
+ cgroup: Solid
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ lastmod: 1716470536232
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: aggroRange
+ value: 120
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: aggroed
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ value:
+ lib: core.arrays
+ code: get
+ values:
+ obj:
+ lib: core
+ code: templates.list
+ values:
+ list: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ index: 0
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 90
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees:
+ lib: core
+ code: u.pdn
+ values:
+ x1:
+ lib: core.movement
+ code: x
+ values: {}
+ y1:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x2:
+ lib: core.movement
+ code: x of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ y2:
+ lib: core.movement
+ code: y of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ body2:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 0
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core
+ code: u.pdc
+ values:
+ x1:
+ lib: core.movement
+ code: x
+ values: {}
+ y1:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x2:
+ lib: core.movement
+ code: x of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ y2:
+ lib: core.movement
+ code: y of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ b: 6
+ body2:
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: aggroed
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <=
+ values:
+ b:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: aggroRange
+ a:
+ lib: core
+ code: u.pdc
+ values:
+ x1:
+ lib: core.movement
+ code: x
+ values: {}
+ x2:
+ lib: core.movement
+ code: x of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ y1:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ y2:
+ lib: core.movement
+ code: y of
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ condition:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: aggroed
+ body2: []
+ condition:
+ lib: core.templates
+ code: is valid
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ - lib: place
+ code: move template smart
+ values:
+ cgroup: Solid
+ eventKey: OnStep
+ variables:
+ - cat
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: emitters.fire
+ values:
+ name: ptb58af8b29aed
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core
+ code: sounds.play
+ values:
+ name: fdd0ec77-ba8d-4999-adba-20ea72d6f5ad
+ eventKey: OnDestroy
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnDraw
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ arguments:
+ template: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ lib: place
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ body2: []
+ condition:
+ lib: core.templates
+ code: is copy
+ values:
+ copy:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ arguments:
+ group: Bullet
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - aggroRange
+ - aggroed
+ - name: Shoot
+ uid: 97baf84a-32d3-450c-a52e-25a770565520
+ lastmod: 1703052063333
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: Ddb6NGrPN3q2P8
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/s97baf84a-32d3-450c-a52e-25a770565520.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: Toggle
+ uid: aeec04ae-d50c-4c47-bcd9-89d8f90f736a
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: hjzRWWbDHm13mm
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: SmallHit
+ uid: b7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: c75548M8CqkwQ6
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: Hit
+ uid: 0559d8e7-3e27-4c25-9e38-164cd25dc4e7
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: 1Ct4QLznRkB2tr
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: InGameTheme
+ uid: d470f423-a1ed-4189-b117-8ebf7b4eac62
+ lastmod: 1703052063334
+ type: sound
+ preload: true
+ variants:
+ - uid: wWNRrzgFwM2p2b
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62.ogg
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: SlimeExplosion
+ uid: fdd0ec77-ba8d-4999-adba-20ea72d6f5ad
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: DtgdP12dNcp3C8
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: Particle_Blue
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
+ source: /home/comigo/UNWORK/Tileset/Particle_Blue.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 8
+ bottom: 8
+ uid: 9b967bf5-9694-43b6-9812-0f974b2b73c9
+ padding: 1
+ lastmod: 1597726451521
+ type: texture
+ - name: Particle_Red
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: ifee922c6-864c-448f-a2df-937389a42005.png
+ source: /home/comigo/UNWORK/Tileset/Particle_Red.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 8
+ bottom: 8
+ uid: fee922c6-864c-448f-a2df-937389a42005
+ padding: 1
+ lastmod: 1597726454098
+ type: texture
+ - name: Slime
+ untill: 0
+ grid:
+ - 2
+ - 1
+ axis:
+ - 8
+ - 13
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
+ source: /home/comigo/UNWORK/Tileset/Slime.png
+ shape: rect
+ left: 7
+ right: 7
+ top: 9
+ bottom: 0
+ uid: 4733fb53-5e41-4cf8-b9a8-91ad700f2246
+ padding: 1
+ lastmod: 1656663031400
+ type: texture
+ - name: Particle_White
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
+ shape: rect
+ left: 0
+ right: 16
+ top: 0
+ bottom: 16
+ uid: d9107804-cf88-4bd9-913c-c9ac1a4d5f05
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/Particle_White.png
+ type: texture
+ - name: RedSparks
+ emitters:
+ - uid: 4f1c4b6a-d8a7-428b-a7f2-c7ce01c0f162
+ texture: fee922c6-864c-448f-a2df-937389a42005
+ openedTabs:
+ - texture
+ - colors
+ - gravity
+ - spawning
+ - velocity
+ - direction
+ - scaling
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 10
+ settings:
+ frequency: 0.019
+ lifetime:
+ min: 0.1
+ max: 0.25
+ spawnChance: 0.8
+ emitterLifetime: 0.1
+ maxParticles: 1001
+ addAtBack: false
+ particlesPerWave: 1
+ pos:
+ x: 0
+ 'y': 0
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 1
+ time: 0
+ - time: 0.4880952380952381
+ value: 0.975
+ - value: 1
+ time: 1
+ isStepped: false
+ - type: color
+ config:
+ color:
+ list:
+ - value: ffffff
+ time: 0
+ - time: 0.4880952380952381
+ value: FFFFFF
+ - value: ffffff
+ time: 1
+ isStepped: false
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 1
+ time: 0
+ - time: 0.5113937419755831
+ value: 0.9700000350952176
+ - value: 0.0499999809265122
+ time: 1
+ isStepped: false
+ minMult: ! ''
+ - type: moveAcceleration
+ config:
+ minStart: 150
+ maxStart: 150
+ accel:
+ x: 0
+ 'y': 416
+ rotate: false
+ maxSpeed: 0
+ - type: spawnShape
+ config:
+ type: torus
+ data:
+ innerRadius: 0
+ radius: 0
+ x: 0
+ 'y': 0
+ rotation: false
+ - type: rotation
+ config:
+ minStart: 0
+ maxStart: -180
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ uid: pt1f52a07073af
+ lastmod: 1697615820182
+ type: tandem
+ - name: BlueSparks
+ emitters:
+ - uid: 4f1c4b6a-d8a7-428b-a7f2-c7ce01c0f162
+ texture: 9b967bf5-9694-43b6-9812-0f974b2b73c9
+ openedTabs:
+ - texture
+ - colors
+ - gravity
+ - velocity
+ - direction
+ - scaling
+ - shape
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 10
+ settings:
+ frequency: 0.019
+ lifetime:
+ min: 0.4
+ max: 0.6
+ spawnChance: 0.8
+ emitterLifetime: 0.1
+ maxParticles: 1001
+ addAtBack: false
+ particlesPerWave: 1
+ pos:
+ x: 0
+ 'y': 0
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 0.99
+ time: 0
+ - time: 0.46825396825396826
+ value: 0.9849999999999999
+ - value: 1
+ time: 1
+ isStepped: false
+ - type: color
+ config:
+ color:
+ list:
+ - value: ffffff
+ time: 0
+ - time: 0.46825396825396826
+ value: FFFFFF
+ - value: ffffff
+ time: 1
+ isStepped: false
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 1
+ time: 0
+ - time: 0.5113937419755831
+ value: 0.9700000350952176
+ - value: 0.0499999809265122
+ time: 1
+ isStepped: false
+ minMult: ! ''
+ - type: moveAcceleration
+ config:
+ minStart: 150
+ maxStart: 150
+ accel:
+ x: 0
+ 'y': 980
+ rotate: true
+ maxSpeed: 3000
+ - type: spawnShape
+ config:
+ type: torus
+ data:
+ innerRadius: 0
+ radius: 9
+ x: 0
+ 'y': 0
+ rotation: false
+ - type: rotation
+ config:
+ minStart: -120
+ maxStart: -60
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ uid: eeee43af-201a-483c-8c2f-edde43ecfba6
+ lastmod: 1697615820182
+ type: tandem
+ - name: Slime_Dead
+ emitters:
+ - uid: 0e491f30-ae29-4653-8750-6cfc60976637
+ texture: d9107804-cf88-4bd9-913c-c9ac1a4d5f05
+ openedTabs:
+ - texture
+ - colors
+ - scaling
+ - velocity
+ - shape
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 10
+ settings:
+ frequency: 0.015
+ lifetime:
+ min: 0.22
+ max: 0.38
+ spawnChance: 1
+ emitterLifetime: 0.1
+ maxParticles: 1000
+ addAtBack: false
+ particlesPerWave: 2
+ pos:
+ x: -4
+ 'y': -8
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 1
+ time: 0
+ - time: 0.6661227595367217
+ value: 1
+ - value: 0
+ time: 1
+ isStepped: false
+ - type: color
+ config:
+ color:
+ list:
+ - value: 4FE77F
+ time: 0
+ - time: 0.6661227595367217
+ value: 4FE77F
+ - value: 4FE77F
+ time: 1
+ isStepped: false
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 0.0599650728599917
+ time: 0
+ - time: 0.07533531209046257
+ value: 0.6299996284346806
+ - value: 0.38001411948213104
+ time: 1
+ isStepped: false
+ minMult: ! ''
+ - type: moveAcceleration
+ config:
+ minStart: 67.99573628796176
+ maxStart: 199.98745967047574
+ accel:
+ x: 0
+ 'y': 864
+ rotate: true
+ maxSpeed: 0
+ - type: spawnShape
+ config:
+ type: rect
+ data:
+ x: 0
+ 'y': 0
+ width: 8
+ height: 1
+ w: 8
+ h: 8
+ - type: rotation
+ config:
+ minStart: -51
+ maxStart: -137
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ showShapeVisualizer: true
+ uid: ptb58af8b29aed
+ lastmod: 1697615820182
+ type: tandem
+ previewTexture: 4733fb53-5e41-4cf8-b9a8-91ad700f2246
+ - type: folder
+ uid: ngRwWfKFr85QF6
+ colorClass: error
+ icon: circle
+ name: Core
+ lastmod: 1697615948063
+ entries:
+ - type: folder
+ uid: zPr4DC3chkn7wn
+ colorClass: accent1
+ icon: template
+ name: Cat character
+ lastmod: 1697615835396
+ entries:
+ - name: Cat
+ depth: 5
+ texture: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
+ extends:
+ cgroup: ''
+ uid: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ lastmod: 1716470410134
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.camera
+ code: follow this
+ values: {}
+ - lib: core.camera
+ code: set shiftY
+ values:
+ value: -8
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: maxSpeed
+ value: 120
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ value: 0
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: maxSpeed
+ a:
+ lib: core.actions
+ code: action value
+ values:
+ action: MoveY
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: maxSpeed
+ a:
+ lib: core.actions
+ code: action value
+ values:
+ action: MoveX
+ - lib: place
+ code: move template smart
+ values:
+ cgroup: Solid
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: trap
+ value:
+ lib: place
+ code: place.meet
+ values:
+ template: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: enemy
+ value:
+ lib: place
+ code: place.meet
+ values:
+ template: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: damaged
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: damaged
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ body2: []
+ condition:
+ lib: core.logic
+ code: a AND b
+ values:
+ a:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: trap
+ b:
+ lib: core.objects
+ code: object read
+ values:
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: trap
+ property: active
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: damaged
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ body2: []
+ condition:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: enemy
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core
+ code: emitters.fire
+ values:
+ name: fa469921-6f9c-43c7-928a-a8f6693e58be
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core
+ code: sounds.play
+ values:
+ name: 1cc5a5e0-765c-4bba-a006-8b597802ace6
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ value: 1
+ - lib: core.propsVars
+ code: decrement
+ values:
+ var:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core
+ code: templates.copy
+ values:
+ template: f11d4e26-8450-4187-8163-b70facceca7e
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <=
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 0
+ body2: []
+ condition:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: damaged
+ body2:
+ - lib: core.propsVars
+ code: decrease
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ val:
+ lib: core
+ code: u.time
+ values: {}
+ condition:
+ lib: core.math
+ code: <=
+ values:
+ b: 0
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ eventKey: OnStep
+ variables:
+ - trap
+ - enemy
+ - damaged
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
+ body2:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: 8bef1226-7fb8-4bf5-8120-ac6e53d81ea5
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ b:
+ lib: pointer
+ code: pointer.x
+ values: {}
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 0.5
+ body2:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 1
+ condition:
+ lib: core.logic
+ code: a AND b
+ values:
+ a:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ b: 0
+ b:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.math
+ code: '%'
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: invincibleTimer
+ b: 1
+ b: 0.5
+ eventKey: OnDraw
+ variables: []
+ - eventKey: OnActionPress
+ code:
+ - lib: core
+ code: templates.copy
+ values:
+ return:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: bullet
+ template: 57f03679-dc98-4ebc-87ef-a4ca7b275731
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 5
+ customOptions:
+ direction:
+ lib: core
+ code: u.pdn
+ values:
+ x1:
+ lib: core.movement
+ code: x
+ values: {}
+ y1:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x2:
+ lib: pointer
+ code: pointer.x
+ values: {}
+ y2:
+ lib: pointer
+ code: pointer.y
+ values: {}
+ arguments:
+ action: Shoot
+ lib: core
+ variables:
+ - bullet
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.objects
+ code: current room write
+ values:
+ property: checkpointX
+ value:
+ lib: core.objects
+ code: object read
+ values:
+ object:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ property: x
+ - lib: core.objects
+ code: current room write
+ values:
+ property: checkpointY
+ value:
+ lib: core.objects
+ code: object read
+ values:
+ object:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ property: 'y'
+ arguments:
+ template: 469b9eef-6117-43a5-87d3-7151da7eba06
+ lib: place
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core
+ code: templates.copy
+ values:
+ template: c480ea86-1545-4048-8f2e-1ded726cfa92
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 8
+ arguments:
+ template: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ playAnimationOnStart: true
+ animationFPS: 5
+ visible: true
+ blendMode: normal
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - maxSpeed
+ - invincibleTimer
+ - name: Cat_Falling
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i96121d6f-6483-48f8-841b-b307befc7d42.png
+ shape: circle
+ left: 0
+ right: 16
+ top: 0
+ bottom: 16
+ uid: 96121d6f-6483-48f8-841b-b307befc7d42
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/CatFalling.png
+ r: 8
+ lastmod: 1598573377064
+ type: texture
+ - name: Cat_Left
+ untill: 0
+ grid:
+ - 2
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
+ source: /home/comigo/UNWORK/Tileset/Cat_Left.png
+ shape: rect
+ left: 7
+ right: 7
+ top: 13
+ bottom: 0
+ uid: 8bef1226-7fb8-4bf5-8120-ac6e53d81ea5
+ padding: 1
+ lastmod: 1656663036558
+ type: texture
+ - name: Cat_Right
+ untill: 0
+ grid:
+ - 2
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
+ source: /home/comigo/UNWORK/Tileset/Cat_Right.png
+ shape: rect
+ left: 7
+ right: 7
+ top: 13
+ bottom: 0
+ uid: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
+ padding: 1
+ lastmod: 1597803968174
+ type: texture
+ - name: Cat_Death
+ depth: 0
+ texture: 8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1
+ extends: {}
+ uid: f11d4e26-8450-4187-8163-b70facceca7e
+ lastmod: 1712231687374
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnCreate
+ variables: []
+ - eventKey: OnAnimationComplete
+ code:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName:
+ lib: core.objects
+ code: room read
+ values:
+ property: name
+ arguments: {}
+ lib: core
+ variables: []
+ type: template
+ loopAnimation: false
+ playAnimationOnStart: true
+ visible: true
+ blendMode: normal
+ animationFPS: 1
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Cat_Death
+ untill: 0
+ grid:
+ - 2
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 16
+ bottom: 0
+ uid: 8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/Cat_Death.png
+ lastmod: 1712231289884
+ type: texture
+ - name: Cat_Falling
+ depth: 0
+ texture: 96121d6f-6483-48f8-841b-b307befc7d42
+ extends: {}
+ uid: c480ea86-1545-4048-8f2e-1ded726cfa92
+ lastmod: 1712231978118
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: 8074a9ef-0215-4e02-a107-cb20d1fc5de9
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: decrement
+ values:
+ var:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ - lib: core
+ code: templates.copy
+ values:
+ template: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ x:
+ lib: core.objects
+ code: room read
+ values:
+ property: checkpointX
+ 'y':
+ lib: core.objects
+ code: room read
+ values:
+ property: checkpointY
+ body2:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName:
+ lib: core.objects
+ code: room read
+ values:
+ property: name
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 0
+ eventKey: OnDestroy
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: decrease
+ values:
+ var:
+ lib: core.appearance
+ code: get angle
+ values: {}
+ val:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ b: 600
+ - lib: core.propsVars
+ code: decrease
+ values:
+ var:
+ lib: core.appearance
+ code: get scale x
+ values: {}
+ val:
+ lib: core.math
+ code: /
+ values:
+ b: 1.5
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ - lib: core.appearance
+ code: set scale
+ values:
+ scale:
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.appearance
+ code: get scale x
+ values: {}
+ b:
+ lib: core
+ code: u.time
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core.appearance
+ code: get scale x
+ values: {}
+ b: 0
+ eventKey: OnDraw
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: CatDamage
+ uid: 1cc5a5e0-765c-4bba-a006-8b597802ace6
+ lastmod: 1712231588035
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: D8LpLdtHq6qBQD
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: Cat_Damage
+ emitters:
+ - uid: 0e491f30-ae29-4653-8750-6cfc60976637
+ texture: d9107804-cf88-4bd9-913c-c9ac1a4d5f05
+ openedTabs:
+ - texture
+ - colors
+ - scaling
+ - velocity
+ - shape
+ textureBehavior: textureRandom
+ animatedSingleFramerate: 10
+ settings:
+ frequency: 0.015
+ lifetime:
+ min: 0.22
+ max: 0.38
+ spawnChance: 1
+ emitterLifetime: 0.1
+ maxParticles: 1000
+ addAtBack: false
+ particlesPerWave: 1
+ pos:
+ x: 0
+ 'y': -8
+ behaviors:
+ - type: alpha
+ config:
+ alpha:
+ list:
+ - value: 1
+ time: 0
+ - time: 0.6700910135049757
+ value: 1
+ - value: 0
+ time: 1
+ isStepped: false
+ - type: color
+ config:
+ color:
+ list:
+ - value: E74F4F
+ time: 0
+ - time: 0.6700910135049757
+ value: E74F4F
+ - value: E74F4F
+ time: 1
+ isStepped: false
+ - type: blendMode
+ config:
+ blendMode: normal
+ - type: scale
+ config:
+ scale:
+ list:
+ - value: 0.0599650728599917
+ time: 0
+ - time: 0.07930356605871654
+ value: 0.4299996284346806
+ - value: 0.18001411948213103
+ time: 1
+ isStepped: false
+ minMult: ! ''
+ - type: moveAcceleration
+ config:
+ minStart: 129.9899677363806
+ maxStart: 162.48745967047574
+ accel:
+ x: 0
+ 'y': 864
+ rotate: true
+ maxSpeed: 0
+ - type: spawnShape
+ config:
+ type: torus
+ data:
+ x: 0
+ 'y': 0
+ radius: 0
+ innerRadius: 0
+ rotation: true
+ - type: rotation
+ config:
+ minStart: -51
+ maxStart: -137
+ minSpeed: 0
+ maxSpeed: 0
+ accel: 0
+ uid: fa469921-6f9c-43c7-928a-a8f6693e58be
+ lastmod: 1697615820182
+ type: tandem
+ previewTexture: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
+ - name: Fall
+ uid: 8074a9ef-0215-4e02-a107-cb20d1fc5de9
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: H1P1QdpCz7f85g
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - name: Bullet
+ depth: 0
+ texture: 29cd8366-37bd-4a4d-96a1-a2da4d674972
+ extends:
+ cgroup: Bullet
+ uid: 57f03679-dc98-4ebc-87ef-a4ca7b275731
+ lastmod: 1711619236602
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: 97baf84a-32d3-450c-a52e-25a770565520
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 240
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ eventKey: OnStep
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: b7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab
+ - lib: core
+ code: emitters.fire
+ values:
+ name: pt1f52a07073af
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnDestroy
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnDraw
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ arguments:
+ group: Solid
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Bullet
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
+ source: /home/comigo/UNWORK/Tileset/Bullet.png
+ shape: circle
+ left: 0
+ right: 16
+ top: 0
+ bottom: 16
+ uid: 29cd8366-37bd-4a4d-96a1-a2da4d674972
+ padding: 1
+ r: 3
+ lastmod: 1597726178256
+ type: texture
+ - type: folder
+ uid: Cj8kWwmBdPQG1W
+ colorClass: text
+ icon: room
+ name: Level stuff
+ lastmod: 1697616020438
+ entries:
+ - name: Tileset
+ untill: 0
+ grid:
+ - 8
+ - 4
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 128
+ imgHeight: 64
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i4f8a6124-427b-410b-a467-ac42afec3644.png
+ source: /home/comigo/UNWORK/Tileset/Tileset.png
+ shape: rect
+ left: 0
+ right: 16
+ top: 0
+ bottom: 16
+ uid: 4f8a6124-427b-410b-a467-ac42afec3644
+ padding: 1
+ lastmod: 1599528760547
+ type: texture
+ - name: Door
+ untill: 0
+ grid:
+ - 2
+ - 2
+ axis:
+ - 16
+ - 32
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 32
+ height: 32
+ offx: 0
+ offy: 0
+ origname: i3a7c7928-a731-4940-9854-17936b3c9a46.png
+ source: /home/comigo/UNWORK/Tileset/Door.png
+ shape: rect
+ left: 16
+ right: 16
+ top: 27
+ bottom: -6
+ uid: 3a7c7928-a731-4940-9854-17936b3c9a46
+ padding: 1
+ lastmod: 1599528744595
+ type: texture
+ - name: Door
+ depth: 1
+ texture: 3a7c7928-a731-4940-9854-17936b3c9a46
+ extends:
+ cgroup: Solid
+ uid: c701a029-af09-4fcf-9712-0fcdaa3581be
+ lastmod: 1711621936165
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: opened
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ value:
+ lib: core.arrays
+ code: get
+ values:
+ obj:
+ lib: core
+ code: templates.list
+ values:
+ list: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ index: 0
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: opened
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: core.objects
+ code: this write
+ values:
+ property: cgroup
+ value: Unsolid
+ - lib: core
+ code: sounds.play
+ values:
+ name: fbe42ee3-6fe6-43ac-a99c-09da748ddc46
+ - lib: core.appearance
+ code: play animation
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core
+ code: u.pdc
+ values:
+ x1:
+ lib: core.movement
+ code: x
+ values: {}
+ y1:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x2:
+ lib: core.objects
+ code: object read
+ values:
+ property: x
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ y2:
+ lib: core.objects
+ code: object read
+ values:
+ property: 'y'
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ b: 48
+ body2: []
+ condition:
+ lib: core.logic
+ code: a AND b
+ values:
+ a:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: opened
+ b:
+ lib: core.templates
+ code: is copy
+ values:
+ copy:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: cat
+ eventKey: OnStep
+ variables:
+ - cat
+ type: template
+ loopAnimation: false
+ visible: true
+ blendMode: normal
+ animationFPS: 15
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - opened
+ - name: Door_Base
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 16
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 32
+ height: 16
+ offx: 0
+ offy: 0
+ origname: iae954867-1039-43f6-bf6d-d8684cb58612.png
+ shape: rect
+ left: 16
+ right: 16
+ top: 16
+ bottom: 0
+ uid: ae954867-1039-43f6-bf6d-d8684cb58612
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/Door_Base.png
+ lastmod: 1599528776390
+ type: texture
+ - name: Elevator
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 32
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 32
+ width: 16
+ height: 32
+ offx: 0
+ offy: 0
+ origname: i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
+ source: /home/comigo/UNWORK/Tileset/Elevator.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 16
+ bottom: 0
+ uid: 2637e46e-06b2-4ca0-b17d-4bbf6eca44b7
+ padding: 1
+ lastmod: 1598583384037
+ type: texture
+ - name: Elevator
+ depth: 0
+ texture: 2637e46e-06b2-4ca0-b17d-4bbf6eca44b7
+ extends: {}
+ uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb
+ lastmod: 1711634966849
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: transitionStarted
+ value:
+ lib: core.logic
+ code: 'false'
+ values: {}
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnCreate
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: transitionStarted
+ value:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: transition
+ code: transition.slideOut
+ values:
+ then:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName:
+ lib: core.objects
+ code: room read
+ values:
+ property: nextLevel
+ duration: 750
+ body2: []
+ condition:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: transitionStarted
+ arguments:
+ template: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - transitionStarted
+ - name: SpikeTrap
+ untill: 0
+ grid:
+ - 2
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i6c23e805-94b6-4e3a-8606-682c36960233.png
+ source: /home/comigo/UNWORK/Tileset/SpikeTrap.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 16
+ bottom: 0
+ uid: 6c23e805-94b6-4e3a-8606-682c36960233
+ padding: 1
+ lastmod: 1597726354223
+ type: texture
+ - name: Trap
+ depth: -5000
+ texture: 6c23e805-94b6-4e3a-8606-682c36960233
+ extends: {}
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ lastmod: 1712231198211
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: spikeTimer
+ value: 0
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: increase
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: spikeTimer
+ val:
+ lib: core
+ code: u.time
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: spikeTimer
+ value: 0
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: active
+ value:
+ lib: core.logic
+ code: NOT a
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: active
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: goto stop
+ values:
+ frame: 1
+ body2:
+ - lib: core.appearance
+ code: goto stop
+ values:
+ frame: 0
+ condition:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: active
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: spikeTimer
+ b: 3
+ eventKey: OnStep
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - spikeTimer
+ - active
+ - name: Medkit
+ depth: 0
+ texture: c61a44b6-1f4d-43c2-9356-7288658947a9
+ extends: {}
+ uid: b336d91c-2876-4686-b8b4-901045a86ac7
+ lastmod: 1711630855587
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: d06c5cd6-41eb-42c0-9caa-3306e2558b19
+ eventKey: OnDestroy
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: increment
+ values:
+ var:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 3
+ arguments:
+ template: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Medkit
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: ic61a44b6-1f4d-43c2-9356-7288658947a9.png
+ shape: rect
+ left: 0
+ right: 16
+ top: 0
+ bottom: 16
+ uid: c61a44b6-1f4d-43c2-9356-7288658947a9
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/Medkit.png
+ type: texture
+ - name: Checkpoint
+ depth: 0
+ texture: a42e0dff-69c9-46c3-8996-745aaa769698
+ extends:
+ cgroup: Checkpoint
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ lastmod: 1668342920220
+ events: []
+ type: template
+ loopAnimation: true
+ visible: false
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Checkpoint
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 16
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 32
+ imgHeight: 32
+ width: 32
+ height: 32
+ offx: 0
+ offy: 0
+ origname: ia42e0dff-69c9-46c3-8996-745aaa769698.png
+ shape: rect
+ left: 16
+ right: 16
+ top: 16
+ bottom: 16
+ uid: a42e0dff-69c9-46c3-8996-745aaa769698
+ padding: 1
+ lastmod: 1598572915462
+ type: texture
+ - name: Door
+ uid: fbe42ee3-6fe6-43ac-a99c-09da748ddc46
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: 7FPj1Ttm8n6PBG
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - type: folder
+ uid: r17c443PfF9fzt
+ colorClass: success
+ icon: unpackage
+ name: Decor
+ lastmod: 1697615886623
+ entries:
+ - name: Crate
+ depth: 0
+ texture: 31948760-8965-4768-ab1d-2b87d0b7fc3a
+ extends:
+ cgroup: Solid
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ lastmod: 1711619781845
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.appearance
+ code: set depth
+ values:
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: 0559d8e7-3e27-4c25-9e38-164cd25dc4e7
+ - lib: core
+ code: templates.copy
+ values:
+ template: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ eventKey: OnDestroy
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ body2: []
+ condition:
+ lib: core.templates
+ code: is copy
+ values:
+ copy:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ arguments:
+ group: Bullet
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Crate
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
+ source: /home/comigo/UNWORK/Tileset/Crate.png
+ shape: rect
+ left: 7
+ right: 7
+ top: 14
+ bottom: -1
+ uid: 31948760-8965-4768-ab1d-2b87d0b7fc3a
+ padding: 1
+ lastmod: 1597799697782
+ type: texture
+ - name: Crate_Debris
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: id25aebb8-d135-4b9c-b2b5-844298c35a62.png
+ source: /home/comigo/UNWORK/Tileset/Crate_Debris.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 16
+ bottom: 0
+ uid: d25aebb8-d135-4b9c-b2b5-844298c35a62
+ padding: 1
+ lastmod: 1597799701862
+ type: texture
+ - name: Crate_Debris
+ depth: -6500
+ texture: d25aebb8-d135-4b9c-b2b5-844298c35a62
+ extends: {}
+ uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ lastmod: 1668342957563
+ events: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: HazardousTube_Debris
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
+ source: /home/comigo/UNWORK/Tileset/HazardousTube_Debris.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 8
+ bottom: 8
+ uid: 80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc
+ padding: 1
+ lastmod: 1597811277810
+ type: texture
+ - name: HazardousTube_Debris
+ depth: -6500
+ texture: 80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc
+ extends: {}
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ lastmod: 1668343128145
+ events:
+ - lib: core
+ arguments: {}
+ code: []
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code: []
+ eventKey: OnStep
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: HazardousTube
+ depth: 0
+ texture: 1f0fbe96-38aa-4db4-a011-c0cf34b91d00
+ extends:
+ cgroup: Solid
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ lastmod: 1711619904259
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core
+ code: sounds.play
+ values:
+ name: 0559d8e7-3e27-4c25-9e38-164cd25dc4e7
+ - lib: core
+ code: templates.copy
+ values:
+ template: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core
+ code: emitters.fire
+ values:
+ name: eeee43af-201a-483c-8c2f-edde43ecfba6
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ eventKey: OnDestroy
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ body2: []
+ condition:
+ lib: core.templates
+ code: is copy
+ values:
+ copy:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ arguments:
+ group: Bullet
+ lib: place
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: HazardousTube
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 16
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
+ source: /home/comigo/UNWORK/Tileset/HazardousTube.png
+ shape: rect
+ left: 6
+ right: 5
+ top: 16
+ bottom: 0
+ uid: 1f0fbe96-38aa-4db4-a011-c0cf34b91d00
+ padding: 1
+ lastmod: 1597811281802
+ type: texture
+ - name: Gap
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
+ shape: rect
+ left: 0
+ right: 16
+ top: 0
+ bottom: 13
+ uid: 14d3f53f-a868-4820-84cd-63234ab6e6b9
+ padding: 1
+ lastmod: 1598577776397
+ type: texture
+ - name: Gap
+ depth: 0
+ texture: 14d3f53f-a868-4820-84cd-63234ab6e6b9
+ extends:
+ cgroup: Gap
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ lastmod: 1671955011686
+ events: []
+ type: template
+ loopAnimation: false
+ visible: false
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: Powerup
+ uid: d06c5cd6-41eb-42c0-9caa-3306e2558b19
+ lastmod: 1703052063334
+ type: sound
+ preload: ! ''
+ variants:
+ - uid: 46NcTjjpkHtPLH
+ source: >-
+ C:\Users\Comigo\ct-js\src\examples\DungeonCrawler_coffee/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19.wav
+ distortion:
+ enabled: false
+ min: 0
+ max: 1
+ pitch:
+ enabled: false
+ min: 0
+ max: 1
+ reverb:
+ enabled: false
+ decayMin: 2
+ decayMax: 2
+ secondsMin: 2
+ secondsMax: 3
+ reverse: false
+ volume:
+ enabled: false
+ min: 0
+ max: 1
+ eq:
+ enabled: false
+ bands:
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ - min: -1
+ max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
+ - type: folder
+ uid: fCHHCjW6MGMTcN
+ colorClass: success
+ icon: monitor
+ name: UI
+ lastmod: 1697616102414
+ entries:
+ - name: StartButton
+ depth: 0
+ texture: a5745819-e057-4d67-a114-b64249a0f701
+ extends: {}
+ uid: 38f86691-8fcc-44e4-a201-8479ca64935f
+ lastmod: 1711631427457
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: blinkTimer
+ value: 0
+ eventKey: OnCreate
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: increase
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: blinkTimer
+ val:
+ lib: core
+ code: u.time
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 0
+ body2:
+ - lib: core.appearance
+ code: set alpha
+ values:
+ value: 1
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: blinkTimer
+ b: 0.5
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: blinkTimer
+ value: 0
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: blinkTimer
+ b: 1
+ eventKey: OnDraw
+ variables: []
+ - eventKey: OnPointerClick
+ code:
+ - lib: transition
+ code: transition.slideOut
+ values:
+ then:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName: 326893eb-b9c2-4616-aaee-bb4641e0423e
+ duration: 750
+ arguments: {}
+ lib: core
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties:
+ - blinkTimer
+ - name: StartButton
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 48
+ - 13
+ marginx: 0
+ marginy: 0
+ imgWidth: 96
+ imgHeight: 27
+ width: 96
+ height: 27
+ offx: 0
+ offy: 0
+ origname: ia5745819-e057-4d67-a114-b64249a0f701.png
+ shape: rect
+ left: 48
+ right: 48
+ top: 13
+ bottom: 14
+ uid: a5745819-e057-4d67-a114-b64249a0f701
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/StartButton.png
+ lastmod: 1598577786741
+ type: texture
+ - name: ByComigo
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 58
+ - 2
+ marginx: 0
+ marginy: 0
+ imgWidth: 117
+ imgHeight: 5
+ width: 117
+ height: 5
+ offx: 0
+ offy: 0
+ origname: i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
+ shape: rect
+ left: 58
+ right: 59
+ top: 2
+ bottom: 3
+ uid: 9a1f5e9c-16a8-4900-8991-fab3f42fa1fd
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/ByComigo.png
+ lastmod: 1716645003411
+ type: texture
+ - name: Logo
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 105
+ - 32
+ marginx: 0
+ marginy: 0
+ imgWidth: 211
+ imgHeight: 65
+ width: 211
+ height: 65
+ offx: 0
+ offy: 0
+ origname: idc7b9662-c746-403c-9f3e-67425fd480a3.png
+ shape: rect
+ left: 105
+ right: 106
+ top: 32
+ bottom: 33
+ uid: dc7b9662-c746-403c-9f3e-67425fd480a3
+ padding: 1
+ source: /home/comigo/UNWORK/Tileset/Logo.png
+ lastmod: 1598577798322
+ type: texture
+ - name: Crosshair
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
+ source: /home/comigo/UNWORK/Tileset/Crosshair.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 8
+ bottom: 8
+ uid: bdf46b11-ef42-4c45-af01-a0b918ee9587
+ padding: 1
+ lastmod: 1599528855312
+ type: texture
+ - name: Crosshair
+ depth: 100000
+ texture: bdf46b11-ef42-4c45-af01-a0b918ee9587
+ extends: {}
+ uid: ff0f561c-a96c-4205-a083-01d2a60ebb67
+ lastmod: 1712231108691
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.movement
+ code: set x
+ values:
+ pixels:
+ lib: pointer
+ code: pointer.xui
+ values: {}
+ - lib: core.movement
+ code: set y
+ values:
+ pixels:
+ lib: pointer
+ code: pointer.yui
+ values: {}
+ eventKey: OnDraw
+ variables: []
+ type: template
+ loopAnimation: true
+ visible: true
+ blendMode: normal
+ animationFPS: 30
+ playAnimationOnStart: false
+ behaviors: []
+ baseClass: AnimatedSprite
+ nineSliceSettings:
+ left: 16
+ top: 16
+ right: 16
+ bottom: 16
+ style: -1
+ extendTypes: ''
+ properties: []
+ - name: UI_InGame
+ onstep: ''
+ onleave: ''
+ width: 240
+ height: 160
+ backgrounds: []
+ copies:
+ - x: 96
+ 'y': 88
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: ff0f561c-a96c-4205-a083-01d2a60ebb67
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 7
+ 'y': 9
+ opacity: 1
+ tint: '#000000'
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: WJWkw8C45gQBMN
+ exts: {}
+ customProperties: {}
+ bindings:
+ count: rooms.current.lives
+ - x: 8
+ 'y': 8
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: WJWkw8C45gQBMN
+ exts: {}
+ customProperties: {}
+ bindings:
+ count: rooms.current.lives
+ tiles:
+ - depth: -10
+ tiles: []
+ extends: {}
+ hidden: false
+ cache: true
+ uid: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ thumbnail: 6569f49f6b80
+ extends: {}
+ gridX: 8
+ gridY: 8
+ backgroundColor: '#000337'
+ lastmod: 1716832028122
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.objects
+ code: current room write
+ values:
+ property: lives
+ value: 3
+ - lib: transition
+ code: transition.slideIn
+ values:
+ then: []
+ duration: 750
+ eventKey: OnRoomStart
+ variables: []
+ type: room
+ simulate: true
+ isUi: true
+ follow: -1
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - name: Heart
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 8
+ - 8
+ marginx: 0
+ marginy: 0
+ imgWidth: 16
+ imgHeight: 16
+ width: 16
+ height: 16
+ offx: 0
+ offy: 0
+ origname: ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
+ source: /home/comigo/UNWORK/Tileset/Heart.png
+ shape: rect
+ left: 8
+ right: 8
+ top: 8
+ bottom: 8
+ uid: fe8cc3f9-d37b-402d-aa5a-18cf1a55d1ab
+ padding: 3
+ lastmod: 1599528859794
+ tiled: true
+ type: texture
+ - type: template
+ baseClass: SpritedCounter
+ name: HeartCounter
+ depth: 0
+ texture: fe8cc3f9-d37b-402d-aa5a-18cf1a55d1ab
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code: []
+ arguments: {}
+ extends: {}
+ lastmod: 1712480494411
+ uid: WJWkw8C45gQBMN
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ tilingSettings:
+ scrollSpeedX: 0
+ scrollSpeedY: 0
+ isUi: false
+ repeaterSettings:
+ defaultCount: 3
+ - name: TinyUnicode
+ type: typeface
+ fonts:
+ - weight: '400'
+ italic: false
+ uid: mG551jw6zW6mzt
+ origname: TinyUnicode
+ lastmod: 1716736392370
+ bitmapFont: true
+ bitmapFontSize: 16
+ bitmapFontLineHeight: 18
+ charsets:
+ - basicLatin
+ - punctuation
+ customCharset: ''
+ uid: hHCNfDgh4gBdCr
+ bitmapPrecision: true
+ - type: style
+ name: BlueLabel
+ uid: LdqNC8mzNn3z4b
+ typeface: hHCNfDgh4gBdCr
+ font:
+ family: sans-serif
+ halign: left
+ italic: false
+ size: 16
+ weight: '400'
+ wrap: false
+ wrapPosition: 640
+ lineHeight: 18.08
+ fill:
+ type: 0
+ color: '#86C0E7'
+ color1: '#cccccc'
+ color2: '#ffffff'
+ gradtype: 1
+ lastmod: 1716731164538
+ - type: template
+ baseClass: BitmapText
+ name: BlueLabel
+ depth: 0
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1716725934487
+ uid: qTPfqLqLnhK92f
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: ''
+ textStyle: LdqNC8mzNn3z4b
+ - type: folder
+ uid: QK6Nbn1wL7Hgrh
+ colorClass: accent1
+ icon: polyline
+ name: Maps
+ lastmod: 1697616131293
+ entries:
+ - name: Level_01
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ width: 240
+ height: 160
+ backgrounds: []
+ copies:
+ - x: 248
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 152
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 160
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 168
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 280
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 280
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 96
+ 'y': 88
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 96
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c701a029-af09-4fcf-9712-0fcdaa3581be
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles:
+ - depth: -6000
+ tiles:
+ - x: 48
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 12
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 9
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 9
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 9
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 10
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ extends:
+ cgroup: Solid
+ hidden: false
+ cache: true
+ - depth: -7000
+ tiles:
+ - x: 64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 6
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 6
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 6
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 6
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 15
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 15
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: ae954867-1039-43f6-bf6d-d8684cb58612
+ - x: 224
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ extends:
+ cgroup: Decor
+ hidden: false
+ cache: true
+ uid: 326893eb-b9c2-4616-aaee-bb4641e0423e
+ thumbnail: bb4641e0423e
+ extends: {}
+ gridX: 16
+ gridY: 16
+ backgroundColor: '#000337'
+ lastmod: 1712231786878
+ restrictCamera: true
+ restrictMinX: -48
+ restrictMaxX: 384
+ restrictMinY: -16
+ restrictMaxY: 320
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: lives
+ value: 3
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: nextLevel
+ value: Level_02
+ - lib: core
+ code: sounds.play
+ values:
+ name: d470f423-a1ed-4189-b117-8ebf7b4eac62
+ volume: 0.3
+ loop:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ - lib: core
+ code: rooms.append
+ values:
+ roomName: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ name: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ eventKey: OnRoomStart
+ variables: []
+ type: room
+ simulate: true
+ isUi: ! ''
+ follow: -1
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - nextLevel
+ - lives
+ - name: Level_02
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ width: 240
+ height: 160
+ backgrounds: []
+ copies:
+ - x: 352
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c701a029-af09-4fcf-9712-0fcdaa3581be
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 106
+ 'y': 238
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 359
+ 'y': 239
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 61
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 111
+ 'y': 79
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 124
+ 'y': 233
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 220
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 255
+ 'y': 232
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 568
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 458
+ 'y': 41
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 451
+ 'y': 47
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 459
+ 'y': 51
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 279
+ 'y': 41
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 387
+ 'y': 58
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 323
+ 'y': 90
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 373
+ 'y': 99
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 447
+ 'y': 68
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 317
+ 'y': 55
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 432
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 352
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 368
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 568
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 334
+ 'y': 230
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 224
+ 'y': 184
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 240
+ 'y': 184
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 184
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 272
+ 'y': 184
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 224
+ 'y': 248
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 240
+ 'y': 248
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 248
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 272
+ 'y': 248
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 280
+ 'y': 56
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 280
+ 'y': 72
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 408
+ 'y': 104
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 424
+ 'y': 104
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 440
+ 'y': 104
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 160
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 352
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 352
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: b336d91c-2876-4686-b8b4-901045a86ac7
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles:
+ - depth: -6000
+ tiles:
+ - x: 64
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 13
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': -16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': -32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': -32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': -32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': -32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': -16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 10
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 10
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 12
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 13
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': -16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 3
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 11
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 2
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 2
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 13
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 13
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 13
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ extends:
+ cgroup: Solid
+ hidden: false
+ cache: true
+ - depth: -7000
+ tiles:
+ - x: 96
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 16
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 26
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 5
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 5
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 5
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 5
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 30
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 304
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 320
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 336
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 368
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 384
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 464
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 480
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 496
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 512
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 528
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 544
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 576
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 7
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 560
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 15
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 7
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 224
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 240
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 256
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 28
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 28
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 272
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 28
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 288
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 29
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 448
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 432
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 400
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 416
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 20
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 352
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: ae954867-1039-43f6-bf6d-d8684cb58612
+ extends:
+ cgroup: Decor
+ hidden: false
+ cache: true
+ uid: 1cd7a8ef-febb-4174-ad90-42846504b06f
+ thumbnail: 42846504b06f
+ extends: {}
+ gridX: 8
+ gridY: 8
+ lastmod: 1712231777558
+ backgroundColor: '#000337'
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ value: 3
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: lives
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: nextLevel
+ value: Level_03
+ - lib: core
+ code: rooms.append
+ values:
+ roomName: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ name: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ eventKey: OnRoomStart
+ variables: []
+ type: room
+ simulate: true
+ isUi: ! ''
+ follow: -1
+ behaviors: []
+ restrictCamera: false
+ restrictMaxX: 288
+ restrictMinX: -48
+ restrictMinY: -32
+ restrictMaxY: 168
+ extendTypes: ''
+ properties:
+ - nextLevel
+ - lives
+ - name: Level_03
+ onstep: ''
+ ondraw: ''
+ width: 240
+ height: 160
+ backgrounds: []
+ copies:
+ - x: 112
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c701a029-af09-4fcf-9712-0fcdaa3581be
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 248
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 264
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 280
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 296
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 312
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 152
+ 'y': 328
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 168
+ 'y': 328
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 184
+ 'y': 328
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 200
+ 'y': 328
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 216
+ 'y': 328
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 336
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 344
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 232
+ 'y': 344
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 360
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 232
+ 'y': 360
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 181
+ 'y': 362
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 3b6057ca-f175-4449-ac24-1c5630e0af7c
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 205
+ 'y': 376
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 152
+ 'y': 376
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 376
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 232
+ 'y': 376
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 216
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 168
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 184
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 200
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 392
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 393
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 408
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 424
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 88
+ 'y': 440
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 440
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 456
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 464
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 36c82b3e-f5c1-4fff-b24a-417fa9509c96
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 472
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 472
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 488
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 488
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 72
+ 'y': 504
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 136
+ 'y': 504
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 0bc3c56b-3bf9-4912-9e3f-c27654c1b910
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 528
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 469b9eef-6117-43a5-87d3-7151da7eba06
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 115
+ 'y': 574
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 9fc1fec8-50bb-49e6-8fb4-c10ad589bf0b
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 588
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 118
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 110
+ 'y': 597
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 105
+ 'y': 601
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 118
+ 'y': 604
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104
+ 'y': 614
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 614
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 4e473462-8009-438e-9f53-1032e3a335cf
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: c701a029-af09-4fcf-9712-0fcdaa3581be
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 113
+ 'y': 636
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 58
+ 'y': 643
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 122
+ 'y': 648
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 90
+ 'y': 659
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 5e40076f-8a61-4dfd-a517-a6c943ab9991
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 112
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 7fea051e-83e5-4e54-848b-ab3ca861e5cb
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 74
+ 'y': 680
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 154
+ 'y': 682
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 173dfb94-5133-4bbc-9e7d-6ed8c9fef330
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 96
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: b336d91c-2876-4686-b8b4-901045a86ac7
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles:
+ - depth: -6000
+ tiles:
+ - x: 48
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 288
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 400
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 528
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 544
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 560
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 528
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 544
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 560
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 464
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 336
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 10
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 10
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 16
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 3
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 12
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 12
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 19
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 11
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 2
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 2
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 432
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 3
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 336
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 3
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 304
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 688
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 1
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 32
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 14
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 8
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ extends:
+ cgroup: Solid
+ hidden: false
+ cache: true
+ - depth: -7000
+ tiles:
+ - x: 208
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 432
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 480
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 560
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 544
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 24
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 592
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 560
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 544
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 528
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 496
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 464
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 464
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 400
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 416
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 400
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 528
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 176
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 192
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 208
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 480
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 432
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 18
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 288
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 304
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 336
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 272
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 288
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 336
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 352
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 368
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 240
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 208
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 32
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 16
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 176
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 80
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 304
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 25
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 608
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 160
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 672
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 144
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 128
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 80
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 48
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 656
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 64
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 17
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 144
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 96
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 22
+ rotation: 0
+ texture: 4f8a6124-427b-410b-a467-ac42afec3644
+ - x: 112
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: ae954867-1039-43f6-bf6d-d8684cb58612
+ - x: 112
+ 'y': 624
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: ae954867-1039-43f6-bf6d-d8684cb58612
+ extends:
+ cgroup: Decor
+ hidden: false
+ cache: true
+ uid: ae6bb30c-9ad9-4390-b632-127493eb58cf
+ thumbnail: 127493eb58cf
+ extends: {}
+ gridX: 8
+ gridY: 8
+ backgroundColor: '#000337'
+ lastmod: 1712231802486
+ events:
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: nextLevel
+ value: MainMenu
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: lives
+ value: 3
+ - lib: core
+ code: rooms.append
+ values:
+ roomName: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ name: ee8b4583-614a-44d6-aacc-6569f49f6b80
+ eventKey: OnRoomStart
+ variables: []
+ - lib: core
+ arguments: {}
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core
+ code: sounds.stop
+ values:
+ name: d470f423-a1ed-4189-b117-8ebf7b4eac62
+ - lib: core.console
+ code: log
+ values:
+ any: >-
+ This demo is a work in progress, stay tuned for more
+ levels :)
+ body2: []
+ condition:
+ lib: core
+ code: templates.exists
+ values:
+ template: c40336ea-2846-45d5-97ba-d51852d3f6c5
+ eventKey: OnRoomEnd
+ variables: []
+ type: room
+ simulate: true
+ isUi: ! ''
+ follow: -1
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - nextLevel
+ - lives
+ - name: MainMenu
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ width: 240
+ height: 160
+ backgrounds: []
+ copies:
+ - x: 120
+ 'y': 116
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 38f86691-8fcc-44e4-a201-8479ca64935f
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 32
+ 'y': 112
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: ff0f561c-a96c-4205-a083-01d2a60ebb67
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 120
+ 'y': 152
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: qTPfqLqLnhK92f
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ customAnchor:
+ x: 0.5
+ 'y': 0.5
+ customText: A CT.JS DEMO BY COMIGO GAMES
+ tiles:
+ - depth: -10
+ tiles:
+ - x: 121
+ 'y': 48
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ frame: 0
+ rotation: 0
+ texture: dc7b9662-c746-403c-9f3e-67425fd480a3
+ extends: {}
+ hidden: false
+ cache: true
+ uid: eed8a427-1c70-425d-b633-7b6ea00c7b7c
+ thumbnail: 7b6ea00c7b7c
+ extends: {}
+ gridX: 8
+ gridY: 8
+ backgroundColor: '#000337'
+ lastmod: 1717104410863
+ events: []
+ type: room
+ simulate: true
+ isUi: ! ''
+ follow: -1
+ behaviors: []
+ extendTypes: ''
+ properties: []
+globalVars: []
diff --git a/src/examples/LabRaid shooter (Catnip)/fonts/fmG551jw6zW6mzt.ttf b/src/examples/LabRaid shooter (Catnip)/fonts/fmG551jw6zW6mzt.ttf
new file mode 100644
index 000000000..cff17c428
Binary files /dev/null and b/src/examples/LabRaid shooter (Catnip)/fonts/fmG551jw6zW6mzt.ttf differ
diff --git a/src/examples/DungeonCrawler_coffee/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png b/src/examples/LabRaid shooter (Catnip)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
rename to src/examples/LabRaid shooter (Catnip)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png b/src/examples/LabRaid shooter (Catnip)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
rename to src/examples/LabRaid shooter (Catnip)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png b/src/examples/LabRaid shooter (Catnip)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
rename to src/examples/LabRaid shooter (Catnip)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png b/src/examples/LabRaid shooter (Catnip)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
rename to src/examples/LabRaid shooter (Catnip)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png b/src/examples/LabRaid shooter (Catnip)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
rename to src/examples/LabRaid shooter (Catnip)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png b/src/examples/LabRaid shooter (Catnip)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
rename to src/examples/LabRaid shooter (Catnip)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png b/src/examples/LabRaid shooter (Catnip)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
rename to src/examples/LabRaid shooter (Catnip)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png b/src/examples/LabRaid shooter (Catnip)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
rename to src/examples/LabRaid shooter (Catnip)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i4f8a6124-427b-410b-a467-ac42afec3644.png b/src/examples/LabRaid shooter (Catnip)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
rename to src/examples/LabRaid shooter (Catnip)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i6c23e805-94b6-4e3a-8606-682c36960233.png b/src/examples/LabRaid shooter (Catnip)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
rename to src/examples/LabRaid shooter (Catnip)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png b/src/examples/LabRaid shooter (Catnip)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
rename to src/examples/LabRaid shooter (Catnip)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png b/src/examples/LabRaid shooter (Catnip)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
rename to src/examples/LabRaid shooter (Catnip)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png b/src/examples/LabRaid shooter (Catnip)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
rename to src/examples/LabRaid shooter (Catnip)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i96121d6f-6483-48f8-841b-b307befc7d42.png b/src/examples/LabRaid shooter (Catnip)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
rename to src/examples/LabRaid shooter (Catnip)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png b/src/examples/LabRaid shooter (Catnip)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
rename to src/examples/LabRaid shooter (Catnip)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
diff --git a/src/examples/DungeonCrawler_coffee/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png b/src/examples/LabRaid shooter (Catnip)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
rename to src/examples/LabRaid shooter (Catnip)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png b/src/examples/LabRaid shooter (Catnip)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
rename to src/examples/LabRaid shooter (Catnip)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ia5745819-e057-4d67-a114-b64249a0f701.png b/src/examples/LabRaid shooter (Catnip)/img/ia5745819-e057-4d67-a114-b64249a0f701.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ia5745819-e057-4d67-a114-b64249a0f701.png
rename to src/examples/LabRaid shooter (Catnip)/img/ia5745819-e057-4d67-a114-b64249a0f701.png
diff --git a/src/examples/DungeonCrawler_coffee/img/iae954867-1039-43f6-bf6d-d8684cb58612.png b/src/examples/LabRaid shooter (Catnip)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
rename to src/examples/LabRaid shooter (Catnip)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png b/src/examples/LabRaid shooter (Catnip)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
rename to src/examples/LabRaid shooter (Catnip)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png b/src/examples/LabRaid shooter (Catnip)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
rename to src/examples/LabRaid shooter (Catnip)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
diff --git a/src/examples/DungeonCrawler_coffee/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png b/src/examples/LabRaid shooter (Catnip)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
rename to src/examples/LabRaid shooter (Catnip)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
diff --git a/src/examples/DungeonCrawler_coffee/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png b/src/examples/LabRaid shooter (Catnip)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
rename to src/examples/LabRaid shooter (Catnip)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
diff --git a/src/examples/DungeonCrawler_coffee/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png b/src/examples/LabRaid shooter (Catnip)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
rename to src/examples/LabRaid shooter (Catnip)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png b/src/examples/LabRaid shooter (Catnip)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
rename to src/examples/LabRaid shooter (Catnip)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
diff --git a/src/examples/DungeonCrawler_coffee/img/ifee922c6-864c-448f-a2df-937389a42005.png b/src/examples/LabRaid shooter (Catnip)/img/ifee922c6-864c-448f-a2df-937389a42005.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/ifee922c6-864c-448f-a2df-937389a42005.png
rename to src/examples/LabRaid shooter (Catnip)/img/ifee922c6-864c-448f-a2df-937389a42005.png
diff --git a/src/examples/LabRaid shooter (Catnip)/img/splash.png b/src/examples/LabRaid shooter (Catnip)/img/splash.png
new file mode 100644
index 000000000..0229e2ee1
Binary files /dev/null and b/src/examples/LabRaid shooter (Catnip)/img/splash.png differ
diff --git a/src/examples/DungeonCrawler_coffee/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav b/src/examples/LabRaid shooter (Catnip)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav b/src/examples/LabRaid shooter (Catnip)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav b/src/examples/LabRaid shooter (Catnip)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav b/src/examples/LabRaid shooter (Catnip)/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav b/src/examples/LabRaid shooter (Catnip)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav b/src/examples/LabRaid shooter (Catnip)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav b/src/examples/LabRaid shooter (Catnip)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg b/src/examples/LabRaid shooter (Catnip)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg
rename to src/examples/LabRaid shooter (Catnip)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg
diff --git a/src/examples/DungeonCrawler_coffee/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav b/src/examples/LabRaid shooter (Catnip)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav
diff --git a/src/examples/DungeonCrawler_coffee/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav b/src/examples/LabRaid shooter (Catnip)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav
rename to src/examples/LabRaid shooter (Catnip)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav
diff --git a/src/examples/DungeonCrawler_coffee.ict b/src/examples/LabRaid shooter (CoffeeScript).ict
similarity index 99%
rename from src/examples/DungeonCrawler_coffee.ict
rename to src/examples/LabRaid shooter (CoffeeScript).ict
index c21aa6747..ed199b1fd 100644
--- a/src/examples/DungeonCrawler_coffee.ict
+++ b/src/examples/LabRaid shooter (CoffeeScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
notes: /* empty */
libs:
keyboard: {}
@@ -67,7 +67,7 @@ settings:
linux: true
mac: true
functionWrap: true
- codeModifier: none
+ codeModifier: minify
bundleAssetTree: false
bundleAssetTypes:
texture: true
@@ -78,7 +78,10 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
autocloseDesktop: true
+ showErrors: true
+ errorsLink: ''
branding:
icon: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
accent: '#446adb'
@@ -162,6 +165,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Shoot
uid: 97baf84a-32d3-450c-a52e-25a770565520
lastmod: 1703052063333
@@ -213,6 +217,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Toggle
uid: aeec04ae-d50c-4c47-bcd9-89d8f90f736a
lastmod: 1703052063334
@@ -264,6 +271,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: SmallHit
uid: b7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab
lastmod: 1703052063334
@@ -315,6 +325,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Hit
uid: 0559d8e7-3e27-4c25-9e38-164cd25dc4e7
lastmod: 1703052063334
@@ -366,6 +379,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: InGameTheme
uid: d470f423-a1ed-4189-b117-8ebf7b4eac62
lastmod: 1703052063334
@@ -417,6 +433,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: SlimeExplosion
uid: fdd0ec77-ba8d-4999-adba-20ea72d6f5ad
lastmod: 1703052063334
@@ -468,6 +487,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Particle_Blue
untill: 0
grid:
@@ -967,6 +989,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Cat_Falling
untill: 0
grid:
@@ -1078,6 +1101,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Cat_Death
untill: 0
grid:
@@ -1153,6 +1177,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: CatDamage
uid: 1cc5a5e0-765c-4bba-a006-8b597802ace6
lastmod: 1703052063334
@@ -1204,6 +1229,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Cat_Damage
emitters:
- uid: 0e491f30-ae29-4653-8750-6cfc60976637
@@ -1347,6 +1375,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Bullet
depth: 0
texture: 29cd8366-37bd-4a4d-96a1-a2da4d674972
@@ -1394,6 +1425,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Bullet
untill: 0
grid:
@@ -1523,6 +1555,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Door_Base
untill: 0
grid:
@@ -1614,6 +1647,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: SpikeTrap
untill: 0
grid:
@@ -1679,6 +1713,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Medkit
depth: 0
texture: c61a44b6-1f4d-43c2-9356-7288658947a9
@@ -1712,6 +1747,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Medkit
untill: 0
grid:
@@ -1760,6 +1796,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Checkpoint
untill: 0
grid:
@@ -1837,6 +1874,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- type: folder
uid: r17c443PfF9fzt
colorClass: success
@@ -1884,6 +1924,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Crate
untill: 0
grid:
@@ -1959,6 +2000,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: HazardousTube_Debris
untill: 0
grid:
@@ -2015,6 +2057,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: HazardousTube
depth: 0
texture: 1f0fbe96-38aa-4db4-a011-c0cf34b91d00
@@ -2052,6 +2095,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: HazardousTube
untill: 0
grid:
@@ -2127,6 +2171,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Powerup
uid: d06c5cd6-41eb-42c0-9caa-3306e2558b19
lastmod: 1703052063334
@@ -2178,6 +2223,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- type: folder
uid: fCHHCjW6MGMTcN
colorClass: success
@@ -2229,6 +2277,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: StartButton
untill: 0
grid:
@@ -2364,6 +2413,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: UI_InGame
onstep: ''
onleave: ''
@@ -2417,6 +2467,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- name: Heart
untill: 0
grid:
@@ -4647,6 +4698,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_02
onstep: ''
ondraw: ''
@@ -9139,6 +9191,7 @@ assets:
restrictMinX: -48
restrictMinY: -32
restrictMaxY: 168
+ extendTypes: ''
- name: Level_03
onstep: ''
ondraw: ''
@@ -12584,6 +12637,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: MainMenu
oncreate: ''
onstep: ''
@@ -12655,3 +12709,5 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/DungeonCrawler_js/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
diff --git a/src/examples/DungeonCrawler_js/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
diff --git a/src/examples/DungeonCrawler_js/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
diff --git a/src/examples/DungeonCrawler_js/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
diff --git a/src/examples/DungeonCrawler_js/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
diff --git a/src/examples/DungeonCrawler_js/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
diff --git a/src/examples/DungeonCrawler_js/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
diff --git a/src/examples/DungeonCrawler_js/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
diff --git a/src/examples/DungeonCrawler_js/img/i4f8a6124-427b-410b-a467-ac42afec3644.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
diff --git a/src/examples/DungeonCrawler_js/img/i6c23e805-94b6-4e3a-8606-682c36960233.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
diff --git a/src/examples/DungeonCrawler_js/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
diff --git a/src/examples/DungeonCrawler_js/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
diff --git a/src/examples/DungeonCrawler_js/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
diff --git a/src/examples/DungeonCrawler_js/img/i96121d6f-6483-48f8-841b-b307befc7d42.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
diff --git a/src/examples/DungeonCrawler_js/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
diff --git a/src/examples/DungeonCrawler_js/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png b/src/examples/LabRaid shooter (CoffeeScript)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
diff --git a/src/examples/DungeonCrawler_js/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
diff --git a/src/examples/DungeonCrawler_js/img/ia5745819-e057-4d67-a114-b64249a0f701.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ia5745819-e057-4d67-a114-b64249a0f701.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ia5745819-e057-4d67-a114-b64249a0f701.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ia5745819-e057-4d67-a114-b64249a0f701.png
diff --git a/src/examples/DungeonCrawler_js/img/iae954867-1039-43f6-bf6d-d8684cb58612.png b/src/examples/LabRaid shooter (CoffeeScript)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
diff --git a/src/examples/DungeonCrawler_js/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
diff --git a/src/examples/DungeonCrawler_js/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
diff --git a/src/examples/DungeonCrawler_js/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png b/src/examples/LabRaid shooter (CoffeeScript)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
diff --git a/src/examples/DungeonCrawler_js/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png b/src/examples/LabRaid shooter (CoffeeScript)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
diff --git a/src/examples/DungeonCrawler_js/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png b/src/examples/LabRaid shooter (CoffeeScript)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
diff --git a/src/examples/DungeonCrawler_js/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
diff --git a/src/examples/DungeonCrawler_js/img/ifee922c6-864c-448f-a2df-937389a42005.png b/src/examples/LabRaid shooter (CoffeeScript)/img/ifee922c6-864c-448f-a2df-937389a42005.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/ifee922c6-864c-448f-a2df-937389a42005.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/ifee922c6-864c-448f-a2df-937389a42005.png
diff --git a/src/examples/DungeonCrawler_coffee/img/splash.png b/src/examples/LabRaid shooter (CoffeeScript)/img/splash.png
similarity index 100%
rename from src/examples/DungeonCrawler_coffee/img/splash.png
rename to src/examples/LabRaid shooter (CoffeeScript)/img/splash.png
diff --git a/src/examples/DungeonCrawler_js/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_wNBwz64f8DHbLd.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_wNBwz64f8DHbLd.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_1Ct4QLznRkB2tr.wav
diff --git a/src/examples/DungeonCrawler_js/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_2PPcw6P7K8P2FC.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_2PPcw6P7K8P2FC.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_D8LpLdtHq6qBQD.wav
diff --git a/src/examples/DungeonCrawler_js/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_1BTwnbLN25mDFq.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_1BTwnbLN25mDFq.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_H1P1QdpCz7f85g.wav
diff --git a/src/examples/DungeonCrawler_js/snd/s97baf84a-32d3-450c-a52e-25a770565520_rfjh95b487q4wc.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/s97baf84a-32d3-450c-a52e-25a770565520_rfjh95b487q4wc.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/s97baf84a-32d3-450c-a52e-25a770565520_Ddb6NGrPN3q2P8.wav
diff --git a/src/examples/DungeonCrawler_js/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_PH52pTQdzCdbLJ.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_PH52pTQdzCdbLJ.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_hjzRWWbDHm13mm.wav
diff --git a/src/examples/DungeonCrawler_js/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_2mM8wR5Wr414td.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_2mM8wR5Wr414td.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_c75548M8CqkwQ6.wav
diff --git a/src/examples/DungeonCrawler_js/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_wgQWk9wBmnzNTR.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_wgQWk9wBmnzNTR.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_46NcTjjpkHtPLH.wav
diff --git a/src/examples/DungeonCrawler_js/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_BR1NmzPmzQTDhp.ogg b/src/examples/LabRaid shooter (CoffeeScript)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_BR1NmzPmzQTDhp.ogg
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_wWNRrzgFwM2p2b.ogg
diff --git a/src/examples/DungeonCrawler_js/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_whLQ4tc5cFz59j.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_whLQ4tc5cFz59j.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_7FPj1Ttm8n6PBG.wav
diff --git a/src/examples/DungeonCrawler_js/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_CnfG6QJtdJ1QQ2.wav b/src/examples/LabRaid shooter (CoffeeScript)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav
similarity index 100%
rename from src/examples/DungeonCrawler_js/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_CnfG6QJtdJ1QQ2.wav
rename to src/examples/LabRaid shooter (CoffeeScript)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_DtgdP12dNcp3C8.wav
diff --git a/src/examples/DungeonCrawler_js.ict b/src/examples/LabRaid shooter (JavaScript).ict
similarity index 99%
rename from src/examples/DungeonCrawler_js.ict
rename to src/examples/LabRaid shooter (JavaScript).ict
index 11d1e445a..409a4515d 100644
--- a/src/examples/DungeonCrawler_js.ict
+++ b/src/examples/LabRaid shooter (JavaScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0-next-5
+ctjsVersion: 5.0.0
notes: /* empty */
libs:
keyboard: {}
@@ -77,6 +77,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: 4822a271-cc3c-4d88-b7a0-b2aa4cab0a96
accent: '#446adb'
@@ -163,6 +166,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: MainMenu
oncreate: ''
onstep: ''
@@ -234,6 +238,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: Toggle
uid: aeec04ae-d50c-4c47-bcd9-89d8f90f736a
lastmod: 1703055869943
@@ -1007,6 +1012,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Fall
uid: 8074a9ef-0215-4e02-a107-cb20d1fc5de9
lastmod: 1703055869944
@@ -1274,6 +1280,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Cat_Death
depth: 0
texture: 8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1
@@ -1303,6 +1310,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Bullet
depth: 0
texture: 29cd8366-37bd-4a4d-96a1-a2da4d674972
@@ -1350,6 +1358,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Bullet
untill: 0
grid:
@@ -1590,6 +1599,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Elevator
depth: 0
texture: 2637e46e-06b2-4ca0-b17d-4bbf6eca44b7
@@ -1629,6 +1639,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Checkpoint
depth: 0
texture: a42e0dff-69c9-46c3-8996-745aaa769698
@@ -1659,6 +1670,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Checkpoint
untill: 0
grid:
@@ -1719,6 +1731,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Door
untill: 0
grid:
@@ -1812,6 +1825,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Elevator
untill: 0
grid:
@@ -1940,6 +1954,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Tileset
untill: 0
grid:
@@ -2120,6 +2135,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: HazardousTube_Debris
depth: -6500
texture: 80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc
@@ -2149,6 +2165,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Crate_Debris
depth: -6500
texture: d25aebb8-d135-4b9c-b2b5-844298c35a62
@@ -2174,6 +2191,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Crate
depth: 0
texture: 31948760-8965-4768-ab1d-2b87d0b7fc3a
@@ -2215,6 +2233,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- lastmod: 1705122510044
type: texture
name: Goop
@@ -2262,6 +2281,7 @@ assets:
scrollSpeedX: 4
scrollSpeedY: 0
isUi: false
+ extendTypes: ''
- type: folder
uid: pLcG9412BdGjg1
colorClass: warning
@@ -4465,6 +4485,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_02
onstep: ''
ondraw: ''
@@ -8978,6 +8999,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_03
onstep: ''
ondraw: ''
@@ -12426,6 +12448,7 @@ assets:
isUi: ! ''
follow: -1
behaviors: []
+ extendTypes: ''
- type: folder
uid: hc9q3R4CHbrpw3
colorClass: accent1
@@ -12569,6 +12592,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: ByComigo
untill: 0
grid:
@@ -12650,6 +12674,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Crosshair
untill: 0
grid:
@@ -12801,6 +12826,7 @@ assets:
isUi: true
follow: -1
behaviors: []
+ extendTypes: ''
- type: template
baseClass: SpritedCounter
name: HeartCounter
@@ -12817,3 +12843,5 @@ assets:
behaviors: []
repeaterSettings:
defaultCount: 3
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png b/src/examples/LabRaid shooter (JavaScript)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png
new file mode 100644
index 000000000..04be1dbc1
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i14d3f53f-a868-4820-84cd-63234ab6e6b9.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png b/src/examples/LabRaid shooter (JavaScript)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png
new file mode 100644
index 000000000..f3a0faa10
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i1f0fbe96-38aa-4db4-a011-c0cf34b91d00.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png b/src/examples/LabRaid shooter (JavaScript)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png
new file mode 100644
index 000000000..5a5c977d4
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i2637e46e-06b2-4ca0-b17d-4bbf6eca44b7.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png b/src/examples/LabRaid shooter (JavaScript)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png
new file mode 100644
index 000000000..711f5cb29
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i29cd8366-37bd-4a4d-96a1-a2da4d674972.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png b/src/examples/LabRaid shooter (JavaScript)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png
new file mode 100644
index 000000000..eea5b4d67
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i31948760-8965-4768-ab1d-2b87d0b7fc3a.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png b/src/examples/LabRaid shooter (JavaScript)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png
new file mode 100644
index 000000000..9514d7559
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i3a7c7928-a731-4940-9854-17936b3c9a46.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png b/src/examples/LabRaid shooter (JavaScript)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png
new file mode 100644
index 000000000..e9c8d1a81
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i4733fb53-5e41-4cf8-b9a8-91ad700f2246.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png b/src/examples/LabRaid shooter (JavaScript)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png
new file mode 100644
index 000000000..bca61285e
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i4822a271-cc3c-4d88-b7a0-b2aa4cab0a96.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png b/src/examples/LabRaid shooter (JavaScript)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png
new file mode 100644
index 000000000..b4279571e
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i4f8a6124-427b-410b-a467-ac42afec3644.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png b/src/examples/LabRaid shooter (JavaScript)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png
new file mode 100644
index 000000000..8ed9e74bf
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i6c23e805-94b6-4e3a-8606-682c36960233.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png b/src/examples/LabRaid shooter (JavaScript)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png
new file mode 100644
index 000000000..a4e07bff6
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i80bab2bc-c12d-4ce6-8d6f-033e0d5d3bdc.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png b/src/examples/LabRaid shooter (JavaScript)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png
new file mode 100644
index 000000000..9658656d9
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i8a6a1aa5-60f6-4f9a-9c54-7e5e7641bda1.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png b/src/examples/LabRaid shooter (JavaScript)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png
new file mode 100644
index 000000000..478ffdd38
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i8bef1226-7fb8-4bf5-8120-ac6e53d81ea5.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png b/src/examples/LabRaid shooter (JavaScript)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png
new file mode 100644
index 000000000..2be3b66f7
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i96121d6f-6483-48f8-841b-b307befc7d42.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png b/src/examples/LabRaid shooter (JavaScript)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png
new file mode 100644
index 000000000..236be909c
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i9a1f5e9c-16a8-4900-8991-fab3f42fa1fd.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png b/src/examples/LabRaid shooter (JavaScript)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png
new file mode 100644
index 000000000..7fe5fef1d
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/i9b967bf5-9694-43b6-9812-0f974b2b73c9.png differ
diff --git a/src/examples/DungeonCrawler_js/img/iFTgzDpQ8B22z51.png b/src/examples/LabRaid shooter (JavaScript)/img/iFTgzDpQ8B22z51.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/iFTgzDpQ8B22z51.png
rename to src/examples/LabRaid shooter (JavaScript)/img/iFTgzDpQ8B22z51.png
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png b/src/examples/LabRaid shooter (JavaScript)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png
new file mode 100644
index 000000000..91abc3c96
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ia42e0dff-69c9-46c3-8996-745aaa769698.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ia5745819-e057-4d67-a114-b64249a0f701.png b/src/examples/LabRaid shooter (JavaScript)/img/ia5745819-e057-4d67-a114-b64249a0f701.png
new file mode 100644
index 000000000..46c88fdcb
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ia5745819-e057-4d67-a114-b64249a0f701.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png b/src/examples/LabRaid shooter (JavaScript)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png
new file mode 100644
index 000000000..36ba0bf96
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/iae954867-1039-43f6-bf6d-d8684cb58612.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png b/src/examples/LabRaid shooter (JavaScript)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png
new file mode 100644
index 000000000..acba44eff
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ibdf46b11-ef42-4c45-af01-a0b918ee9587.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png b/src/examples/LabRaid shooter (JavaScript)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png
new file mode 100644
index 000000000..8b1539772
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ic61a44b6-1f4d-43c2-9356-7288658947a9.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png b/src/examples/LabRaid shooter (JavaScript)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png
new file mode 100644
index 000000000..38d8550fe
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/id25aebb8-d135-4b9c-b2b5-844298c35a62.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png b/src/examples/LabRaid shooter (JavaScript)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png
new file mode 100644
index 000000000..1603eea30
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/id9107804-cf88-4bd9-913c-c9ac1a4d5f05.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png b/src/examples/LabRaid shooter (JavaScript)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png
new file mode 100644
index 000000000..23a7eacb3
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/idc7b9662-c746-403c-9f3e-67425fd480a3.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png b/src/examples/LabRaid shooter (JavaScript)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png
new file mode 100644
index 000000000..ccfe94cf9
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ife8cc3f9-d37b-402d-aa5a-18cf1a55d1ab.png differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/img/ifee922c6-864c-448f-a2df-937389a42005.png b/src/examples/LabRaid shooter (JavaScript)/img/ifee922c6-864c-448f-a2df-937389a42005.png
new file mode 100644
index 000000000..ca55cfd57
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/img/ifee922c6-864c-448f-a2df-937389a42005.png differ
diff --git a/src/examples/DungeonCrawler_js/img/splash.png b/src/examples/LabRaid shooter (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/DungeonCrawler_js/img/splash.png
rename to src/examples/LabRaid shooter (JavaScript)/img/splash.png
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_wNBwz64f8DHbLd.wav b/src/examples/LabRaid shooter (JavaScript)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_wNBwz64f8DHbLd.wav
new file mode 100644
index 000000000..24d6f82e4
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/s0559d8e7-3e27-4c25-9e38-164cd25dc4e7_wNBwz64f8DHbLd.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_2PPcw6P7K8P2FC.wav b/src/examples/LabRaid shooter (JavaScript)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_2PPcw6P7K8P2FC.wav
new file mode 100644
index 000000000..eb4d89807
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/s1cc5a5e0-765c-4bba-a006-8b597802ace6_2PPcw6P7K8P2FC.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_1BTwnbLN25mDFq.wav b/src/examples/LabRaid shooter (JavaScript)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_1BTwnbLN25mDFq.wav
new file mode 100644
index 000000000..e2a29b905
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/s8074a9ef-0215-4e02-a107-cb20d1fc5de9_1BTwnbLN25mDFq.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/s97baf84a-32d3-450c-a52e-25a770565520_rfjh95b487q4wc.wav b/src/examples/LabRaid shooter (JavaScript)/snd/s97baf84a-32d3-450c-a52e-25a770565520_rfjh95b487q4wc.wav
new file mode 100644
index 000000000..6cf2ee53d
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/s97baf84a-32d3-450c-a52e-25a770565520_rfjh95b487q4wc.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_PH52pTQdzCdbLJ.wav b/src/examples/LabRaid shooter (JavaScript)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_PH52pTQdzCdbLJ.wav
new file mode 100644
index 000000000..7e80e064a
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/saeec04ae-d50c-4c47-bcd9-89d8f90f736a_PH52pTQdzCdbLJ.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_2mM8wR5Wr414td.wav b/src/examples/LabRaid shooter (JavaScript)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_2mM8wR5Wr414td.wav
new file mode 100644
index 000000000..13b9e3f4a
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/sb7ed2998-7a2b-4b0e-8766-ac1e0f7da9ab_2mM8wR5Wr414td.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_wgQWk9wBmnzNTR.wav b/src/examples/LabRaid shooter (JavaScript)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_wgQWk9wBmnzNTR.wav
new file mode 100644
index 000000000..a66108421
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/sd06c5cd6-41eb-42c0-9caa-3306e2558b19_wgQWk9wBmnzNTR.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_BR1NmzPmzQTDhp.ogg b/src/examples/LabRaid shooter (JavaScript)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_BR1NmzPmzQTDhp.ogg
new file mode 100644
index 000000000..9ea3ce76f
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/sd470f423-a1ed-4189-b117-8ebf7b4eac62_BR1NmzPmzQTDhp.ogg differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_whLQ4tc5cFz59j.wav b/src/examples/LabRaid shooter (JavaScript)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_whLQ4tc5cFz59j.wav
new file mode 100644
index 000000000..faa955291
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/sfbe42ee3-6fe6-43ac-a99c-09da748ddc46_whLQ4tc5cFz59j.wav differ
diff --git a/src/examples/LabRaid shooter (JavaScript)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_CnfG6QJtdJ1QQ2.wav b/src/examples/LabRaid shooter (JavaScript)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_CnfG6QJtdJ1QQ2.wav
new file mode 100644
index 000000000..f7b2fa298
Binary files /dev/null and b/src/examples/LabRaid shooter (JavaScript)/snd/sfdd0ec77-ba8d-4999-adba-20ea72d6f5ad_CnfG6QJtdJ1QQ2.wav differ
diff --git a/src/examples/memocats.ict b/src/examples/Memocats (JavaScript).ict
similarity index 98%
rename from src/examples/memocats.ict
rename to src/examples/Memocats (JavaScript).ict
index eef3c1e41..0befad7ca 100644
--- a/src/examples/memocats.ict
+++ b/src/examples/Memocats (JavaScript).ict
@@ -25,6 +25,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: -1
accent: '#446adb'
@@ -48,7 +51,7 @@ settings:
versionPostfix: ''
fps: 30
startroom: 3827e721-5331-49b2-a37a-f868e15cae0d
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
scripts: []
actions: []
texturetick: 2
@@ -204,6 +207,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Room1
ondraw: ''
onleave: ''
@@ -402,6 +406,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Room2
ondraw: ''
onleave: ''
@@ -647,6 +652,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Room3
ondraw: ''
onleave: ''
@@ -936,6 +942,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Match
uid: 96dbce18-a291-41b6-9707-ff2dc2bb5b77
lastmod: 1703583919798
@@ -987,6 +994,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Swoosh
uid: 1385f5fc-28ce-4b52-b668-12e3c75ff3b8
lastmod: 1703583919798
@@ -1038,6 +1048,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Rollback
uid: af72e78c-ff23-4016-8179-ca7b5f66d11e
lastmod: 1703583919799
@@ -1089,6 +1102,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Paper
uid: efe16fbe-0baf-40af-be62-5138085a2682
lastmod: 1703583919799
@@ -1140,6 +1156,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Victory
uid: a1a8f820-66b3-4849-9a22-a81b31e32605
lastmod: 1703583919799
@@ -1191,6 +1210,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: NewLevel
uid: 4adfa410-6689-4594-8c9e-d8cde988894d
lastmod: 1703583919800
@@ -1242,6 +1264,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Memocats
untill: 0
grid:
@@ -1296,3 +1321,4 @@ assets:
padding: 1
tiled: true
type: texture
+globalVars: []
diff --git a/src/examples/memocats/img/i2.png b/src/examples/Memocats (JavaScript)/img/i2.png
similarity index 100%
rename from src/examples/memocats/img/i2.png
rename to src/examples/Memocats (JavaScript)/img/i2.png
diff --git a/src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png b/src/examples/Memocats (JavaScript)/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png
similarity index 100%
rename from src/examples/memocats/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png
rename to src/examples/Memocats (JavaScript)/img/i366c01b5-4ed5-4ca5-bf01-8731a04be2c4.png
diff --git a/src/examples/memocats/img/splash.png b/src/examples/Memocats (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/memocats/img/splash.png
rename to src/examples/Memocats (JavaScript)/img/splash.png
diff --git a/src/examples/memocats/snd/s1385f5fc-28ce-4b52-b668-12e3c75ff3b8_gtKFQkGJT88K26.wav b/src/examples/Memocats (JavaScript)/snd/s1385f5fc-28ce-4b52-b668-12e3c75ff3b8_gtKFQkGJT88K26.wav
similarity index 100%
rename from src/examples/memocats/snd/s1385f5fc-28ce-4b52-b668-12e3c75ff3b8_gtKFQkGJT88K26.wav
rename to src/examples/Memocats (JavaScript)/snd/s1385f5fc-28ce-4b52-b668-12e3c75ff3b8_gtKFQkGJT88K26.wav
diff --git a/src/examples/memocats/snd/s4adfa410-6689-4594-8c9e-d8cde988894d_c5r48jJb4MKLz5.wav b/src/examples/Memocats (JavaScript)/snd/s4adfa410-6689-4594-8c9e-d8cde988894d_c5r48jJb4MKLz5.wav
similarity index 100%
rename from src/examples/memocats/snd/s4adfa410-6689-4594-8c9e-d8cde988894d_c5r48jJb4MKLz5.wav
rename to src/examples/Memocats (JavaScript)/snd/s4adfa410-6689-4594-8c9e-d8cde988894d_c5r48jJb4MKLz5.wav
diff --git a/src/examples/memocats/snd/s96dbce18-a291-41b6-9707-ff2dc2bb5b77_gD9g7jGq1drQwb.wav b/src/examples/Memocats (JavaScript)/snd/s96dbce18-a291-41b6-9707-ff2dc2bb5b77_gD9g7jGq1drQwb.wav
similarity index 100%
rename from src/examples/memocats/snd/s96dbce18-a291-41b6-9707-ff2dc2bb5b77_gD9g7jGq1drQwb.wav
rename to src/examples/Memocats (JavaScript)/snd/s96dbce18-a291-41b6-9707-ff2dc2bb5b77_gD9g7jGq1drQwb.wav
diff --git a/src/examples/memocats/snd/sa1a8f820-66b3-4849-9a22-a81b31e32605_CbwTqjwc6drfT1.wav b/src/examples/Memocats (JavaScript)/snd/sa1a8f820-66b3-4849-9a22-a81b31e32605_CbwTqjwc6drfT1.wav
similarity index 100%
rename from src/examples/memocats/snd/sa1a8f820-66b3-4849-9a22-a81b31e32605_CbwTqjwc6drfT1.wav
rename to src/examples/Memocats (JavaScript)/snd/sa1a8f820-66b3-4849-9a22-a81b31e32605_CbwTqjwc6drfT1.wav
diff --git a/src/examples/memocats/snd/saf72e78c-ff23-4016-8179-ca7b5f66d11e_T6NwtGjg9ddL8W.wav b/src/examples/Memocats (JavaScript)/snd/saf72e78c-ff23-4016-8179-ca7b5f66d11e_T6NwtGjg9ddL8W.wav
similarity index 100%
rename from src/examples/memocats/snd/saf72e78c-ff23-4016-8179-ca7b5f66d11e_T6NwtGjg9ddL8W.wav
rename to src/examples/Memocats (JavaScript)/snd/saf72e78c-ff23-4016-8179-ca7b5f66d11e_T6NwtGjg9ddL8W.wav
diff --git a/src/examples/memocats/snd/sefe16fbe-0baf-40af-be62-5138085a2682_WWg1J1WCN3qtqw.wav b/src/examples/Memocats (JavaScript)/snd/sefe16fbe-0baf-40af-be62-5138085a2682_WWg1J1WCN3qtqw.wav
similarity index 100%
rename from src/examples/memocats/snd/sefe16fbe-0baf-40af-be62-5138085a2682_WWg1J1WCN3qtqw.wav
rename to src/examples/Memocats (JavaScript)/snd/sefe16fbe-0baf-40af-be62-5138085a2682_WWg1J1WCN3qtqw.wav
diff --git a/src/examples/MoveBlocks.ict b/src/examples/MoveBlocks (JavaScript).ict
similarity index 99%
rename from src/examples/MoveBlocks.ict
rename to src/examples/MoveBlocks (JavaScript).ict
index 654d65c3e..cf0ac0e61 100644
--- a/src/examples/MoveBlocks.ict
+++ b/src/examples/MoveBlocks (JavaScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
notes: |-
/*
Things to note here:
@@ -60,6 +60,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: 25177c05-61f8-491f-be4f-c82bc90ed58c
accent: '#446adb'
@@ -117,6 +120,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_H2
depth: 0
texture: 5084d2e9-a66e-4e22-9828-ee936473cbfc
@@ -142,6 +146,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_H3
depth: 0
texture: 614ef931-af6d-4da3-8147-6fb3c0457dac
@@ -167,6 +172,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_H4
depth: 0
texture: fe8ec368-af9d-4351-917e-b0527c7470c4
@@ -192,6 +198,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_V2
depth: 0
texture: 84deaf6c-1e30-46ab-9770-ad7f20c54158
@@ -218,6 +225,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_V3
depth: 0
texture: 7e9843af-2842-414b-9063-14c08f547c6b
@@ -244,6 +252,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Pipe_V4
depth: 0
texture: 2f19f39b-25bb-43cd-ab03-108bd9418695
@@ -270,6 +279,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: KeyTile
depth: 0
texture: 25177c05-61f8-491f-be4f-c82bc90ed58c
@@ -295,6 +305,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: PuzzleBlocks
oncreate: ''
onstep: ''
@@ -2081,6 +2092,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: PuzzleBlocks_Simple
oncreate: ''
onstep: ''
@@ -3768,6 +3780,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Wood_Start
uid: 42e768ce-6c19-4c34-9f14-11e257ecff18
lastmod: 1703584454693
@@ -3819,6 +3832,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Wood_End
uid: 55aa6dac-1071-4725-bdc8-b68d98ac72bf
lastmod: 1703584454693
@@ -3870,6 +3886,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Success
uid: 2e225de2-b896-4a53-a302-4d2b7ad26dee
lastmod: 1703584454693
@@ -3921,6 +3940,9 @@ assets:
max: 1
- min: -1
max: 1
+ panning:
+ refDistance: 0.5
+ rolloffFactor: 1
- name: Pipe_H2
untill: 0
grid:
@@ -4290,3 +4312,5 @@ assets:
readableName: Users can move this tile
lastmod: 1703589268060
uid: PBq9qHtpB2z6N2
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/MoveBlocks/img/i028aa481-64ef-4b75-85b8-2f9c88eecf4b.png b/src/examples/MoveBlocks (JavaScript)/img/i028aa481-64ef-4b75-85b8-2f9c88eecf4b.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i028aa481-64ef-4b75-85b8-2f9c88eecf4b.png
rename to src/examples/MoveBlocks (JavaScript)/img/i028aa481-64ef-4b75-85b8-2f9c88eecf4b.png
diff --git a/src/examples/MoveBlocks/img/i04dbb554-54cd-439a-8d17-4d06366151dc.png b/src/examples/MoveBlocks (JavaScript)/img/i04dbb554-54cd-439a-8d17-4d06366151dc.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i04dbb554-54cd-439a-8d17-4d06366151dc.png
rename to src/examples/MoveBlocks (JavaScript)/img/i04dbb554-54cd-439a-8d17-4d06366151dc.png
diff --git a/src/examples/MoveBlocks/img/i25177c05-61f8-491f-be4f-c82bc90ed58c.png b/src/examples/MoveBlocks (JavaScript)/img/i25177c05-61f8-491f-be4f-c82bc90ed58c.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i25177c05-61f8-491f-be4f-c82bc90ed58c.png
rename to src/examples/MoveBlocks (JavaScript)/img/i25177c05-61f8-491f-be4f-c82bc90ed58c.png
diff --git a/src/examples/MoveBlocks/img/i2f19f39b-25bb-43cd-ab03-108bd9418695.png b/src/examples/MoveBlocks (JavaScript)/img/i2f19f39b-25bb-43cd-ab03-108bd9418695.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i2f19f39b-25bb-43cd-ab03-108bd9418695.png
rename to src/examples/MoveBlocks (JavaScript)/img/i2f19f39b-25bb-43cd-ab03-108bd9418695.png
diff --git a/src/examples/MoveBlocks/img/i5084d2e9-a66e-4e22-9828-ee936473cbfc.png b/src/examples/MoveBlocks (JavaScript)/img/i5084d2e9-a66e-4e22-9828-ee936473cbfc.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i5084d2e9-a66e-4e22-9828-ee936473cbfc.png
rename to src/examples/MoveBlocks (JavaScript)/img/i5084d2e9-a66e-4e22-9828-ee936473cbfc.png
diff --git a/src/examples/MoveBlocks/img/i614ef931-af6d-4da3-8147-6fb3c0457dac.png b/src/examples/MoveBlocks (JavaScript)/img/i614ef931-af6d-4da3-8147-6fb3c0457dac.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i614ef931-af6d-4da3-8147-6fb3c0457dac.png
rename to src/examples/MoveBlocks (JavaScript)/img/i614ef931-af6d-4da3-8147-6fb3c0457dac.png
diff --git a/src/examples/MoveBlocks/img/i7e9843af-2842-414b-9063-14c08f547c6b.png b/src/examples/MoveBlocks (JavaScript)/img/i7e9843af-2842-414b-9063-14c08f547c6b.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i7e9843af-2842-414b-9063-14c08f547c6b.png
rename to src/examples/MoveBlocks (JavaScript)/img/i7e9843af-2842-414b-9063-14c08f547c6b.png
diff --git a/src/examples/MoveBlocks/img/i84deaf6c-1e30-46ab-9770-ad7f20c54158.png b/src/examples/MoveBlocks (JavaScript)/img/i84deaf6c-1e30-46ab-9770-ad7f20c54158.png
similarity index 100%
rename from src/examples/MoveBlocks/img/i84deaf6c-1e30-46ab-9770-ad7f20c54158.png
rename to src/examples/MoveBlocks (JavaScript)/img/i84deaf6c-1e30-46ab-9770-ad7f20c54158.png
diff --git a/src/examples/MoveBlocks/img/ife8ec368-af9d-4351-917e-b0527c7470c4.png b/src/examples/MoveBlocks (JavaScript)/img/ife8ec368-af9d-4351-917e-b0527c7470c4.png
similarity index 100%
rename from src/examples/MoveBlocks/img/ife8ec368-af9d-4351-917e-b0527c7470c4.png
rename to src/examples/MoveBlocks (JavaScript)/img/ife8ec368-af9d-4351-917e-b0527c7470c4.png
diff --git a/src/examples/MoveBlocks (JavaScript)/img/splash.png b/src/examples/MoveBlocks (JavaScript)/img/splash.png
new file mode 100644
index 000000000..764810b30
Binary files /dev/null and b/src/examples/MoveBlocks (JavaScript)/img/splash.png differ
diff --git a/src/examples/MoveBlocks/snd/s2e225de2-b896-4a53-a302-4d2b7ad26dee_zkKbbw6Q7GFzN8.ogg b/src/examples/MoveBlocks (JavaScript)/snd/s2e225de2-b896-4a53-a302-4d2b7ad26dee_zkKbbw6Q7GFzN8.ogg
similarity index 100%
rename from src/examples/MoveBlocks/snd/s2e225de2-b896-4a53-a302-4d2b7ad26dee_zkKbbw6Q7GFzN8.ogg
rename to src/examples/MoveBlocks (JavaScript)/snd/s2e225de2-b896-4a53-a302-4d2b7ad26dee_zkKbbw6Q7GFzN8.ogg
diff --git a/src/examples/MoveBlocks/snd/s42e768ce-6c19-4c34-9f14-11e257ecff18_dRnkmLm7jhhkdD.ogg b/src/examples/MoveBlocks (JavaScript)/snd/s42e768ce-6c19-4c34-9f14-11e257ecff18_dRnkmLm7jhhkdD.ogg
similarity index 100%
rename from src/examples/MoveBlocks/snd/s42e768ce-6c19-4c34-9f14-11e257ecff18_dRnkmLm7jhhkdD.ogg
rename to src/examples/MoveBlocks (JavaScript)/snd/s42e768ce-6c19-4c34-9f14-11e257ecff18_dRnkmLm7jhhkdD.ogg
diff --git a/src/examples/MoveBlocks/snd/s55aa6dac-1071-4725-bdc8-b68d98ac72bf_QR14RKchw98Rdq.ogg b/src/examples/MoveBlocks (JavaScript)/snd/s55aa6dac-1071-4725-bdc8-b68d98ac72bf_QR14RKchw98Rdq.ogg
similarity index 100%
rename from src/examples/MoveBlocks/snd/s55aa6dac-1071-4725-bdc8-b68d98ac72bf_QR14RKchw98Rdq.ogg
rename to src/examples/MoveBlocks (JavaScript)/snd/s55aa6dac-1071-4725-bdc8-b68d98ac72bf_QR14RKchw98Rdq.ogg
diff --git a/src/examples/MoveBlocks/img/splash.png b/src/examples/MoveBlocks/img/splash.png
deleted file mode 100644
index 8069ccae6..000000000
Binary files a/src/examples/MoveBlocks/img/splash.png and /dev/null differ
diff --git a/src/examples/Platformer Tutorial (Catnip).ict b/src/examples/Platformer Tutorial (Catnip).ict
new file mode 100644
index 000000000..fbe27d037
--- /dev/null
+++ b/src/examples/Platformer Tutorial (Catnip).ict
@@ -0,0 +1,15017 @@
+ctjsVersion: 5.0.0
+backups: 3
+language: catnip
+notes: /* empty */
+libs:
+ place:
+ gridX: 1024
+ gridY: 1024
+ pointer: {}
+ keyboard: {}
+ keyboard.polyfill: {}
+ pointer.polyfill: {}
+ gamepad: {}
+ vkeys: {}
+startroom: CQkRWR6NLDJkJQ
+contentTypes: []
+actions:
+ - name: MoveRight
+ methods:
+ - code: keyboard.KeyD
+ - code: keyboard.ArrowRight
+ - name: MoveLeft
+ methods:
+ - code: keyboard.KeyA
+ - code: keyboard.ArrowLeft
+ - name: Jump
+ methods:
+ - code: keyboard.Space
+ - code: keyboard.KeyW
+ - code: keyboard.ArrowUp
+scripts: []
+assets:
+ - type: template
+ baseClass: AnimatedSprite
+ name: Robot
+ depth: 0
+ texture: t2K2LcwCJzd3cm
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: Max horizontal speed
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: movespeed
+ value: 240
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ If the A key or left arrow on a keyboard is down, then
+ move to left
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed:
+ lib: core.math
+ code: '*'
+ values:
+ b: -1
+ a:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: movespeed
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Set the walking animation and transform the robot to the
+ left
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: bm2RB5B1jmfRmM
+ - lib: core.appearance
+ code: play animation
+ values: {}
+ body2: []
+ condition:
+ lib: core.logic
+ code: is not
+ values:
+ a:
+ lib: core.appearance
+ code: get texture
+ values: {}
+ b: PlatformChar_Walk1
+ - lib: core.appearance
+ code: set scale xy
+ values:
+ x: -1
+ 'y': 1
+ body2:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ If the D key or right arrow on a keyboard is down,
+ then move to right
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: movespeed
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Set the walking animation and transform the robot to
+ the right
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: bm2RB5B1jmfRmM
+ - lib: core.appearance
+ code: play animation
+ values: {}
+ body2: []
+ condition:
+ lib: core.logic
+ code: is not
+ values:
+ a:
+ lib: core.appearance
+ code: get texture
+ values: {}
+ b: PlatformChar_Walk1
+ - lib: core.appearance
+ code: set scale xy
+ values:
+ x: 1
+ 'y': 1
+ body2:
+ - lib: core.misc
+ code: note
+ values:
+ note: Don't move horizontally if no input
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed: 0
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: t2K2LcwCJzd3cm
+ condition:
+ lib: core.actions
+ code: action down
+ values:
+ action: MoveRight
+ condition:
+ lib: core.actions
+ code: action down
+ values:
+ action: MoveLeft
+ - lib: core.misc
+ code: note
+ values:
+ note: If there is ground underneath the Robot…
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: …and the W key or the spacebar is down…
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: …then jump!
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: jumpSpeed
+ body2:
+ - lib: core.misc
+ code: note
+ values:
+ note: >-
+ Reset our vspeed. We don't want to be buried
+ underground!
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed: 0
+ condition:
+ lib: core.actions
+ code: action down
+ values:
+ action: Jump
+ body2:
+ - lib: core.misc
+ code: note
+ values:
+ note: 'If there is no ground, set jumping animation!'
+ - lib: core.appearance
+ code: set texture
+ values:
+ texture: ztf7H56K8BMgc1
+ condition:
+ lib: place
+ code: place.occupied
+ values:
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 1
+ cgroup: Solid
+ - lib: place
+ code: move template smart
+ values:
+ cgroup: Solid
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: jumpSpeed
+ value: -600
+ - lib: core.movement
+ code: set gravity
+ values:
+ gravity: 1800
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed: 0
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed: 0
+ - lib: core.camera
+ code: follow this
+ values: {}
+ - lib: core.camera
+ code: set borderX
+ values:
+ value: 450
+ - lib: core.camera
+ code: set borderY
+ values:
+ value: 200
+ - lib: core.objects
+ code: this write
+ values:
+ property: savedX
+ value:
+ lib: core.movement
+ code: x
+ values: {}
+ - lib: core.objects
+ code: this write
+ values:
+ property: savedY
+ value:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.appearance
+ code: set animation speed
+ values:
+ speed: 0.2
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.movement
+ code: set x
+ values:
+ pixels:
+ lib: core.objects
+ code: this read
+ values:
+ property: savedX
+ - lib: core.movement
+ code: set y
+ values:
+ pixels:
+ lib: core.objects
+ code: this read
+ values:
+ property: savedY
+ - lib: core.movement
+ code: set hspeed
+ values:
+ speed: 0
+ - lib: core.movement
+ code: set vspeed
+ values:
+ speed: 0
+ - lib: core.misc
+ code: note
+ values:
+ note: remove one life
+ - lib: core.objects
+ code: current room write
+ values:
+ property: lives
+ value:
+ lib: core.math
+ code: '-'
+ values:
+ b: 1
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: 'Restart a room: switch to the room of its own name'
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName:
+ lib: core.objects
+ code: room read
+ values:
+ property: name
+ body2: []
+ condition:
+ lib: core.math
+ code: <=
+ values:
+ b: 0
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ arguments:
+ group: Deadly
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1716785279458
+ uid: qW85fQJkj11N5d
+ behaviors: []
+ extendTypes: ''
+ properties:
+ - jumpSpeed
+ - movespeed
+ - type: folder
+ uid: R1PWq7f71zqBcr
+ colorClass: act
+ icon: help-circle
+ name: textures
+ lastmod: 1715782712403
+ entries:
+ - lastmod: 1715782643373
+ type: texture
+ name: PlatformChar_Idle
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 43
+ - 80
+ marginx: 0
+ marginy: 0
+ imgWidth: 86
+ imgHeight: 80
+ width: 86
+ height: 80
+ offx: 0
+ offy: 0
+ origname: it2K2LcwCJzd3cm.png
+ shape: rect
+ left: 24
+ right: 24
+ top: 69
+ bottom: 0
+ uid: t2K2LcwCJzd3cm
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformChar_Idle.png
+ - lastmod: 1715782635611
+ type: texture
+ name: PlatformChar_Jump
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 43
+ - 80
+ marginx: 0
+ marginy: 0
+ imgWidth: 86
+ imgHeight: 80
+ width: 86
+ height: 80
+ offx: 0
+ offy: 0
+ origname: iztf7H56K8BMgc1.png
+ shape: rect
+ left: 24
+ right: 24
+ top: 69
+ bottom: 0
+ uid: ztf7H56K8BMgc1
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformChar_Jump.png
+ - lastmod: 1715782537904
+ type: texture
+ name: PlatformPack_Tile05
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: imj4QGh34gGFBWL.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: mj4QGh34gGFBWL
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile05.png
+ - lastmod: 1715782665028
+ type: texture
+ name: PlatformPack_Item17
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 32
+ - 32
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: ic2J6GJwfQp29k1.png
+ shape: circle
+ left: 32
+ right: 32
+ top: 32
+ bottom: 32
+ uid: c2J6GJwfQp29k1
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Item17.png
+ r: 14
+ - lastmod: 1715782542374
+ type: texture
+ name: PlatformPack_Tile17
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: i22Dmcmw5TK5T2R.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: 22Dmcmw5TK5T2R
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile17.png
+ - lastmod: 1715782544509
+ type: texture
+ name: PlatformPack_Tile21
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iLJm1G1P26Lg8KM.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: LJm1G1P26Lg8KM
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile21.png
+ - lastmod: 1715782557841
+ type: texture
+ name: PlatformPack_Tile48
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iKRnn2227Njk987.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: KRnn2227Njk987
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile48.png
+ - lastmod: 1716411304328
+ type: texture
+ name: PlatformPack_Tile43
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: i9T7KPjpwQbtdcR.png
+ shape: rect
+ left: 0
+ right: 64
+ top: -30
+ bottom: 64
+ uid: 9T7KPjpwQbtdcR
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile43.png
+ - lastmod: 1715782550214
+ type: texture
+ name: PlatformPack_Tile39
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: ibgPnG9rr72JBtH.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: bgPnG9rr72JBtH
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile39.png
+ - lastmod: 1715782541205
+ type: texture
+ name: PlatformPack_Tile16
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iWmt5gDQTGdk7Mj.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: Wmt5gDQTGdk7Mj
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile16.png
+ - lastmod: 1715782657224
+ type: texture
+ name: PlatformPack_Item09
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 32
+ - 32
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iCGhQKzKpTGtD7K.png
+ shape: circle
+ left: 32
+ right: 32
+ top: 32
+ bottom: 32
+ uid: CGhQKzKpTGtD7K
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Item09.png
+ r: 15
+ - lastmod: 1715782638348
+ type: texture
+ name: PlatformChar_Walk1
+ untill: 2
+ grid:
+ - 2
+ - 1
+ axis:
+ - 43
+ - 80
+ marginx: 0
+ marginy: 0
+ imgWidth: 172
+ imgHeight: 80
+ width: 86
+ height: 80
+ offx: 0
+ offy: 0
+ origname: ibm2RB5B1jmfRmM.png
+ shape: rect
+ left: 24
+ right: 24
+ top: 69
+ bottom: 0
+ uid: bm2RB5B1jmfRmM
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformChar_Walk1_2x1@2.png
+ - lastmod: 1715782539809
+ type: texture
+ name: PlatformPack_Tile13
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iPTFNMgb6zrf3CM.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 64
+ uid: PTFNMgb6zrf3CM
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile13.png
+ - lastmod: 1716411297238
+ type: texture
+ name: PlatformPack_Tile31
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 64
+ imgHeight: 64
+ width: 64
+ height: 64
+ offx: 0
+ offy: 0
+ origname: iC47nfCQ6FwBhk7.png
+ shape: rect
+ left: 0
+ right: 64
+ top: 0
+ bottom: 41
+ uid: C47nfCQ6FwBhk7
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Simplified Platformer/PlatformPack_Tile31.png
+ - type: template
+ baseClass: AnimatedSprite
+ name: Rocks
+ depth: 0
+ texture: Wmt5gDQTGdk7Mj
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Solid
+ lastmod: 1715785402025
+ uid: FKDnpCfW4fr1CN
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Rocks_Platform
+ depth: 0
+ texture: PTFNMgb6zrf3CM
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Solid
+ lastmod: 1715783065142
+ uid: R7Q2Npb9h11nh8
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Rocks_Top
+ depth: 0
+ texture: C47nfCQ6FwBhk7
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Solid
+ lastmod: 1715783062510
+ uid: 8z7tL4n46cBB15
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1024
+ height: 576
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: Level_01
+ backgroundColor: '#D0F4F7'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 0
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: qW85fQJkj11N5d
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 768
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: NKcWd2dG3PGn2r
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1503.019170919492
+ 'y': 449.15606845007966
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DD9kCzd5Dp8zd5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716782999214
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: nextRoom
+ value: Level_02
+ arguments: {}
+ lib: core
+ variables: []
+ behaviors:
+ - HQGQpTGtMPzDJz
+ extendTypes: ''
+ uid: CQkRWR6NLDJkJQ
+ properties:
+ - nextRoom
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1024
+ height: 576
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: Level_02
+ backgroundColor: '#D0F4F7'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 768
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: qW85fQJkj11N5d
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: NKcWd2dG3PGn2r
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 704
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192.6328125
+ 'y': 91.84375
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DD9kCzd5Dp8zd5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -832
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -768
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -671.1806404362729
+ 'y': 288.5567836968942
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -607.8993904362729
+ 'y': 289.4005336968942
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640.3837654362729
+ 'y': 255.65053369689417
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 127.42873456372706
+ 'y': 92.3849086968942
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536.0693595637272
+ 'y': 95.7599086968942
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716783004562
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: nextRoom
+ value: Level_03
+ arguments: {}
+ lib: core
+ variables: []
+ behaviors:
+ - HQGQpTGtMPzDJz
+ extendTypes: ''
+ uid: 3c4jMHHqdjwKNR
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Water
+ depth: 0
+ texture: 22Dmcmw5TK5T2R
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Deadly
+ lastmod: 1715787270244
+ uid: M1MLbRQfmr3JTh
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Water_Top
+ depth: 0
+ texture: mj4QGh34gGFBWL
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Deadly
+ lastmod: 1715787273415
+ uid: PQjWnN3hCHc5tW
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Spikes
+ depth: 0
+ texture: 9T7KPjpwQbtdcR
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends:
+ cgroup: Deadly
+ lastmod: 1715787268006
+ uid: jzhqpnR6cLGMWL
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Checkpoint
+ depth: 0
+ texture: LJm1G1P26Lg8KM
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: false
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.objects
+ code: object write
+ values:
+ object:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ property: savedX
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ b: 32
+ - lib: core.objects
+ code: object write
+ values:
+ object:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ property: savedY
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 32
+ arguments:
+ template: qW85fQJkj11N5d
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1716411639229
+ uid: kFHWwtDQMhCMGT
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Exit
+ depth: 0
+ texture: KRnn2227Njk987
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: Is the next room defined?
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Switch to the next room
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName:
+ lib: core.objects
+ code: object read
+ values:
+ object:
+ lib: core
+ code: rooms.current
+ values: {}
+ property: nextRoom
+ body2: []
+ condition:
+ lib: core.logic
+ code: convert to boolean
+ values:
+ val:
+ lib: core.objects
+ code: object read
+ values:
+ property: nextRoom
+ object:
+ lib: core
+ code: rooms.current
+ values: {}
+ arguments:
+ template: qW85fQJkj11N5d
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1716785130486
+ uid: NKcWd2dG3PGn2r
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: GreenCrystal
+ depth: 0
+ texture: CGhQKzKpTGtD7K
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.objects
+ code: this write
+ values:
+ property: crystals
+ value:
+ lib: core.math
+ code: +
+ values:
+ b: 1
+ a:
+ lib: core.objects
+ code: this read
+ values:
+ property: crystals
+ obj:
+ lib: core
+ code: rooms.current
+ values: {}
+ - lib: core.templates
+ code: kill
+ values: {}
+ arguments:
+ template: qW85fQJkj11N5d
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1715799241905
+ uid: DWtGz56z2Cpwm8
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: behavior
+ name: inGameRoomStart
+ behaviorType: room
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.objects
+ code: this write
+ values:
+ property: crystals
+ value: 0
+ - lib: core.objects
+ code: this write
+ values:
+ property: lives
+ value: 3
+ - lib: core.objects
+ code: this write
+ values:
+ property: crystalsTotal
+ value:
+ lib: core.arrays
+ code: array length
+ values:
+ array:
+ lib: core
+ code: templates.list
+ values:
+ list: DWtGz56z2Cpwm8
+ obj:
+ lib: core
+ code: rooms.current
+ values: {}
+ - lib: core
+ code: rooms.append
+ values:
+ name: q898FkQpLCktnK
+ isUi:
+ lib: core.logic
+ code: 'true'
+ values: {}
+ arguments: {}
+ lib: core
+ variables: []
+ specification: []
+ extendTypes: ''
+ lastmod: 1715796624785
+ uid: HQGQpTGtMPzDJz
+ properties: []
+ - type: style
+ name: CrystalCounter
+ uid: Jf5WtDMzDr6WKr
+ font:
+ family: sans-serif
+ halign: left
+ italic: false
+ size: 24
+ weight: '600'
+ wrap: false
+ wrapPosition: 640
+ lineHeight: 0
+ fill:
+ type: 0
+ color: '#00A847'
+ color1: '#cccccc'
+ color2: '#ffffff'
+ gradtype: 1
+ lastmod: 1715796835875
+ stroke:
+ color: '#FFFFFF'
+ weight: 5
+ typeface: -1
+ - type: template
+ baseClass: AnimatedSprite
+ name: CrystalsWidget
+ depth: 0
+ texture: CGhQKzKpTGtD7K
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1715798632706
+ uid: mkJdgLTRdjJ7CQ
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: Text
+ name: CrystalsWidgetText
+ depth: 0
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.appearance
+ code: set text
+ values:
+ text:
+ lib: core.strings
+ code: concat3
+ values:
+ b: ' / '
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: crystals
+ c:
+ lib: core.objects
+ code: room read
+ values:
+ property: crystalsTotal
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716410579453
+ uid: kGPkfn3Qbzrhfh
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: ''
+ textStyle: Jf5WtDMzDr6WKr
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1024
+ height: 576
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: true
+ name: LayerUI
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: mkJdgLTRdjJ7CQ
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 104.9375
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kGPkfn3Qbzrhfh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ customAnchor:
+ x: 0
+ 'y': 0.5
+ customText: '0'
+ - x: 960
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: ngkR2jjDtNc51f
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 925.36645508
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: rDm7dbjgF1mzgq
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ customAnchor:
+ x: 1
+ 'y': 0.5
+ customText: '0'
+ tiles: []
+ extends: {}
+ lastmod: 1716411671341
+ events: []
+ behaviors: []
+ extendTypes: ''
+ uid: q898FkQpLCktnK
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Heart
+ depth: 0
+ texture: c2J6GJwfQp29k1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.objects
+ code: current room write
+ values:
+ property: lives
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 1
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ b: 3
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ arguments:
+ template: qW85fQJkj11N5d
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1716785164527
+ uid: DD9kCzd5Dp8zd5
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: style
+ name: HeartCounter
+ uid: MHg8JpTmcCcgm5
+ font:
+ family: sans-serif
+ halign: left
+ italic: false
+ size: 24
+ weight: '600'
+ wrap: false
+ wrapPosition: 640
+ lineHeight: 0
+ fill:
+ type: 0
+ color: '#E85017'
+ color1: '#cccccc'
+ color2: '#ffffff'
+ gradtype: 1
+ lastmod: 1715799557987
+ stroke:
+ color: '#FFFFFF'
+ weight: 5
+ typeface: -1
+ - type: template
+ baseClass: AnimatedSprite
+ name: HeartsWidget
+ depth: 0
+ texture: c2J6GJwfQp29k1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ extends: {}
+ lastmod: 1715799590277
+ uid: ngkR2jjDtNc51f
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: Text
+ name: HeartsWidgetText
+ depth: 0
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.appearance
+ code: set text
+ values:
+ text:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1715799669228
+ uid: rDm7dbjgF1mzgq
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: ''
+ textStyle: MHg8JpTmcCcgm5
+ - type: template
+ baseClass: AnimatedSprite
+ name: Platform
+ depth: 0
+ texture: bgPnG9rr72JBtH
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ value:
+ lib: place
+ code: place.meet
+ values:
+ template: qW85fQJkj11N5d
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.objects
+ code: this write
+ values:
+ property: cgroup
+ value: undefined
+ body2:
+ - lib: core.objects
+ code: this write
+ values:
+ property: cgroup
+ value: Solid
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ value:
+ lib: place
+ code: place.meet
+ values:
+ template: qW85fQJkj11N5d
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 1
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.objects
+ code: object write
+ values:
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ property: x
+ value:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core
+ code: u.time
+ values: {}
+ a:
+ lib: core.movement
+ code: get hspeed
+ values: {}
+ a:
+ lib: core.objects
+ code: object read
+ values:
+ property: x
+ object:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ body2: []
+ condition:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ condition:
+ lib: core.hidden
+ code: variable
+ values:
+ variableName: robot
+ - lib: core.logic
+ code: if branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Flip direction
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.movement
+ code: get direction
+ values: {}
+ b: 180
+ body2: []
+ condition:
+ lib: place
+ code: place.occupied
+ values:
+ me:
+ lib: core.propsVars
+ code: this
+ values: {}
+ x:
+ lib: core.math
+ code: +
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core.movement
+ code: get hspeed
+ values: {}
+ b:
+ lib: core
+ code: u.time
+ values: {}
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ cgroup: Solid
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables:
+ - robot
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 120
+ arguments: {}
+ lib: core
+ variables: []
+ extends:
+ cgroup: Solid
+ lastmod: 1716783656195
+ uid: pJ1CTGLh4JmrGL
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 32
+ gridY: 32
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1024
+ height: 576
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: Level_03
+ backgroundColor: '#D0F4F7'
+ follow: -1
+ backgrounds: []
+ copies:
+ - x: 0
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: qW85fQJkj11N5d
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1792
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1792
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1792
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1984
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2176
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2240
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2304
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1984
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2176
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2240
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2304
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1792
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1984
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2176
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2240
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2304
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2368
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2432
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2496
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1856
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1792
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1984
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2176
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2240
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2304
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2368
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2432
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1984
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2176
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2240
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2304
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2368
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2432
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 576
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2496
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -512
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -448
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -320
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -640
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -576
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -704
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -384
+ 'y': 512
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -192
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -128
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -256
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1664
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1728
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1920
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2048
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2112
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: 8z7tL4n46cBB15
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2496
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': -320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2368
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2432
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2368
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2560
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2624
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2688
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2496
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2496
+ 'y': 448
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2432
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2752
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: R7Q2Npb9h11nh8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 2528
+ 'y': 160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1952
+ 'y': -160
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1696
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1440
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1632
+ 'y': -224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DD9kCzd5Dp8zd5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 0
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1536
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1600
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1408
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1472
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 544
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 608
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 672
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 736
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 800
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 864
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 928
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 992
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1024
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1056
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1120
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1152
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1184
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1248
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1280
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1312
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1344
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: jzhqpnR6cLGMWL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1216
+ 'y': -320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1440
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1184
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 960
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 896
+ 'y': 128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 416
+ 'y': 192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 384
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: M1MLbRQfmr3JTh
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 512
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 576
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 640
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 704
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 768
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 832
+ 'y': 320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: PQjWnN3hCHc5tW
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 448
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 384
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 320
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 256
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 192
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 128
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -128
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 0
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -64
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: FKDnpCfW4fr1CN
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -224
+ 'y': -320
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: kFHWwtDQMhCMGT
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 480
+ 'y': -224
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DD9kCzd5Dp8zd5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1312
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: pJ1CTGLh4JmrGL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 544
+ 'y': -192
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: pJ1CTGLh4JmrGL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 800
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: pJ1CTGLh4JmrGL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 96
+ 'y': 256
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: pJ1CTGLh4JmrGL
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: -32
+ 'y': 96
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DWtGz56z2Cpwm8
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 992
+ 'y': 288
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: DD9kCzd5Dp8zd5
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716783011671
+ events: []
+ behaviors:
+ - HQGQpTGtMPzDJz
+ extendTypes: ''
+ uid: 91pnHmJh9P5fQ7
+ properties: []
+settings:
+ authoring:
+ author: ''
+ site: ''
+ title: ''
+ version:
+ - 0
+ - 0
+ - 0
+ versionPostfix: ''
+ appId: ''
+ rendering:
+ usePixiLegacy: true
+ transparent: false
+ maxFPS: 60
+ pixelatedrender: false
+ highDensity: true
+ desktopMode: maximized
+ hideCursor: false
+ mobileScreenOrientation: unspecified
+ viewMode: scaleFit
+ export:
+ autocloseDesktop: true
+ windows: true
+ linux: true
+ mac: true
+ functionWrap: false
+ codeModifier: none
+ bundleAssetTree: false
+ bundleAssetTypes:
+ texture: true
+ template: true
+ room: true
+ behavior: false
+ font: false
+ sound: false
+ style: false
+ tandem: false
+ script: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
+ branding:
+ accent: '#446adb'
+ invertPreloaderScheme: true
+ icon: -1
+ splashScreen: -1
+ forceSmoothIcons: false
+ forceSmoothSplashScreen: false
+ hideLoadingLogo: false
+ alternativeLogo: false
+ customLoadingText: ''
+ fps: 30
+palette: []
+globalVars: []
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/i22Dmcmw5TK5T2R.png b/src/examples/Platformer Tutorial (Catnip)/img/i22Dmcmw5TK5T2R.png
new file mode 100644
index 000000000..4ac0b2bad
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/i22Dmcmw5TK5T2R.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/i9T7KPjpwQbtdcR.png b/src/examples/Platformer Tutorial (Catnip)/img/i9T7KPjpwQbtdcR.png
new file mode 100644
index 000000000..4be3f1156
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/i9T7KPjpwQbtdcR.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iC47nfCQ6FwBhk7.png b/src/examples/Platformer Tutorial (Catnip)/img/iC47nfCQ6FwBhk7.png
new file mode 100644
index 000000000..0a13802aa
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iC47nfCQ6FwBhk7.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iCGhQKzKpTGtD7K.png b/src/examples/Platformer Tutorial (Catnip)/img/iCGhQKzKpTGtD7K.png
new file mode 100644
index 000000000..7dee411c4
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iCGhQKzKpTGtD7K.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iKRnn2227Njk987.png b/src/examples/Platformer Tutorial (Catnip)/img/iKRnn2227Njk987.png
new file mode 100644
index 000000000..44c48f3af
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iKRnn2227Njk987.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iLJm1G1P26Lg8KM.png b/src/examples/Platformer Tutorial (Catnip)/img/iLJm1G1P26Lg8KM.png
new file mode 100644
index 000000000..94c0983f4
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iLJm1G1P26Lg8KM.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iPTFNMgb6zrf3CM.png b/src/examples/Platformer Tutorial (Catnip)/img/iPTFNMgb6zrf3CM.png
new file mode 100644
index 000000000..19b42ec88
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iPTFNMgb6zrf3CM.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iWmt5gDQTGdk7Mj.png b/src/examples/Platformer Tutorial (Catnip)/img/iWmt5gDQTGdk7Mj.png
new file mode 100644
index 000000000..3544fa40e
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iWmt5gDQTGdk7Mj.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/ibgPnG9rr72JBtH.png b/src/examples/Platformer Tutorial (Catnip)/img/ibgPnG9rr72JBtH.png
new file mode 100644
index 000000000..f3a67cadd
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/ibgPnG9rr72JBtH.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/ibm2RB5B1jmfRmM.png b/src/examples/Platformer Tutorial (Catnip)/img/ibm2RB5B1jmfRmM.png
new file mode 100644
index 000000000..d3e60f974
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/ibm2RB5B1jmfRmM.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/ic2J6GJwfQp29k1.png b/src/examples/Platformer Tutorial (Catnip)/img/ic2J6GJwfQp29k1.png
new file mode 100644
index 000000000..187e07058
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/ic2J6GJwfQp29k1.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/imj4QGh34gGFBWL.png b/src/examples/Platformer Tutorial (Catnip)/img/imj4QGh34gGFBWL.png
new file mode 100644
index 000000000..e2ccf7cca
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/imj4QGh34gGFBWL.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/it2K2LcwCJzd3cm.png b/src/examples/Platformer Tutorial (Catnip)/img/it2K2LcwCJzd3cm.png
new file mode 100644
index 000000000..52596a53d
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/it2K2LcwCJzd3cm.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/iztf7H56K8BMgc1.png b/src/examples/Platformer Tutorial (Catnip)/img/iztf7H56K8BMgc1.png
new file mode 100644
index 000000000..246aa061f
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/iztf7H56K8BMgc1.png differ
diff --git a/src/examples/Platformer Tutorial (Catnip)/img/splash.png b/src/examples/Platformer Tutorial (Catnip)/img/splash.png
new file mode 100644
index 000000000..6af15ce13
Binary files /dev/null and b/src/examples/Platformer Tutorial (Catnip)/img/splash.png differ
diff --git a/src/examples/Platformer_tutorial.ict b/src/examples/Platformer Tutorial (JavaScript).ict
similarity index 99%
rename from src/examples/Platformer_tutorial.ict
rename to src/examples/Platformer Tutorial (JavaScript).ict
index d1f3fbff9..6a19eb37a 100644
--- a/src/examples/Platformer_tutorial.ict
+++ b/src/examples/Platformer Tutorial (JavaScript).ict
@@ -1,4 +1,4 @@
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
notes: /* empty */
libs:
place:
@@ -26,6 +26,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
icon: f39895d1-731d-4487-9d01-18841158729c
branding:
icon: fa8a3c12-0e43-47b0-a27e-e9d9814f8bf5
@@ -102,6 +105,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Rocks_Top
depth: 0
uid: f1f632f7-ecd9-4724-8a7a-c5136d48520e
@@ -124,6 +128,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Rocks_Platform
depth: 0
uid: bf44c3c8-a683-43cd-8925-c5b7e771e152
@@ -146,6 +151,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Spikes
depth: 0
uid: cfa730fa-a010-44af-8e02-d5ad0c86f224
@@ -168,6 +174,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Water
depth: 0
uid: c1aaae5f-3e4c-4e41-8e24-4c2dfe4d43b6
@@ -190,6 +197,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Water_Top
depth: 0
uid: 807691ae-10c5-4cf6-ba0f-6f53d83367ff
@@ -212,6 +220,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Checkpoint
depth: 0
uid: 53848ac8-d852-45c1-a0e2-c38e76094e4b
@@ -240,6 +249,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Exit
depth: 0
uid: 0fd7f61f-2f06-47e2-b9e3-2782fcd02415
@@ -271,6 +281,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: GreenCrystal
depth: 0
uid: 54f82143-5c80-4566-8bc9-8c240c1d97a1
@@ -303,6 +314,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Heart
depth: 0
uid: 3fe668cd-30ee-49ba-8a45-e772bf8832a9
@@ -339,6 +351,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Platform
depth: 0
uid: 1ae52dda-689d-4780-97ce-c87886fb581a
@@ -389,6 +402,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Platform
untill: 0
grid:
@@ -3986,6 +4000,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_02
onstep: ''
ondraw: ''
@@ -8791,6 +8806,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: Level_03
onstep: ''
ondraw: ''
@@ -13979,6 +13995,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: TestLevel
oncreate: ''
onstep: ''
@@ -14324,6 +14341,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- type: folder
uid: Rkrrcp1cfd9NgF
colorClass: warning
@@ -14429,6 +14447,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Robot_Idle
untill: 0
grid:
@@ -14554,6 +14573,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: CrystalsWidget
depth: 0
uid: d582eca9-7676-4764-8aa6-9b10895a9b73
@@ -14594,6 +14614,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: HeartCounter
uid: 1d518beb-a3ad-419b-a1b3-1195aa80b3bc
origname: s1195aa80b3bc
@@ -14612,6 +14633,7 @@ assets:
color: '#FFFFFF'
weight: 5
type: style
+ typeface: -1
- name: CrystalCounter
uid: e5ba4a93-6e61-4c61-b485-1ceaedd3eb21
origname: s1ceaedd3eb21
@@ -14633,6 +14655,7 @@ assets:
color: '#FFFFFF'
weight: 5
type: style
+ typeface: -1
- name: LayerUI
oncreate: ''
onstep: ''
@@ -14681,3 +14704,5 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/Platformer_tutorial/img/i05db3522-55d5-4358-bf09-5e9a6126ed95.png b/src/examples/Platformer Tutorial (JavaScript)/img/i05db3522-55d5-4358-bf09-5e9a6126ed95.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i05db3522-55d5-4358-bf09-5e9a6126ed95.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i05db3522-55d5-4358-bf09-5e9a6126ed95.png
diff --git a/src/examples/Platformer_tutorial/img/i334d338b-4fe4-4168-901e-2315494d37d4.png b/src/examples/Platformer Tutorial (JavaScript)/img/i334d338b-4fe4-4168-901e-2315494d37d4.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i334d338b-4fe4-4168-901e-2315494d37d4.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i334d338b-4fe4-4168-901e-2315494d37d4.png
diff --git a/src/examples/Platformer_tutorial/img/i3f19a8ef-4dba-4550-b516-0bcaca131ba6.png b/src/examples/Platformer Tutorial (JavaScript)/img/i3f19a8ef-4dba-4550-b516-0bcaca131ba6.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i3f19a8ef-4dba-4550-b516-0bcaca131ba6.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i3f19a8ef-4dba-4550-b516-0bcaca131ba6.png
diff --git a/src/examples/Platformer_tutorial/img/i5749074a-4d92-4aa7-bbde-afb57f1ec4a0.png b/src/examples/Platformer Tutorial (JavaScript)/img/i5749074a-4d92-4aa7-bbde-afb57f1ec4a0.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i5749074a-4d92-4aa7-bbde-afb57f1ec4a0.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i5749074a-4d92-4aa7-bbde-afb57f1ec4a0.png
diff --git a/src/examples/Platformer_tutorial/img/i60688c59-ff1e-4550-8525-0fc28c4a3d77.png b/src/examples/Platformer Tutorial (JavaScript)/img/i60688c59-ff1e-4550-8525-0fc28c4a3d77.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i60688c59-ff1e-4550-8525-0fc28c4a3d77.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i60688c59-ff1e-4550-8525-0fc28c4a3d77.png
diff --git a/src/examples/Platformer_tutorial/img/i699ff925-9b32-403f-a292-68ea10034788.png b/src/examples/Platformer Tutorial (JavaScript)/img/i699ff925-9b32-403f-a292-68ea10034788.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i699ff925-9b32-403f-a292-68ea10034788.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i699ff925-9b32-403f-a292-68ea10034788.png
diff --git a/src/examples/Platformer_tutorial/img/i6deb1d77-24d2-48d6-82ec-045dcbd9eea5.png b/src/examples/Platformer Tutorial (JavaScript)/img/i6deb1d77-24d2-48d6-82ec-045dcbd9eea5.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i6deb1d77-24d2-48d6-82ec-045dcbd9eea5.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i6deb1d77-24d2-48d6-82ec-045dcbd9eea5.png
diff --git a/src/examples/Platformer_tutorial/img/i92d2ca65-d3a1-45c9-bbd5-5674c6596f98.png b/src/examples/Platformer Tutorial (JavaScript)/img/i92d2ca65-d3a1-45c9-bbd5-5674c6596f98.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i92d2ca65-d3a1-45c9-bbd5-5674c6596f98.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i92d2ca65-d3a1-45c9-bbd5-5674c6596f98.png
diff --git a/src/examples/Platformer_tutorial/img/i9a6d05c0-477d-47f6-85fe-6c0c8d813df3.png b/src/examples/Platformer Tutorial (JavaScript)/img/i9a6d05c0-477d-47f6-85fe-6c0c8d813df3.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i9a6d05c0-477d-47f6-85fe-6c0c8d813df3.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i9a6d05c0-477d-47f6-85fe-6c0c8d813df3.png
diff --git a/src/examples/Platformer_tutorial/img/i9fdb39bb-1685-4ca2-b750-ccb15ca765d2.png b/src/examples/Platformer Tutorial (JavaScript)/img/i9fdb39bb-1685-4ca2-b750-ccb15ca765d2.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/i9fdb39bb-1685-4ca2-b750-ccb15ca765d2.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/i9fdb39bb-1685-4ca2-b750-ccb15ca765d2.png
diff --git a/src/examples/Platformer_tutorial/img/iNaN.png b/src/examples/Platformer Tutorial (JavaScript)/img/iNaN.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/iNaN.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/iNaN.png
diff --git a/src/examples/Platformer_tutorial/img/ie086f16a-24fd-4f73-b44a-e3e22766ca62.png b/src/examples/Platformer Tutorial (JavaScript)/img/ie086f16a-24fd-4f73-b44a-e3e22766ca62.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/ie086f16a-24fd-4f73-b44a-e3e22766ca62.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/ie086f16a-24fd-4f73-b44a-e3e22766ca62.png
diff --git a/src/examples/Platformer_tutorial/img/ie15a4451-c77c-4347-a99f-436731aff19d.png b/src/examples/Platformer Tutorial (JavaScript)/img/ie15a4451-c77c-4347-a99f-436731aff19d.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/ie15a4451-c77c-4347-a99f-436731aff19d.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/ie15a4451-c77c-4347-a99f-436731aff19d.png
diff --git a/src/examples/Platformer_tutorial/img/if39895d1-731d-4487-9d01-18841158729c.png b/src/examples/Platformer Tutorial (JavaScript)/img/if39895d1-731d-4487-9d01-18841158729c.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/if39895d1-731d-4487-9d01-18841158729c.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/if39895d1-731d-4487-9d01-18841158729c.png
diff --git a/src/examples/Platformer_tutorial/img/ifa8a3c12-0e43-47b0-a27e-e9d9814f8bf5.png b/src/examples/Platformer Tutorial (JavaScript)/img/ifa8a3c12-0e43-47b0-a27e-e9d9814f8bf5.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/ifa8a3c12-0e43-47b0-a27e-e9d9814f8bf5.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/ifa8a3c12-0e43-47b0-a27e-e9d9814f8bf5.png
diff --git a/src/examples/Platformer_tutorial/img/splash.png b/src/examples/Platformer Tutorial (JavaScript)/img/splash.png
similarity index 100%
rename from src/examples/Platformer_tutorial/img/splash.png
rename to src/examples/Platformer Tutorial (JavaScript)/img/splash.png
diff --git a/src/examples/Space Shooter (Catnip).ict b/src/examples/Space Shooter (Catnip).ict
new file mode 100644
index 000000000..c116eff3e
--- /dev/null
+++ b/src/examples/Space Shooter (Catnip).ict
@@ -0,0 +1,1553 @@
+ctjsVersion: 5.0.0
+backups: 3
+language: catnip
+notes: /* empty */
+libs:
+ place:
+ gridX: 1024
+ gridY: 1024
+ pointer: {}
+ keyboard: {}
+ keyboard.polyfill: {}
+ pointer.polyfill: {}
+ random: {}
+startroom: -1
+contentTypes: []
+actions:
+ - name: Shoot
+ methods:
+ - code: keyboard.Space
+ - code: pointer.Primary
+ - name: MoveY
+ methods:
+ - code: keyboard.ArrowUp
+ multiplier: -1
+ - code: keyboard.ArrowDown
+ - code: keyboard.KeyW
+ multiplier: -1
+ - code: keyboard.KeyS
+ - name: MoveX
+ methods:
+ - code: keyboard.KeyA
+ multiplier: -1
+ - code: keyboard.KeyD
+ - code: keyboard.ArrowLeft
+ multiplier: -1
+ - code: keyboard.ArrowRight
+scripts: []
+assets:
+ - type: folder
+ uid: mKW6jjnM363LjT
+ colorClass: act
+ icon: help-circle
+ name: textures
+ lastmod: 1715355350726
+ entries:
+ - lastmod: 1715355243985
+ type: texture
+ name: Laser_Red_09
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 24
+ - 23
+ marginx: 0
+ marginy: 0
+ imgWidth: 48
+ imgHeight: 46
+ width: 48
+ height: 46
+ offx: 0
+ offy: 0
+ origname: ij8HTKDw1269mzD.png
+ shape: circle
+ left: 24
+ right: 24
+ top: 23
+ bottom: 23
+ uid: j8HTKDw1269mzD
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/Laser_Red_09.png
+ r: 23
+ - lastmod: 1715355274778
+ type: texture
+ name: Meteor_Grey_Big_01
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 50
+ - 42
+ marginx: 0
+ marginy: 0
+ imgWidth: 101
+ imgHeight: 84
+ width: 101
+ height: 84
+ offx: 0
+ offy: 0
+ origname: ibjf59Bp488gPtK.png
+ shape: strip
+ left: 50
+ right: 51
+ top: 42
+ bottom: 42
+ uid: bjf59Bp488gPtK
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/Meteor_Grey_Big_01.png
+ stripPoints:
+ - x: 23.666666666666668
+ 'y': -40.666666666666664
+ - x: 50.666666666666664
+ 'y': -1
+ - x: 34.666666666666664
+ 'y': 32
+ - x: 11.666666666666668
+ 'y': 28.666666666666668
+ - x: -20.666666666666664
+ 'y': 40.333333333333336
+ - x: -49.666666666666664
+ 'y': 9.333333333333332
+ - x: -32.83333333333333
+ 'y': -40.66666666666667
+ closedStrip: true
+ - lastmod: 1715355116875
+ type: texture
+ name: BG_Blue
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 0
+ - 0
+ marginx: 0
+ marginy: 0
+ imgWidth: 256
+ imgHeight: 256
+ width: 256
+ height: 256
+ offx: 0
+ offy: 0
+ origname: i1FRDjqLTW1Q86p.png
+ shape: rect
+ left: 0
+ right: 256
+ top: 0
+ bottom: 256
+ uid: 1FRDjqLTW1Q86p
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/BG_Blue.png
+ tiled: true
+ - lastmod: 1715355347360
+ type: texture
+ name: Enemy_Red_03
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 51
+ - 42
+ marginx: 0
+ marginy: 0
+ imgWidth: 103
+ imgHeight: 84
+ width: 103
+ height: 84
+ offx: 0
+ offy: 0
+ origname: iM2Wd7pLkb5D5HM.png
+ shape: strip
+ left: 51
+ right: 52
+ top: 42
+ bottom: 42
+ uid: M2Wd7pLkb5D5HM
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/Enemy_Red_03.png
+ stripPoints:
+ - x: 25.166666666666668
+ 'y': -35
+ - x: 51.5
+ 'y': -2.833333333333334
+ - x: 37.5
+ 'y': 42
+ - x: 28.666666666666664
+ 'y': 39.333333333333336
+ - x: 30.33333333333333
+ 'y': 28.666666666666664
+ - x: 12.16666666666666
+ 'y': 22
+ - x: 9
+ 'y': 32.833333333333336
+ - x: -9.5
+ 'y': 32.333333333333336
+ - x: -12.333333333333332
+ 'y': 21.999999999999996
+ - x: -31.000000000000004
+ 'y': 27.5
+ - x: -27.833333333333332
+ 'y': 39.33333333333333
+ - x: -37
+ 'y': 41.333333333333336
+ - x: -51.333333333333336
+ 'y': -2.166666666666668
+ - x: -25.166666666666668
+ 'y': -36
+ - x: -7.83333333333333
+ 'y': -41
+ - x: 7.833333333333336
+ 'y': -41.33333333333333
+ closedStrip: true
+ - lastmod: 1715355232434
+ type: texture
+ name: PlayerShip_02_Blue
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 56
+ - 37
+ marginx: 0
+ marginy: 0
+ imgWidth: 112
+ imgHeight: 75
+ width: 112
+ height: 75
+ offx: 0
+ offy: 0
+ origname: ikHjCgt3W5MT1D4.png
+ shape: strip
+ left: 56
+ right: 56
+ top: 37
+ bottom: 38
+ uid: kHjCgt3W5MT1D4
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/PlayerShip_02_Blue.png
+ stripPoints:
+ - x: 3.25
+ 'y': -36.25
+ - x: 9.25
+ 'y': -17.25
+ - x: 53.75
+ 'y': 5.75
+ - x: 38.25
+ 'y': 34.75
+ - x: 16.5
+ 'y': 29.25
+ - x: 10.25
+ 'y': 37.5
+ - x: -11.75
+ 'y': 37
+ - x: -17.5
+ 'y': 30
+ - x: -37
+ 'y': 34.5
+ - x: -56
+ 'y': 5.75
+ - x: -11.25
+ 'y': -16.75
+ - x: -4
+ 'y': -36.75
+ closedStrip: true
+ - lastmod: 1715355254295
+ type: texture
+ name: Laser_Blue_01
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 4
+ - 27
+ marginx: 0
+ marginy: 0
+ imgWidth: 9
+ imgHeight: 54
+ width: 9
+ height: 54
+ offx: 0
+ offy: 0
+ origname: iRBkbR8Ggjpdmhc.png
+ shape: rect
+ left: 4
+ right: 5
+ top: 27
+ bottom: 27
+ uid: RBkbR8Ggjpdmhc
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/Laser_Blue_01.png
+ r: 4
+ - lastmod: 1715355293758
+ type: texture
+ name: Meteor_Grey_Med_01
+ untill: 0
+ grid:
+ - 1
+ - 1
+ axis:
+ - 21
+ - 21
+ marginx: 0
+ marginy: 0
+ imgWidth: 43
+ imgHeight: 43
+ width: 43
+ height: 43
+ offx: 0
+ offy: 0
+ origname: iBMRCzJQq5Q7K9w.png
+ shape: strip
+ left: 21
+ right: 22
+ top: 21
+ bottom: 22
+ uid: BMRCzJQq5Q7K9w
+ padding: 1
+ isBlank: false
+ source: >-
+ /home/deck/Documents/ct-js-develop/bundledAssets/textures/Kenney's
+ Space Shooter/Meteor_Grey_Med_01.png
+ stripPoints:
+ - x: -9.083333333333334
+ 'y': -19.666666666666668
+ - x: 17.25
+ 'y': -18
+ - x: 21.416666666666664
+ 'y': 7.166666666666666
+ - x: 0.5833333333333339
+ 'y': 20.916666666666668
+ - x: -14.25
+ 'y': 15.666666666666668
+ - x: -19.916666666666664
+ 'y': -3.3333333333333326
+ closedStrip: true
+ - type: template
+ baseClass: AnimatedSprite
+ name: PlayerShip
+ depth: 0
+ texture: kHjCgt3W5MT1D4
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.misc
+ code: note
+ values:
+ note: |-
+ Move the ship
+ See Project > Actions and input methods panel
+ and "Actions" in the docs.
+ Move by X axis
+ - lib: core.propsVars
+ code: increase
+ values:
+ var:
+ lib: core.movement
+ code: x
+ values: {}
+ val:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ b:
+ lib: core.actions
+ code: action value
+ values:
+ action: MoveX
+ a: 480
+ - lib: core.propsVars
+ code: increase
+ values:
+ var:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ val:
+ lib: core.math
+ code: '*'
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a:
+ lib: core
+ code: u.time
+ values: {}
+ b:
+ lib: core.actions
+ code: action value
+ values:
+ action: MoveY
+ a: 480
+ - lib: core.misc
+ code: note
+ values:
+ note: |-
+ Check whether the ship fell off the viewport
+ Has the ship crossed the left border?
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Go back to the left border
+ - lib: core.movement
+ code: set x
+ values:
+ pixels: 0
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ b: 0
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ - lib: core.misc
+ code: note
+ values:
+ note: Has the ship crossed the right border?
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Go back to the right border
+ - lib: core.movement
+ code: set x
+ values:
+ pixels:
+ lib: core.camera
+ code: get width
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.movement
+ code: x
+ values: {}
+ b:
+ lib: core.camera
+ code: get width
+ values: {}
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.misc
+ code: note
+ values:
+ note: Has the ship crossed the center?
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Go back to the center
+ - lib: core.movement
+ code: set y
+ values:
+ pixels: 384
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 384
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.misc
+ code: note
+ values:
+ note: Stay above the bottom border
+ - lib: core.movement
+ code: set y
+ values:
+ pixels: 704
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b: 704
+ arguments: {}
+ variables: []
+ - eventKey: OnActionPress
+ code:
+ - lib: core
+ code: templates.copy
+ values:
+ template: MFp6TFtj6jq2tc
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ arguments:
+ action: Shoot
+ lib: core
+ variables: []
+ - eventKey: collisionCGroup
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ body2: []
+ condition:
+ lib: core.templates
+ code: is copy
+ values:
+ copy:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ - lib: core.objects
+ code: current room write
+ values:
+ property: lives
+ value:
+ lib: core.math
+ code: '-'
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 1
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core
+ code: u.wait
+ values:
+ then:
+ - lib: core
+ code: rooms.switch
+ values:
+ roomName: cRf5pHnhwjWbw4
+ catch: []
+ time: 1000
+ body2: []
+ condition:
+ lib: core.math
+ code: <=
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ b: 0
+ arguments:
+ group: Hostile
+ lib: place
+ variables: []
+ extends: {}
+ lastmod: 1716408913122
+ uid: Bt1FtTL9j1KBN4
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: EnemyShip
+ depth: 0
+ texture: M2Wd7pLkb5D5HM
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get height
+ values: {}
+ b: 80
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 180
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees: 45
+ - lib: core.timers
+ code: set timer1
+ values:
+ time: 1
+ - lib: core.timers
+ code: set timer2
+ values:
+ time: 1
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core.objects
+ code: current room write
+ values:
+ property: score
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ b: 100
+ arguments:
+ template: MFp6TFtj6jq2tc
+ lib: place
+ variables: []
+ - eventKey: Timer1
+ code:
+ - lib: core.timers
+ code: set timer1
+ values:
+ time: 3
+ - lib: core
+ code: templates.copy
+ values:
+ template: BTp7pffCcm9h6t
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.math
+ code: +
+ values:
+ b: 32
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ arguments:
+ name: Shoot
+ isUi: false
+ lib: core
+ variables: []
+ - eventKey: Timer2
+ code:
+ - lib: core.timers
+ code: set timer2
+ values:
+ time: 1
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.movement
+ code: get hspeed
+ values: {}
+ value:
+ lib: core.math
+ code: '*'
+ values:
+ b: -1
+ a:
+ lib: core.movement
+ code: get hspeed
+ values: {}
+ arguments:
+ name: Zigzag
+ isUi: false
+ lib: core
+ variables: []
+ extends:
+ cgroup: Hostile
+ lastmod: 1716410107667
+ uid: 2nJ6HjpcQ25k9F
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Asteroid_Big
+ depth: 0
+ texture: bjf59Bp488gPtK
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get height
+ values: {}
+ b: 80
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed:
+ lib: random
+ code: random.range
+ values:
+ x1: 60
+ x2: 180
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees:
+ lib: random
+ code: random.range
+ values:
+ x1:
+ lib: core.math
+ code: '-'
+ values:
+ a: 90
+ b: 30
+ x2:
+ lib: core.math
+ code: +
+ values:
+ a: 90
+ b: 30
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core
+ code: templates.copy
+ values:
+ template: J5kJHT7Fgn3FmW
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core
+ code: templates.copy
+ values:
+ template: J5kJHT7Fgn3FmW
+ x:
+ lib: core.movement
+ code: x
+ values: {}
+ 'y':
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.objects
+ code: current room write
+ values:
+ property: score
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ b: 25
+ arguments:
+ template: MFp6TFtj6jq2tc
+ lib: place
+ variables: []
+ extends:
+ cgroup: Hostile
+ lastmod: 1716411517391
+ uid: T9w1fgPqMDMQRp
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Asteroid_Medium
+ depth: 0
+ texture: BMRCzJQq5Q7K9w
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ b:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get height
+ values: {}
+ b: 80
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed:
+ lib: random
+ code: random.range
+ values:
+ x1: 60
+ x2: 180
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees:
+ lib: random
+ code: random.range
+ values:
+ x1:
+ lib: core.math
+ code: '-'
+ values:
+ a: 90
+ b: 30
+ x2:
+ lib: core.math
+ code: +
+ values:
+ a: 90
+ b: 30
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: collisionTemplate
+ code:
+ - lib: core
+ code: templates.withCopy
+ values:
+ func:
+ - lib: core.templates
+ code: kill
+ values: {}
+ obj:
+ lib: core.hidden
+ code: event variable
+ values:
+ variableName: other
+ - lib: core.templates
+ code: kill
+ values: {}
+ - lib: core.objects
+ code: current room write
+ values:
+ property: score
+ value:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ b: 10
+ arguments:
+ template: MFp6TFtj6jq2tc
+ lib: place
+ variables: []
+ extends:
+ cgroup: Hostile
+ lastmod: 1716411512282
+ uid: J5kJHT7Fgn3FmW
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Laser_Red
+ depth: 0
+ texture: j8HTKDw1269mzD
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: '>'
+ values:
+ b:
+ lib: core.math
+ code: +
+ values:
+ a:
+ lib: core.camera
+ code: get height
+ values: {}
+ b: 40
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.movement
+ code: move copy
+ values: {}
+ - lib: core.appearance
+ code: set angle
+ values:
+ degrees:
+ lib: core.math
+ code: '-'
+ values:
+ b:
+ lib: core.math
+ code: '*'
+ values:
+ a: 240
+ b:
+ lib: core
+ code: u.time
+ values: {}
+ a:
+ lib: core.appearance
+ code: get angle
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 480
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees: 90
+ - lib: core.appearance
+ code: set angle
+ values:
+ degrees:
+ lib: random
+ code: random.deg
+ values: {}
+ arguments: {}
+ lib: core
+ variables: []
+ extends:
+ cgroup: Hostile
+ lastmod: 1715778444706
+ uid: BTp7pffCcm9h6t
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: template
+ baseClass: AnimatedSprite
+ name: Laser_Blue
+ depth: 0
+ texture: RBkbR8Ggjpdmhc
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core.templates
+ code: kill
+ values: {}
+ body2: []
+ condition:
+ lib: core.math
+ code: <
+ values:
+ b: -40
+ a:
+ lib: core.movement
+ code: 'y'
+ values: {}
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnCreate
+ code:
+ - lib: core.movement
+ code: set speed
+ values:
+ speed: 1080
+ - lib: core.movement
+ code: set direction
+ values:
+ degrees: 270
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1715362358647
+ uid: MFp6TFtj6jq2tc
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ - type: room
+ oncreate: ''
+ onstep: ''
+ ondraw: ''
+ onleave: ''
+ gridX: 64
+ gridY: 64
+ diagonalGrid: false
+ disableGrid: false
+ simulate: true
+ width: 1280
+ height: 720
+ restrictCamera: false
+ restrictMaxX: 1280
+ restrictMinX: 1280
+ restrictMaxY: 720
+ restrictMinY: 720
+ isUi: false
+ name: Main
+ backgroundColor: '#000000'
+ follow: -1
+ backgrounds:
+ - depth: -5
+ texture: 1FRDjqLTW1Q86p
+ shiftX: 0
+ shiftY: 0
+ parallaxX: 1
+ parallaxY: 1
+ movementX: 0
+ movementY: 0
+ scaleX: 1
+ scaleY: 1
+ repeat: repeat
+ copies:
+ - x: 640
+ 'y': 640
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: Bt1FtTL9j1KBN4
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 64
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: K35tpJRRqkGcqK
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ - x: 1088
+ 'y': 64
+ opacity: 1
+ tint: 16777215
+ scale:
+ x: 1
+ 'y': 1
+ rotation: 0
+ uid: bTpR77pNkDzB11
+ exts: {}
+ customProperties: {}
+ bindings: {}
+ tiles: []
+ extends: {}
+ lastmod: 1716411550018
+ events:
+ - eventKey: OnRoomStart
+ code:
+ - lib: core.timers
+ code: set timer1
+ values:
+ time: 0.3
+ - lib: core.timers
+ code: set timer2
+ values:
+ time: 3
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: score
+ value: 0
+ - lib: core.propsVars
+ code: set
+ values:
+ var:
+ lib: core.hidden
+ code: property
+ values:
+ variableName: lives
+ value: 3
+ arguments: {}
+ lib: core
+ variables: []
+ - eventKey: Timer1
+ code:
+ - lib: core.timers
+ code: set timer1
+ values:
+ time:
+ lib: random
+ code: random.range
+ values:
+ x1: 0.3
+ x2: 3
+ - lib: core.logic
+ code: if else branch
+ values:
+ body1:
+ - lib: core
+ code: templates.copy
+ values:
+ template: T9w1fgPqMDMQRp
+ 'y': -100
+ x:
+ lib: random
+ code: random
+ values:
+ x:
+ lib: core.camera
+ code: get width
+ values: {}
+ body2:
+ - lib: core
+ code: templates.copy
+ values:
+ template: J5kJHT7Fgn3FmW
+ 'y': -100
+ x:
+ lib: random
+ code: random
+ values:
+ x:
+ lib: core.camera
+ code: get width
+ values: {}
+ condition:
+ lib: random
+ code: random.chance
+ values:
+ x: 1
+ 'y': 2
+ arguments:
+ name: Timer 1
+ isUi: false
+ lib: core
+ variables: []
+ - eventKey: Timer2
+ code:
+ - lib: core.timers
+ code: set timer2
+ values:
+ time:
+ lib: random
+ code: random.range
+ values:
+ x1: 3
+ x2: 6
+ - lib: core
+ code: templates.copy
+ values:
+ template: 2nJ6HjpcQ25k9F
+ x:
+ lib: random
+ code: random
+ values:
+ x:
+ lib: core.camera
+ code: get width
+ values: {}
+ 'y': -100
+ arguments:
+ name: Timer 2
+ isUi: false
+ lib: core
+ variables: []
+ behaviors: []
+ extendTypes: ''
+ uid: cRf5pHnhwjWbw4
+ properties:
+ - score
+ - lives
+ - type: template
+ baseClass: Text
+ name: ScoreText
+ depth: 1000
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.objects
+ code: this write
+ values:
+ property: text
+ value:
+ lib: core.strings
+ code: concat
+ values:
+ a: 'Score: '
+ b:
+ lib: core.objects
+ code: room read
+ values:
+ property: score
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716410173217
+ uid: K35tpJRRqkGcqK
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: 'Score: 0'
+ textStyle: 1fKJbcWpzc58jm
+ - type: style
+ name: ScoreText
+ uid: 1fKJbcWpzc58jm
+ font:
+ family: sans-serif
+ halign: left
+ italic: false
+ size: 32
+ weight: '800'
+ wrap: false
+ wrapPosition: 640
+ lineHeight: 0
+ fill:
+ type: 0
+ color: '#54BEFF'
+ color1: '#cccccc'
+ color2: '#ffffff'
+ gradtype: 1
+ lastmod: 1715778008171
+ typeface: -1
+ - type: template
+ baseClass: Text
+ name: LivesText
+ depth: 1000
+ texture: -1
+ playAnimationOnStart: false
+ loopAnimation: true
+ animationFPS: 30
+ visible: true
+ events:
+ - eventKey: OnStep
+ lib: core
+ code:
+ - lib: core.movement
+ code: move copy
+ values: {}
+ arguments: {}
+ variables: []
+ - eventKey: OnDraw
+ code:
+ - lib: core.objects
+ code: this write
+ values:
+ property: text
+ value:
+ lib: core.strings
+ code: concat
+ values:
+ a: 'Lives: '
+ b:
+ lib: core.objects
+ code: room read
+ values:
+ property: lives
+ arguments: {}
+ lib: core
+ variables: []
+ extends: {}
+ lastmod: 1716410293754
+ uid: bTpR77pNkDzB11
+ behaviors: []
+ extendTypes: ''
+ properties: []
+ defaultText: 'Lives: 0'
+ textStyle: 1fKJbcWpzc58jm
+settings:
+ authoring:
+ author: ''
+ site: ''
+ title: ''
+ version:
+ - 0
+ - 0
+ - 0
+ versionPostfix: ''
+ appId: ''
+ rendering:
+ usePixiLegacy: true
+ transparent: false
+ maxFPS: 60
+ pixelatedrender: false
+ highDensity: true
+ desktopMode: maximized
+ hideCursor: false
+ mobileScreenOrientation: unspecified
+ viewMode: scaleFit
+ export:
+ autocloseDesktop: true
+ windows: true
+ linux: true
+ mac: true
+ functionWrap: false
+ codeModifier: none
+ bundleAssetTree: false
+ bundleAssetTypes:
+ texture: true
+ template: true
+ room: true
+ behavior: false
+ font: false
+ sound: false
+ style: false
+ tandem: false
+ script: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
+ branding:
+ accent: '#446adb'
+ invertPreloaderScheme: true
+ icon: -1
+ splashScreen: -1
+ forceSmoothIcons: false
+ forceSmoothSplashScreen: false
+ hideLoadingLogo: false
+ alternativeLogo: false
+ customLoadingText: ''
+ fps: 30
+palette: []
+globalVars: []
diff --git a/src/examples/Space Shooter (Catnip)/img/i1FRDjqLTW1Q86p.png b/src/examples/Space Shooter (Catnip)/img/i1FRDjqLTW1Q86p.png
new file mode 100644
index 000000000..0889d1144
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/i1FRDjqLTW1Q86p.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/iBMRCzJQq5Q7K9w.png b/src/examples/Space Shooter (Catnip)/img/iBMRCzJQq5Q7K9w.png
new file mode 100644
index 000000000..decc30091
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/iBMRCzJQq5Q7K9w.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/iM2Wd7pLkb5D5HM.png b/src/examples/Space Shooter (Catnip)/img/iM2Wd7pLkb5D5HM.png
new file mode 100644
index 000000000..2aabc43c6
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/iM2Wd7pLkb5D5HM.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/iRBkbR8Ggjpdmhc.png b/src/examples/Space Shooter (Catnip)/img/iRBkbR8Ggjpdmhc.png
new file mode 100644
index 000000000..62e1fe9eb
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/iRBkbR8Ggjpdmhc.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/ibjf59Bp488gPtK.png b/src/examples/Space Shooter (Catnip)/img/ibjf59Bp488gPtK.png
new file mode 100644
index 000000000..823e0b553
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/ibjf59Bp488gPtK.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/ij8HTKDw1269mzD.png b/src/examples/Space Shooter (Catnip)/img/ij8HTKDw1269mzD.png
new file mode 100644
index 000000000..c8f0b34b0
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/ij8HTKDw1269mzD.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/ikHjCgt3W5MT1D4.png b/src/examples/Space Shooter (Catnip)/img/ikHjCgt3W5MT1D4.png
new file mode 100644
index 000000000..fb9ff3b98
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/ikHjCgt3W5MT1D4.png differ
diff --git a/src/examples/Space Shooter (Catnip)/img/splash.png b/src/examples/Space Shooter (Catnip)/img/splash.png
new file mode 100644
index 000000000..9497e9593
Binary files /dev/null and b/src/examples/Space Shooter (Catnip)/img/splash.png differ
diff --git a/src/examples/SpaceShooter_tutorial.ict b/src/examples/Space Shooter (JavaScript).ict
similarity index 98%
rename from src/examples/SpaceShooter_tutorial.ict
rename to src/examples/Space Shooter (JavaScript).ict
index 9b148dd3f..a78bdb8c8 100644
--- a/src/examples/SpaceShooter_tutorial.ict
+++ b/src/examples/Space Shooter (JavaScript).ict
@@ -31,6 +31,9 @@ settings:
sound: false
style: false
tandem: false
+ typefaces: ! ''
+ showErrors: true
+ errorsLink: ''
branding:
icon: -1
accent: '#446adb'
@@ -56,7 +59,7 @@ settings:
palette:
- 'rgba(0,0,0,0.61)'
startroom: 8eced6ed-b52a-4344-8266-3fa909005671
-ctjsVersion: 4.0.0-next-4
+ctjsVersion: 5.0.0
scripts: []
actions:
- name: Shoot
@@ -163,6 +166,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Red
depth: 0
uid: ebe33c0f-6f27-4123-ac8a-3029404dbc7a
@@ -204,6 +208,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Laser_Blue
depth: 0
uid: cd732ad2-d2ae-4745-b6d8-07a57a9d3a2e
@@ -240,6 +245,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: EnemyShip
depth: 0
uid: 5d3e8a47-30e6-45b1-8b36-d445fdcb8e14
@@ -295,6 +301,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Asteroid_Medium
depth: 0
uid: f829b135-ac68-4193-9980-d367e90448a1
@@ -340,6 +347,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Asteroid_Big
depth: 0
uid: 41fbc5fe-0f41-4151-b7bf-26acefce80ae
@@ -387,6 +395,7 @@ assets:
right: 16
bottom: 16
style: -1
+ extendTypes: ''
- name: Main
onleave: ''
width: 800
@@ -494,6 +503,7 @@ assets:
isUi: false
follow: -1
behaviors: []
+ extendTypes: ''
- name: ScoreText
uid: 4f2f6d4b-a339-4e30-98f3-80db10aafc4f
origname: s1
@@ -517,6 +527,7 @@ assets:
x: -2
'y': 2
blur: 3
+ typeface: -1
- name: LivesText
uid: b1e32885-9439-412d-9220-7d18fae8bf91
origname: s3
@@ -540,6 +551,7 @@ assets:
color: '#FFFFFF'
weight: 4
type: style
+ typeface: -1
- name: PlayerShip
untill: 0
grid:
@@ -814,6 +826,7 @@ assets:
behaviors: []
textStyle: b1e32885-9439-412d-9220-7d18fae8bf91
defaultText: 'Lives: 3'
+ extendTypes: ''
- type: template
baseClass: Text
name: ScoreText
@@ -840,3 +853,5 @@ assets:
behaviors: []
textStyle: 4f2f6d4b-a339-4e30-98f3-80db10aafc4f
defaultText: 'Score: 60063'
+ extendTypes: ''
+globalVars: []
diff --git a/src/examples/SpaceShooter_tutorial/img/i1.png b/src/examples/Space Shooter (JavaScript)/img/i1.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i1.png
rename to src/examples/Space Shooter (JavaScript)/img/i1.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i2.png b/src/examples/Space Shooter (JavaScript)/img/i2.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i2.png
rename to src/examples/Space Shooter (JavaScript)/img/i2.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i3.png b/src/examples/Space Shooter (JavaScript)/img/i3.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i3.png
rename to src/examples/Space Shooter (JavaScript)/img/i3.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i4.png b/src/examples/Space Shooter (JavaScript)/img/i4.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i4.png
rename to src/examples/Space Shooter (JavaScript)/img/i4.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i5.png b/src/examples/Space Shooter (JavaScript)/img/i5.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i5.png
rename to src/examples/Space Shooter (JavaScript)/img/i5.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i6.png b/src/examples/Space Shooter (JavaScript)/img/i6.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i6.png
rename to src/examples/Space Shooter (JavaScript)/img/i6.png
diff --git a/src/examples/SpaceShooter_tutorial/img/i7.png b/src/examples/Space Shooter (JavaScript)/img/i7.png
similarity index 100%
rename from src/examples/SpaceShooter_tutorial/img/i7.png
rename to src/examples/Space Shooter (JavaScript)/img/i7.png
diff --git a/src/examples/Space Shooter (JavaScript)/img/splash.png b/src/examples/Space Shooter (JavaScript)/img/splash.png
new file mode 100644
index 000000000..d36477a45
Binary files /dev/null and b/src/examples/Space Shooter (JavaScript)/img/splash.png differ
diff --git a/src/examples/SpaceShooter_tutorial/img/splash.png b/src/examples/SpaceShooter_tutorial/img/splash.png
deleted file mode 100644
index cb8b1e3ef..000000000
Binary files a/src/examples/SpaceShooter_tutorial/img/splash.png and /dev/null differ
diff --git a/src/examples/yarn.ict b/src/examples/yarn.ict
deleted file mode 100644
index fdf9c4c31..000000000
--- a/src/examples/yarn.ict
+++ /dev/null
@@ -1,786 +0,0 @@
-ctjsVersion: 3.2.0
-notes: >-
- There is a number of interesting places to start learning the demo:
-
-
- — rooms' OnCreate events
-
- — Settings > Scripts > storyEngine
-
- — OptionButton and NextButton templates, as they advance the story by player's
- interactions.
-libs:
- place:
- gridX: 512
- gridY: 512
- fittoscreen:
- mode: scaleFit
- sound.howler: {}
- akatemplate:
- csscss: |-
- body {
- background: #fff;
- }
- yarn:
- skipEmpty: true
- magic: true
- tween: {}
- pointer:
- preventdefault: false
- startlocked: false
-textures:
- - name: CatThoughtful
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 396
- - 462
- marginx: 0
- marginy: 0
- imgWidth: 793
- imgHeight: 924
- width: 793
- height: 924
- offx: 0
- offy: 0
- origname: i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png
- source: /home/comigo/Рабочий стол/CatThoughtful.png
- shape: rect
- left: 396
- right: 397
- top: 462
- bottom: 462
- uid: 5aabca45-bbbd-4792-b3a9-ba79bd4a66fd
- lastmod: 1569837312550
- padding: 1
- - name: CatNormal
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 396
- - 462
- marginx: 0
- marginy: 0
- imgWidth: 793
- imgHeight: 924
- width: 793
- height: 924
- offx: 0
- offy: 0
- origname: iec75835b-2afd-4f96-9373-804b4f80a84d.png
- source: /home/comigo/Рабочий стол/CatNormal.png
- shape: rect
- left: 396
- right: 397
- top: 462
- bottom: 462
- uid: ec75835b-2afd-4f96-9373-804b4f80a84d
- lastmod: 1569837308602
- padding: 1
- - name: CatHappy
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 396
- - 462
- marginx: 0
- marginy: 0
- imgWidth: 793
- imgHeight: 924
- width: 793
- height: 924
- offx: 0
- offy: 0
- origname: i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png
- source: /home/comigo/Рабочий стол/CatHappy.png
- shape: rect
- left: 396
- right: 397
- top: 462
- bottom: 462
- uid: 4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835
- lastmod: 1569837304762
- padding: 1
- - name: Button
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 512
- - 50
- marginx: 0
- marginy: 0
- imgWidth: 1024
- imgHeight: 100
- width: 1024
- height: 100
- offx: 0
- offy: 0
- origname: ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png
- source: /home/comigo/Рабочий стол/Button.png
- shape: rect
- left: 512
- right: 512
- top: 50
- bottom: 50
- uid: e0cbccef-93ee-4c8a-ab19-4fcef639963c
- lastmod: 1569837505628
- padding: 1
- - name: TheGirl
- untill: 0
- grid:
- - 1
- - 1
- axis:
- - 173
- - 800
- marginx: 0
- marginy: 0
- imgWidth: 346
- imgHeight: 800
- width: 346
- height: 800
- offx: 0
- offy: 0
- origname: ibc65f552-4e0c-407e-aee0-9dedd834b727.png
- source: 'C:\Users\Master\Desktop\TheGirl.png'
- shape: rect
- left: 173
- right: 173
- top: 800
- bottom: 0
- uid: bc65f552-4e0c-407e-aee0-9dedd834b727
- lastmod: 1588660086800
- padding: 1
-skeletons: []
-templates:
- - name: TheCat
- depth: 0
- uid: 9e7aec96-1ad3-4679-a248-01180284e78e
- texture: ec75835b-2afd-4f96-9373-804b4f80a84d
- extends: {}
- lastmod: 1661094209998
- events: []
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
- - name: OptionButton
- depth: 0
- uid: cf5c44b2-f55a-4e18-a941-f7cdf5aecd0f
- texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c
- extends: {}
- lastmod: 1661094187046
- events:
- - lib: core
- arguments: {}
- code: |-
- this.text = new PIXI.Text(this.option, {
- fill: 0x446ADB,
- fontWeight: 600,
- fontSize: 32,
- wordWrap: true,
- wordWrapWidth: 900,
- align: 'center'
- });
- this.text.anchor.x = this.text.anchor.y = 0.5;
- this.addChild(this.text);
-
- this.scale.x = this.scale.y = 0;
- ct.tween.add({
- obj: this.scale,
- fields: {
- x: 1,
- y: 1
- },
- duration: 350,
- curve: ct.tween.easeOutQuad
- });
-
- eventKey: OnCreate
- - eventKey: OnPointerClick
- code: ct.room.story.say(this.option);
- arguments: {}
- lib: core
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
- - name: NextButton
- depth: 0
- uid: 4340a6a4-65fa-4bcf-b950-38716097f29e
- texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c
- extends: {}
- lastmod: 1661094168112
- events:
- - lib: core
- arguments: {}
- code: |-
- this.text = new PIXI.Text(this.option, {
- fill: 0x446ADB,
- fontWeight: 600,
- fontSize: 32,
- wordWrap: true,
- wordWrapWidth: 900,
- align: 'center'
- });
- this.text.anchor.x = this.text.anchor.y = 0.5;
- this.addChild(this.text);
-
- this.scale.x = this.scale.y = 0;
- ct.tween.add({
- obj: this.scale,
- fields: {
- x: 1,
- y: 1
- },
- duration: 350,
- curve: ct.tween.easeOutQuad
- });
-
- eventKey: OnCreate
- - eventKey: OnPointerClick
- code: |-
- ct.room.story.next();
- this.kill = true;
- arguments: {}
- lib: core
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
- - name: Blurb
- depth: 0
- uid: 04a0aea0-f448-4920-97ad-f98906ac0d7c
- texture: -1
- extends: {}
- lastmod: 1661094216534
- events:
- - lib: core
- arguments: {}
- code: |-
- this.text = new PIXI.Text(this.blurb, {
- fill: this.blurbColor || 0x446ADB,
- fontSize: 32,
- wordWrap: true,
- wordWrapWidth: this.blurbWidth || 1024
- });
- this.addChild(this.text);
- this.alpha = 0;
- this.y += 50;
-
- ct.tween.add({
- obj: this,
- fields: {
- y: this.y - 50,
- alpha: 1
- },
- duration: 500,
- curve: ct.tween.easeOutQuad
- })
- .then(() => {
- ct.room.story.next();
- });
- eventKey: OnCreate
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
- - name: RestartButton
- depth: 0
- uid: 9a5d6ecd-82b4-4b26-827b-08904fbaf962
- texture: e0cbccef-93ee-4c8a-ab19-4fcef639963c
- extends: {}
- lastmod: 1661094207455
- events:
- - lib: core
- arguments: {}
- code: |-
- this.text = new PIXI.Text('Restart', {
- fill: 0x446ADB,
- fontWeight: 600,
- fontSize: 32,
- wordWrap: true,
- wordWrapWidth: 900,
- align: 'center'
- });
- this.text.anchor.x = this.text.anchor.y = 0.5;
- this.addChild(this.text);
-
- this.scale.x = this.scale.y = 0;
- ct.tween.add({
- obj: this.scale,
- fields: {
- x: 1,
- y: 1
- },
- duration: 350,
- curve: ct.tween.easeOutQuad
- });
-
- eventKey: OnCreate
- - eventKey: OnPointerClick
- code: |-
- ct.rooms.switch(ct.room.name);
- this.kill = true;
- arguments: {}
- lib: core
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
- - name: TheGirl
- depth: 0
- uid: 3c91a07b-0497-4623-a244-071a4e1951d8
- texture: bc65f552-4e0c-407e-aee0-9dedd834b727
- extends: {}
- lastmod: 1661094213542
- events:
- - lib: core
- arguments: {}
- code: |-
- ct.tween.add({
- obj: this,
- fields: {
- x: ct.camera.width * 0.15
- },
- duration: 500,
- curve: ct.tween.easeOutQuad
- });
-
- this.scale.x = this.scale.y = 1.2;
- eventKey: OnCreate
- type: template
- loopAnimation: true
- visible: true
- blendMode: normal
- animationFPS: 30
- playAnimationOnStart: false
-sounds:
- - name: Hehe
- uid: 0bd4a1eb-b5f1-4047-a8dd-56feca282803
- origname: s0bd4a1eb-b5f1-4047-a8dd-56feca282803.mp3
- lastmod: 1570005238168
-styles: []
-rooms:
- - name: Main
- onstep: ''
- ondraw: ''
- onleave: ''
- width: 1920
- height: 1080
- backgrounds: []
- copies:
- - x: 1536
- 'y': 576
- opacity: 1
- tint: 16777215
- scale:
- x: 1
- 'y': 1
- rotation: 0
- uid: 9e7aec96-1ad3-4679-a248-01180284e78e
- exts: {}
- customProperties: {}
- tiles:
- - depth: -10
- tiles: []
- extends: {}
- hidden: false
- uid: d21d2804-d690-4c65-9657-7a1486b7f1d9
- thumbnail: 7a1486b7f1d9
- gridX: 64
- gridY: 64
- lastmod: 1661072102178
- extends: {}
- backgroundColor: '#FFFFFF'
- events:
- - lib: core
- arguments: {}
- code: |-
- var latestBlurb; // we will need it to accurately position text lines
-
- ct.yarn.openFromFile('theStory.json?q=' + Math.random())
- .then(story => {
- this.story = story;
- storyEngine(story); // see it in the Settings tab -> Scripts
- });
-
-
- this.nodeTitle = new PIXI.Text('Loading the awesomeness…', {
- fill: 0x446ADB,
- fontSize: 24,
- wordWrap: true,
- wordWrapWidth: 1024
- });
- this.nodeTitle.x = 100;
- this.nodeTitle.y = 50;
- this.addChild(this.nodeTitle);
- eventKey: OnRoomStart
- type: room
- simulate: true
- isUi: false
- follow: -1
- - name: Micro
- onstep: ''
- ondraw: ''
- onleave: ''
- width: 1920
- height: 1080
- backgrounds: []
- copies:
- - x: 1536
- 'y': 448
- opacity: 1
- tint: 16777215
- scale:
- x: 1
- 'y': 1
- rotation: 0
- uid: 9e7aec96-1ad3-4679-a248-01180284e78e
- exts: {}
- customProperties: {}
- tiles:
- - depth: -10
- tiles: []
- extends: {}
- hidden: false
- uid: cb9565fc-6666-4f0c-bc6c-b49f813ea9ce
- thumbnail: b49f813ea9ce
- gridX: 64
- gridY: 64
- lastmod: 1661072103899
- extends: {}
- backgroundColor: '#FFFFFF'
- events:
- - lib: core
- arguments: {}
- code: |-
- var latestBlurb; // we will need it to accurately position text lines
-
- ct.yarn.openFromFile('micro.json?q=' + Math.random())
- .then(story => {
- this.story = story;
- storyEngine(story); // see it in the Settings tab -> Scripts
- });
-
-
- this.nodeTitle = new PIXI.Text('Loading the awesomeness…', {
- fill: 0x446ADB,
- fontSize: 24,
- wordWrap: true,
- wordWrapWidth: 1024
- });
- this.nodeTitle.x = 100;
- this.nodeTitle.y = 50;
- this.addChild(this.nodeTitle);
- eventKey: OnRoomStart
- type: room
- simulate: true
- isUi: false
- follow: -1
- - name: Stop
- onstep: ''
- ondraw: ''
- onleave: ''
- width: 1920
- height: 1080
- backgrounds: []
- copies:
- - x: 1536
- 'y': 448
- opacity: 1
- tint: 16777215
- scale:
- x: 1
- 'y': 1
- rotation: 0
- uid: 9e7aec96-1ad3-4679-a248-01180284e78e
- exts: {}
- customProperties: {}
- tiles:
- - depth: -10
- tiles: []
- extends: {}
- hidden: false
- uid: 95f73a99-6402-4848-81a7-d96488130d15
- thumbnail: d96488130d15
- gridX: 64
- gridY: 64
- lastmod: 1661072105674
- extends: {}
- backgroundColor: '#FFFFFF'
- events:
- - lib: core
- arguments: {}
- code: |-
- var latestBlurb; // we will need it to accurately position text lines
-
- ct.yarn.openFromFile('stop.json?q=' + Math.random())
- .then(story => {
- this.story = story;
- storyEngine(story); // see it in the Settings tab -> Scripts
- });
-
-
- this.nodeTitle = new PIXI.Text('Loading the awesomeness…', {
- fill: 0x446ADB,
- fontSize: 24,
- wordWrap: true,
- wordWrapWidth: 1024
- });
- this.nodeTitle.x = 100;
- this.nodeTitle.y = 50;
- this.addChild(this.nodeTitle);
- eventKey: OnRoomStart
- type: room
- simulate: true
- isUi: false
- follow: -1
- - name: Wait
- onstep: ''
- ondraw: ''
- onleave: ''
- width: 1920
- height: 1080
- backgrounds: []
- copies:
- - x: 1536
- 'y': 448
- opacity: 1
- tint: 16777215
- scale:
- x: 1
- 'y': 1
- rotation: 0
- uid: 9e7aec96-1ad3-4679-a248-01180284e78e
- exts: {}
- customProperties: {}
- tiles:
- - depth: -10
- tiles: []
- extends: {}
- hidden: false
- uid: 48b25b49-58b8-44ee-b4c5-cc6b9ea24c38
- thumbnail: cc6b9ea24c38
- gridX: 64
- gridY: 64
- lastmod: 1661072107514
- extends: {}
- backgroundColor: '#FFFFFF'
- events:
- - lib: core
- arguments: {}
- code: |-
- var latestBlurb; // we will need it to accurately position text lines
-
- ct.yarn.openFromFile('wait.json?q=' + Math.random())
- .then(story => {
- this.story = story;
- storyEngine(story); // see it in the Settings tab -> Scripts
- });
-
-
- this.nodeTitle = new PIXI.Text('Loading the awesomeness…', {
- fill: 0x446ADB,
- fontSize: 24,
- wordWrap: true,
- wordWrapWidth: 1024
- });
- this.nodeTitle.x = 100;
- this.nodeTitle.y = 50;
- this.addChild(this.nodeTitle);
- eventKey: OnRoomStart
- type: room
- simulate: true
- isUi: false
- follow: -1
-actions:
- - name: Press
- methods:
- - code: pointer.Primary
- - code: pointer.Any
- - name: AltPress
- methods:
- - code: pointer.Secondary
- - code: pointer.Double
- - name: Scale
- methods:
- - code: pointer.DeltaPinch
- - code: pointer.Wheel
-starting: 0
-settings:
- export:
- linux: true
- windows: true
- mac: true
- functionWrap: false
- codeModifier: none
- branding:
- icon: -1
- accent: '#446adb'
- invertPreloaderScheme: true
- rendering:
- maxFPS: 60
- pixelatedrender: false
- highDensity: true
- usePixiLegacy: true
- desktopMode: maximized
- mobileScreenOrientation: unspecified
- authoring:
- title: ! ''
- author: ! ''
- site: ! ''
- version:
- - 0
- - 0
- - 0
- versionPostfix: ''
- fps: 30
-scripts:
- - name: storyEngine
- code: |-
- var storyEngine = function (story) {
- var latestBlurb; // used to position lines nicely, see below at story.on('options')
- var spacing = true;
-
- story.on('newnode', () => {
- // Clear the previous buttons and blurbs
- for (const button of ct.templates.list['NextButton']) {
- button.kill = true;
- }
- for (const button of ct.templates.list['OptionButton']) {
- button.kill = true;
- }
- for (const blurb of ct.templates.list['Blurb']) {
- blurb.kill = true;
- }
- // Update the node's title
- ct.room.nodeTitle.text = story.title;
- });
-
- story.on('text', text => {
- // Yarn does not support single dialogue options, but we will fake
- // them to add a better feeling of authority
- if (story.character === 'Player') {
- // Clear the previous buttons
- for (const button of ct.templates.list['NextButton']) {
- button.kill = true;
- }
- ct.templates.copy('NextButton', ct.camera.width / 2, ct.camera.height - 60, {
- option: story.body // it will appear in button's OnCreate event as this.option
- });
- } else {
- let blurbY = 150; // the default blurb location
- // Get the latest blurb's bottom line, if any
- if (latestBlurb && !latestBlurb.kill) {
- blurbY = latestBlurb.y + latestBlurb.text.height + (spacing? 32 : 0);
- }
- if (story.character === 'Girl') {
- latestBlurb = ct.templates.copy('Blurb', 500, blurbY, {
- blurb: story.body, // it will appear in Blurb's OnCreate event as this.blurb
- blurbColor: 0xDB449A,
- blurbWidth: 800
- });
- } else {
- // Assume it is the cat's line
- latestBlurb = ct.templates.copy('Blurb', 100, blurbY, {
- blurb: story.body // it will appear in Blurb's OnCreate event as this.blurb
- });
- }
- }
- });
-
- story.on('options', options => {
- let buttonY = ct.camera.height - 60;
- for (const option of options) {
- ct.templates.copy('OptionButton', ct.camera.width / 2, buttonY, {
- option: option // it will appear in button's OnCreate event as this.option
- });
- buttonY -= 120;
- }
- });
-
- story.on('command', command => {
- const cat = ct.templates.list['TheCat'][0];
- if (command === 'cat happy') {
- cat.tex = 'CatHappy';
- } else if (command === 'cat thoughtful') {
- cat.tex = 'CatThoughtful';
- } else if (command === 'cat normal') {
- cat.tex = 'CatNormal';
- } else if (command === 'disable spacing') {
- spacing = false;
- } else if (command === 'enable spacing') {
- spacing = true;
- } else if (command === 'a girl walks in') {
- // Create it offscreen. The copy has an animation in its
- // OnCreate code and will roll in
- ct.templates.copy('TheGirl', -200, ct.camera.height);
- } else if (command === 'a girl walks out') {
- const theGirl = ct.templates.list['TheGirl'][0];
- ct.tween.add({
- obj: theGirl,
- fields: {
- x: -200
- },
- duration: 500
- }).then(() => {
- theGirl.kill = true;
- });
- } else {
- console.warn(`Unknown command "${command}"`);
- }
- story.next();
- });
-
- // The story has enden
- story.on('drained', () => {
- // Clear the previous buttons and blurbs
- for (const button of ct.templates.list['NextButton']) {
- button.kill = true;
- }
- for (const button of ct.templates.list['OptionButton']) {
- button.kill = true;
- }
- for (const blurb of ct.templates.list['Blurb']) {
- blurb.kill = true;
- }
- ct.templates.copy('RestartButton', ct.camera.width / 2, ct.camera.height - 60);
- });
-
- story.start();
- }
- - name: Background color
- code: ct.pixiApp.renderer.backgroundColor = 0xffffff;
-fonts: []
-startroom: d21d2804-d690-4c65-9657-7a1486b7f1d9
-emitterTandems: []
-palette: []
-contentTypes: []
-groups:
- fonts: []
- textures: []
- styles: []
- rooms: []
- sounds: []
- emitterTandems: []
- templates: []
-language: typescript
diff --git a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png b/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png
deleted file mode 100644
index 8b1d9e887..000000000
Binary files a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png and /dev/null differ
diff --git a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev.png b/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev.png
deleted file mode 100644
index bdd9d4420..000000000
Binary files a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev.png and /dev/null differ
diff --git a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev@2.png b/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev@2.png
deleted file mode 100644
index 9c3526bf0..000000000
Binary files a/src/examples/yarn/img/i4a04ffe6-c92a-428e-9fe4-5e8d2ce9c835.png_prev@2.png and /dev/null differ
diff --git a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png b/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png
deleted file mode 100644
index 99c7bde08..000000000
Binary files a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png and /dev/null differ
diff --git a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev.png b/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev.png
deleted file mode 100644
index 1a7ba354b..000000000
Binary files a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev.png and /dev/null differ
diff --git a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev@2.png b/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev@2.png
deleted file mode 100644
index 745025738..000000000
Binary files a/src/examples/yarn/img/i5aabca45-bbbd-4792-b3a9-ba79bd4a66fd.png_prev@2.png and /dev/null differ
diff --git a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png b/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png
deleted file mode 100644
index 03576b17d..000000000
Binary files a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png and /dev/null differ
diff --git a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev.png b/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev.png
deleted file mode 100644
index e8c2dfee7..000000000
Binary files a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev.png and /dev/null differ
diff --git a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev@2.png b/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev@2.png
deleted file mode 100644
index 2932c3f2f..000000000
Binary files a/src/examples/yarn/img/ibc65f552-4e0c-407e-aee0-9dedd834b727.png_prev@2.png and /dev/null differ
diff --git a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png b/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png
deleted file mode 100644
index b39dd0d5c..000000000
Binary files a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png and /dev/null differ
diff --git a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev.png b/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev.png
deleted file mode 100644
index e2a018aae..000000000
Binary files a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev.png and /dev/null differ
diff --git a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev@2.png b/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev@2.png
deleted file mode 100644
index 299c2dad7..000000000
Binary files a/src/examples/yarn/img/ie0cbccef-93ee-4c8a-ab19-4fcef639963c.png_prev@2.png and /dev/null differ
diff --git a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png b/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png
deleted file mode 100644
index 2e87417aa..000000000
Binary files a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png and /dev/null differ
diff --git a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev.png b/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev.png
deleted file mode 100644
index 7aaace2fb..000000000
Binary files a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev.png and /dev/null differ
diff --git a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev@2.png b/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev@2.png
deleted file mode 100644
index 8742f5a55..000000000
Binary files a/src/examples/yarn/img/iec75835b-2afd-4f96-9373-804b4f80a84d.png_prev@2.png and /dev/null differ
diff --git a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png
deleted file mode 100644
index 22fddb13a..000000000
Binary files a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38.png and /dev/null differ
diff --git a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png b/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png
deleted file mode 100644
index 2a522e48b..000000000
Binary files a/src/examples/yarn/img/r48b25b49-58b8-44ee-b4c5-cc6b9ea24c38@r.png and /dev/null differ
diff --git a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png
deleted file mode 100644
index 22fddb13a..000000000
Binary files a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15.png and /dev/null differ
diff --git a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png b/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png
deleted file mode 100644
index 2a522e48b..000000000
Binary files a/src/examples/yarn/img/r95f73a99-6402-4848-81a7-d96488130d15@r.png and /dev/null differ
diff --git a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png
deleted file mode 100644
index 22fddb13a..000000000
Binary files a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce.png and /dev/null differ
diff --git a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png b/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png
deleted file mode 100644
index 2a522e48b..000000000
Binary files a/src/examples/yarn/img/rcb9565fc-6666-4f0c-bc6c-b49f813ea9ce@r.png and /dev/null differ
diff --git a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png
deleted file mode 100644
index 000fd9259..000000000
Binary files a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9.png and /dev/null differ
diff --git a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png b/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png
deleted file mode 100644
index 576c558b0..000000000
Binary files a/src/examples/yarn/img/rd21d2804-d690-4c65-9657-7a1486b7f1d9@r.png and /dev/null differ
diff --git a/src/examples/yarn/img/splash.png b/src/examples/yarn/img/splash.png
deleted file mode 100644
index 2a522e48b..000000000
Binary files a/src/examples/yarn/img/splash.png and /dev/null differ
diff --git a/src/examples/yarn/include/micro.json b/src/examples/yarn/include/micro.json
deleted file mode 100644
index 0644b6557..000000000
--- a/src/examples/yarn/include/micro.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "title": "Start",
- "tags": "",
- "body": "The beginning\nAnd the end",
- "position": {
- "x": 815,
- "y": 180
- },
- "colorID": 0
- }
-]
\ No newline at end of file
diff --git a/src/examples/yarn/include/stop.json b/src/examples/yarn/include/stop.json
deleted file mode 100644
index 29c774911..000000000
--- a/src/examples/yarn/include/stop.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "title": "Start",
- "tags": "",
- "body": "A line 1/3\nA line 2/3\n<>\nA line 3/3",
- "position": {
- "x": 2780,
- "y": 1798
- },
- "colorID": 0
- }
-]
\ No newline at end of file
diff --git a/src/examples/yarn/include/theStory.json b/src/examples/yarn/include/theStory.json
deleted file mode 100644
index 25bba6079..000000000
--- a/src/examples/yarn/include/theStory.json
+++ /dev/null
@@ -1,272 +0,0 @@
-[
- {
- "title": "CommandsExample",
- "tags": "",
- "body": "<< cat normal >>\n\nI use them to change my texture and play sounds!\n\n<< cat happy >>\n<< sound(\"Hehe\")>> \n\nPlayer: Whoa! *O* Anything else??\n\n[[ExtraFunctions]]",
- "position": {
- "x": 4371,
- "y": 2306
- },
- "colorID": 1
- },
- {
- "title": "Conditionals",
- "tags": "",
- "body": "Make your stories data-driven!\n\nYarn has math variables, functions, comparisons and complex conditionals. For the full guide, see https://bit.ly/2p8LI6n\n\n[[Wonderful!|FAQ]]\n[[I want to see it in action.|SeeConditionals]]",
- "position": {
- "x": 4117,
- "y": 4490
- },
- "colorID": 0
- },
- {
- "title": "ExportProject",
- "tags": "",
- "body": "<< cat normal >> \n\nCat: Yarn is available at yarnspinnertool.github.io/YarnEditor/\nCat: Design your dialogue, then open the File menu → Save as JSON.\nPlayer: Done.\n\n[[ImportingToCt]]",
- "position": {
- "x": 4695,
- "y": 879
- },
- "colorID": 0
- },
- {
- "title": "Extending",
- "tags": "",
- "body": "<< cat happy >>\nThat's up to you! You have the power of ct.js, the flexibility of JavaScript and the exploitability of this module.\nYou can split your stories into scenes, load them into ct.js, and then create a room for each one, with nifty backgrounds and decorations. Much like in visual novels! *U*\nYou can use ct.room.story.raw instead of e.g. ct.room.story.text to get the source of a node and get extra variables that you put in the body of your node.\n\nIf you struggle, though, check out the source of this edutational demo!\n\nPlayer: Thanks!\n\n[[FAQ]]",
- "position": {
- "x": 3576,
- "y": 4484
- },
- "colorID": 0
- },
- {
- "title": "ExtraFunctions",
- "tags": "",
- "body": "<< cat normal >>\nYes, there are some extra variables that may help you:\n\nct.room.story.nodes is a map of all the nodes in your story. E.g. ct.room.story.nodes['ExtraFunctions'] will return the current node.\nct.room.story.raw is an object with the unprocessed body and other meta information exported by Yarn.\nct.room.story.startingNode is the name of, well, the starting node.\n\nPlayer: How do I combine it into a working game or dialogue system?\n\n[[TyingTogether]]",
- "position": {
- "x": 4650,
- "y": 2441
- },
- "colorID": 0
- },
- {
- "title": "FAQ",
- "tags": "",
- "body": "<>\n <>\n See? I don't have the default line now.\n <> \n<>\n <>\n Ask me anything. Well, anything that was hardcoded by Comigo.\n<>\n\n[[I'm done|Fin]]\n[[Projects…|FAQProjects]]\n[[Writing stories…|FAQStories]]\n[[More than text…|FAQMore]]",
- "position": {
- "x": 4689,
- "y": 3666
- },
- "colorID": 6
- },
- {
- "title": "FormatStory",
- "tags": "",
- "body": "<< cat normal >>\n\nct.yarn is based on bondage.js and has all its perks and issues. Generally, you can write however you want, but single dialogue options are not supported. There is a workaround, though, as you could already guess! ;) See the demo's source! \n\nPlayer: Oh, ok!\n\n[[FAQ]]",
- "position": {
- "x": 5359,
- "y": 3910
- },
- "colorID": 0
- },
- {
- "title": "GettingScene",
- "tags": "tag1 tag2",
- "body": "<< cat thoughtful >> \n\nThe details of the current node can be read by these variables:\n\nstory.character is the name of the current character. E.g. if you write \"John: Hey there!\" in Yarn, story.character will be \"John\". Names cannot contain spaces! \nstory.body is what I'm saying right now :)\nstory.text is character's name and body combined, in case it comes in handy.\nstory.title is the name of a node. You can view it in the top-left corner there.\nstory.command is the code of the current command, if any.\nstory.tags is an array of strings with tags written at Yarn Editor. Use them however you want!\n\n<>\n\n[[How do you use tags, though?|CommandsExample]]\n[[Are there any special variables?|ExtraFunctions]]",
- "position": {
- "x": 4659,
- "y": 2087
- },
- "colorID": 0
- },
- {
- "title": "ImportingToCt",
- "tags": "",
- "body": "<< cat normal >> \n\nOpen the downloaded JSON file and copy its contents. Now open ct.js. Click the \"Settings\" tab, and create a new script. Write the beginning of a line:\nvar myStory = \nand then paste the JSON file. That's enough, you can save the script and move on.\n\n[[Wait, where do I get this JSON file, again?|ExportProject]]\n[[Got it.|OpeningStory]]",
- "position": {
- "x": 4692,
- "y": 1164
- },
- "colorID": 0
- },
- {
- "title": "LoadingFile",
- "tags": "",
- "body": "<< cat thoughtful >>\n\nYou can use this code to load a story from an external file:\n\nct.yarn.openFromFile('myStory.json')\n.then(story => {\n ct.room.story = story;\n});\n\nJSON files are better placed into your projects folder → 'include' subdirectory.\n\nPlayer: Thanks!\n\n[[FAQ]]",
- "position": {
- "x": 4956,
- "y": 4509
- },
- "colorID": 0
- },
- {
- "title": "MultipleFiles",
- "tags": "",
- "body": "<< cat happy >>\n\nThat's actually easy. Export each one to JSON, create one Script in ct's Settings tab, and give them different variable names. E.g.\nvar detectiveMystery = {/*yarn json goes here*/};\n/*in the other Script*/\nvar bossMonologue = {/* another yarn json */};\n/* and in the other */\nvar iLoveChocolate = {/* here ct bursts into tears and eats all the chocolate */};\n\nAnd so on.\n\nYou can also use files in the `include` folder.\n\n[[Thanks!|FAQ]]\n[[Aaaand how do I use these files?|LoadingFile]]",
- "position": {
- "x": 5288,
- "y": 4380
- },
- "colorID": 0
- },
- {
- "title": "NavigatingStory",
- "tags": "",
- "body": "<< cat happy>>\n\nCat: I will use just \"story\" instead of ct.room.story from now, ok?\n\nPlayer: Of course!\n\n<< cat thoughtful >> \n\nWe should use story in our function calls:\nstory.start() will put us in the beginning of it.\nstory.next() will advance the story. It will pull new speech lines, new options, and load commands, but one thing at a time.\nstory.back() will switch to the previous story node. It works just once, though, like in ye olde MS Paint.\nstory.options is an array of strings with currently available dialogue options, if there are any.\nstory.say(string) will navigate the story further. The string must match with entries from ct.room.story.options.\n\n<< cat normal >> \n\n[[But what about the speech of NPCs and stuff?|GettingScene]]\n[[Can I jump to a specific position in story, by code?|StoryJump]]",
- "position": {
- "x": 4686,
- "y": 1761
- },
- "colorID": 0
- },
- {
- "title": "OpeningStory",
- "tags": "",
- "body": "The JSON file is still a raw product, though. In order to use your story, you should first load it in your game's code. For example, we can write the following to a room's OnCreate code:\nct.room.story = ct.yarn.openStory(myStory);\nBy default, ct.yarn will look for the 'Start' node. If you want to provide another default title, use ct.yarn.openStory(myStory, 'Specific title');\nct.yarn will read your JSON and structure it in a more useful format. You can now use other methods of ct.yarn to navigate your story, search for its nodes and get dialogue options.\n\nPlayer: Mhm…\n\n[[NavigatingStory]]",
- "position": {
- "x": 4695,
- "y": 1455
- },
- "colorID": 0
- },
- {
- "title": "SeeConditionals",
- "tags": "",
- "body": "Then go to FAQ page ;)\n\n<< set $seeConditional = true>> \n\nPlayer: Eh, ok…\n\n[[FAQ]]",
- "position": {
- "x": 4116,
- "y": 4777
- },
- "colorID": 1
- },
- {
- "title": "Sources",
- "tags": "",
- "body": "They are bundled with each fresh ct.js version. Check the ct.js folder > examples > yarn.ict.\n\nPlayer: Thanks!\n\n[[FAQ]]",
- "position": {
- "x": 3846,
- "y": 4491
- },
- "colorID": 0
- },
- {
- "title": "Start",
- "tags": "",
- "body": "<> \nCat: Hello, fellow game developer! You are playing the demo of using Yarn Editor for creating interactive dialogues in ct.js!\nCat: Due to the lack of writing skills of Comigo, it will be a purely educational experience, with no cute girls.\nPlayer: Such wow. I'm in.\n[[WhatIsYarn]]",
- "position": {
- "x": 4695,
- "y": 312
- },
- "colorID": 4
- },
- {
- "title": "StoryJump",
- "tags": "",
- "body": "<< cat happy >> \nYes! All nodes in Yarn are named, and you can use them to instantly jump to a specific node, out of your story's flow.\nThe function is ct.room.story.jump('SomeNode');\n<< cat thoughtful >> \nJust think about its debugging capabilities 👀\nIf you haven't specifically named all your story nodes in Yarn Editor, they all are probably just Node1, Node2, Node3… nothing fancy, really.\n\n<>\n\nPlayer: Ok, I got ya\n\n[[GettingScene]]",
- "position": {
- "x": 4361,
- "y": 1967
- },
- "colorID": 1
- },
- {
- "title": "WhatIsYarn",
- "tags": "",
- "body": "<> \nCat: Yarn Editor is an open-source tool for writing game dialogues.\n<> \nCat: Its license is MIT, much like ct.js, and it means that you can use Yarn Editor in any of your projects, be they commercial or not. For free.\nPlayer: Cool! So, how to use Yarn projects in ct.js?\n[[ExportProject]]",
- "position": {
- "x": 4699,
- "y": 587
- },
- "colorID": 0
- },
- {
- "title": "TyingTogether",
- "tags": "",
- "body": "There are two main ways:\n— by reading and utilizing variables like story.text or story.options,\n— or by listening story's events.\n\nPlayer: Let's see them.\n\n[[ByVariables]]",
- "position": {
- "x": 4654,
- "y": 2711
- },
- "colorID": 0
- },
- {
- "title": "ByVariables",
- "tags": "",
- "body": "<>\nIn the first case, you should check story.command, story.text and story.options.\n\nPlayer: Let's see an example.\n\n<>\n\nvar story = ct.room.story;\n<>\nif (ct.actions.Next.pressed) {\n if (story.text) { /* advance by buttons only when someone is talking */\n story.next();\n if (story.text) {\n /* create new blurbs */\n } else if (story.options) {\n /* create dialogue options */\n } else if (story.command) {\n /* custom logic goes here */\n }\n }\n}\n<>\n\nPlayer: Good, and by events?\n\n[[ByEvents]]",
- "position": {
- "x": 4650,
- "y": 2983
- },
- "colorID": 0
- },
- {
- "title": "ByEvents",
- "tags": "",
- "body": "<>\nIt is a bit simpler as you always execute the needed code:\n<>\n\nstory.on('text', text => {\n<>\n /* Someone said something, let's create a blurb for `text` variable */\n});\nstory.on('options', options => {\n /* we are now presented with dialogue options! We need to create reply buttons… */\n});\nstory.on('command', command => {\n /* custom actions may appear here */\n});\n<>\n\nPlayer: Now I feel immense power in my hands! But I still have questions…\n\n[[FAQ]]",
- "position": {
- "x": 4673,
- "y": 3280
- },
- "colorID": 0
- },
- {
- "title": "FAQProjects",
- "tags": "",
- "body": "Yes?\n\n[[How do I use multiple Yarn projects?|MultipleFiles]]\n[[Scripts are not that handy, especially when updating the story. Other options??|LoadingFile]]",
- "position": {
- "x": 4959,
- "y": 4191
- },
- "colorID": 2
- },
- {
- "title": "FAQStories",
- "tags": "",
- "body": "Yes?\n\n\n[[Any special formatting in the Yarn Editor?|FormatStory]]\n[[Can there be several characters at once?|MultipleCharacters]]",
- "position": {
- "x": 5428,
- "y": 3522
- },
- "colorID": 2
- },
- {
- "title": "FAQMore",
- "tags": "",
- "body": "Yes?\n\n[[This demo is cool! Where are its sources?|Sources]]\n[[What about conditionals and variables?|Conditionals]]\n[[How do I make transitions, effects and stuff?|Extending]]",
- "position": {
- "x": 3899,
- "y": 3989
- },
- "colorID": 2
- },
- {
- "title": "Fin",
- "tags": "",
- "body": "<>\n\nOk. Go make some great games now!\n\n<>",
- "position": {
- "x": 4678,
- "y": 5327
- },
- "colorID": 0
- },
- {
- "title": "MultipleCharacters",
- "tags": "",
- "body": "<>\n<>\n<> \n<>\n<> \n\n<>\nGirl: Kon'nichiwa!\n<>\nGirl: ct no Yarn mojūru wa hijō ni jūnandeari, fukusū no moji no enjin o kijutsu suru no wa hijō ni kantandesu.\n<>\nGirl: Kokode wa, komando o shiyō shite hyōji oyobi shūryō shi,-iro wa hensū story. Kyarakutā o shiyō shite settei shimasu.\n<>\n\nPlayer: ❤️_❤️\n\n<> \n\n<< wait(2000) >> \n\n[[DirtyLies]]\n",
- "position": {
- "x": 5424,
- "y": 3135
- },
- "colorID": 3
- },
- {
- "title": "DirtyLies",
- "tags": "",
- "body": "<> \n\nWell, ok, I lied about cute girls.\n\nPlayer: ❤️_❤️\n\n[[FAQ]]",
- "position": {
- "x": 5138,
- "y": 3129
- },
- "colorID": 3
- }
-]
\ No newline at end of file
diff --git a/src/examples/yarn/include/wait.json b/src/examples/yarn/include/wait.json
deleted file mode 100644
index f9751f78a..000000000
--- a/src/examples/yarn/include/wait.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "title": "Start",
- "tags": "",
- "body": "First line…\nPause…\n<>\nSecond line…",
- "position": {
- "x": 477,
- "y": 2188
- },
- "colorID": 0
- }
-]
\ No newline at end of file
diff --git a/src/examples/yarn/snd/s0bd4a1eb-b5f1-4047-a8dd-56feca282803.mp3 b/src/examples/yarn/snd/s0bd4a1eb-b5f1-4047-a8dd-56feca282803.mp3
deleted file mode 100644
index 5488154b3..000000000
Binary files a/src/examples/yarn/snd/s0bd4a1eb-b5f1-4047-a8dd-56feca282803.mp3 and /dev/null differ
diff --git a/src/icons/alert-octagon.svg b/src/icons/alert-octagon.svg
new file mode 100644
index 000000000..de9b03f21
--- /dev/null
+++ b/src/icons/alert-octagon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/anchor.svg b/src/icons/anchor.svg
new file mode 100644
index 000000000..e01627a3d
--- /dev/null
+++ b/src/icons/anchor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/archive.svg b/src/icons/archive.svg
new file mode 100644
index 000000000..428882c87
--- /dev/null
+++ b/src/icons/archive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/bitmap-font.svg b/src/icons/bitmap-font.svg
new file mode 100644
index 000000000..23ecae0cf
--- /dev/null
+++ b/src/icons/bitmap-font.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/icons/catnip.svg b/src/icons/catnip.svg
new file mode 100644
index 000000000..4a79bf20a
--- /dev/null
+++ b/src/icons/catnip.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/icons/divide-circle.svg b/src/icons/divide-circle.svg
new file mode 100644
index 000000000..03a50b747
--- /dev/null
+++ b/src/icons/divide-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/function.svg b/src/icons/function.svg
new file mode 100644
index 000000000..8098f9b5d
--- /dev/null
+++ b/src/icons/function.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/icons/mail.svg b/src/icons/mail.svg
new file mode 100644
index 000000000..2af169e83
--- /dev/null
+++ b/src/icons/mail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/minus-circle.svg b/src/icons/minus-circle.svg
new file mode 100644
index 000000000..80c0de1e1
--- /dev/null
+++ b/src/icons/minus-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/thumbs-down.svg b/src/icons/thumbs-down.svg
new file mode 100644
index 000000000..3e7bcd6d9
--- /dev/null
+++ b/src/icons/thumbs-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/thumbs-up.svg b/src/icons/thumbs-up.svg
new file mode 100644
index 000000000..226c44d85
--- /dev/null
+++ b/src/icons/thumbs-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/x-circle.svg b/src/icons/x-circle.svg
new file mode 100644
index 000000000..94aad5e56
--- /dev/null
+++ b/src/icons/x-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/x-octagon.svg b/src/icons/x-octagon.svg
new file mode 100644
index 000000000..85431985d
--- /dev/null
+++ b/src/icons/x-octagon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/js/3rdparty/QRCode.js b/src/js/3rdparty/QRCode.js
deleted file mode 100644
index 993e88f39..000000000
--- a/src/js/3rdparty/QRCode.js
+++ /dev/null
@@ -1 +0,0 @@
-var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push(' ');g.push(" ")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();
\ No newline at end of file
diff --git a/src/js/3rdparty/alertify.js b/src/js/3rdparty/alertify.js
index d2d0d0222..d648227e6 100644
--- a/src/js/3rdparty/alertify.js
+++ b/src/js/3rdparty/alertify.js
@@ -395,7 +395,7 @@
_alertify.injectCSS();
- const {soundbox} = require('./data/node_requires/3rdparty/soundbox');
+ const {soundbox} = require('src/node_requires/3rdparty/soundbox');
return {
_$$alertify: _alertify,
parent(elem) {
diff --git a/src/js/3rdparty/color.js b/src/js/3rdparty/color.js
index b7ee0c3b4..85ed8b36a 100644
--- a/src/js/3rdparty/color.js
+++ b/src/js/3rdparty/color.js
@@ -994,11 +994,5 @@ c = Color(str);
return length > 0;
};
net.brehaut.Color = Color;
- global.brehautColor = Color;
+ window.brehautColor = Color;
}).call(net.brehaut);
-
-/* Export to CommonJS
- */
-if (typeof module !== 'undefined') {
- module.exports = net.brehaut.Color;
-}
diff --git a/src/js/3rdparty/debounce.js b/src/js/3rdparty/debounce.js
index 1fdbd3dc2..de7e8b2eb 100644
--- a/src/js/3rdparty/debounce.js
+++ b/src/js/3rdparty/debounce.js
@@ -3,7 +3,6 @@
var slice = function (arr, i) {
return Array.prototype.slice.call(arr, i);
};
-
/*
Returns a new function that will delay execution
of the original function for the specified number
@@ -29,4 +28,4 @@
};
}
window.debounce = cumulativeDelayed;
-})(this);
+})(window);
diff --git a/src/js/3rdparty/long-press-event.js b/src/js/3rdparty/long-press-event.js
index af4951cf7..0d17dee53 100644
--- a/src/js/3rdparty/long-press-event.js
+++ b/src/js/3rdparty/long-press-event.js
@@ -96,4 +96,4 @@
clearTimeout(timer);
});
-}(this, document));
+}(window, document));
diff --git a/src/js/3rdparty/mountMonaco.js b/src/js/3rdparty/mountMonaco.js
new file mode 100644
index 000000000..9deb92818
--- /dev/null
+++ b/src/js/3rdparty/mountMonaco.js
@@ -0,0 +1,85 @@
+// @see https://github.com/microsoft/monaco-editor-samples/blob/master/nwjs-amd-v2/index.html
+const monaco = require('monaco-editor');
+window.monaco = monaco;
+self.MonacoEnvironment = {
+ getWorkerUrl: function (moduleId, label) {
+ if (label === 'json') {
+ return './data/monaco-workers/vs/language/json/json.worker.js';
+ }
+ if (label === 'css' || label === 'scss' || label === 'less') {
+ return './data/monaco-workers/vs/language/css/css.worker.js';
+ }
+ if (label === 'html' || label === 'handlebars' || label === 'razor') {
+ return './data/monaco-workers/vs/language/html/html.worker.js';
+ }
+ if (label === 'typescript' || label === 'javascript') {
+ return './data/monaco-workers/vs/language/typescript/ts.worker.js';
+ }
+ return './data/monaco-workers/vs/editor/editor.worker.js';
+ }
+};
+// workaround monaco-css not understanding the environment
+self.module = void 0;
+// workaround monaco-typescript not understanding the environment
+self.process.browser = true;
+
+const monacoConfig = {
+ hovers: false,
+ codeActions: true,
+ completionItems: true,
+ definitions: true,
+ diagnostics: true,
+ documentHighlights: true,
+ // eslint-disable-next-line id-length
+ documentRangeFormattingEdits: true,
+ documentSymbols: true,
+ inlayHints: true,
+ onTypeFormattingEdits: true,
+ references: true,
+ rename: true,
+ signatureHelp: true
+};
+// Need to set defaults before any editor is created
+monaco.languages.typescript.typescriptDefaults.setModeConfiguration(monacoConfig);
+monaco.languages.typescript.javascriptDefaults.setModeConfiguration(monacoConfig);
+
+// Extended typescript tokenizer
+const typescriptTokenizer = require('src/node_requires/typescriptTokenizer.js').language;
+// Extended coffeescript tokenizer & suggestions provider
+const coffeescriptTokenizer = require('src/node_requires/coffeescriptTokenizer.js').language;
+const {CompletionsProvider: CoffeeCompletionsProvider} = require('src/node_requires/coffeescriptSuggestionProvider');
+const {HoverProvider: TsHoverProvider} = require('src/node_requires/catniplessTsHoverProvider.js');
+
+themeManager.loadBuiltInThemes();
+// To rollback to a default theme if the set one is inaccessible ⤵
+themeManager.loadTheme();
+
+// I have no guilt of this solution
+// @see https://github.com/microsoft/monaco-editor/issues/884
+monaco.editor.create(document.createElement('textarea'), {
+ language: 'typescript',
+ value: '(:'
+});
+monaco.editor.create(document.createElement('textarea'), {
+ language: 'coffeescript',
+ value: ':)'
+});
+setTimeout(() => {
+
+ monaco.languages.setMonarchTokensProvider('typescript', typescriptTokenizer);
+ monaco.languages.setMonarchTokensProvider('coffeescript', coffeescriptTokenizer);
+ monaco.languages.typescript.getTypeScriptWorker()
+ .then((client) => {
+ const coffeescriptSuggestions = new CoffeeCompletionsProvider(client);
+ monaco.languages.registerCompletionItemProvider('coffeescript', coffeescriptSuggestions);
+
+ const hoverProvider = new TsHoverProvider(client);
+ monaco.languages.registerHoverProvider('typescript', hoverProvider);
+ monaco.languages.registerHoverProvider('javascript', hoverProvider);
+
+ window.signals.trigger('monacoBooted');
+ });
+}, 1000);
+
+window.signals = window.signals || riot.observable({});
+window.orders = window.orders || riot.observable({});
diff --git a/src/js/3rdparty/riot.min.js b/src/js/3rdparty/riot.min.js
deleted file mode 100644
index e207a353b..000000000
--- a/src/js/3rdparty/riot.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Riot v3.6.1, @license MIT */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.riot=t.riot||{})}(this,function(t){"use strict";function e(t){return Zt.test(t)}function n(t){return typeof t===$t}function r(t){return t&&typeof t===Rt}function i(t){return typeof t===Pt}function o(t){return typeof t===It}function a(t){return i(t)||null===t||""===t}function s(t){return Array.isArray(t)||t instanceof Array}function u(t,e){var n=Object.getOwnPropertyDescriptor(t,e);return i(t[e])||n&&n.writable}function l(t){return Kt.test(t)}function c(t,e){return Array.prototype.slice.call((e||document).querySelectorAll(t))}function f(t,e){return(e||document).querySelector(t)}function p(){return document.createDocumentFragment()}function h(){return document.createTextNode("")}function d(t){return!!t.ownerSVGElement}function g(t){return"svg"===t?document.createElementNS(Ut,t):document.createElement(t)}function m(t,e){if(i(t.innerHTML)){var n=(new DOMParser).parseFromString(e,"application/xml"),r=t.ownerDocument.importNode(n.documentElement,!0);t.appendChild(r)}else t.innerHTML=e}function v(t,e){t.style.display=e?"":"none",t.hidden=!e}function y(t,e){t.removeAttribute(e)}function x(t){return Object.keys(t).reduce(function(e,n){return e+" "+n+": "+t[n]+";"},"")}function b(t,e){return t.getAttribute(e)}function _(t,e,n){var r=Vt.exec(e);r&&r[1]?t.setAttributeNS(Ht,r[1],n):t.setAttribute(e,n)}function w(t,e,n){t.insertBefore(e,n.parentNode&&n)}function O(t,e){if(t)for(var n;n=qt.exec(t);)e(n[1].toLowerCase(),n[2]||n[3]||n[4])}function N(t,e,n){if(t){var r,i=e(t,n);if(!1===i)return;for(t=t.firstChild;t;)r=t.nextSibling,N(t,e,i),t=r}}function j(t,e){for(var n=t?t.length:0,r=0;rr;)n--,U.apply(e[n],[e,n])}function U(t,e){t.splice(e,1),this.unmount(),dt(this.parent,this,this.__.tagName,!0)}function V(t){var e=this;j(Object.keys(this.tags),function(n){st.apply(e.tags[n],[n,t])})}function B(t,e,n){n?yt.apply(this,[t,e]):w(t,this.root,e.root)}function z(t,e,n){n?vt.apply(this,[t,e]):w(t,this.root,e.root)}function F(t,e){e?vt.call(this,t):t.appendChild(this.root)}function D(t,e,n){y(t,At);var r,i=typeof b(t,Lt)!==It||y(t,Lt),a=ft(t),u=Ot[a],l=t.parentNode,c=h(),f=ot(t),d=b(t,Tt),g=[],m=[],v=!Ot[a],x="VIRTUAL"===t.tagName;return n=ie.loopKeys(n),n.isLoop=!0,d&&y(t,Tt),l.insertBefore(c,t),l.removeChild(t),n.update=function(){n.value=ie(n.val,e);var l=p(),h=n.value,y=!s(h)&&!o(h),b=c.parentNode;b&&(y?h=(r=h||!1)?Object.keys(h).map(function(t){return $(n,h[t],t)}):[]:r=!1,d&&(h=h.filter(function(t,r){return n.key&&!y?!!ie(d,$(n,t,r,e)):!!ie(d,L(Object.create(e),t))})),j(h,function(o,s){var c=i&&typeof o===Rt&&!r,p=m.indexOf(o),d=-1===p,y=!d&&c?p:s,_=g[y],w=s>=m.length,O=c&&d||!c&&!_;o=!r&&n.key?$(n,o,s):o,O?((_=new it(u,{parent:e,isLoop:!0,isAnonymous:v,tagName:a,root:t.cloneNode(v),item:o,index:s},t.innerHTML)).mount(),w?F.apply(_,[l||b,x]):z.apply(_,[b,g[s],x]),w||m.splice(s,0,o),g.splice(s,0,_),f&&ht(e.tags,a,_,!0)):y!==s&&c&&(C(h,m[y])&&(B.apply(_,[b,g[s],x]),g.splice(s,0,g.splice(y,1)[0]),m.splice(s,0,m.splice(y,1)[0])),n.pos&&(_[n.pos]=s),!f&&_.tags&&V.call(_,s)),_.__.item=o,_.__.index=s,_.__.parent=e,O||_.update(o)}),H(h,g),m=h.slice(),b.insertBefore(l,c))},n.unmount=function(){j(g,function(t){t.unmount()})},n}function K(t,e,n){var r=this;N(t,function(e,i){var o,a,s,u=e.nodeType,l=i.parent;if(!n&&e===t)return{parent:l};if(3===u&&"STYLE"!==e.parentNode.tagName&&ie.hasExpr(e.nodeValue)&&l.children.push({dom:e,expr:e.nodeValue}),1!==u)return i;var c="VIRTUAL"===e.tagName;if(o=b(e,At))return c&&_(e,"loopVirtual",!0),l.children.push(D(e,r,o)),!1;if(o=b(e,Tt))return l.children.push(Object.create(ue).init(e,r,o)),!1;if((a=b(e,Et))&&ie.hasExpr(a))return l.children.push({isRtag:!0,expr:a,dom:e,attrs:[].slice.call(e.attributes)}),!1;if(s=ot(e),c&&(b(e,"virtualized")&&e.parentElement.removeChild(e),s||b(e,"virtualized")||b(e,"loopVirtual")||(s={tmpl:e.outerHTML})),s&&(e!==t||n)){if(!c||b(e,Et)){var f={root:e,parent:r,hasImpl:!0};return l.children.push(ut(s,f,e.innerHTML,r)),!1}_(e,"virtualized",!0);var p=new it({tmpl:e.outerHTML},{root:e,parent:r},e.innerHTML);l.children.push(p)}return q.apply(r,[e,e.attributes,function(t,e){e&&l.children.push(e)}]),{parent:l}},{parent:{children:e}})}function q(t,n,r){var i=this;j(n,function(n){if(!n)return!1;var o,a=n.name,s=e(a);C(Ct,a)?o=Object.create(le).init(t,i,a,n.value):ie.hasExpr(n.value)&&(o={dom:t,expr:n.value,attr:a,bool:s}),r(n,o)})}function W(t,e,n){var r="o"===n[0],i=r?"select>":"table>";if(t.innerHTML="<"+i+e.trim()+""+i,i=t.firstChild,r)i.selectedIndex=-1;else{var o=de[n];o&&1===i.childElementCount&&(i=f(o,i))}return i}function Z(t,e){if(!ce.test(t))return t;var n={};return e=e&&e.replace(pe,function(t,e,r){return n[e]=n[e]||r,""}).trim(),t.replace(he,function(t,e,r){return n[e]||r||""}).replace(fe,function(t,n){return e||n||""})}function G(t,e,n){var r=t&&t.match(/^\s*<([-\w]+)/),i=r&&r[1].toLowerCase(),o=g(n?ve:me);return t=Z(t,e),ge.test(i)?o=W(o,t,i):m(o,t),o}function Q(t,e){var n=this,r=n.name,i=n.tmpl,o=n.css,a=n.attrs,s=n.onCreate;return Ot[r]||(J(r,i,o,a,s),Ot[r].class=this.constructor),gt(t,r,e,this),o&&ee.inject(),this}function J(t,e,r,i,o){return n(i)&&(o=i,/^[\w\-]+\s?=/.test(r)?(i=r,r=""):i=""),r&&(n(r)?o=r:ee.add(r)),t=t.toLowerCase(),Ot[t]={name:t,tmpl:e,attrs:i,fn:o},t}function X(t,e,n,r,i){return n&&ee.add(n,t),Ot[t]={name:t,tmpl:e,attrs:r,fn:i},t}function Y(t,e,n){function i(t){if(t.tagName){var r,o=b(t,Et);e&&o!==e&&(o=e,_(t,Et,e)),(r=gt(t,o||t.tagName.toLowerCase(),n))&&u.push(r)}else t.length&&j(t,i)}var a,s,u=[];if(ee.inject(),r(e)&&(n=e,e=0),a=o(t)?(t="*"===t?s=xt():t+xt(t.split(/, */)))?c(t):[]:t,"*"===e){if(e=s||xt(),a.tagName)a=c(e,a);else{var l=[];j(a,function(t){return l.push(c(e,t))}),a=l}e=0}return i(a),u}function tt(t,e,o){if(r(t))tt("__"+be+++"__",t,!0);else{var a=o?xe:ye;if(!e){if(i(a[t]))throw new Error("Unregistered mixin: "+t);return a[t]}a[t]=n(e)?L(e.prototype,a[t]||{})&&e:L(a[t]||{},e)}}function et(){return j(wt,function(t){return t.update()})}function nt(t){Ot[t]=null}function rt(t,e,n,r,i){if(!t||!n){var o=!n&&t?this:e||this;j(i,function(t){t.expr&&P.call(o,[t.expr]),r[E(t.name).replace(jt,"")]=t.expr?t.expr.value:t.value})}}function it(t,e,r){void 0===t&&(t={}),void 0===e&&(e={});var i,a=L({},e.opts),s=e.parent,u=e.isLoop,l=!!e.isAnonymous,c=se.skipAnonymousTags&&l,f=pt(e.item),p=e.index,h=[],g=[],v=[],x=e.root,b=e.tagName||ft(x),w="virtual"===b,N=!w&&!t.tmpl,E=[];c||oe(this),t.name&&x._tag&&x._tag.unmount(!0),this.isMounted=!1,A(this,"__",{isAnonymous:l,instAttrs:h,innerHTML:r,tagName:b,index:p,isLoop:u,isInline:N,listeners:[],virts:[],tail:null,head:null,parent:null,item:null}),A(this,"_riot_id",++we),A(this,"root",x),L(this,{opts:a},f),A(this,"parent",s||null),A(this,"tags",{}),A(this,"refs",{}),N||u&&l?i=x:(w||(x.innerHTML=""),i=G(t.tmpl,r,d(x))),A(this,"update",function(t){var e={},r=this.isMounted&&!c;return t=pt(t),L(this,t),rt.apply(this,[u,s,l,e,h]),r&&this.isMounted&&n(this.shouldUpdate)&&!this.shouldUpdate(t,e)?this:(u&&l&&at.apply(this,[this.parent,E]),L(a,e),r&&this.trigger("update",t),P.call(this,v),r&&this.trigger("updated"),this)}.bind(this)),A(this,"mixin",function(){var t=this;return j(arguments,function(e){var r,i,a=[],s=["init","__proto__"];e=o(e)?tt(e):e,r=n(e)?new e:e;var u=Object.getPrototypeOf(r);do{a=a.concat(Object.getOwnPropertyNames(i||r))}while(i=Object.getPrototypeOf(i||r));j(a,function(e){if(!C(s,e)){var i=Object.getOwnPropertyDescriptor(r,e)||Object.getOwnPropertyDescriptor(u,e),o=i&&(i.get||i.set);!t.hasOwnProperty(e)&&o?Object.defineProperty(t,e,i):t[e]=n(r[e])?r[e].bind(t):r[e]}}),r.init&&r.init.bind(t)()}),this}.bind(this)),A(this,"mount",function(){var e=this;x._tag=this,q.apply(s,[x,x.attributes,function(t,n){!l&&le.isPrototypeOf(n)&&(n.tag=e),t.expr=n,h.push(t)}]),g=[],O(t.attrs,function(t,e){g.push({name:t,value:e})}),q.apply(this,[x,g,function(t,e){e?v.push(e):_(x,t.name,t.value)}]),rt.apply(this,[u,s,l,a,h]);var n=tt(Nt);if(n&&!c)for(var r in n)n.hasOwnProperty(r)&&e.mixin(n[r]);if(t.fn&&t.fn.call(this,a),c||this.trigger("before-mount"),K.apply(this,[i,v,l]),this.update(f),!l&&!N)for(;i.firstChild;)x.appendChild(i.firstChild);if(A(this,"root",x),A(this,"isMounted",!0),!c){if(this.parent){var o=lt(this.parent);o.one(o.isMounted?"updated":"mount",function(){e.trigger("mount")})}else this.trigger("mount");return this}}.bind(this)),A(this,"unmount",function(e){var n,r=this,i=this.root,o=i.parentNode,a=wt.indexOf(this);return c||this.trigger("before-unmount"),O(t.attrs,function(t){T(t,jt)&&(t=t.slice(jt.length)),y(x,t)}),this.__.listeners.forEach(function(t){Object.keys(t[St]).forEach(function(e){t.removeEventListener(e,t[St][e])})}),-1!==a&&wt.splice(a,1),(o||w)&&(s?(n=lt(s),w?Object.keys(this.tags).forEach(function(t){dt(n.tags,t,r.tags[t])}):(dt(n.tags,b,this),s!==n&&dt(s.tags,b,this))):m(i,""),o&&!e&&o.removeChild(i)),this.__.virts&&j(this.__.virts,function(t){t.parentNode&&t.parentNode.removeChild(t)}),ct(v),j(h,function(t){return t.expr&&t.expr.unmount&&t.expr.unmount()}),this.__.onUnmount&&this.__.onUnmount(),c||(this.trigger("unmount"),this.off("*")),A(this,"isMounted",!1),delete this.root._tag,this}.bind(this))}function ot(t){return t.tagName&&Ot[b(t,Et)||b(t,Et)||t.tagName.toLowerCase()]}function at(t,e){var n=this;j(Object.keys(t),function(r){var o=!l(r)&&C(e,r);(i(n[r])||o)&&(o||e.push(r),n[r]=t[r])})}function st(t,e){var n,r=this.parent;r&&(s(n=r.tags[t])?n.splice(e,0,n.splice(n.indexOf(this),1)[0]):ht(r.tags,t,this))}function ut(t,e,n,r){var i=new it(t,e,n),o=e.tagName||ft(e.root,!0),a=lt(r);return A(i,"parent",a),i.__.parent=r,ht(a.tags,o,i),a!==r&&ht(r.tags,o,i),i}function lt(t){for(var e=t;e.__.isAnonymous&&e.parent;)e=e.parent;return e}function ct(t){j(t,function(t){t instanceof it?t.unmount(!0):t.tagName?t.tag.unmount(!0):t.unmount&&t.unmount()})}function ft(t,e){var n=ot(t),r=!e&&b(t,Et);return r&&!ie.hasExpr(r)?r:n?n.name:t.tagName.toLowerCase()}function pt(t){if(!(t instanceof it||t&&n(t.trigger)))return t;var e={};for(var r in t)Kt.test(r)||(e[r]=t[r]);return e}function ht(t,e,n,r,o){var a=t[e],u=s(a),l=!i(o);if(!a||a!==n)if(!a&&r)t[e]=[n];else if(a)if(u){var c=a.indexOf(n);if(c===o)return;-1!==c&&a.splice(c,1),l?a.splice(o,0,n):a.push(n)}else t[e]=[a,n];else t[e]=n}function dt(t,e,n,r){if(s(t[e])){var i=t[e].indexOf(n);-1!==i&&t[e].splice(i,1),t[e].length?1!==t[e].length||r||(t[e]=t[e][0]):delete t[e]}else delete t[e]}function gt(t,e,n,r){var i=Ot[e],o=Ot[e].class,a=r||(o?Object.create(o.prototype):{}),s=t._innerHTML=t._innerHTML||t.innerHTML,u=L({root:t,opts:n},{parent:n?n.parent:null});return i&&t&&it.apply(a,[i,u,s]),a&&a.mount&&(a.mount(!0),C(wt,a)||wt.push(a)),a}function mt(t,e){var n=p();vt.call(t,n),e.parentNode.replaceChild(n,e)}function vt(t,e){var n,r,i=this,o=h(),a=h(),s=p();for(this.root.insertBefore(o,this.root.firstChild),this.root.appendChild(a),this.__.head=r=o,this.__.tail=a;r;)n=r.nextSibling,s.appendChild(r),i.__.virts.push(r),r=n;e?t.insertBefore(s,e.__.head):t.appendChild(s)}function yt(t,e){for(var n,r=this,i=this.__.head,o=p();i;)if(n=i.nextSibling,o.appendChild(i),(i=n)===r.__.tail){o.appendChild(i),t.insertBefore(o,e.__.head);break}}function xt(t){if(!t){var e=Object.keys(Ot);return e+xt(e)}return t.filter(function(t){return!/[^-\w]/.test(t)}).reduce(function(t,e){var n=e.trim().toLowerCase();return t+",["+Et+'="'+n+'"]'},"")}var bt,_t,wt=[],Ot={},Nt="__global_mixin",jt="riot-",Ct=["ref","data-ref"],Et="data-is",Tt="if",At="each",Lt="no-reorder",kt="show",Mt="hide",St="__riot-events__",It="string",Rt="object",Pt="undefined",$t="function",Ht="http://www.w3.org/1999/xlink",Ut="http://www.w3.org/2000/svg",Vt=/^xlink:(\w+)/,Bt=typeof window===Pt?void 0:window,zt=/^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?|opt(?:ion|group))$/,Ft=/^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?)$/,Dt=/^on/,Kt=/^(?:_(?:item|id|parent)|update|root|(?:un)?mount|mixin|is(?:Mounted|Loop)|tags|refs|parent|opts|trigger|o(?:n|ff|ne))$/,qt=/([-\w]+) ?= ?(?:"([^"]*)|'([^']*)|({[^}]*}))/g,Wt={viewbox:"viewBox"},Zt=/^(?:disabled|checked|readonly|required|allowfullscreen|auto(?:focus|play)|compact|controls|default|formnovalidate|hidden|ismap|itemscope|loop|multiple|muted|no(?:resize|shade|validate|wrap)?|open|reversed|seamless|selected|sortable|truespeed|typemustmatch)$/,Gt=0|(Bt&&Bt.document||{}).documentMode,Qt=Object.freeze({isBoolAttr:e,isFunction:n,isObject:r,isUndefined:i,isString:o,isBlank:a,isArray:s,isWritable:u,isReservedName:l}),Jt=Object.freeze({$$:c,$:f,createFrag:p,createDOMPlaceholder:h,isSvg:d,mkEl:g,setInnerHTML:m,toggleVisibility:v,remAttr:y,styleObjectToString:x,getAttr:b,setAttr:_,safeInsert:w,walkAttrs:O,walkNodes:N}),Xt={},Yt=[],te=!1;Bt&&(bt=function(){var t=g("style");_(t,"type","text/css");var e=f("style[type=riot]");return e?(e.id&&(t.id=e.id),e.parentNode.replaceChild(t,e)):document.getElementsByTagName("head")[0].appendChild(t),t}(),_t=bt.styleSheet);var ee={styleNode:bt,add:function(t,e){e?Xt[e]=t:Yt.push(t),te=!0},inject:function(){if(Bt&&te){te=!1;var t=Object.keys(Xt).map(function(t){return Xt[t]}).concat(Yt).join("\n");_t?_t.cssText=t:bt.innerHTML=t}}},ne=function(){function t(t,e){for(;--e>=0&&/\s/.test(t[e]););return e}var e="[{(,;:?=|&!^~>%*/",n=["case","default","do","else","in","instanceof","prefix","return","typeof","void","yield"],r=n.reduce(function(t,e){return t+e.slice(-1)},""),i=/^\/(?=[^*>/])[^[/\\]*(?:(?:\\.|\[(?:\\.|[^\]\\]*)*\])[^[\\/]*)*?\/[gimuy]*/,o=/[$\w]/;return function(a,s){var u=/.*/g,l=u.lastIndex=s++,c=u.exec(a)[0].match(i);if(c){var f=l+c[0].length,p=a[l=t(a,l)];if(l<0||~e.indexOf(p))return f;if("."===p)"."===a[l-1]&&(s=f);else if("+"===p||"-"===p)(a[--l]!==p||(l=t(a,l))<0||!o.test(a[l]))&&(s=f);else if(~r.indexOf(p)){for(var h=l+1;--l>=0&&o.test(a[l]););~n.indexOf(a.slice(l+1,h))&&(s=f)}}return s}}(),re=function(t){function e(t){return t}function n(t,e){return e||(e=x),new RegExp(t.source.replace(/{/g,e[2]).replace(/}/g,e[3]),t.global?u:"")}function r(t){if(t===m)return v;var e=t.split(" ");if(2!==e.length||p.test(t))throw new Error('Unsupported brackets "'+t+'"');return e=e.concat(t.replace(h,"\\").split(" ")),e[4]=n(e[1].length>1?/{[\S\s]*?}/:v[4],e),e[5]=n(t.length>3?/\\({|})/g:v[5],e),e[6]=n(v[6],e),e[7]=RegExp("\\\\("+e[3]+")|([[({])|("+e[3]+")|"+d,u),e[8]=t,e}function i(t){return t instanceof RegExp?a(t):x[t]}function o(t){(t||(t=m))!==x[8]&&(x=r(t),a=t===m?e:n,x[9]=a(v[9])),y=t}var a,s,u="g",l=/\/\*[^*]*\*+(?:[^*\/][^*]*\*+)*\//g,c=/"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|`[^`\\]*(?:\\[\S\s][^`\\]*)*`/g,f=c.source+"|"+/(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source+"|"+/\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?([^<]\/)[gim]*/.source,p=RegExp("[\\x00-\\x1F<>a-zA-Z0-9'\",;\\\\]"),h=/(?=[[\]()*+?.^$|])/g,d=c.source+"|"+/(\/)(?![*\/])/.source,g={"(":RegExp("([()])|"+d,u),"[":RegExp("([[\\]])|"+d,u),"{":RegExp("([{}])|"+d,u)},m="{ }",v=["{","}","{","}",/{[^}]*}/,/\\([{}])/g,/\\({)|{/g,RegExp("\\\\(})|([[({])|(})|"+d,u),m,/^\s*{\^?\s*([$\w]+)(?:\s*,\s*(\S+))?\s+in\s+(\S.*)\s*}/,/(^|[^\\]){=[\S\s]*?}/],y=void 0,x=[];return i.split=function(t,e,n){function r(t){d&&(t=d+t,d=""),e||a?f.push(t&&t.replace(n[5],"$1")):f.push(t)}function i(n,r,i){return i&&(r=ne(t,n)),e&&r>n+2&&(l="⁗"+h.length+"~",h.push(t.slice(n,r)),d+=t.slice(s,n)+l,s=r),r}n||(n=x);var o,a,s,u,l,c,f=[],p=n[6],h=[],d="";for(a=s=p.lastIndex=0;o=p.exec(t);){if(c=p.lastIndex,u=o.index,a){if(o[2]){var m=o[2],v=g[m],y=1;for(v.lastIndex=c;o=v.exec(t);)if(o[1]){if(o[1]===m)++y;else if(!--y)break}else v.lastIndex=i(o.index,v.lastIndex,o[2]);p.lastIndex=y?t.length:v.lastIndex;continue}if(!o[3]){p.lastIndex=i(u,c,o[4]);continue}}o[1]||(r(t.slice(s,u)),s=p.lastIndex,(p=n[6+(a^=1)]).lastIndex=s)}return t&&s %s",e.riotData.tagName||"Unknown tag",this.tmpl),console.log(this.data))}function n(t){var e=r(t);return"try{return "!==e.slice(0,11)&&(e="return "+e),new Function("E",e+";")}function r(t){var e,n=re.split(t.replace(s,'"'),1),r=n.qblocks;if(n.length>2||n[0]){var o,a,l=[];for(o=a=0;o1?"["+i.join(",")+'].join(" ").trim()':i[0]:o(t,e)}return t}function o(t,e,n){var r;return t=t.replace(p,function(t,e,n,i,o){return n&&(i=r?0:i+t.length,"this"!==n&&"global"!==n&&"window"!==n?(t=e+'("'+n+f+n,i&&(r="."===(o=o[i])||"("===o||"["===o)):i&&(r=!h.test(o.slice(i)))),t}),r&&(t="try{return "+t+"}catch(e){E(e,this)}"),n?t=(r?"function(){"+t+"}.call(this)":"("+t+")")+'?"'+n+'":""':e&&(t="function(v){"+(r?t.replace("return ","v="):"v=("+t+")")+';return v||v===0?v:""}.call(this)'),t}var a={};t.hasExpr=re.hasExpr,t.loopKeys=re.loopKeys,t.clearCache=function(){a={}},t.errorHandler=null;var s=/\u2057/g,u=/\u2057(\d+)~/g,l=/^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,c={"(":/[()]/g,"[":/[[\]]/g,"{":/[{}]/g},f='"in this?this:'+("object"!=typeof window?"global":"window")+").",p=/[,{][\$\w]+(?=:)|(^ *|[^$\w\.{])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,h=/^(?=(\.[$\w]+))\1(?:[^.[(]|$)/;return t.version=re.version="v3.0.8",t}(),oe=function(t){t=t||{};var e={},n=Array.prototype.slice;return Object.defineProperties(t,{on:{value:function(n,r){return"function"==typeof r&&(e[n]=e[n]||[]).push(r),t},enumerable:!1,writable:!1,configurable:!1},off:{value:function(n,r){if("*"!=n||r)if(r)for(var i,o=e[n],a=0;i=o&&o[a];++a)i==r&&o.splice(a--,1);else delete e[n];else e={};return t},enumerable:!1,writable:!1,configurable:!1},one:{value:function(e,n){function r(){t.off(e,r),n.apply(t,arguments)}return t.on(e,r)},enumerable:!1,writable:!1,configurable:!1},trigger:{value:function(r){var i,o,a,s=arguments,u=arguments.length-1,l=new Array(u);for(a=0;a|>([\S\s]*?)<\/yield\s*>|>)/gi,pe=/]*)['"]\s*>([\S\s]*?)<\/yield\s*>/gi,he=/ |>([\S\s]*?)<\/yield\s*>)/gi,de={tr:"tbody",th:"tr",td:"tr",col:"colgroup"},ge=Gt&&Gt<10?zt:Ft,me="div",ve="svg",ye={},xe=ye[Nt]={},be=0,_e=Object.freeze({Tag:Q,tag:J,tag2:X,mount:Y,mixin:tt,update:et,unregister:nt,version:"v3.6.1"}),we=0,Oe=Object.freeze({getTag:ot,inheritFrom:at,moveChildTag:st,initChildTag:ut,getImmediateCustomParentTag:lt,unmountAll:ct,getTagName:ft,cleanUpData:pt,arrayishAdd:ht,arrayishRemove:dt,mountTo:gt,makeReplaceVirtual:mt,makeVirtual:vt,moveVirtual:yt,selectTags:xt}),Ne=se,je={tmpl:ie,brackets:re,styleManager:ee,vdom:wt,styleNode:ee.styleNode,dom:Jt,check:Qt,misc:ae,tags:Oe},Ce=Q,Ee=J,Te=X,Ae=Y,Le=tt,ke=et,Me=nt,Se=oe,Ie=L({},_e,{observable:oe,settings:Ne,util:je});t.settings=Ne,t.util=je,t.Tag=Ce,t.tag=Ee,t.tag2=Te,t.mount=Ae,t.mixin=Le,t.update=ke,t.unregister=Me,t.version="v3.6.1",t.observable=Se,t.default=Ie,Object.defineProperty(t,"__esModule",{value:!0})});
diff --git a/src/js/addMigrationMethod.js b/src/js/addMigrationMethod.js
index 134239a42..c2c9d479b 100644
--- a/src/js/addMigrationMethod.js
+++ b/src/js/addMigrationMethod.js
@@ -1,11 +1,11 @@
-(function addMigrationMethod(window) {
+(function addMigrationMethod() {
window.migrationProcess = window.migrationProcess || [];
window.applyMigrationCode = function applyMigrationCode(version) {
const process = window.migrationProcess.find(process => process.version === version);
if (!process) {
throw new Error(`Cannot find migration code for version ${version}`);
}
- process.process(global.currentProject)
+ process.process(window.currentProject)
.then(() => window.alertify.success(`Applied migration code for version ${version}`, 'success', 3000));
};
-})(this);
+})();
diff --git a/src/js/codeEditorProjectAwareCompletions.js b/src/js/codeEditorProjectAwareCompletions.js
index d91185f45..0f973e894 100644
--- a/src/js/codeEditorProjectAwareCompletions.js
+++ b/src/js/codeEditorProjectAwareCompletions.js
@@ -10,7 +10,7 @@
};
const createTemplateProposals = function createTemplateProposals(range) {
- const {getOfType} = require('./data/node_requires/resources');
+ const {getOfType} = require('src/node_requires/resources');
// filtering is done by the Monaco editor
return getOfType('template').map(template => ({
label: template.name,
@@ -22,7 +22,7 @@
};
const createRoomProposals = function createRoomProposals(range) {
- const {getOfType} = require('./data/node_requires/resources');
+ const {getOfType} = require('src/node_requires/resources');
return getOfType('room').map(room => ({
label: room.name,
kind: monaco.languages.CompletionItemKind.Value,
@@ -33,7 +33,7 @@
};
const createSoundProposals = function createSoundProposals(range) {
- const {getOfType} = require('./data/node_requires/resources');
+ const {getOfType} = require('src/node_requires/resources');
return getOfType('sound').map(sound => ({
label: sound.name,
kind: monaco.languages.CompletionItemKind.Value,
@@ -44,7 +44,7 @@
};
const createActionProposals = function createActionProposals(range) {
- return global.currentProject.actions.map(action => ({
+ return window.currentProject.actions.map(action => ({
label: action.name,
kind: monaco.languages.CompletionItemKind.Property,
insertText: action.name,
@@ -53,7 +53,7 @@
};
const createPSProposals = function createPSProposals(range) {
- const {getOfType} = require('./data/node_requires/resources');
+ const {getOfType} = require('src/node_requires/resources');
return getOfType('tandem').map(et => ({
label: et.name,
kind: monaco.languages.CompletionItemKind.Value,
@@ -64,7 +64,7 @@
};
const createScriptProposals = function createScriptProposals(range) {
- const {getOfType} = require('./data/node_requires/resources');
+ const {getOfType} = require('src/node_requires/resources');
return getOfType('script').map(et => ({
label: et.name,
kind: monaco.languages.CompletionItemKind.Value,
diff --git a/src/js/exitConfirmer.js b/src/js/exitConfirmer.js
index 8296655ee..55868bb15 100644
--- a/src/js/exitConfirmer.js
+++ b/src/js/exitConfirmer.js
@@ -1,11 +1,11 @@
(function exitConfirmer() {
const win = nw.Window.get();
- const glob = require('./data/node_requires/glob');
+ const glob = require('src/node_requires/glob');
win.on('close', function exitConfirmListener() {
if (!glob.modified) {
win.close(true);
} else {
- const {getLanguageJSON} = require('./data/node_requires/i18n');
+ const {getLanguageJSON} = require('src/node_requires/i18n');
window.alertify.confirm(getLanguageJSON().common.reallyExitConfirm)
.then(e => {
if (e.buttonClicked === 'ok') {
diff --git a/src/js/exposeGlobalNodeModules.js b/src/js/exposeGlobalNodeModules.js
new file mode 100644
index 000000000..2ea296650
--- /dev/null
+++ b/src/js/exposeGlobalNodeModules.js
@@ -0,0 +1,7 @@
+window.riot = require('riot');
+window.PIXI = require('pixi.js');
+window.PIXI.sound = require('@pixi/sound').sound;
+window.PIXI.sound.filters = require('@pixi/sound').filters;
+window.PIXI.particles = require('@pixi/particle-emitter');
+window.hotkeys = require('src/node_requires/hotkeys')(document);
+window.themeManager = require('src/node_requires/themes');
diff --git a/src/js/gulpWatch.js b/src/js/gulpWatch.js
index adf2902a1..69d868591 100644
--- a/src/js/gulpWatch.js
+++ b/src/js/gulpWatch.js
@@ -17,7 +17,7 @@
}
}
};
- gulp.watch(['./index.html', './data/bundle.js', './data/js/**.js', './data/node_requires/**/*.js'], reload);
+ gulp.watch(['./index.html', './data/bundle.js'], reload);
const themeWatcher = gulp.watch(['./data/theme*.css']);
themeWatcher.on('change', src => {
diff --git a/src/js/projectMigrationScripts/0.3.0.js b/src/js/projectMigrationScripts/0.3.0.js
index 066aeb992..772aba43f 100644
--- a/src/js/projectMigrationScripts/0.3.0.js
+++ b/src/js/projectMigrationScripts/0.3.0.js
@@ -6,7 +6,7 @@ window.migrationProcess = window.migrationProcess || [];
window.migrationProcess.push({
version: '0.3.0',
process: project => new Promise((resolve) => {
- const generateGUID = require('./data/node_requires/generateGUID');
+ const generateGUID = require('src/node_requires/generateGUID');
/* replace numerical IDs with RFC4122 version 4 UIDs */
let startingRoom;
const graphmap = {},
diff --git a/src/js/projectMigrationScripts/4.0.0-next-3.js b/src/js/projectMigrationScripts/4.0.0-next-3.js
index 0006a9319..0f995d150 100644
--- a/src/js/projectMigrationScripts/4.0.0-next-3.js
+++ b/src/js/projectMigrationScripts/4.0.0-next-3.js
@@ -36,12 +36,12 @@ window.migrationProcess.push({
if (toPatchSounds.length > 0) {
const path = require('path');
const fs = require('fs-extra');
- const {createAsset, addSoundFile} = require('./data/node_requires/resources/sounds');
+ const {createAsset, addSoundFile} = require('src/node_requires/resources/sounds');
for (const sound of toPatchSounds) {
if (!sound.origname) {
continue;
}
- const oldFile = global.projdir + '/snd/s' + sound.uid + path.extname(sound.origname);
+ const oldFile = window.projdir + '/snd/s' + sound.uid + path.extname(sound.origname);
const preload = sound.isMusic;
for (const oldKey of ['origname', 'ogg', 'mp3', 'wav', 'poolSize', 'isMusic']) {
delete sound[oldKey];
diff --git a/src/js/projectMigrationScripts/4.1.0.js b/src/js/projectMigrationScripts/4.1.0.js
new file mode 100644
index 000000000..8a694b296
--- /dev/null
+++ b/src/js/projectMigrationScripts/4.1.0.js
@@ -0,0 +1,20 @@
+window.migrationProcess = window.migrationProcess || [];
+
+window.migrationProcess.push({
+ version: '4.1.0',
+ process: project => new Promise(resolve => {
+ const walker = collection => {
+ for (const item of collection) {
+ if (['template', 'behavior', 'room'].includes(item.type)) {
+ item.extendTypes = item.extendTypes ?? '';
+ } else if (item.type === 'script') {
+ item.variables = item.variables ?? [];
+ } else if (item.type === 'folder') {
+ walker(item.entries);
+ }
+ }
+ };
+ walker(project.assets);
+ resolve();
+ })
+});
diff --git a/src/js/projectMigrationScripts/5.0.0.js b/src/js/projectMigrationScripts/5.0.0.js
new file mode 100644
index 000000000..186b9f694
--- /dev/null
+++ b/src/js/projectMigrationScripts/5.0.0.js
@@ -0,0 +1,45 @@
+window.migrationProcess = window.migrationProcess || [];
+
+window.migrationProcess.push({
+ version: '5.0.0',
+ process: project => new Promise(resolve => {
+ // Catnip received global variables
+ project.globalVars ??= [];
+ // New fields for error reporting in exported games
+ const exportSettings = project.settings.export;
+ exportSettings.showErrors ??= true;
+ exportSettings.errorsLink ??= '';
+ const bundleSettings = exportSettings.bundleAssetTypes;
+ if (!('typefaces' in bundleSettings)) {
+ bundleSettings.typefaces = bundleSettings.fonts;
+ delete bundleSettings.fonts;
+ }
+ const walker = collection => {
+ for (const item of collection) {
+ // Fonts were reworked into typefaces
+ if (item.type === 'font') {
+ item.type = 'typeface';
+ item.fonts = [{
+ weight: item.weight,
+ italic: item.italic,
+ uid: item.uid,
+ origname: item.origname
+ }];
+ item.name = item.typefaceName;
+ delete item.typefaceName;
+ delete item.weight;
+ delete item.italic;
+ } else if (item.type === 'style') {
+ // Styles can now directly link to typefaces. Fill with an empty ref.
+ if (!item.typeface) {
+ item.typeface = -1;
+ }
+ } else if (item.type === 'folder') {
+ walker(item.entries);
+ }
+ }
+ };
+ walker(project.assets);
+ resolve();
+ })
+});
diff --git a/src/js/riotHotReload.js b/src/js/riotHotReload.js
deleted file mode 100644
index 9961ec8db..000000000
--- a/src/js/riotHotReload.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* eslint-disable no-loop-func */
-/* eslint-disable func-names */
-// A version of https://github.com/riot/hot-reload/tree/v3
-// adapted for browser-ish usage
-// Copyright (c) 2016 Riot (Gianluca Guarini) MIT
-
-/* eslint-disable no-underscore-dangle */
-(function addRiotHotReload() {
- const nonState = 'isMounted opts'.split(' ');
-
- const reload = function reload(name) {
- riot.util.styleManager.inject();
-
- var elems = document.querySelectorAll(`${name}, [data-is=${name}]`);
- const tags = [];
-
- for (let i = 0; i < elems.length; i++) {
- var el = elems[i],
- oldTag = el._tag,
- v;
- reload.trigger('before-unmount', oldTag);
- oldTag.unmount(true); // detach the old tag
-
- // reset the innerHTML and attributes to how they were before mount
- el.innerHTML = oldTag.__.innerHTML;
- (oldTag.__.instAttrs || []).forEach(function (attr) {
- el.setAttribute(attr.name, attr.value);
- });
-
- // copy options for creating the new tag
- var newOpts = {};
- for (const key in oldTag.opts) {
- newOpts[key] = oldTag.opts[key];
- }
- newOpts.parent = oldTag.parent;
-
- // create the new tag
- reload.trigger('before-mount', newOpts, oldTag);
- const [newTag] = riot.mount(el, newOpts);
-
- // copy state from the old to new tag
- for (const key in oldTag) {
- v = oldTag[key];
- if (nonState.indexOf(key) !== -1) {
- continue;
- }
- newTag[key] = v;
- }
- newTag.update();
- tags.push(newTag);
- reload.trigger('after-mount', newTag, oldTag);
- }
- return tags;
- };
-
- riot.observable(reload);
- riot.reload = reload;
-})();
diff --git a/src/js/utils/codeEditorHelpers.js b/src/js/utils/codeEditorHelpers.js
index bbf744336..f5dea1b74 100644
--- a/src/js/utils/codeEditorHelpers.js
+++ b/src/js/utils/codeEditorHelpers.js
@@ -1,7 +1,8 @@
+/* eslint-disable id-blacklist */
/* eslint-disable no-bitwise */
/* eslint-disable no-underscore-dangle */
(function codeEditorHelpers() {
- const {extend} = require('./data/node_requires/objectUtils');
+ const {extend} = require('src/node_requires/objectUtils');
const fs = require('fs-extra');
const path = require('path');
@@ -11,14 +12,21 @@
monaco.languages.typescript.javascriptDefaults.setEagerModelSync(true);
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
noLib: true,
- allowNonTsExtensions: true
+ allowNonTsExtensions: true,
+ target: 'ES2020',
+ downlevelIteration: true,
+ alwaysStrict: true
});
monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
noLib: true,
- allowNonTsExtensions: true
+ allowNonTsExtensions: true,
+ target: 'ES2020',
+ downlevelIteration: true,
+ alwaysStrict: true
});
+ // Disable the built-in hover provider
const ts = monaco.languages.typescript;
const globalsPromise = fs.readFile(path.join(__dirname, './data/typedefs/global.d.ts'), {
encoding: 'utf-8'
@@ -35,7 +43,7 @@
globalsPromise
]);
const exposer = `
- declare module 'node_modules/pixi.js' {
+ declare module 'pixi.js' {
export * from 'bundles/pixi.js/src/index';
}`;
const publiciser = `
@@ -98,7 +106,7 @@
* @returns {void}
*/
var extendHotkeys = (editor) => {
- const zoomInCombo = monaco.KeyMod.CtrlCmd | monaco.KeyCode.US_EQUAL;
+ const zoomInCombo = monaco.KeyMod.CtrlCmd | monaco.KeyCode.Equal;
editor.addCommand(zoomInCombo, function monacoZoomIn() {
var num = Number(localStorage.fontSize);
if (num < 48) {
@@ -108,7 +116,7 @@
}
return false;
});
- const zoomOutCombo = monaco.KeyMod.CtrlCmd | monaco.KeyCode.US_MINUS;
+ const zoomOutCombo = monaco.KeyMod.CtrlCmd | monaco.KeyCode.Minus;
editor.addCommand(zoomOutCombo, function monacoZoomOut() {
var num = Number(localStorage.fontSize);
if (num > 6) {
@@ -118,6 +126,31 @@
}
return false;
});
+
+ // Make certain hotkeys bubble up to ct.IDE instead of being consumed by monaco-editor.
+ editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => {
+ const event = new KeyboardEvent('keydown', {
+ key: 'S',
+ code: 'KeyS',
+ ctrlKey: true
+ });
+ document.body.dispatchEvent(event);
+ });
+ editor.addCommand(monaco.KeyCode.F5, () => {
+ const event = new KeyboardEvent('keydown', {
+ key: 'F5',
+ code: 'F5'
+ });
+ document.body.dispatchEvent(event);
+ });
+ editor.addCommand(monaco.KeyCode.F5 | monaco.KeyMod.Alt, () => {
+ const event = new KeyboardEvent('keydown', {
+ key: 'F5',
+ code: 'F5',
+ altKey: true
+ });
+ document.body.dispatchEvent(event);
+ });
};
const isRangeSelection = function (s) {
@@ -269,6 +302,7 @@
const model = editor.getModel();
const lastLine = model.getLineCount();
+ editor.setHiddenAreas([]);
editor.setHiddenAreas([{
startLineNumber: 1,
endLineNumber: 1
@@ -278,10 +312,12 @@
}]);
};
+ // When any of the code editor settings are changed,
+ // find all monaco instances and update their display settings
window.signals.on('codeFontUpdated', () => {
- const editorWrappers = document.querySelectorAll('.aCodeEditor');
- for (const editorWrap of editorWrappers) {
- editorWrap.codeEditor.updateOptions({
+ const editors = document.querySelectorAll('.monaco-editor');
+ for (const editor of editors) {
+ editor.parentElement.codeEditor.updateOptions({
fontLigatures: localStorage.codeLigatures !== 'off',
lineHeight: (localStorage.codeDense === 'off' ? 1.75 : 1.5) * Number(localStorage.fontSize),
fontSize: Number(localStorage.fontSize)
@@ -380,6 +416,7 @@
}
const model = codeEditor.getModel();
const lastLine = model.getLineCount();
+ codeEditor.setHiddenAreas([]);
codeEditor.setHiddenAreas([{
startLineNumber: 1,
endLineNumber: 1
@@ -402,4 +439,4 @@
return codeEditor;
};
-})(this);
+})();
diff --git a/src/node_requires/IExtensionField.d.ts b/src/node_requires/IExtensionField.d.ts
index 7b53da3b2..97113d80c 100644
--- a/src/node_requires/IExtensionField.d.ts
+++ b/src/node_requires/IExtensionField.d.ts
@@ -60,7 +60,7 @@ declare interface IExtensionField {
arrayLength?: number,
/** For type === 'group', the grouped items. */
items?: IExtensionField[],
- /** For type === 'table' */
+ /** For type === 'table' */
fields?: IExtensionField[],
/**
* Whether to collect values and suggest them later
diff --git a/src/node_requires/IRiotTag.d.ts b/src/node_requires/IRiotTag.d.ts
index b10a8ba8a..9c6aac6cf 100644
--- a/src/node_requires/IRiotTag.d.ts
+++ b/src/node_requires/IRiotTag.d.ts
@@ -8,6 +8,7 @@ declare interface IRiotTag> {
opts: OptsTypes;
refs: Record;
root: HTMLElement;
+ parent: IRiotTag;
// Fields ct.js actively uses in its tags
@@ -18,6 +19,8 @@ declare interface IRiotTag> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
vocMeta?: Record>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
+ vocFull?: Record>;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
localizeField?: (obj: Record, field: string) => string;
// `wire` mixin
diff --git a/src/node_requires/catnip/blockUtils.ts b/src/node_requires/catnip/blockUtils.ts
new file mode 100644
index 000000000..973a88a03
--- /dev/null
+++ b/src/node_requires/catnip/blockUtils.ts
@@ -0,0 +1,306 @@
+/* eslint-disable max-depth */
+/* eslint-disable complexity */
+/* eslint-disable max-lines-per-function */
+import {usableDeclaration} from './declarationExtractor';
+
+const specials = /[_.]/g;
+const camels = /(\w)([A-Z])/g;
+export const niceBlockName = (name: string, lowercase?: boolean): string => {
+ name = name.replace(specials, ' ')
+ .replace(camels, val => `${val[0]} ${val[1].toLocaleLowerCase()}`);
+ if (!lowercase) {
+ return name.charAt(0).toLocaleUpperCase() + name.slice(1);
+ }
+ return name;
+};
+
+const sortHelper = {
+ command: -1,
+ computed: 1
+};
+
+const supportedTypes = ['string', 'number', 'boolean', 'wildcard', 'function'];
+
+const getPieces = (piecesAssets: Record, useful: usableDeclaration): (IBlockPieceArgument | IBlockPieceBlocks)[] =>
+ (useful.kind === 'function' ? useful.args : []).map(arg => {
+ if (arg.type === 'BLOCKS') {
+ return {
+ type: 'blocks',
+ key: arg.name
+ };
+ }
+ return {
+ type: 'argument' as const,
+ key: arg.name,
+ typeHint: supportedTypes.includes(arg.type) ? arg.type : 'wildcard',
+ assets: piecesAssets[arg.name],
+ required: arg.required
+ };
+ });
+
+const stringifyArg = (values: Record) => (arg: {
+ type: blockArgumentType | 'BLOCKS';
+ name: string;
+}) => {
+ if (arg.type === 'BLOCKS') {
+ return `function () {\n ${values[arg.name]}\n}`;
+ }
+ return values[arg.name];
+};
+
+export const convertFromDtsToBlocks = (usefuls: usableDeclaration[], lib: 'core' | string, icon?: string):
+(IBlockCommandDeclaration | IBlockComputedDeclaration)[] => {
+ const knownCodes = new Set();
+ const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [];
+ // eslint-disable-next-line no-labels
+ onusefulLoop: for (const useful of usefuls) {
+ if (knownCodes.has(useful.name)) {
+ continue; // Skip duplicates (these usually happen due to several methods' overloads)
+ } else {
+ knownCodes.add(useful.name);
+ }
+ let documentation = useful.description,
+ name = niceBlockName(useful.name),
+ displayName: string | undefined;
+ const piecesAssets: Record = {};
+ const piecesDefaults: Record = {};
+ const extraNames: Record = {};
+ let returnSave = false,
+ promise: false | 'both' | 'catch' | 'then' = false,
+ promiseSave: blockArgumentType | false = false,
+ listType: resourceType | false = false;
+ if (useful.jsDoc) {
+ for (const jsDoc of useful.jsDoc) {
+ if (!jsDoc.tags) {
+ continue;
+ }
+ documentation += '\n';
+ // Parse supported tags in JSDoc
+ for (const node of jsDoc.tags) {
+ if (node.tagName.escapedText === 'param') {
+ documentation += `\n**${(node as any).name.escapedText}** ${node.comment}`;
+ } else if (node.tagName.escapedText === 'returns' || node.tagName.escapedText === 'return') {
+ documentation += `\n\n**Returns** ${node.comment}`;
+ } else if (node.tagName.escapedText === 'catnipIgnore') {
+ // Hides this block from Catnip
+ // eslint-disable-next-line no-labels
+ continue onusefulLoop;
+ } else if (node.tagName.escapedText === 'catnipLabel' && node.comment) {
+ // Defines a custom display name for this block
+ displayName = node.comment?.toString();
+ } else if (node.tagName.escapedText === 'catnipName' && node.comment) {
+ // Defines a custom name for this block
+ name = node.comment.toString();
+ } else if (String(node.tagName.escapedText).startsWith('catnipName_') && node.comment) {
+ // Localized names for this block
+ const key = String(node.tagName.escapedText).replace('catnipName_', 'name_');
+ extraNames[key] = node.comment.toString().trim();
+ } else if (String(node.tagName.escapedText).startsWith('catnipLabel_') && node.comment) {
+ // Localized display names for this block
+ const key = String(node.tagName.escapedText).replace('catnipLabel_', 'displayName_');
+ extraNames[key] = node.comment.toString().trim();
+ } else if (node.tagName.escapedText === 'catnipIcon' && node.comment) {
+ // Sets a different icon to this block
+ icon = node.comment.toString();
+ } else if (node.tagName.escapedText === 'catnipAsset' && node.comment) {
+ // Replaces this param with an asset picker of the specified type.
+ // The format is `@catnipAsset :`
+ // Can only specify one key-format pair, but the tag itself can be repeated.
+ let [key, assetType] = node.comment.toString().split(':');
+ key = key.trim();
+ assetType = assetType.trim();
+ piecesAssets[key] = assetType as resourceType | 'action';
+ } else if (node.tagName.escapedText === 'catnipDefault' && node.comment) {
+ // Defines a default value for the specified param.
+ let [key, value] = node.comment.toString().split(':');
+ key = key.trim();
+ value = value.trim();
+ if (isFinite(Number(value))) {
+ piecesDefaults[key] = Number(value);
+ } else if (value === 'true') {
+ piecesDefaults[key] = true;
+ } else if (value === 'false') {
+ piecesDefaults[key] = false;
+ } else {
+ piecesDefaults[key] = value;
+ }
+ } else if (node.tagName.escapedText === 'catnipList' && node.comment) {
+ // Replaces this param with an asset picker.
+ // Used for dictionaries of arrays like `templates.list`.
+ listType = node.comment.toString().trim() as resourceType;
+ icon = 'grid';
+ } else if (node.tagName.escapedText === 'catnipSaveReturn') {
+ // Adds a slot to the right side of the block so the user can save
+ // the return value of the block.
+ returnSave = true;
+ } else if (node.tagName.escapedText === 'catnipPromise') {
+ // Adds slots for blocks to add promise handlers
+ // to the block's return value.
+ // The keyword after `@catnipPromise` can be `then`, `catch`, or `both`.
+ // It defines which handlers will appear, and it defaults to `both`.
+ const raw = node.comment?.toString().trim();
+ if (raw === 'catch') {
+ promise = 'catch';
+ } else if (raw === 'then') {
+ promise = 'then';
+ } else {
+ promise = 'both';
+ }
+ } else if (node.tagName.escapedText === 'catnipPromiseSave' && node.comment) {
+ // Adds a slot to the right side of the block so the user can use
+ // the resolved value of a promise.
+ promiseSave = node.comment.toString().trim() as blockArgumentType || 'wildcard';
+ }
+ }
+ }
+ }
+ let isCommand = useful.kind === 'function' && (!useful.returnType || useful.returnType === 'void');
+ if (returnSave || promise) {
+ isCommand = true;
+ }
+ if (!displayName) {
+ displayName = name;
+ }
+ const draft = {
+ code: useful.name,
+ lib,
+ type: isCommand ? 'command' : 'computed',
+ typeHint: useful.returnType,
+ name: isCommand ? name.slice(0, 1).toUpperCase() + name.slice(1) : name.toLowerCase(),
+ displayName: displayName && (isCommand ?
+ displayName.slice(0, 1).toUpperCase() + displayName.slice(1) :
+ displayName.toLowerCase()),
+ ...extraNames,
+ documentation,
+ pieces: getPieces(piecesAssets, useful)
+ } as Omit & Partial>;
+ if (icon) {
+ draft.icon = icon;
+ }
+ if (listType) {
+ draft.pieces.push({
+ type: 'argument',
+ key: 'list',
+ typeHint: 'wildcard',
+ assets: listType
+ });
+ }
+ if (returnSave || promiseSave) {
+ draft.pieces.push({
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: promiseSave || 'wildcard'
+ });
+ if (promiseSave) {
+ draft.pieces.push({
+ type: 'asyncMarker'
+ });
+ }
+ } else if (promise) {
+ draft.pieces.push({
+ type: 'filler'
+ }, {
+ type: 'asyncMarker'
+ });
+ }
+ if (promise) {
+ if (promise === 'then' || promise === 'both') {
+ draft.pieces.push({
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'redo'
+ }, {
+ type: 'label',
+ name: 'then',
+ i18nKey: 'then'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'then'
+ });
+ }
+ if (promise === 'catch' || promise === 'both') {
+ draft.pieces.push({
+ type: 'break'
+ }, {
+ type: 'icon',
+ icon: 'alert-octagon'
+ }, {
+ type: 'label',
+ name: 'catch',
+ i18nKey: 'catch'
+ }, {
+ type: 'blocks',
+ placeholder: 'doNothing',
+ key: 'catch'
+ });
+ }
+ }
+ if (useful.kind === 'prop') {
+ if (listType) {
+ draft.jsTemplate = vals => `${useful.name}[${vals.list}]`;
+ } else {
+ draft.jsTemplate = () => useful.name;
+ }
+ } else {
+ const {name, args} = useful;
+ if (returnSave) {
+ draft.jsTemplate = values => {
+ if (values.return && values.return !== 'undefined') {
+ return `${values.return} = ${name}(${args.map(stringifyArg(values)).join(', ')});`;
+ }
+ return `${name}(${args.map(stringifyArg(values)).join(', ')});`;
+ };
+ } else if (promise) {
+ if (promise === 'catch') {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})
+ .catch(() => {
+ ${values.catch}
+ });`;
+ } else if (promise === 'then') {
+ if (promiseSave) {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})
+ .then(val => {
+ ${values.return} = val;
+ ${values.then}
+ });`;
+ } else {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})
+ .then(() => {
+ ${values.then}
+ });`;
+ }
+ } else if (promiseSave) { // promise === 'both'
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})
+ .then(val => {
+ ${values.return} = val;
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });`;
+ } else {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})
+ .then(() => {
+ ${values.then}
+ }).catch(() => {
+ ${values.catch}
+ });`;
+ }
+ } else if (isCommand) {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')});`;
+ } else {
+ draft.jsTemplate = values => `${name}(${args.map(stringifyArg(values)).join(', ')})`;
+ }
+ }
+ blocks.push(draft as IBlockComputedDeclaration | IBlockCommandDeclaration);
+ }
+ blocks.sort((a, b) => sortHelper[a.type] - sortHelper[b.type]);
+ return blocks;
+};
diff --git a/src/node_requires/catnip/blocks.d.ts b/src/node_requires/catnip/blocks.d.ts
new file mode 100644
index 000000000..fcde2f13d
--- /dev/null
+++ b/src/node_requires/catnip/blocks.d.ts
@@ -0,0 +1,180 @@
+declare type blockArgumentType = 'boolean' | 'number' | 'string' | 'color' | 'wildcard' | 'void';
+
+declare interface IBlockPieceLabel {
+ type: 'label';
+ name: string;
+ i18nKey?: string;
+}
+declare interface IBlockPieceIcon {
+ type: 'icon';
+ icon: string;
+}
+declare interface IBlockPieceCode {
+ type: 'code';
+ key: string;
+}
+declare interface IBlockPieceArgument {
+ type: 'argument';
+ key: string;
+ typeHint: blockArgumentType;
+ defaultConstant?: string;
+ required?: boolean;
+ assets?: resourceType | 'action';
+}
+declare interface IBlockPieceTextbox {
+ type: 'textbox';
+ key: string;
+ default?: string;
+}
+declare interface IBlockPieceBlocks {
+ type: 'blocks';
+ placeholder?: 'doNothing' | 'putBlocksHere';
+ key: string;
+}
+declare interface IBlockPieceBreak {
+ type: 'break'
+}
+
+declare interface IBlockPropOrVariable {
+ type: 'propVar';
+}
+declare interface IBlockFiller {
+ type: 'filler'
+}
+declare interface IBlockAsyncMarker {
+ type: 'asyncMarker'
+}
+declare interface IBlockOptions {
+ type: 'options';
+ allowCustom?: boolean;
+ options: {
+ key: string,
+ name: string,
+ i18nKey: string,
+ typeHint: blockArgumentType,
+ assets?: resourceType | 'action',
+ defaultConstant?: string,
+ required?: boolean
+ }[];
+}
+
+declare type blockPiece = IBlockPieceLabel | IBlockPieceIcon | IBlockPieceCode |
+ IBlockPieceArgument | IBlockPieceTextbox | IBlockPieceBlocks |
+ IBlockPropOrVariable | IBlockFiller | IBlockAsyncMarker |
+ IBlockPieceBreak | IBlockOptions;
+
+// eslint-disable-next-line no-use-before-define
+type argumentValues = Record;
+
+declare interface IBlockDeclaration {
+ /** The name of the parent library. Used for serialization. */
+ lib: string;
+ /** If set, the block will additionally appear in a category with this name */
+ category?: string;
+ /** A unique string corresponding to this block so it can be serialized and deserialized */
+ code: string;
+ /** Elements of the block, including input fields and decorations */
+ pieces: blockPiece[];
+ /** Icon shown at the beginning of the block */
+ icon: string;
+ /** Searchable command name. Also used as a label if i18nKey is not used or invalid. */
+ name: string;
+ /** Cached block name used for fuzzy search */
+ bakedName?: string;
+ /**
+ * A string that is shown instead of the searchable name in a block.
+ * This name is not used for fuzzy search.
+ */
+ displayName?: string;
+ /**
+ * A key in the translation file inside the catnip namespace to use
+ * for the main label and search. Supports dot notation.
+ */
+ i18nKey?: string;
+ /**
+ * A key in the translation file inside the catnip namespace to use for the main label.
+ * Supports dot notation.
+ */
+ displayI18nKey?: string;
+
+ /** A markdown-formatted documentation shown in a tooltip when hovering over the block. */
+ documentation?: string;
+ /**
+ * A key in the translation file inside the catnip namespace to use for the tooltip.
+ * Supports dot notation.
+ */
+ documentationI18nKey?: string;
+
+ hideLabel?: boolean;
+ hideIcon?: boolean;
+ /**
+ * The function that is used by blocks compiler to render the JS code of this block.
+ * `args` are the values of this block's input fields.
+ * `safeId` can be used as a unique for this block instance integer
+ * and create unique variable names.
+ */
+ jsTemplate: (
+ args: Record,
+ safeId: number,
+ customOptions: Record
+ ) => string;
+ /** A CSS class to assign to this block in HTML */
+ customClass?: string;
+ /**
+ * Mutators appear in context menus and replace the target block when selected,
+ * preserving values.
+ */
+ mutators?: {
+ lib: string,
+ code: string
+ }[];
+}
+/**
+ * A block for an executable method that may have additional arguments
+ * and cannot be nested inside other simiar commands.
+ */
+declare interface IBlockCommandDeclaration extends IBlockDeclaration {
+ type: 'command';
+ isGroup?: boolean;
+}
+/** A block for a variable, property, or an inline command that returns a value. */
+declare interface IBlockComputedDeclaration extends IBlockDeclaration {
+ type: 'computed';
+ /**
+ * The return type of the computed blocks. A block can be put
+ * only in the slot of the same type unless the block or the target slot are wildcards.
+ */
+ typeHint: blockArgumentType;
+ /**
+ * This mutator gets applied when a user clicks on the block.
+ * It is important for such blocks to switch to each other and be present in the context menu,
+ * in `mutators` array.
+ */
+ onClickMutator?: {
+ lib: string;
+ code: string;
+ }
+}
+
+declare type blockDeclaration = IBlockCommandDeclaration | IBlockComputedDeclaration;
+
+declare interface IBlock {
+ values: argumentValues;
+ customOptions?: Record;
+ groupClosed?: boolean;
+ groupName?: string;
+ lib: string;
+ code: string;
+}
+
+type BlockScript = IBlock[];
+
+declare type blockRegistry = Record;
+declare type blockMenu = {
+ name: string;
+ i18nKey?: string;
+ items: blockDeclaration[];
+ opened: boolean;
+ icon?: string;
+ hidden?: boolean;
+}
diff --git a/src/node_requires/catnip/compiler.ts b/src/node_requires/catnip/compiler.ts
new file mode 100644
index 000000000..c78d0f4e2
--- /dev/null
+++ b/src/node_requires/catnip/compiler.ts
@@ -0,0 +1,146 @@
+/* eslint-disable complexity */
+/* eslint-disable max-depth */
+import {getDeclaration} from '.';
+import {ExporterError} from '../exporter/ExporterError';
+import {getById} from '../resources';
+
+// Unwraps manually input \n, \t, \r values into whitespace.
+const unescapeRegex = /\\\\([ntr])/g;
+const unescapeWhitespace = (input: string) => input.replace(unescapeRegex, '\\$1');
+
+const jsConstants = ['true', 'false', 'null', 'undefined', 'Infinity', '-Infinity', 'NaN'];
+const stringifyConstWildcard = (value: string): string => {
+ if (isFinite(Number(value))) {
+ return String(Number(value));
+ } else if (jsConstants.includes(value)) {
+ return value;
+ }
+ return JSON.stringify(value);
+};
+
+/**
+ * Gets the value of the given piece (an option or an attribute piece)
+ * and writes its value into valuesOut.
+ *
+ * failureMeta must be prefilled so the compiler can show the event
+ * in which a compilation error occurred.
+ */
+const writeArgumentlike = (
+ piece: IBlockPieceArgument | IBlockOptions['options'][0],
+ valuesIn: argumentValues,
+ valuesOut: Record,
+ declaration: blockDeclaration,
+ failureMeta: {
+ eventKey: string,
+ resourceId: assetRef,
+ resourceName: string,
+ resourceType: resourceType
+ }
+) => {
+ const valueIn = valuesIn[piece.key];
+ if (typeof valueIn === 'object') {
+ // eslint-disable-next-line no-use-before-define
+ valuesOut[piece.key] = compile([valueIn as IBlock], failureMeta);
+ } else if (piece.assets && piece.assets !== 'action') {
+ try {
+ valuesOut[piece.key] = `'${getById(piece.assets, valueIn as string).name}'`;
+ } catch (oO) {
+ if (piece.required) {
+ throw new ExporterError(`Required asset in field ${piece.key} of block "${declaration.name}" not found: ${valueIn}`, {
+ clue: 'blockArgumentMissing',
+ eventKey: failureMeta.eventKey,
+ resourceId: failureMeta.resourceId,
+ resourceName: failureMeta.resourceName,
+ resourceType: failureMeta.resourceType
+ });
+ } else {
+ valuesOut[piece.key] = piece.defaultConstant ?? '-1';
+ }
+ }
+ } else if (typeof valueIn === 'string') {
+ if (piece.typeHint === 'wildcard') {
+ valuesOut[piece.key] = stringifyConstWildcard(valueIn);
+ } else if (piece.typeHint === 'color') {
+ valuesOut[piece.key] = `0x${valueIn.slice(1)}`;
+ } else {
+ valuesOut[piece.key] = unescapeWhitespace(JSON.stringify(valueIn));
+ }
+ } else if (valueIn === void 0 && piece.defaultConstant) {
+ if (typeof piece.defaultConstant === 'number' ||
+ typeof piece.defaultConstant !== 'string' ||
+ piece.defaultConstant === 'this') {
+ valuesOut[piece.key] = String(piece.defaultConstant);
+ } else {
+ valuesOut[piece.key] = `'${piece.defaultConstant}'`;
+ }
+ } else {
+ // null, undefined and boolean values
+ valuesOut[piece.key] = String(valueIn);
+ }
+};
+
+let safeId = -1;
+export const resetSafeId = () => {
+ safeId = -1;
+};
+export const compile = (blocks: BlockScript, failureMeta: {
+ eventKey: string,
+ resourceId: assetRef,
+ resourceName: string,
+ resourceType: resourceType
+}): string => {
+ let result = '';
+ for (const block of blocks) {
+ let declaration;
+ try {
+ declaration = getDeclaration(block.lib, block.code);
+ } catch (err) {
+ throw new ExporterError(`Missing declaration for block "${block.code}" from library "${block.lib}"`, {
+ clue: 'blockDeclarationMissing',
+ eventKey: failureMeta.eventKey,
+ resourceId: failureMeta.resourceId,
+ resourceName: failureMeta.resourceName,
+ resourceType: failureMeta.resourceType
+ });
+ }
+ if (!declaration) {
+ continue;
+ }
+ const values: Record = {};
+ for (const piece of declaration.pieces) {
+ if (piece.type === 'argument') {
+ writeArgumentlike(piece, block.values, values, declaration, failureMeta);
+ } else if (piece.type === 'code' || piece.type === 'textbox') {
+ values[piece.key] = String(block.values[piece.key] ?? '');
+ } else if (piece.type === 'options') {
+ for (const option of piece.options) {
+ writeArgumentlike(option, block.values, values, declaration, failureMeta);
+ }
+ } else if (piece.type === 'blocks') {
+ const associatedVal = block.values[piece.key];
+ values[piece.key] = compile(associatedVal as IBlock[] ?? [], failureMeta);
+ if (values[piece.key] === 'undefined') {
+ values[piece.key] = '';
+ }
+ } else if (piece.type === 'propVar') {
+ values.variableName = block.values.variableName as string;
+ }
+ }
+ safeId++;
+ const customOptions: Record = {};
+ if (block.customOptions) {
+ for (const [key, value] of Object.entries(block.customOptions)) {
+ if (typeof value === 'string') {
+ customOptions[key] = stringifyConstWildcard(value);
+ } else {
+ customOptions[key] = compile([value], failureMeta);
+ }
+ }
+ }
+ result += declaration.jsTemplate(values, safeId, customOptions);
+ if (blocks.length > 1) {
+ result += '\n';
+ }
+ }
+ return result;
+};
diff --git a/src/node_requires/catnip/declarationExtractor.ts b/src/node_requires/catnip/declarationExtractor.ts
new file mode 100644
index 000000000..72c91eca9
--- /dev/null
+++ b/src/node_requires/catnip/declarationExtractor.ts
@@ -0,0 +1,217 @@
+// This file exports a parseFile method that takes a .d.ts file and returns
+// an array of usable methods and properties Catnip can use.
+
+/* eslint-disable no-use-before-define */
+import ts from 'typescript';
+import fs from 'fs-extra';
+import path from 'path';
+
+const paramConstTypeMap: Partial> = {
+ [ts.SyntaxKind.AnyKeyword]: 'wildcard',
+ [ts.SyntaxKind.Unknown]: 'wildcard',
+ [ts.SyntaxKind.ObjectKeyword]: 'wildcard',
+ [ts.SyntaxKind.ThisType]: 'wildcard',
+ [ts.SyntaxKind.UnionType]: 'wildcard',
+ [ts.SyntaxKind.IntersectionType]: 'wildcard',
+ [ts.SyntaxKind.ParenthesizedType]: 'wildcard',
+ [ts.SyntaxKind.TypeLiteral]: 'wildcard',
+ [ts.SyntaxKind.TypeReference]: 'wildcard',
+ [ts.SyntaxKind.BooleanKeyword]: 'boolean',
+ [ts.SyntaxKind.FalseKeyword]: 'boolean',
+ [ts.SyntaxKind.TrueKeyword]: 'boolean',
+ [ts.SyntaxKind.NumberKeyword]: 'number',
+ [ts.SyntaxKind.StringKeyword]: 'string',
+ [ts.SyntaxKind.VoidKeyword]: 'void',
+ [ts.SyntaxKind.FunctionType]: 'BLOCKS'
+};
+
+const usefulMap = {
+ [ts.SyntaxKind.FunctionDeclaration]: 'function' as const,
+ [ts.SyntaxKind.MethodSignature]: 'function' as const,
+ [ts.SyntaxKind.PropertySignature]: 'prop' as const
+};
+
+type usableArgument = {
+ type: blockArgumentType | 'BLOCKS',
+ name: string,
+ required: boolean
+};
+export type usableDeclaration = {
+ name: string;
+ returnType?: blockArgumentType;
+ description?: string;
+ jsDoc?: ts.JSDoc[];
+ node: ts.Node;
+} & ({
+ kind: 'function';
+ args: usableArgument[];
+} | {
+ kind: 'prop'
+});
+
+const simplifyJsDoc = (jsDoc: ts.JSDoc[] | void): string | void => {
+ if (!jsDoc) {
+ return void 0;
+ }
+ return jsDoc.map(doc => (Array.isArray(doc.comment) ?
+ (doc.comment as ts.NodeArray)
+ .map(comment => comment)
+ .join('\n') :
+ doc.comment as string))
+ .join('\n\n');
+};
+
+/**
+ * Returns an object for further use by Catnip that describes the given
+ * argument of a method.
+ */
+const paramToUsefulArg = (param: ts.ParameterDeclaration): usableArgument => {
+ let tsType = (param.type as any)?.typeName?.escapedText ?? 'any';
+ if (param.type &&
+ (ts.isToken(param.type) ||
+ param?.type?.kind === ts.SyntaxKind.FunctionType)) {
+ tsType = paramConstTypeMap[param.type.kind as keyof typeof paramConstTypeMap] ?? 'any';
+ }
+ if (tsType === 'any') {
+ // eslint-disable-next-line max-len
+ // console.warn('[catnip\'s declaration extractor] Unknown type', param.type?.kind, param.type, 'in', name);
+ tsType = 'wildcard';
+ }
+ return {
+ name: (param.name as any).escapedText,
+ type: tsType,
+ required: !param.questionToken && !param.initializer
+ };
+};
+
+/**
+ * Traverses the AST of a TypeScript file and extracts useful declarations
+ * of methods and properties.
+ */
+// eslint-disable-next-line max-lines-per-function, complexity
+const visit = (
+ node: ts.Node,
+ topLevelPath: string,
+ onUseful: ((useful: usableDeclaration) => void)
+) => {
+ switch (node.kind) {
+ // Traverse nodes inside modules and namespaces
+ case ts.SyntaxKind.ModuleDeclaration: {
+ const moduleName = (node as ts.ModuleDeclaration).name.text;
+ ts.forEachChild(node, child => visit(child, `${topLevelPath}.${moduleName}`, onUseful));
+ } break;
+ case ts.SyntaxKind.ModuleBlock:
+ ts.forEachChild(node, child => visit(child, `${topLevelPath}`, onUseful));
+ break;
+ // `var` statements
+ case ts.SyntaxKind.FirstStatement: {
+ const first = node as ts.VariableStatement;
+ if (first.declarationList && first.declarationList.declarations.length) {
+ for (const declaration of first.declarationList.declarations) {
+ const {name} = declaration;
+ let usefulName: string;
+ // Some variables can be top-level constants, use their name as is
+ if (topLevelPath === 'root') {
+ usefulName = (name as any).escapedText;
+ } else {
+ // Remove the `root.` ⤵️
+ usefulName = `${topLevelPath.slice(5)}.${(name as any).escapedText}`;
+ }
+ onUseful({
+ name: usefulName,
+ kind: 'prop',
+ returnType: declaration?.type?.kind ?
+ ((paramConstTypeMap[declaration?.type?.kind] as blockArgumentType) ?? 'wildcard') :
+ 'wildcard',
+ description: (first as any).jsDoc?.[0].comment,
+ jsDoc: (first as any).jsDoc,
+ node
+ });
+ if ((declaration?.type as any)?.members) {
+ // eslint-disable-next-line max-depth
+ for (const member of (declaration.type as any).members) {
+ visit(member, `${topLevelPath}.${(name as any).escapedText}`, onUseful);
+ }
+ }
+ }
+ }
+ } break;
+ // Any method
+ // ⚠️ Triple case here
+ case ts.SyntaxKind.PropertySignature:
+ case ts.SyntaxKind.MethodSignature:
+ case ts.SyntaxKind.FunctionDeclaration: {
+ const {name, type, jsDoc} = (node as (
+ ts.PropertySignature |
+ ts.FunctionDeclaration
+ ) & {jsDoc: ts.JSDoc[]});
+ let args: {
+ type: blockArgumentType | 'BLOCKS';
+ name: string;
+ required: boolean;
+ }[] = [];
+ if (node.kind === ts.SyntaxKind.FunctionDeclaration ||
+ node.kind === ts.SyntaxKind.MethodSignature
+ ) {
+ args = (node as ts.FunctionDeclaration | ts.MethodSignature)
+ .parameters.map(paramToUsefulArg);
+ }
+ // Some methods can be top-level functions, use their name as is
+ let usefulName: string;
+ if (topLevelPath === 'root') {
+ usefulName = (name as any).escapedText;
+ } else {
+ // Remove the `root.` ⤵️
+ usefulName = `${topLevelPath.slice(5)}.${(name as any).escapedText}`;
+ }
+ const useful: Partial = {
+ name: usefulName,
+ kind: usefulMap[node.kind],
+ jsDoc,
+ node
+ };
+ useful.returnType = type ?
+ ((paramConstTypeMap[type.kind] as blockArgumentType) ?? 'wildcard') :
+ 'wildcard';
+ if (useful.kind === 'function') {
+ useful.args = args;
+ }
+ const description = simplifyJsDoc(jsDoc);
+ if (description) {
+ useful.description = description;
+ }
+ onUseful(useful as usableDeclaration);
+ } break;
+ default:
+ // console.debug('skipping', node.kind, ts.SyntaxKind[node.kind], node);
+ void 0;
+ }
+};
+
+export const parseFile = async (filename: string): Promise => {
+ const txt = await fs.readFile(filename, 'utf-8');
+ const program = ts.createProgram([filename], {}, {
+ readFile: () => txt,
+ // eslint-disable-next-line id-length
+ useCaseSensitiveFileNames: () => true,
+ fileExists: () => true,
+ getDefaultLibFileName: () => 'browser',
+ getCurrentDirectory: () => path.dirname(filename),
+ getCanonicalFileName: () => path.basename(filename),
+ getSourceFile: (src: string) => ts.createSourceFile(
+ path.basename(src),
+ txt,
+ ts.ScriptTarget.ES2020
+ ),
+ writeFile: () => {
+ void 'noop';
+ },
+ getNewLine: () => 'LF'
+ });
+ // const checker = program.getTypeChecker();
+ const [sourceFile] = program.getSourceFiles();
+ const results: usableDeclaration[] = [];
+ ts.forEachChild(sourceFile, node => visit(node, 'root', useful => results.push(useful)));
+ return results;
+};
+
diff --git a/src/node_requires/catnip/index.ts b/src/node_requires/catnip/index.ts
new file mode 100644
index 000000000..bb5607368
--- /dev/null
+++ b/src/node_requires/catnip/index.ts
@@ -0,0 +1,706 @@
+import fs from 'fs-extra';
+import {join} from 'path';
+
+import {getModulePathByName, loadModuleByName} from '../resources/modules';
+import {convertFromDtsToBlocks} from './blockUtils';
+import {parseFile} from './declarationExtractor';
+import {getByPath} from '../i18n';
+
+import propsVarsBlocks from './stdLib/propsVars';
+import logicBlocks from './stdLib/logic';
+import movementBlocks from './stdLib/movement';
+import appearanceBlocks from './stdLib/appearance';
+import actionsBlocks from './stdLib/actions';
+import cameraBlocks from './stdLib/camera';
+import mathBlocks from './stdLib/math';
+import timerBlocks from './stdLib/timers';
+import objectsBlocks from './stdLib/objects';
+import miscBlocks from './stdLib/misc';
+import consoleBlocks from './stdLib/console';
+import stringsBlocks from './stdLib/strings';
+import arraysBlocks from './stdLib/arrays';
+import hiddenBlocks from './stdLib/hiddenBlocks';
+import {loadBlocks} from './stdLib/ctjsApi';
+
+const builtinBlockLibrary: blockMenu[] = [{
+ name: 'Properties and variables',
+ items: propsVarsBlocks,
+ i18nKey: 'propsVars',
+ opened: true,
+ icon: 'archive',
+ hidden: true
+}, {
+ name: 'Movement',
+ items: movementBlocks,
+ i18nKey: 'movement',
+ opened: true,
+ icon: 'move'
+}, {
+ name: 'Appearance',
+ items: appearanceBlocks,
+ i18nKey: 'appearance',
+ opened: true,
+ icon: 'droplet'
+}, {
+ name: 'Actions',
+ items: actionsBlocks,
+ i18nKey: 'actions',
+ opened: true,
+ icon: 'airplay'
+}, {
+ name: 'Camera',
+ items: cameraBlocks,
+ i18nKey: 'camera',
+ opened: true,
+ icon: 'camera'
+}, {
+ name: 'Logic',
+ items: logicBlocks,
+ i18nKey: 'logic',
+ opened: true,
+ icon: 'help-circle'
+}, {
+ name: 'Math',
+ items: mathBlocks,
+ i18nKey: 'math',
+ opened: true,
+ icon: 'sort-numerically'
+}, {
+ name: 'Timers',
+ items: timerBlocks,
+ i18nKey: 'timers',
+ opened: true,
+ icon: 'clock'
+}, {
+ name: 'Strings',
+ items: stringsBlocks,
+ i18nKey: 'strings',
+ opened: true,
+ icon: 'string'
+}, {
+ name: 'Objects',
+ items: objectsBlocks,
+ i18nKey: 'objects',
+ opened: true,
+ icon: 'code-alt'
+}, {
+ name: 'Arrays',
+ items: arraysBlocks,
+ i18nKey: 'arrays',
+ opened: true,
+ icon: 'grid'
+}, {
+ name: 'Miscellaneous',
+ items: miscBlocks,
+ i18nKey: 'misc',
+ opened: true
+}, {
+ name: 'Console',
+ icon: 'terminal',
+ items: consoleBlocks,
+ i18nKey: 'console',
+ opened: true
+}];
+let ctjsApiMenus: blockMenu[];
+loadBlocks().then(menus => {
+ ctjsApiMenus = menus;
+ builtinBlockLibrary.splice(4, 0, ...menus);
+});
+
+/** A utility function for dumping all the i18n keys of built-in blocks */
+export const getCtjsI18nKeys = (): void => {
+ const nameKeys: string[] = [],
+ displayNameKeys: string[] = [];
+ for (const menu of ctjsApiMenus) {
+ for (const item of menu.items) {
+ if (item.i18nKey) {
+ nameKeys.push(item.i18nKey);
+ }
+ if (item.displayI18nKey) {
+ displayNameKeys.push(item.displayI18nKey);
+ }
+ }
+ }
+ // eslint-disable-next-line no-console
+ console.log(nameKeys.join('\n'));
+ // eslint-disable-next-line no-console
+ console.log(displayNameKeys.join('\n'));
+};
+
+/** An array of categories of blocks to be used in UI */
+export const blocksLibrary: blockMenu[] = [];
+/** A flat map of all the currently known blocks' declarations */
+export const blocksRegistry: Map = new Map();
+
+// Fuzzy search
+import {default as Fuse, IFuseOptions, FuseIndex} from 'fuse.js';
+import {getByTypes} from '../resources';
+const fuseOptions: IFuseOptions = {
+ keys: [{
+ name: 'bakedName',
+ weight: 1
+ }, {
+ name: 'name',
+ weight: 0.7
+ }, {
+ name: 'lib',
+ weight: 0.3
+ }],
+ findAllMatches: true,
+ threshold: 0.3
+};
+let fuseIndex: FuseIndex,
+ fuseCollection: blockDeclaration[];
+const recreateFuseIndex = () => {
+ fuseCollection = [...blocksRegistry.values()];
+ fuseCollection.forEach(block => {
+ block.bakedName = block.i18nKey ?
+ (getByPath('catnip.blockNames.' + block.i18nKey) as string ?? block.name) :
+ block.name;
+ });
+ fuseIndex = Fuse.createIndex(fuseOptions.keys!, fuseCollection);
+};
+export const searchBlocks = (query: string): blockDeclaration[] => {
+ const fuse = new Fuse(fuseCollection, fuseOptions, fuseIndex);
+ return fuse
+ .search(query)
+ .map(result => result.item)
+ .filter(block => block.lib !== 'core.hidden');
+};
+
+const addBlockToRegistry = (block: blockDeclaration): void => {
+ blocksRegistry.set(`${block.lib}@@${block.code}`, block);
+};
+const removeBlockFromRegistry = (block: blockDeclaration): void => {
+ blocksRegistry.delete(`${block.lib}@@${block.code}`);
+};
+export const getDeclaration = (lib: string, code: string): blockDeclaration => {
+ if (!blocksRegistry.has(`${lib}@@${code}`)) {
+ throw new Error(`[catnip] Could not find block declaration for ${lib}@@${code}. Do you have ${lib} catmod enabled?`);
+ }
+ return blocksRegistry.get(`${lib}@@${code}`)!;
+};
+
+const loadBuiltinBlocks = (): void => {
+ blocksLibrary.push(...builtinBlockLibrary);
+ for (const category of builtinBlockLibrary) {
+ category.items.forEach(addBlockToRegistry);
+ }
+ hiddenBlocks.forEach(addBlockToRegistry);
+};
+
+
+const isFunction = (value: unknown) => (value ?
+ (Object.prototype.toString.call(value) === '[object Function]' ||
+ typeof value === 'function' ||
+ value instanceof Function
+ ) :
+ false);
+
+const validateBlocks = (
+ blocks: (blockDeclaration | Record)[],
+ blocksPath: string
+) => {
+ for (const block of blocks) {
+ if (typeof block !== 'object') {
+ throw new Error(`[catnip] ${blocksPath} has a value ${block} that is not an object.`);
+ }
+ const keys = Object.keys(block) as (keyof blockDeclaration)[];
+ for (const required of (['name', 'type', 'code'] as (keyof blockDeclaration)[])) {
+ if (!keys.includes(required as keyof blockDeclaration)) {
+ throw new Error(`[catnip] ${blocksPath} has a block ${block.name} that does not have a required parameter ${required}.`);
+ }
+ if (typeof block[required] !== 'string') {
+ throw new Error(`[catnip] ${blocksPath} in block ${block.name} the parameter ${required} is not a string.`);
+ }
+ }
+ if (!('jsTemplate' in block)) {
+ throw new Error(`[catnip] ${blocksPath} has a block ${block.name} that does not have a required parameter jsTemplate.`);
+ }
+ if (!isFunction(block.jsTemplate)) {
+ throw new Error(`[catnip] ${blocksPath} in block ${block.name} the parameter jsTemplate is not a function.`);
+ }
+ if (!('pieces' in block)) {
+ throw new Error(`[catnip] ${blocksPath} has a block ${block.name} that does not have a required parameter pieces.`);
+ }
+ if (!Array.isArray(block.pieces)) {
+ throw new Error(`[catnip] ${blocksPath} in block ${block.name} the parameter pieces that is not an array.`);
+ }
+ }
+};
+
+
+/**
+ * Used for cleanup during disabling catmods; maps module names to their category of blocks.
+ */
+const loadedCategories: Map = new Map();
+export const loadModdedBlocks = async (modName: string, noIndex?: boolean) => {
+ const meta = await loadModuleByName(modName);
+ const dtsPath = join(getModulePathByName(modName), 'types.d.ts');
+ const blocksPath = join(getModulePathByName(modName), 'blocks.js');
+ const category: blockMenu = {
+ name: modName,
+ items: [],
+ opened: false,
+ i18nKey: modName,
+ icon: meta.main.icon || 'grid-random'
+ };
+ try {
+ await fs.access(blocksPath, fs.constants.R_OK);
+ const blocks = require(blocksPath);
+ if (!Array.isArray(blocks)) {
+ throw new Error(`[catnip] ${blocksPath} is not a module that returns an array.`);
+ }
+ category.items.push(...blocks);
+ validateBlocks(blocks, blocksPath);
+ for (const block of blocks) {
+ if (!('lib' in block)) {
+ block.lib = modName;
+ }
+ }
+ } catch (err) {
+ if (err.code !== 'ENOENT') {
+ console.error(err);
+ }
+ }
+ try {
+ await fs.access(dtsPath, fs.constants.R_OK);
+ const usefuls = await parseFile(dtsPath);
+ const blocks = convertFromDtsToBlocks(usefuls, modName);
+ category.items.push(...blocks);
+ } catch (oO) {
+ void oO;
+ }
+ if (category.items.length) {
+ category.items.forEach(block => {
+ if (block.category) {
+ const host = blocksLibrary.find(cat => cat.name === block.category);
+ if (host) {
+ host.items.push(block);
+ }
+ }
+ if (!block.icon) {
+ block.icon = meta.main.icon || 'grid-random';
+ }
+ });
+ category.items.forEach(addBlockToRegistry);
+ loadedCategories.set(modName, category);
+ blocksLibrary.push(category);
+ } else {
+ // eslint-disable-next-line no-console
+ console.debug(`[catnip] Skipping the catmod ${modName} as it doesn't have valid blocks to add.`);
+ }
+ if (!noIndex) {
+ recreateFuseIndex();
+ }
+};
+
+export const unloadModdedBlocks = (modName: string) => {
+ if (!loadedCategories.has(modName)) {
+ return;
+ }
+ const cat = loadedCategories.get(modName)!;
+ blocksLibrary.splice(blocksLibrary.indexOf(cat), 1);
+ cat.items.forEach(removeBlockFromRegistry);
+ cat.items.forEach(block => {
+ if (block.category) {
+ const host = blocksLibrary.find(cat => cat.name === block.category);
+ if (host && host.items.includes(block)) {
+ host.items.splice(host.items.indexOf(block), 1);
+ }
+ }
+ });
+ loadedCategories.delete(modName);
+ recreateFuseIndex();
+};
+/**
+ * Resets the list of modded blocks and loads all the blocks from the enabled modules.
+ */
+export const loadAllBlocks = async (project: IProject) => {
+ blocksLibrary.length = 0;
+ for (const [name] of loadedCategories) {
+ unloadModdedBlocks(name);
+ }
+ loadedCategories.clear();
+ blocksRegistry.clear();
+ loadBuiltinBlocks();
+ await Promise.all(Object.keys(project.libs).map(lib => loadModdedBlocks(lib, true)));
+ recreateFuseIndex();
+};
+
+/** A helper function that calls onblock on every block in the given script. */
+export const walkOverScript = (script: IBlock[], onblock: (block: IBlock) => void) => {
+ for (const block of script) {
+ onblock(block);
+ if (block.customOptions?.length) {
+ for (const option of Object.values(block.customOptions)) {
+ if (typeof option === 'object') {
+ onblock(option);
+ }
+ }
+ }
+ for (const value of Object.values(block.values)) {
+ if (typeof value === 'object') {
+ if (Array.isArray(value)) {
+ walkOverScript(value, onblock);
+ } else {
+ onblock(value);
+ }
+ }
+ }
+ }
+};
+
+/** Renames a given property or a variable in a script. */
+export const renamePropVar = (script: IBlock[], eventData: {
+ type: 'property' | 'variable' | 'global variable',
+ from: string, // old name of the property/variable
+ to: string // new name of the prop/var
+}) => {
+ walkOverScript(script, block => {
+ if (block.lib === 'core.hidden' && block.code === eventData.type) {
+ if (block.values.variableName === eventData.from) {
+ block.values.variableName = eventData.to;
+ }
+ }
+ });
+};
+
+// Listen to global variable renames and patch all relevant assets.
+window.orders.on('catnipGlobalVarRename', (eventData: {
+ type: 'global variable',
+ from: string, // old name of the property/variable
+ to: string // new name of the prop/var
+}) => {
+ const assets = getByTypes();
+ for (const group of [assets.room, assets.template, assets.behavior]) {
+ for (const asset of group) {
+ for (const event of asset.events) {
+ renamePropVar(event.code as BlockScript, {
+ type: 'global variable',
+ from: eventData.from,
+ to: eventData.to
+ });
+ }
+ }
+ }
+ for (const script of assets.script) {
+ if (script.language !== 'catnip') {
+ continue;
+ }
+ renamePropVar(script.code as BlockScript, {
+ type: 'global variable',
+ from: eventData.from,
+ to: eventData.to
+ });
+ }
+});
+
+// Shared variables for blocks' drag and drop operations.
+let transmittedBlocks: IBlock[] = [];
+let transmissionSource: (IBlock | 'MARKER')[] | Record = [];
+let transmissionSourceKey: string | undefined;
+let cloningMode = false;
+let transmissionType: blockDeclaration['type'];
+export const getTransmissionType = () => transmissionType;
+export const getTransmissionReturnVal = () => {
+ const declaration = getDeclaration(
+ transmittedBlocks[0].lib,
+ transmittedBlocks[0].code
+ ) as IBlockComputedDeclaration;
+ return declaration.typeHint;
+};
+/** A block after which a (+) indicator will be placed */
+let suggestedTarget: IBlock | IBlock[] | undefined;
+export const getSuggestedTarget = () => suggestedTarget;
+export const setSuggestedTarget = (target?: IBlock | IBlock[] | undefined) =>
+ (suggestedTarget = target);
+
+export const startBlocksTransmit = (
+ blocks: IBlock[],
+ source: typeof transmissionSource,
+ key?: string,
+ cloning?: boolean
+) => {
+ transmittedBlocks = blocks;
+ transmissionType = getDeclaration(blocks[0].lib, blocks[0].code).type;
+ transmissionSource = source;
+ transmissionSourceKey = key;
+ cloningMode = Boolean(cloning);
+};
+export const endBlocksTransmit = (
+ destination: typeof transmissionSource,
+ index: number | string
+) => {
+ if (!cloningMode) {
+ // Remove from the old object
+ if (Array.isArray(transmissionSource)) {
+ for (const block of transmittedBlocks) {
+ // Remove the source blocks but put a marker in place of it
+ // to maintain positions while reordering blocks inside the same container.
+ transmissionSource.splice(transmissionSource.indexOf(block), 1, 'MARKER');
+ }
+ } else if (transmissionSourceKey) {
+ delete transmissionSource[transmissionSourceKey];
+ }
+ } else {
+ transmittedBlocks = structuredClone(transmittedBlocks);
+ }
+ if (Array.isArray(destination)) {
+ destination.splice(index as number, 0, ...transmittedBlocks);
+ } else {
+ [destination[index]] = transmittedBlocks;
+ }
+ if (!cloningMode && Array.isArray(transmissionSource)) {
+ while (transmissionSource.includes('MARKER')) {
+ transmissionSource.splice(transmissionSource.indexOf('MARKER'), 1);
+ }
+ }
+ suggestedTarget = void 0;
+ window.signals.trigger('blockTransmissionEnd');
+};
+export const blockFromDeclaration = (declaration: blockDeclaration): IBlock => {
+ const block: IBlock = {
+ lib: declaration.lib,
+ code: declaration.code,
+ values: {}
+ };
+ for (const piece of declaration.pieces) {
+ if (piece.type === 'blocks') {
+ block.values[piece.key] = [] as IBlock[];
+ }
+ }
+ return block;
+};
+export const insertBlock = (
+ dest: BlockScript,
+ pos: number,
+ declaration: blockDeclaration
+): void => {
+ dest.splice(pos + 1, 0, blockFromDeclaration(declaration));
+};
+
+const migrateValues = (from: IBlock, to: IBlock) => {
+ to.values = from.values;
+ if (from.customOptions) {
+ to.customOptions = from.customOptions;
+ }
+};
+/**
+ * Intended to be used for mutators in blocks' context menus; this function replaces one block
+ * to another in a given block list or block's values.
+ * Values of the old block are transferred onto the new block, and the old block is removed.
+ */
+export const mutate = (
+ dest: BlockScript | IBlock,
+ key: number | string,
+ mutator: {
+ lib: string,
+ code: string
+ },
+ customOptions?: boolean
+): void => {
+ const newBlock = blockFromDeclaration(getDeclaration(mutator.lib, mutator.code));
+ if (Array.isArray(dest)) {
+ const pos = key as number;
+ migrateValues(dest[pos], newBlock);
+ dest.splice(pos, 1, newBlock);
+ } else if (customOptions && dest.customOptions) {
+ const prevBlock = dest.customOptions[key] as IBlock;
+ migrateValues(prevBlock, newBlock);
+ dest.customOptions[key] = newBlock;
+ } else {
+ const prevBlock = dest.values[key] as IBlock;
+ migrateValues(prevBlock, newBlock);
+ dest.values[key] = newBlock;
+ }
+};
+export const emptyTexture = document.createElement('canvas');
+emptyTexture.width = emptyTexture.height = 1;
+
+export const getMenuMutators = (
+ block: IBlock,
+ callback: (affixedData: {mutator: blockDeclaration}) => void
+): IMenuItem[] | false => {
+ const declaration = getDeclaration(block.lib, block.code);
+ if (!declaration.mutators || !declaration.mutators.length) {
+ return false;
+ }
+ return declaration.mutators.map(m => {
+ const mDeclaration = getDeclaration(m.lib, m.code);
+ return {
+ label: getByPath('catnip.changeBlockTo').replace('$1', mDeclaration.bakedName),
+ icon: mDeclaration.icon,
+ click: callback,
+ affixedData: {
+ mutator: mDeclaration
+ }
+ };
+ });
+};
+
+/** Removes blocks that are children of other blocks. */
+const getTopBlocks = (blocks: IBlock[]): IBlock[] => {
+ const out = [...blocks];
+ if (out.length > 1) {
+ const toRemove: IBlock[] = [];
+ const traverseValues = (block: IBlock) => {
+ for (const value of Object.values(block.values)) {
+ if (Array.isArray(value)) { // This is a block script
+ for (const child of value) {
+ if (out.includes(child)) {
+ toRemove.push(child);
+ } else {
+ traverseValues(child);
+ }
+ }
+ }
+ }
+ };
+ blocks.forEach(traverseValues);
+ for (const block of toRemove) {
+ blocks.splice(blocks.indexOf(block), 1);
+ }
+ }
+ return out;
+};
+
+let clipboard: IBlock[] | null = null;
+export const copy = (blocks: IBlock[]) => {
+ clipboard = structuredClone(getTopBlocks(blocks));
+};
+export const canPaste = (target: blockArgumentType | 'script'): boolean => {
+ if (clipboard === null) {
+ return false;
+ }
+ const declaration = getDeclaration(clipboard[0].lib, clipboard[0].code);
+ if (target === 'script' && declaration.type === 'command') {
+ return true;
+ }
+ if (target !== 'script' && declaration.type === 'computed' &&
+ (target === declaration.typeHint || declaration.typeHint === 'wildcard' || target === 'wildcard')) {
+ return true;
+ }
+ return false;
+};
+export const paste = (
+ target: IBlock | BlockScript,
+ index: number | string,
+ customOptions?: boolean
+): void => {
+ if (Array.isArray(target)) {
+ if (!canPaste('script')) {
+ throw new Error('[catnip] Attempt to paste into a script with an invalid clipboard.');
+ }
+ target.splice(index as number, 0, ...structuredClone(clipboard!));
+ }
+ const block = target as IBlock;
+ if (customOptions) {
+ // eslint-disable-next-line prefer-destructuring
+ block.customOptions![index as string] = structuredClone(clipboard![0]);
+ } else {
+ // eslint-disable-next-line prefer-destructuring
+ block.values[index as string] = structuredClone(clipboard![0]);
+ }
+};
+
+/*
+ Code for implementing multiple selection and mass operattions.
+ Multiple selection supports only command blocks.
+*/
+const multipleSelection = new Map();
+/**
+ * Redraws all the selected blocks' parents.
+ * If oldBlocks is provided, only those blocks' parents will be redrawn;
+ * otherwise it defaults to the current selection.
+ */
+export const redrawSelectedBlocks = (
+ toUpdate = [...multipleSelection.keys()],
+ map = multipleSelection
+): void => {
+ // Redraw as little as possible
+ const blocks = getTopBlocks(toUpdate);
+ const alreadyUpdated = new Set();
+ for (const block of blocks) {
+ const riotTag = map.get(block)!;
+ if (!alreadyUpdated.has(riotTag)) {
+ if (riotTag.parent) {
+ riotTag.parent.update();
+ alreadyUpdated.add(riotTag);
+ }
+ }
+ }
+};
+export const addToSelection = (block: IBlock, riotTag: IRiotTag) => {
+ multipleSelection.set(block, riotTag);
+ riotTag.parent.update();
+};
+export const setSelection = (block: IBlock, riotTag: IRiotTag): void => {
+ const previouslySelected = [...multipleSelection.keys()],
+ previousMap = new Map(multipleSelection);
+ multipleSelection.clear();
+ multipleSelection.set(block, riotTag);
+ redrawSelectedBlocks(previouslySelected, previousMap);
+};
+export const isSelected = (block: IBlock): boolean => multipleSelection.has(block);
+export const isAnythingSelected = (): boolean => multipleSelection.size > 0;
+export const removeFromSelection = (block: IBlock): void => {
+ const previouslySelected = [...multipleSelection.keys()],
+ previousMap = new Map(multipleSelection);
+ multipleSelection.delete(block);
+ redrawSelectedBlocks(previouslySelected, previousMap);
+};
+export const toggleSelection = (block: IBlock, riotTag: IRiotTag): void => {
+ if (isSelected(block)) {
+ removeFromSelection(block);
+ } else {
+ addToSelection(block, riotTag);
+ }
+};
+export const clearSelection = (): void => {
+ const previouslySelected = [...multipleSelection.keys()],
+ previousMap = new Map(multipleSelection);
+ multipleSelection.clear();
+ redrawSelectedBlocks(previouslySelected, previousMap);
+};
+export const getSelectionHTML = (): void => {
+ const html = [];
+ const dummy = document.createElement('catnip-block');
+ for (const [, riotTag] of multipleSelection) {
+ html.push(riotTag.html);
+ dummy.innerHTML = riotTag.root.innerHTML;
+ // cleanup unneeded tags or attributes
+ dummy.querySelectorAll('catnip-insert-mark, context-menu').forEach(t => t.remove());
+ for (const attr of ['showplaceholder', 'placeholder', 'title', 'ref', 'draggable']) {
+ dummy.querySelectorAll(`[${attr}]`).forEach(t => t.removeAttribute(attr));
+ }
+ dummy.querySelectorAll('input, textarea').forEach(t => t.setAttribute('readonly', 'readonly'));
+ dummy.querySelectorAll('img').forEach(t => {
+ const img = document.createElement('img');
+ img.src = '/assets/icons/image.svg';
+ img.className = 'feather';
+ t.parentNode!.insertBefore(img, t);
+ t.remove();
+ });
+ dummy.querySelectorAll('svg').forEach(t => {
+ const img = document.createElement('img');
+ const name = t.children[0].getAttribute('xlink:href')!.slice(1);
+ img.src = `/assets/icons/${name}.svg`;
+ img.className = 'feather';
+ t.parentNode!.insertBefore(img, t);
+ t.remove();
+ });
+ dummy.className = riotTag.root.className;
+ html.push(dummy.outerHTML);
+ }
+ navigator.clipboard.writeText(html.join('\n'));
+};
+export const removeSelectedBlocks = (): void => {
+ const blocks = getTopBlocks([...multipleSelection.keys()]);
+ for (const block of blocks) {
+ const riotTag = multipleSelection.get(block)!;
+ const parentsBlocks = riotTag.parent.opts.blocks as IBlock[];
+ (parentsBlocks).splice(parentsBlocks.indexOf(block), 1);
+ }
+ clearSelection();
+};
diff --git a/src/node_requires/catnip/stdLib/_utils.ts b/src/node_requires/catnip/stdLib/_utils.ts
new file mode 100644
index 000000000..e028c3216
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/_utils.ts
@@ -0,0 +1,41 @@
+export const optionsToStringObj = (options: Record): string =>
+ '{\n' + Object.entries(options)
+ .map(([key, value]) => `${key}: ${value}`)
+ .join(',\n') +
+ '\n}';
+
+export const getOptions = (
+ values: Record,
+ keys: string[],
+ customOptions?: Record
+): Record | false => {
+ const options: Record = {};
+ let hasOptions = false;
+ for (const key of keys) {
+ if (values[key] !== 'undefined') {
+ options[key] = values[key];
+ hasOptions = true;
+ }
+ }
+ if (customOptions) {
+ for (const key of Object.keys(customOptions)) {
+ if (customOptions[key] !== 'undefined') {
+ options[key] = customOptions[key];
+ hasOptions = true;
+ }
+ }
+ }
+ return hasOptions && options;
+};
+
+export const makeMutators = (
+ blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[],
+ codes: string[]
+) => blocks
+ .filter(b => codes.includes(b.code))
+ .forEach(b => {
+ b.mutators = codes.filter(c => c !== b.code).map(c => ({
+ lib: b.lib,
+ code: c
+ }));
+ });
diff --git a/src/node_requires/catnip/stdLib/actions.ts b/src/node_requires/catnip/stdLib/actions.ts
new file mode 100644
index 000000000..27f123677
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/actions.ts
@@ -0,0 +1,63 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'action value',
+ type: 'computed',
+ code: 'action value',
+ icon: 'airplay',
+ lib: 'core.actions',
+ i18nKey: 'action value',
+ typeHint: 'number',
+ pieces: [{
+ type: 'argument',
+ assets: 'action',
+ typeHint: 'string',
+ key: 'action'
+ }],
+ jsTemplate: (values) => `actions[${values.action}].value`
+}, {
+ name: 'is action pressed',
+ type: 'computed',
+ code: 'action pressed',
+ icon: 'airplay',
+ lib: 'core.actions',
+ i18nKey: 'is action pressed',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ assets: 'action',
+ typeHint: 'string',
+ key: 'action'
+ }],
+ jsTemplate: (values) => `actions[${values.action}].pressed`
+}, {
+ name: 'is action down',
+ type: 'computed',
+ code: 'action down',
+ icon: 'airplay',
+ lib: 'core.actions',
+ i18nKey: 'is action down',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ assets: 'action',
+ typeHint: 'string',
+ key: 'action'
+ }],
+ jsTemplate: (values) => `actions[${values.action}].down`
+}, {
+ name: 'is action released',
+ type: 'computed',
+ code: 'action released',
+ icon: 'airplay',
+ lib: 'core.actions',
+ i18nKey: 'is action released',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ assets: 'action',
+ typeHint: 'string',
+ key: 'action'
+ }],
+ jsTemplate: (values) => `actions[${values.action}].released`
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/appearance.ts b/src/node_requires/catnip/stdLib/appearance.ts
new file mode 100644
index 000000000..d3b97026f
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/appearance.ts
@@ -0,0 +1,404 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Set texture',
+ type: 'command',
+ code: 'set texture',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.tex = ${vals.texture};`,
+ lib: 'core.appearance',
+ i18nKey: 'set texture',
+ pieces: [{
+ type: 'argument',
+ key: 'texture',
+ typeHint: 'string',
+ assets: 'texture',
+ required: true
+ }]
+}, {
+ name: 'Set scale',
+ type: 'command',
+ code: 'set scale',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.scale.x = this.scale.y = ${vals.scale};`,
+ lib: 'core.appearance',
+ i18nKey: 'set scale',
+ pieces: [{
+ type: 'argument',
+ key: 'scale',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set scale',
+ type: 'command',
+ code: 'set scale xy',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.scale.set(${vals.x}, ${vals.y});`,
+ lib: 'core.appearance',
+ i18nKey: 'set scale xy',
+ pieces: [{
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set width',
+ type: 'command',
+ code: 'set width',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.width = ${vals.width};`,
+ lib: 'core.appearance',
+ i18nKey: 'set width',
+ pieces: [{
+ type: 'argument',
+ key: 'width',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set height',
+ type: 'command',
+ code: 'set height',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.height = ${vals.height};`,
+ lib: 'core.appearance',
+ i18nKey: 'set height',
+ pieces: [{
+ type: 'argument',
+ key: 'height',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set skew',
+ type: 'command',
+ code: 'set skew',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.skew.set(${vals.x}, ${vals.y});`,
+ lib: 'core.appearance',
+ i18nKey: 'set skew',
+ pieces: [{
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set texture angle',
+ type: 'command',
+ code: 'set angle',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.angle = ${vals.degrees};`,
+ lib: 'core.appearance',
+ i18nKey: 'set angle',
+ pieces: [{
+ type: 'argument',
+ key: 'degrees',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set opacity',
+ type: 'command',
+ code: 'set alpha',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.alpha = ${vals.value};`,
+ lib: 'core.appearance',
+ i18nKey: 'set alpha',
+ pieces: [{
+ type: 'argument',
+ key: 'value',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set depth',
+ type: 'command',
+ code: 'set depth',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.zIndex = ${vals.value};`,
+ lib: 'core.appearance',
+ i18nKey: 'set depth',
+ pieces: [{
+ type: 'argument',
+ key: 'value',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Set tint',
+ type: 'command',
+ code: 'set tint',
+ icon: 'droplet',
+ jsTemplate: (vals) => `this.tint = ${vals.value};`,
+ lib: 'core.appearance',
+ i18nKey: 'set tint',
+ pieces: [{
+ type: 'argument',
+ key: 'value',
+ typeHint: 'color',
+ required: true
+ }]
+}, {
+ name: 'Play animation',
+ type: 'command',
+ code: 'play animation',
+ icon: 'template',
+ jsTemplate: () => 'this.play();',
+ lib: 'core.appearance',
+ i18nKey: 'play animation',
+ pieces: []
+}, {
+ name: 'Stop animation',
+ type: 'command',
+ code: 'stop animation',
+ icon: 'template',
+ jsTemplate: () => 'this.stop();',
+ lib: 'core.appearance',
+ i18nKey: 'stop animation',
+ pieces: []
+}, {
+ name: 'Go to frame and play',
+ displayName: 'Go to frame',
+ type: 'command',
+ code: 'goto play',
+ icon: 'template',
+ jsTemplate: (values) => `this.gotoAndPlay(${values.frame});`,
+ lib: 'core.appearance',
+ i18nKey: 'goto frame play',
+ displayI18nKey: 'goto frame',
+ pieces: [{
+ type: 'argument',
+ key: 'frame',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'and play',
+ i18nKey: 'and play animation'
+ }]
+}, {
+ name: 'Go to frame and stop',
+ displayName: 'Go to frame',
+ type: 'command',
+ code: 'goto stop',
+ icon: 'template',
+ jsTemplate: (values) => `this.gotoAndStop(${values.frame});`,
+ lib: 'core.appearance',
+ i18nKey: 'goto frame stop',
+ displayI18nKey: 'goto frame',
+ pieces: [{
+ type: 'argument',
+ key: 'frame',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'and stop',
+ i18nKey: 'and stop animation'
+ }]
+}, {
+ name: 'Set animation speed',
+ type: 'command',
+ code: 'set animation speed',
+ icon: 'template',
+ jsTemplate: (values) => `this.animationSpeed = ${values.speed};`,
+ lib: 'core.appearance',
+ i18nKey: 'set animation speed',
+ pieces: [{
+ type: 'argument',
+ key: 'speed',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'set text',
+ code: 'set text',
+ type: 'command',
+ icon: 'font',
+ lib: 'core.appearance',
+ i18nKey: 'set text',
+ pieces: [{
+ type: 'argument',
+ key: 'text',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (values) => `this.text = ${values.text};`
+}, {
+ name: 'set disabled',
+ code: 'set disabled',
+ type: 'command',
+ icon: 'button',
+ lib: 'core.appearance',
+ i18nKey: 'set disabled',
+ pieces: [{
+ type: 'argument',
+ key: 'disabled',
+ typeHint: 'boolean',
+ required: true
+ }],
+ jsTemplate: (values) => `this.disabled = ${values.disabled};`
+}, {
+ name: 'get texture',
+ type: 'computed',
+ code: 'get texture',
+ icon: 'droplet',
+ jsTemplate: () => 'this.tex',
+ lib: 'core.appearance',
+ i18nKey: 'texture',
+ pieces: [],
+ typeHint: 'string'
+}, {
+ name: 'get scale by x',
+ type: 'computed',
+ code: 'get scale x',
+ icon: 'droplet',
+ jsTemplate: () => 'this.scale.x',
+ lib: 'core.appearance',
+ i18nKey: 'scale x',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get scale by y',
+ type: 'computed',
+ code: 'get scale y',
+ icon: 'droplet',
+ jsTemplate: () => 'this.scale.y',
+ lib: 'core.appearance',
+ i18nKey: 'scale y',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get width',
+ type: 'computed',
+ code: 'get width',
+ icon: 'droplet',
+ jsTemplate: () => 'this.width',
+ lib: 'core.appearance',
+ i18nKey: 'get width',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get height',
+ type: 'computed',
+ code: 'get height',
+ icon: 'droplet',
+ jsTemplate: () => 'this.height',
+ lib: 'core.appearance',
+ i18nKey: 'get height',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get skew by x',
+ type: 'computed',
+ code: 'get skew x',
+ icon: 'droplet',
+ jsTemplate: () => 'this.skew.x',
+ lib: 'core.appearance',
+ i18nKey: 'skew x',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get skew by y',
+ type: 'computed',
+ code: 'get skew y',
+ icon: 'droplet',
+ jsTemplate: () => 'this.skew.y',
+ lib: 'core.appearance',
+ i18nKey: 'skew y',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get texture angle',
+ type: 'computed',
+ code: 'get angle',
+ icon: 'droplet',
+ jsTemplate: () => 'this.angle',
+ lib: 'core.appearance',
+ i18nKey: 'get angle',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get opacity',
+ type: 'computed',
+ code: 'get alpha',
+ icon: 'droplet',
+ jsTemplate: () => 'this.alpha',
+ lib: 'core.appearance',
+ i18nKey: 'get alpha',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get depth',
+ type: 'computed',
+ code: 'get depth',
+ icon: 'droplet',
+ jsTemplate: () => 'this.zIndex',
+ lib: 'core.appearance',
+ i18nKey: 'get depth',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'tint',
+ type: 'computed',
+ code: 'get tint',
+ icon: 'droplet',
+ jsTemplate: () => 'this.tint',
+ lib: 'core.appearance',
+ i18nKey: 'get tint',
+ pieces: [],
+ typeHint: 'color'
+}, {
+ name: 'get animation speed',
+ type: 'computed',
+ code: 'get animation speed',
+ icon: 'droplet',
+ jsTemplate: () => 'this.animationSpeed',
+ lib: 'core.appearance',
+ i18nKey: 'get animation speed',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get current frame',
+ type: 'computed',
+ code: 'get current frame',
+ icon: 'droplet',
+ jsTemplate: () => 'this.currentFrame',
+ lib: 'core.appearance',
+ i18nKey: 'get current frame',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get text',
+ type: 'computed',
+ code: 'get text',
+ icon: 'font',
+ lib: 'core.appearance',
+ i18nKey: 'get text',
+ pieces: [],
+ typeHint: 'string',
+ jsTemplate: () => 'this.text'
+}, {
+ name: 'get disabled',
+ type: 'computed',
+ code: 'get disabled',
+ icon: 'button',
+ lib: 'core.appearance',
+ i18nKey: 'get disabled',
+ pieces: [],
+ typeHint: 'string',
+ jsTemplate: () => 'this.disabled'
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/arrays.ts b/src/node_requires/catnip/stdLib/arrays.ts
new file mode 100644
index 000000000..f5b36b823
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/arrays.ts
@@ -0,0 +1,311 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ code: 'array unshift',
+ name: 'add an element at start',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'array unshift',
+ pieces: [{
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toWrite'
+ }, {
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.unshift(${vals.elt})`
+}, {
+ code: 'array push',
+ name: 'add an element at end',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'array push',
+ pieces: [{
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toWrite'
+ }, {
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.push(${vals.elt})`
+}, {
+ code: 'add element at position',
+ name: 'add an element at position',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'add element at position',
+ displayName: 'add an element',
+ displayI18nKey: 'add element',
+ pieces: [{
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'at position',
+ i18nKey: 'at position'
+ }, {
+ type: 'argument',
+ key: 'position',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.splice(${vals.position}, 0, ${vals.elt})`
+}, {
+ code: 'array pop',
+ name: 'remove last element',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'array pop',
+ pieces: [{
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.pop()`
+}, {
+ code: 'array shift',
+ name: 'remove first element',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'array shift',
+ pieces: [{
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.shift()`
+}, {
+ code: 'remove element',
+ name: 'remove element from array',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'remove element from array',
+ displayName: 'remove element',
+ displayI18nKey: 'remove element',
+ pieces: [{
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'from',
+ i18nKey: 'fromSource'
+ }, {
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.splice(${vals.array}.indexOf(${vals.elt}), 1)`
+}, {
+ code: 'remove at position',
+ name: 'remove element at position',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'remove at position',
+ pieces: [{
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'at',
+ i18nKey: 'atPosition'
+ }, {
+ type: 'argument',
+ key: 'position',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.array}.splice(${vals.position}, 1)`
+}, {
+ code: 'filter array',
+ name: 'filter array',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'filter array',
+ pieces: [{
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with results in',
+ i18nKey: 'with results in'
+ }, {
+ type: 'argument',
+ key: 'result',
+ typeHint: 'boolean',
+ required: true
+ }, {
+ type: 'label',
+ name: 'and elements',
+ i18nKey: 'and elements'
+ }, {
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store new array in',
+ i18nKey: 'store new array in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'blocks',
+ key: 'loop'
+ }],
+ jsTemplate: (vals) => `${vals.return} = ${vals.array}.filter(elt => {
+ ${vals.elt} = elt;
+ ${vals.loop}
+ return ${vals.result};
+ });`
+}, {
+ code: 'map array',
+ name: 'map array',
+ type: 'command',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'map array',
+ pieces: [{
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with results in',
+ i18nKey: 'with results in'
+ }, {
+ type: 'argument',
+ key: 'result',
+ typeHint: 'boolean',
+ required: true
+ }, {
+ type: 'label',
+ name: 'and elements',
+ i18nKey: 'and elements'
+ }, {
+ type: 'argument',
+ key: 'elt',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store new array in',
+ i18nKey: 'store new array in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'blocks',
+ key: 'loop'
+ }],
+ jsTemplate: (vals) => `${vals.return} = ${vals.array}.map(elt => {
+ ${vals.elt} = elt;
+ ${vals.loop}
+ return ${vals.result};
+ });`
+}, {
+ code: 'array length',
+ name: 'array length',
+ type: 'computed',
+ i18nKey: 'array length',
+ displayName: 'length of',
+ displayI18nKey: 'lengthOf',
+ icon: 'grid',
+ lib: 'core.arrays',
+ typeHint: 'number',
+ pieces: [{
+ key: 'array',
+ type: 'argument',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (values) => `${values.array}.length`
+}, {
+ name: 'get array element',
+ i18nKey: 'array get',
+ type: 'computed',
+ code: 'get',
+ icon: 'grid',
+ lib: 'core.arrays',
+ pieces: [{
+ type: 'argument',
+ key: 'obj',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'at',
+ i18nKey: 'atPosition'
+ }, {
+ type: 'argument',
+ key: 'index',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (values) => `${values.obj}[${values.index}]`,
+ typeHint: 'wildcard'
+}, {
+ name: 'new array',
+ type: 'computed',
+ code: 'new array',
+ icon: 'grid',
+ lib: 'core.arrays',
+ i18nKey: 'new array',
+ pieces: [],
+ typeHint: 'wildcard',
+ jsTemplate: () => 'new Array()',
+ customClass: 'constant'
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/camera.ts b/src/node_requires/catnip/stdLib/camera.ts
new file mode 100644
index 000000000..eebbc607f
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/camera.ts
@@ -0,0 +1,111 @@
+import {makeMutators} from './_utils';
+
+const makeSetter = (field: string): IBlockCommandDeclaration => ({
+ name: `Set ${field}`,
+ type: 'command',
+ code: `set ${field}`,
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: `set ${field}`,
+ pieces: [{
+ type: 'argument',
+ key: 'value',
+ typeHint: ['followX', 'followY'].includes(field) ? 'boolean' : 'number',
+ required: true
+ }],
+ jsTemplate: (values) => `camera.${field} = ${values.value};`
+});
+const makeGetter = (field: string): IBlockComputedDeclaration => ({
+ name: `get ${field}`,
+ type: 'computed',
+ code: `get ${field}`,
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: `get ${field}`,
+ pieces: [],
+ jsTemplate: () => `camera.${field}`,
+ typeHint: ['followX', 'followY'].includes(field) ? 'boolean' : 'number'
+});
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Follow this copy',
+ type: 'command',
+ code: 'follow this',
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: 'follow this',
+ pieces: [],
+ jsTemplate: () => 'camera.follow = this;'
+}, {
+ name: 'Follow',
+ type: 'command',
+ code: 'follow',
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: 'follow',
+ pieces: [{
+ type: 'argument',
+ key: 'target',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (values) => `camera.follow = ${values.target};`
+}, {
+ name: 'Set zoom',
+ type: 'command',
+ code: 'set zoom',
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: 'set zoom',
+ pieces: [{
+ type: 'argument',
+ key: 'zoom',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (values) => `camera.scale.set(1 / ${values.zoom}, 1 / ${values.zoom});`
+}, {
+ name: 'followed copy',
+ type: 'computed',
+ code: 'followed',
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: 'followed copy',
+ pieces: [],
+ jsTemplate: () => 'camera.follow',
+ typeHint: 'wildcard'
+}, {
+ name: 'zoom',
+ type: 'computed',
+ code: 'get zoom',
+ icon: 'camera',
+ lib: 'core.camera',
+ i18nKey: 'get zoom',
+ pieces: [],
+ jsTemplate: () => '(1 / camera.scale.x)',
+ typeHint: 'number'
+}];
+
+for (const field of ['x', 'y', 'targetX', 'targetY', 'shiftX', 'shiftY', 'drift', 'rotation', 'followX', 'followY', 'borderX', 'borderY', 'shake', 'shakeDecay', 'shakeFrequency', 'shakeX', 'shakeY', 'shakeMax', 'minX', 'maxX', 'minY', 'maxY']) {
+ blocks.push(makeSetter(field));
+}
+for (const field of ['x', 'y', 'targetX', 'targetY', 'computedX', 'computedY', 'width', 'height', 'shiftX', 'shiftY', 'drift', 'left', 'right', 'top', 'bottom', 'rotation', 'followX', 'followY', 'borderX', 'borderY', 'shake', 'shakeDecay', 'shakeFrequency', 'shakeX', 'shakeY', 'shakeMax', 'minX', 'maxX', 'minY', 'maxY']) {
+ blocks.push(makeGetter(field));
+}
+
+makeMutators(blocks, ['set x', 'set y', 'set targetX', 'set targetY']);
+makeMutators(blocks, ['get x', 'get y', 'get targetX', 'get targetY', 'get computedX', 'get computedY']);
+makeMutators(blocks, ['set shiftX', 'set shiftY']);
+makeMutators(blocks, ['get shiftX', 'get shiftY']);
+makeMutators(blocks, ['set minX', 'set maxX', 'set minY', 'set maxY']);
+makeMutators(blocks, ['get minX', 'get maxX', 'get minY', 'get maxY']);
+makeMutators(blocks, ['get left', 'get right', 'get top', 'get bottom']);
+makeMutators(blocks, ['set followX', 'set followY']);
+makeMutators(blocks, ['get followX', 'get followY']);
+makeMutators(blocks, ['set borderX', 'set borderY']);
+makeMutators(blocks, ['get borderX', 'get borderY']);
+makeMutators(blocks, ['set shakeX', 'set shakeY']);
+makeMutators(blocks, ['get shakeX', 'get shakeY']);
+makeMutators(blocks, ['get width', 'get height']);
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/console.ts b/src/node_requires/catnip/stdLib/console.ts
new file mode 100644
index 000000000..44ef68392
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/console.ts
@@ -0,0 +1,20 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [];
+
+for (const method of ['log', 'warn', 'error']) {
+ blocks.push({
+ name: `Console ${method}`,
+ type: 'command',
+ code: method,
+ icon: 'terminal',
+ jsTemplate: (values) => `console.${method}(${values.any})`,
+ lib: 'core.console',
+ i18nKey: `console ${method}`,
+ pieces: [{
+ type: 'argument',
+ key: 'any',
+ typeHint: 'wildcard'
+ }]
+ });
+}
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/ctjsApi.ts b/src/node_requires/catnip/stdLib/ctjsApi.ts
new file mode 100644
index 000000000..7d7e1d589
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/ctjsApi.ts
@@ -0,0 +1,79 @@
+import {parseFile} from '../declarationExtractor';
+import {convertFromDtsToBlocks} from '../blockUtils';
+
+const filterPatchMenu = (
+ menus: blockMenu[],
+ blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[],
+ filterPrefix: string,
+ icon: string,
+ name: string
+): blockMenu => {
+ const filtered = blocks.filter(block => block.code.startsWith(filterPrefix));
+ filtered.forEach(b => {
+ b.icon = icon;
+ b.name = b.name.replace(/^index\./, 'replaceValue');
+ b.i18nKey = `${name.toLowerCase()} ${b.name}`;
+ if (b.displayName) {
+ b.displayI18nKey = `${name.toLowerCase()} ${b.name}`;
+ }
+ });
+ const menu: blockMenu = {
+ name,
+ items: filtered,
+ opened: false,
+ i18nKey: name.toLowerCase(),
+ icon
+ };
+ menus.push(menu);
+ return menu;
+};
+
+const sortHelper = {
+ command: -1,
+ computed: 1
+};
+
+import templatesBlocks from './templates';
+import soundsBlocks from './sounds';
+import roomsBlocks from './rooms';
+import miscBlocks from './misc';
+import settingsBlocks from './settings';
+
+export const loadBlocks = async (): Promise => {
+ let parsed = await parseFile('./data/typedefs/ct.d.ts');
+ parsed = parsed.filter(d => !/pixi/i.test(d.name));
+ for (const useful of parsed) {
+ useful.name = useful.name.replace(/^src\/ct.release\/(index\.)?/, '');
+ useful.name = useful.name.replace(/([a-zA-Z]+).\1Lib/, '$1');
+ }
+ const allBlocks = convertFromDtsToBlocks(parsed, 'core');
+
+ const menus: blockMenu[] = [];
+
+ const templates = filterPatchMenu(menus, allBlocks, 'templates.', 'template', 'Templates');
+ templates.items.unshift(...templatesBlocks);
+ templates.items.sort((a, b) => sortHelper[a.type] - sortHelper[b.type]);
+
+ const rooms = filterPatchMenu(menus, allBlocks, 'rooms.', 'room', 'Rooms');
+ rooms.items.push(...roomsBlocks);
+ rooms.items.sort((a, b) => sortHelper[a.type] - sortHelper[b.type]);
+
+ filterPatchMenu(menus, allBlocks, 'behaviors.', 'behavior', 'Behaviors');
+ const sounds = filterPatchMenu(menus, allBlocks, 'sounds.', 'music', 'Sounds');
+ sounds.items.unshift(...soundsBlocks);
+
+ const styles = filterPatchMenu(menus, allBlocks, 'styles.', 'droplet', 'Styles');
+ miscBlocks.push(...styles.items);
+ menus.splice(menus.indexOf(styles), 1);
+
+ filterPatchMenu(menus, allBlocks, 'backgrounds.', 'image', 'Backgrounds');
+
+ filterPatchMenu(menus, allBlocks, 'emitters.', 'sparkles', 'Emitter tandems');
+
+ filterPatchMenu(menus, allBlocks, 'u.', 'tool', 'Utilities');
+
+ const settings = filterPatchMenu(menus, allBlocks, 'settings.', 'settings', 'Settings');
+ settings.items.unshift(...settingsBlocks);
+
+ return menus;
+};
diff --git a/src/node_requires/catnip/stdLib/hiddenBlocks.ts b/src/node_requires/catnip/stdLib/hiddenBlocks.ts
new file mode 100644
index 000000000..8a1267d41
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/hiddenBlocks.ts
@@ -0,0 +1,97 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Variable',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ code: 'variable',
+ icon: 'clock',
+ jsTemplate: (values) => values.variableName,
+ lib: 'core.hidden',
+ i18nKey: 'variable',
+ pieces: [{
+ type: 'propVar'
+ }],
+ customClass: 'userdefined'
+}, {
+ name: 'Property',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ code: 'property',
+ icon: 'archive',
+ jsTemplate: (values) => `this['${values.variableName}']`,
+ lib: 'core.hidden',
+ i18nKey: 'property',
+ pieces: [{
+ type: 'propVar'
+ }],
+ customClass: 'userdefined'
+}, {
+ name: 'Global variable',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ code: 'global variable',
+ icon: 'circle',
+ jsTemplate: (values) => values.variableName,
+ lib: 'core.hidden',
+ i18nKey: 'property',
+ pieces: [{
+ type: 'propVar'
+ }],
+ customClass: 'userdefined'
+}, {
+ name: 'Behavior property',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ code: 'behavior property',
+ icon: 'behavior',
+ jsTemplate: (values) => `this['${values.variableName}']`,
+ lib: 'core.hidden',
+ i18nKey: 'behavior property',
+ pieces: [{
+ type: 'propVar'
+ }],
+ customClass: 'userdefined'
+}, {
+ name: 'Event variable',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ code: 'event variable',
+ icon: 'bell',
+ jsTemplate: (values) => values.variableName,
+ lib: 'core.hidden',
+ i18nKey: 'event variable',
+ pieces: [{
+ type: 'propVar'
+ }],
+ customClass: 'userdefined'
+}, {
+ name: 'Script options',
+ code: 'script options',
+ lib: 'core.hidden',
+ i18nKey: 'script options',
+ displayI18nKey: 'options',
+ type: 'computed',
+ typeHint: 'wildcard',
+ icon: 'code-alt',
+ jsTemplate: () => 'options',
+ pieces: []
+}, {
+ name: 'Content type entries',
+ hideLabel: true,
+ type: 'computed',
+ typeHint: 'wildcard',
+ lib: 'core.hidden',
+ code: 'content type',
+ i18nKey: 'content type entries',
+ icon: 'table-sidebar',
+ pieces: [{
+ type: 'propVar'
+ }],
+ jsTemplate: (values) => `content['${values.variableName}']`
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/logic.ts b/src/node_requires/catnip/stdLib/logic.ts
new file mode 100644
index 000000000..e80b410d8
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/logic.ts
@@ -0,0 +1,398 @@
+import {makeMutators} from './_utils';
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'If branch',
+ displayName: 'If',
+ type: 'command',
+ code: 'if branch',
+ icon: 'help-circle',
+ jsTemplate: (args) =>
+ `if (${args.condition}) {\n ${args.body1}\n}`,
+ lib: 'core.logic',
+ i18nKey: 'if branch',
+ displayI18nKey: 'if else branch',
+ pieces: [{
+ type: 'argument',
+ key: 'condition',
+ typeHint: 'boolean'
+ }, {
+ placeholder: 'doNothing',
+ type: 'blocks',
+ key: 'body1'
+ }],
+ mutators: [{
+ code: 'if else branch',
+ lib: 'core.logic'
+ }]
+}, {
+ name: 'If else branch',
+ displayName: 'If',
+ type: 'command',
+ code: 'if else branch',
+ icon: 'help-circle',
+ jsTemplate: (args) =>
+ `if (${args.condition}) {\n ${args.body1}\n} else {\n ${args.body2}\n}`,
+ lib: 'core.logic',
+ i18nKey: 'if else branch',
+ displayI18nKey: 'if else branch',
+ pieces: [{
+ type: 'argument',
+ key: 'condition',
+ typeHint: 'boolean'
+ }, {
+ placeholder: 'doNothing',
+ type: 'blocks',
+ key: 'body1'
+ }, {
+ type: 'icon',
+ icon: 'alert-circle'
+ }, {
+ type: 'label',
+ name: 'else',
+ i18nKey: 'else'
+ }, {
+ placeholder: 'doNothing',
+ type: 'blocks',
+ key: 'body2'
+ }],
+ mutators: [{
+ code: 'if branch',
+ lib: 'core.logic'
+ }]
+}, {
+ name: 'While loop cycle',
+ displayName: 'While',
+ type: 'command',
+ code: 'while loop cycle',
+ icon: 'rotate-cw',
+ jsTemplate: (args) => `while (${args.condition}) {\n ${args.body}\n}`,
+ lib: 'core.logic',
+ i18nKey: 'while loop cycle',
+ displayI18nKey: 'while loop cycle',
+ pieces: [{
+ type: 'argument',
+ key: 'condition',
+ typeHint: 'boolean'
+ }, {
+ type: 'blocks',
+ key: 'body'
+ }]
+}, {
+ name: 'Repeat N times',
+ displayName: 'Repeat',
+ type: 'command',
+ code: 'repeat',
+ icon: 'rotate-cw',
+ jsTemplate: (args, safeId) => {
+ if (args.variableName) {
+ return `for (${args.variableName} = 0; ${args.variableName} < ${args.N}; ${args.variableName}++) {\n ${args.body}\n}`;
+ }
+ return `for (i${safeId} = 0; i${safeId} < ${args.N}; i${safeId}++) {\n ${args.body}\n}`;
+ },
+ lib: 'core.logic',
+ i18nKey: 'repeat',
+ displayI18nKey: 'repeat',
+ pieces: [{
+ type: 'argument',
+ key: 'N',
+ typeHint: 'number'
+ }, {
+ type: 'label',
+ name: 'times',
+ i18nKey: 'timesCount'
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store index in',
+ i18nKey: 'store index in'
+ }, {
+ type: 'argument',
+ key: 'variableName',
+ typeHint: 'wildcard'
+ }, {
+ type: 'blocks',
+ key: 'body'
+ }]
+}, {
+ name: 'For each element of array',
+ displayName: 'For each',
+ type: 'command',
+ code: 'for each',
+ icon: 'rotate-cw',
+ jsTemplate: (args) => `for (${args.variableName} of ${args.array}) {\n ${args.body}\n}`,
+ lib: 'core.logic',
+ i18nKey: 'for each',
+ displayI18nKey: 'for each',
+ pieces: [{
+ type: 'argument',
+ key: 'variableName',
+ typeHint: 'wildcard'
+ }, {
+ type: 'label',
+ name: 'of array',
+ i18nKey: 'of array'
+ }, {
+ type: 'argument',
+ key: 'array',
+ typeHint: 'wildcard'
+ }, {
+ type: 'blocks',
+ key: 'body'
+ }]
+}, {
+ name: 'break loop',
+ type: 'command',
+ code: 'break loop',
+ icon: 'log-out',
+ jsTemplate: () => 'break;\n',
+ lib: 'core.logic',
+ i18nKey: 'break loop',
+ pieces: []
+}, {
+ name: 'AND logic operator',
+ type: 'computed',
+ code: 'a AND b',
+ icon: 'bool',
+ lib: 'core.logic',
+ i18nKey: 'AND logic operator',
+ hideLabel: true,
+ hideIcon: true,
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'and',
+ i18nKey: 'AND'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'boolean'
+ }],
+ jsTemplate: (args) => `(${args.a} && ${args.b})`
+}, {
+ name: 'AND AND logic operator',
+ type: 'computed',
+ code: 'a AND b AND c',
+ icon: 'bool',
+ lib: 'core.logic',
+ i18nKey: 'AND AND logic operator',
+ hideLabel: true,
+ hideIcon: true,
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'and',
+ i18nKey: 'AND'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'and',
+ i18nKey: 'AND'
+ }, {
+ type: 'argument',
+ key: 'c',
+ typeHint: 'boolean'
+ }],
+ jsTemplate: (args) => `(${args.a} && ${args.b} && ${args.c})`
+}, {
+ name: 'OR logic operator',
+ type: 'computed',
+ code: 'a OR b',
+ icon: 'bool',
+ lib: 'core.logic',
+ i18nKey: 'OR logic operator',
+ hideLabel: true,
+ hideIcon: true,
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'or',
+ i18nKey: 'OR'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'boolean'
+ }],
+ jsTemplate: (args) => `(${args.a} || ${args.b})`
+}, {
+ name: 'OR OR logic operator',
+ type: 'computed',
+ code: 'a OR b OR c',
+ icon: 'bool',
+ lib: 'core.logic',
+ i18nKey: 'OR OR logic operator',
+ hideLabel: true,
+ hideIcon: true,
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'or',
+ i18nKey: 'OR'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'boolean'
+ }, {
+ type: 'label',
+ name: 'or',
+ i18nKey: 'OR'
+ }, {
+ type: 'argument',
+ key: 'c',
+ typeHint: 'boolean'
+ }],
+ jsTemplate: (args) => `(${args.a} || ${args.b} || ${args.c})`
+}, {
+ name: 'NOT logic operator',
+ displayName: 'not',
+ type: 'computed',
+ code: 'NOT a',
+ icon: 'bool',
+ hideIcon: true,
+ lib: 'core.logic',
+ i18nKey: 'NOT logic operator',
+ displayI18nKey: 'NOT logic operator',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'boolean'
+ }],
+ jsTemplate: (args) => `!${args.a}`
+}, {
+ name: 'is',
+ code: 'is',
+ icon: 'help-circle',
+ type: 'computed',
+ typeHint: 'boolean',
+ hideIcon: true,
+ hideLabel: true,
+ i18nKey: 'is',
+ jsTemplate: (vals) => `(${vals.a} === ${vals.b})`,
+ lib: 'core.logic',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'is',
+ i18nKey: 'is'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.logic',
+ code: 'is not'
+ }]
+}, {
+ name: 'is not',
+ code: 'is not',
+ icon: 'help-circle',
+ type: 'computed',
+ typeHint: 'boolean',
+ hideIcon: true,
+ hideLabel: true,
+ i18nKey: 'is not',
+ jsTemplate: (vals) => `(${vals.a} !== ${vals.b})`,
+ lib: 'core.logic',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'is not',
+ i18nKey: 'is not'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.logic',
+ code: 'is'
+ }]
+}, {
+ name: 'convert to boolean',
+ i18nKey: 'convert to boolean',
+ type: 'computed',
+ code: 'convert to boolean',
+ icon: 'bool',
+ jsTemplate: (values) => `Boolean(${values.val})`,
+ lib: 'core.logic',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ typeHint: 'boolean'
+}, {
+ name: 'true',
+ i18nKey: 'true',
+ type: 'computed',
+ code: 'true',
+ icon: 'bool',
+ jsTemplate: () => 'true',
+ lib: 'core.logic',
+ pieces: [],
+ typeHint: 'boolean',
+ customClass: 'constant',
+ onClickMutator: {
+ lib: 'core.logic',
+ code: 'false'
+ },
+ mutators: [{
+ lib: 'core.logic',
+ code: 'false'
+ }]
+}, {
+ name: 'false',
+ i18nKey: 'false',
+ type: 'computed',
+ code: 'false',
+ icon: 'bool',
+ jsTemplate: () => 'false',
+ lib: 'core.logic',
+ pieces: [],
+ typeHint: 'boolean',
+ customClass: 'constant',
+ onClickMutator: {
+ lib: 'core.logic',
+ code: 'true'
+ },
+ mutators: [{
+ lib: 'core.logic',
+ code: 'true'
+ }]
+}];
+
+makeMutators(blocks, ['a AND b', 'a AND b AND c', 'a OR b', 'a OR b OR c']);
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/math.ts b/src/node_requires/catnip/stdLib/math.ts
new file mode 100644
index 000000000..8a48ce572
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/math.ts
@@ -0,0 +1,108 @@
+const niceOperators: Record = {
+ '*': '×',
+ '/': ':',
+ '<=': '≤',
+ '>=': '≥'
+};
+
+const numberOperators = ['+', '-', '*', '/', '%'],
+ boolOperators = ['<', '<=', '>', '>='],
+ mathUnaryOperators = ['abs', 'sign', 'floor', 'ceil', 'round', 'sqrt', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan'],
+ mathBinaryOperators = ['atan2', 'pow', 'log', 'min', 'max'];
+
+const makeOperator = (operator: string, type: blockArgumentType): IBlockComputedDeclaration => ({
+ name: operator,
+ code: operator,
+ displayName: niceOperators[operator] || operator,
+ icon: type === 'boolean' ? 'help-circle' : 'hash',
+ type: 'computed',
+ typeHint: type,
+ hideIcon: true,
+ hideLabel: true,
+ jsTemplate: (vals) => `(${vals.a} ${operator} ${vals.b})`,
+ lib: 'core.math',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: niceOperators[operator] || operator
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'number',
+ required: true
+ }],
+ mutators: (type === 'boolean' ? boolOperators : numberOperators).filter(op => op !== operator).map((op) => ({
+ lib: 'core.math',
+ code: op
+ }))
+});
+const makeMathUnary = (operator: string): IBlockComputedDeclaration => ({
+ name: operator,
+ displayName: niceOperators[operator] || operator,
+ code: operator,
+ icon: 'sort-numerically',
+ type: 'computed',
+ typeHint: 'number',
+ hideIcon: true,
+ i18nKey: operator,
+ jsTemplate: (vals) => `Math.${operator}(${vals.a})`,
+ lib: 'core.math',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'number',
+ required: true
+ }]
+});
+const makeMathBinary = (operator: string): IBlockComputedDeclaration => ({
+ name: operator,
+ displayName: niceOperators[operator] || operator,
+ code: operator,
+ icon: 'sort-numerically',
+ type: 'computed',
+ typeHint: 'number',
+ hideIcon: true,
+ i18nKey: operator,
+ jsTemplate: (vals) => `Math.${operator}(${vals.a}, ${vals.b})`,
+ lib: 'core.math',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'number',
+ required: true
+ }]
+});
+
+const blocks: (IBlockComputedDeclaration | IBlockCommandDeclaration)[] = [
+ ...numberOperators.map((operator) => makeOperator(operator, 'number')),
+ ...boolOperators.map((operator) => makeOperator(operator, 'boolean')),
+ ...mathUnaryOperators.map((operator) => makeMathUnary(operator)),
+ ...mathBinaryOperators.map((operator) => makeMathBinary(operator)),
+ {
+ name: 'convert to number',
+ i18nKey: 'convert to number',
+ type: 'computed',
+ code: 'convert to number',
+ icon: 'sort-numerically',
+ jsTemplate: (values) => `Number(${values.val})`,
+ lib: 'core.utils',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ typeHint: 'number'
+ }
+];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/misc.ts b/src/node_requires/catnip/stdLib/misc.ts
new file mode 100644
index 000000000..82c208c4f
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/misc.ts
@@ -0,0 +1,171 @@
+import {getOptions, optionsToStringObj} from './_utils';
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Block group',
+ type: 'command',
+ code: 'group',
+ icon: 'folder',
+ lib: 'core.misc',
+ hideIcon: true,
+ hideLabel: true,
+ i18nKey: 'Group',
+ isGroup: true,
+ customClass: 'group',
+ pieces: [{
+ type: 'blocks',
+ key: 'blocks',
+ placeholder: 'putBlocksHere'
+ }],
+ jsTemplate: (values) => values.blocks
+}, {
+ name: 'Note',
+ type: 'command',
+ code: 'note',
+ icon: 'message-circle',
+ lib: 'core.misc',
+ i18nKey: 'note',
+ pieces: [{
+ type: 'textbox',
+ key: 'note'
+ }],
+ jsTemplate: (values) => `/* ${values.note} */`,
+ customClass: 'note'
+}, {
+ type: 'command',
+ name: 'run script',
+ code: 'run script',
+ icon: 'code-alt',
+ lib: 'core.script',
+ i18nKey: 'run script',
+ pieces: [{
+ type: 'argument',
+ typeHint: 'string',
+ assets: 'script',
+ key: 'name',
+ required: true
+ }, {
+ type: 'options',
+ allowCustom: true,
+ options: []
+ }],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions({}, [], custom);
+ return `scripts[${values.name}](${options ? optionsToStringObj(options) : ''});`;
+ }
+}, {
+ name: 'Execute js javascript code',
+ displayName: 'Execute JavaScript',
+ type: 'command',
+ code: 'js',
+ icon: 'code-alt',
+ lib: 'core.misc',
+ i18nKey: 'plainJs',
+ pieces: [{
+ type: 'code',
+ key: 'code'
+ }],
+ jsTemplate: (values) => String(values.code)
+}, {
+ code: 'define function',
+ type: 'command',
+ name: 'Define a function',
+ i18nKey: 'define function',
+ icon: 'function',
+ lib: 'core.misc',
+ pieces: [{
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'store',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'blocks',
+ key: 'code'
+ }],
+ jsTemplate: values => `${values.store} = (options) => {\n ${values.code}\n};`
+}, {
+ code: 'return',
+ type: 'command',
+ name: 'Return a value',
+ i18nKey: 'return',
+ icon: 'function',
+ lib: 'core.misc',
+ pieces: [{
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (values) => `return ${values.return};`
+}, {
+ code: 'execute function',
+ type: 'command',
+ name: 'Run a function',
+ i18nKey: 'execute function',
+ icon: 'function',
+ lib: 'core.misc',
+ pieces: [{
+ type: 'argument',
+ key: 'func',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store return value in',
+ i18nKey: 'store result in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'options',
+ allowCustom: true,
+ options: []
+ }],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions({}, [], custom);
+ if (values.return) {
+ return `${values.return} = ${values.func}(${options ? optionsToStringObj(options) : ''});`;
+ }
+ return `${values.func}(${options ? optionsToStringObj(options) : ''});`;
+ }
+}, {
+ code: 'get function option',
+ lib: 'core.misc',
+ type: 'computed',
+ name: 'get function\'s option',
+ i18nKey: 'get function option',
+ pieces: [{
+ type: 'argument',
+ key: 'key',
+ typeHint: 'string',
+ required: true
+ }],
+ typeHint: 'wildcard',
+ icon: 'function',
+ jsTemplate: (values) => `options[${values.key}]`
+}, {
+ name: 'color',
+ type: 'computed',
+ typeHint: 'color',
+ code: 'color',
+ icon: 'droplet',
+ lib: 'core.misc',
+ i18nKey: 'color',
+ pieces: [{
+ type: 'argument',
+ typeHint: 'color',
+ key: 'color'
+ }],
+ jsTemplate: (values) => values.color
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/movement.ts b/src/node_requires/catnip/stdLib/movement.ts
new file mode 100644
index 000000000..7cea5268a
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/movement.ts
@@ -0,0 +1,276 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Move copy',
+ type: 'command',
+ code: 'move copy',
+ icon: 'move',
+ jsTemplate: () => 'this.move();',
+ lib: 'core.movement',
+ i18nKey: 'move copy',
+ pieces: []
+}, {
+ name: 'Change speed',
+ type: 'command',
+ code: 'set speed',
+ icon: 'move',
+ jsTemplate: (vals) => `this.speed = ${vals.speed};`,
+ lib: 'core.movement',
+ i18nKey: 'set speed',
+ pieces: [{
+ type: 'argument',
+ key: 'speed',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Change gravity',
+ type: 'command',
+ code: 'set gravity',
+ icon: 'move',
+ jsTemplate: (vals) => `this.gravity = ${vals.gravity};`,
+ lib: 'core.movement',
+ i18nKey: 'set gravity',
+ pieces: [{
+ type: 'argument',
+ key: 'gravity',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Change gravity direction',
+ type: 'command',
+ code: 'set gravityDir',
+ icon: 'move',
+ jsTemplate: (vals) => `this.gravityDir = ${vals.degreees};`,
+ lib: 'core.movement',
+ i18nKey: 'set gravityDir',
+ pieces: [{
+ type: 'argument',
+ key: 'degreees',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Change horizontal speed',
+ type: 'command',
+ code: 'set hspeed',
+ icon: 'move',
+ jsTemplate: (vals) => `this.hspeed = ${vals.speed};`,
+ lib: 'core.movement',
+ i18nKey: 'set hspeed',
+ pieces: [{
+ type: 'argument',
+ key: 'speed',
+ typeHint: 'number',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.movement',
+ code: 'set vspeed'
+ }]
+}, {
+ name: 'Change vertical speed',
+ type: 'command',
+ code: 'set vspeed',
+ icon: 'move',
+ jsTemplate: (vals) => `this.vspeed = ${vals.speed};`,
+ lib: 'core.movement',
+ i18nKey: 'set vspeed',
+ pieces: [{
+ type: 'argument',
+ key: 'speed',
+ typeHint: 'number',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.movement',
+ code: 'set hspeed'
+ }]
+}, {
+ name: 'Change direction',
+ type: 'command',
+ code: 'set direction',
+ icon: 'move',
+ jsTemplate: (vals) => `this.direction = ${vals.degrees};`,
+ lib: 'core.movement',
+ i18nKey: 'set direction',
+ pieces: [{
+ type: 'argument',
+ key: 'degrees',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Change x',
+ type: 'command',
+ code: 'set x',
+ icon: 'move',
+ jsTemplate: (vals) => `this.x = ${vals.pixels};`,
+ lib: 'core.movement',
+ i18nKey: 'set x',
+ pieces: [{
+ type: 'argument',
+ key: 'pixels',
+ typeHint: 'number',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.movement',
+ code: 'set y'
+ }]
+}, {
+ name: 'Change y',
+ type: 'command',
+ code: 'set y',
+ icon: 'move',
+ jsTemplate: (vals) => `this.y = ${vals.pixels};`,
+ lib: 'core.movement',
+ i18nKey: 'set y',
+ pieces: [{
+ type: 'argument',
+ key: 'pixels',
+ typeHint: 'number',
+ required: true
+ }],
+ mutators: [{
+ lib: 'core.movement',
+ code: 'set x'
+ }]
+}, {
+ name: 'get speed',
+ type: 'computed',
+ code: 'get speed',
+ icon: 'move',
+ jsTemplate: () => 'this.speed',
+ lib: 'core.movement',
+ i18nKey: 'get speed',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get gravity',
+ type: 'computed',
+ code: 'get gravity',
+ icon: 'move',
+ jsTemplate: () => 'this.gravity',
+ lib: 'core.movement',
+ i18nKey: 'get gravity',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get gravity direction',
+ type: 'computed',
+ code: 'get gravityDir',
+ icon: 'move',
+ jsTemplate: () => 'this.gravityDir',
+ lib: 'core.movement',
+ i18nKey: 'get gravityDir',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'get horizontal speed',
+ type: 'computed',
+ code: 'get hspeed',
+ icon: 'move',
+ jsTemplate: () => 'this.hspeed',
+ lib: 'core.movement',
+ i18nKey: 'get hspeed',
+ pieces: [],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'get vspeed'
+ }]
+}, {
+ name: 'get vertical speed',
+ type: 'computed',
+ code: 'get vspeed',
+ icon: 'move',
+ jsTemplate: () => 'this.vspeed',
+ lib: 'core.movement',
+ i18nKey: 'get vspeed',
+ pieces: [],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'get hspeed'
+ }]
+}, {
+ name: 'get direction',
+ type: 'computed',
+ code: 'get direction',
+ icon: 'move',
+ jsTemplate: () => 'this.direction',
+ lib: 'core.movement',
+ i18nKey: 'get direction',
+ pieces: [],
+ typeHint: 'number'
+}, {
+ name: 'x',
+ type: 'computed',
+ code: 'x',
+ icon: 'move',
+ jsTemplate: () => 'this.x',
+ lib: 'core.movement',
+ pieces: [],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'y'
+ }]
+}, {
+ name: 'y',
+ type: 'computed',
+ code: 'y',
+ icon: 'move',
+ jsTemplate: () => 'this.y',
+ lib: 'core.movement',
+ pieces: [],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'x'
+ }]
+}, {
+ name: 'x of copy',
+ i18nKey: 'x of copy',
+ displayName: 'x of',
+ displayI18nKey: 'x of',
+ type: 'computed',
+ code: 'x of',
+ icon: 'move',
+ jsTemplate: (values) => `${values.copy}.x`,
+ lib: 'core.movement',
+ pieces: [{
+ type: 'argument',
+ key: 'copy',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'y of'
+ }]
+}, {
+ name: 'y of copy',
+ i18nKey: 'y of copy',
+ displayName: 'y of',
+ displayI18nKey: 'y of',
+ type: 'computed',
+ code: 'y of',
+ icon: 'move',
+ jsTemplate: (values) => `${values.copy}.y`,
+ lib: 'core.movement',
+ pieces: [{
+ type: 'argument',
+ key: 'copy',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ typeHint: 'number',
+ mutators: [{
+ lib: 'core.movement',
+ code: 'x of'
+ }]
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/objects.ts b/src/node_requires/catnip/stdLib/objects.ts
new file mode 100644
index 000000000..f90fc8e0e
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/objects.ts
@@ -0,0 +1,251 @@
+import {optionsToStringObj, getOptions} from './_utils';
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'new object',
+ type: 'command',
+ lib: 'core.objects',
+ code: 'new object',
+ icon: 'code-alt',
+ i18nKey: 'new object',
+ pieces: [{
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }, {
+ type: 'options',
+ options: [],
+ allowCustom: true
+ }],
+ jsTemplate: (vals, id, custom) => {
+ const options = getOptions({}, [], custom) || {};
+ return `${vals.return} = ${optionsToStringObj(options)};`;
+ }
+}, {
+ name: 'Write property to self',
+ type: 'command',
+ code: 'this write',
+ icon: 'code-alt',
+ jsTemplate: (vals) => `this[${vals.property}] = ${vals.value};`,
+ lib: 'core.objects',
+ i18nKey: 'this write',
+ pieces: [{
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'value',
+ i18nKey: 'value'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'wildcard',
+ required: true
+ }]
+}, {
+ name: 'Write property to current room',
+ displayName: 'Write',
+ type: 'command',
+ code: 'current room write',
+ icon: 'code-alt',
+ jsTemplate: (vals) => `rooms.current[${vals.property}] = ${vals.value};`,
+ lib: 'core.objects',
+ i18nKey: 'current room write',
+ displayI18nKey: 'write',
+ pieces: [{
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'value',
+ i18nKey: 'value'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to current room',
+ i18nKey: 'to current room'
+ }]
+}, {
+ name: 'Write property to object',
+ type: 'command',
+ code: 'object write',
+ icon: 'code-alt',
+ jsTemplate: (vals) => `${vals.object}[${vals.property}] = ${vals.value};`,
+ lib: 'core.objects',
+ i18nKey: 'write property to object',
+ displayName: 'Write',
+ displayI18nKey: 'write',
+ pieces: [{
+ type: 'argument',
+ key: 'object',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'property',
+ i18nKey: 'property'
+ }, {
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'value',
+ i18nKey: 'value'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'wildcard',
+ required: true
+ }]
+}, {
+ name: 'read property from self',
+ i18nKey: 'this read',
+ displayI18nKey: 'read',
+ displayName: 'read',
+ type: 'computed',
+ lib: 'core.objects',
+ code: 'this read',
+ icon: 'code-alt',
+ pieces: [{
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `this[${vals.property}]`,
+ typeHint: 'wildcard'
+}, {
+ name: 'read property from room',
+ type: 'computed',
+ lib: 'core.objects',
+ code: 'room read',
+ icon: 'code-alt',
+ i18nKey: 'room read',
+ displayName: 'read',
+ displayI18nKey: 'read',
+ pieces: [{
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'of current room',
+ i18nKey: 'of current room'
+ }],
+ jsTemplate: (vals) => `rooms.current[${vals.property}]`,
+ typeHint: 'wildcard'
+}, {
+ name: 'read property from object',
+ type: 'computed',
+ lib: 'core.objects',
+ code: 'object read',
+ icon: 'code-alt',
+ i18nKey: 'object read',
+ displayI18nKey: 'read',
+ displayName: 'read',
+ pieces: [{
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'from',
+ i18nKey: 'fromRead'
+ }, {
+ type: 'argument',
+ key: 'object',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.object}[${vals.property}]`,
+ typeHint: 'wildcard'
+}, {
+ name: 'delete property in object',
+ type: 'command',
+ lib: 'core.objects',
+ code: 'object delete',
+ icon: 'code-alt',
+ i18nKey: 'object delete',
+ pieces: [{
+ type: 'argument',
+ key: 'object',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'property',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `delete ${vals.object}[${vals.property}];`
+}, {
+ name: 'deserialize object',
+ type: 'command',
+ code: 'json parse',
+ icon: 'code-alt',
+ lib: 'core.objects',
+ i18nKey: 'deserialize object',
+ pieces: [{
+ type: 'argument',
+ key: 'object',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }],
+ jsTemplate: (vals) => `${vals.return} = JSON.parse(${vals.object});`
+}, {
+ name: 'serialize object',
+ typeHint: 'string',
+ type: 'computed',
+ code: 'json stringify',
+ icon: 'code-alt',
+ lib: 'core.objects',
+ i18nKey: 'serialize object',
+ pieces: [{
+ type: 'argument',
+ key: 'object',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ documentationI18nKey: 'serialize object',
+ jsTemplate: (vals) => `JSON.stringify(${vals.object})`
+}, {
+ name: 'new empty object',
+ type: 'computed',
+ code: 'new empty object',
+ icon: 'code-alt',
+ customClass: 'constant',
+ jsTemplate: () => '{}',
+ lib: 'core.objects',
+ i18nKey: 'new empty object',
+ pieces: [],
+ typeHint: 'wildcard'
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/propsVars.ts b/src/node_requires/catnip/stdLib/propsVars.ts
new file mode 100644
index 000000000..46fd02710
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/propsVars.ts
@@ -0,0 +1,193 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'this',
+ type: 'computed',
+ code: 'this',
+ icon: 'crosshair',
+ jsTemplate: () => 'this',
+ lib: 'core.propsVars',
+ typeHint: 'wildcard',
+ pieces: [],
+ i18nKey: 'this',
+ customClass: 'constant'
+}, {
+ name: 'Set property variable value',
+ type: 'command',
+ code: 'set',
+ icon: 'code-alt',
+ jsTemplate: (vals) => `${vals.var} = ${vals.value};`,
+ lib: 'core.propsVars',
+ i18nKey: 'set property variable',
+ displayName: 'Set',
+ displayI18nKey: 'set',
+ pieces: [{
+ type: 'argument',
+ key: 'var',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'value',
+ i18nKey: 'value'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'wildcard',
+ required: true
+ }]
+}, {
+ name: 'Increase property variable',
+ type: 'command',
+ code: 'increase',
+ icon: 'plus-circle',
+ jsTemplate: (vals) => `${vals.var} += ${vals.val};`,
+ lib: 'core.propsVars',
+ i18nKey: 'increase',
+ pieces: [{
+ type: 'argument',
+ key: 'var',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'by',
+ i18nKey: 'changeBy'
+ }, {
+ type: 'argument',
+ key: 'val',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Decrease property variable',
+ type: 'command',
+ code: 'decrease',
+ icon: 'minus-circle',
+ jsTemplate: (vals) => `${vals.var} -= ${vals.val};`,
+ lib: 'core.propsVars',
+ i18nKey: 'decrease',
+ pieces: [{
+ type: 'argument',
+ key: 'var',
+ typeHint: 'wildcard',
+ required: true
+ }, {
+ type: 'label',
+ name: 'by',
+ i18nKey: 'changeBy'
+ }, {
+ type: 'argument',
+ key: 'val',
+ typeHint: 'number',
+ required: true
+ }]
+}, {
+ name: 'Increment property variable',
+ type: 'command',
+ code: 'increment',
+ icon: 'plus-circle',
+ jsTemplate: (vals) => `${vals.var}++;`,
+ lib: 'core.propsVars',
+ i18nKey: 'increment',
+ pieces: [{
+ type: 'argument',
+ key: 'var',
+ typeHint: 'wildcard',
+ required: true
+ }]
+}, {
+ name: 'Decrement property variable',
+ type: 'command',
+ code: 'decrement',
+ icon: 'minus-circle',
+ jsTemplate: (vals) => `${vals.var}--;`,
+ lib: 'core.propsVars',
+ i18nKey: 'decrement',
+ pieces: [{
+ type: 'argument',
+ key: 'var',
+ typeHint: 'wildcard',
+ required: true
+ }]
+}];
+
+const getMutatorsBut = (exclude: string) => blocks
+ .filter(b => b.code !== exclude && b.code !== 'this')
+ .map(b => ({
+ lib: b.lib,
+ code: b.code
+ }));
+
+for (const block of blocks) {
+ block.mutators = getMutatorsBut(block.code);
+}
+
+blocks.push({
+ name: 'Save to storage',
+ type: 'command',
+ code: 'save localStorage',
+ icon: 'save',
+ jsTemplate: (vals) => `localStorage.setItem(${vals.key}, ${vals.value});`,
+ lib: 'core.propsVars',
+ i18nKey: 'save to storage',
+ pieces: [{
+ type: 'argument',
+ key: 'key',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'value',
+ i18nKey: 'value'
+ }, {
+ type: 'argument',
+ key: 'value',
+ typeHint: 'string',
+ required: true
+ }]
+}, {
+ name: 'Delete from storage',
+ type: 'command',
+ code: 'delete localStorage',
+ icon: 'save',
+ jsTemplate: (vals) => `localStorage.removeItem(${vals.key});`,
+ lib: 'core.propsVars',
+ i18nKey: 'delete from storage',
+ pieces: [{
+ type: 'argument',
+ key: 'key',
+ typeHint: 'string',
+ required: true
+ }]
+}, {
+ name: 'load from storage',
+ type: 'computed',
+ typeHint: 'string',
+ code: 'load localStorage',
+ icon: 'save',
+ jsTemplate: (vals) => `localStorage.getItem(${vals.key})`,
+ lib: 'core.propsVars',
+ i18nKey: 'load from storage',
+ pieces: [{
+ type: 'argument',
+ key: 'key',
+ typeHint: 'string',
+ required: true
+ }]
+}, {
+ name: 'is key in storage',
+ type: 'computed',
+ typeHint: 'boolean',
+ code: 'is localStorage',
+ icon: 'save',
+ jsTemplate: (vals) => `(${vals.key} in localStorage)`,
+ lib: 'core.propsVars',
+ i18nKey: 'is key in storage',
+ pieces: [{
+ type: 'argument',
+ key: 'key',
+ typeHint: 'string',
+ required: true
+ }]
+});
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/rooms.ts b/src/node_requires/catnip/stdLib/rooms.ts
new file mode 100644
index 000000000..1b4c691ec
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/rooms.ts
@@ -0,0 +1,108 @@
+import {optionsToStringObj, getOptions} from './_utils';
+
+const roomOptions: IBlockOptions = {
+ type: 'options',
+ allowCustom: true,
+ options: [{
+ key: 'isUi',
+ name: 'isUi',
+ i18nKey: 'isRoomUi',
+ typeHint: 'boolean'
+ }]
+};
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ code: 'rooms.append',
+ lib: 'core',
+ type: 'command',
+ name: 'Rooms append',
+ i18nKey: 'rooms Rooms append',
+ icon: 'room',
+ pieces: [
+ {
+ type: 'argument',
+ key: 'name',
+ typeHint: 'string',
+ assets: 'room',
+ required: true
+ },
+ {
+ type: 'filler'
+ },
+ {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ },
+ {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ },
+ roomOptions
+ ],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions(values, ['isUi'], custom);
+ if (values.return && values.return !== 'undefined') {
+ return `${values.return} = rooms.append(${values.name}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ }
+ return `rooms.append(${values.name}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ },
+ mutators: [{
+ lib: 'core',
+ code: 'rooms.prepend'
+ }]
+}, {
+ code: 'rooms.prepend',
+ lib: 'core',
+ type: 'command',
+ name: 'Rooms prepend',
+ i18nKey: 'rooms Rooms prepend',
+ icon: 'room',
+ pieces: [
+ {
+ type: 'argument',
+ key: 'name',
+ typeHint: 'string',
+ assets: 'room',
+ required: true
+ },
+ {
+ type: 'filler'
+ },
+ {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ },
+ {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ },
+ roomOptions
+ ],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions(values, ['isUi'], custom);
+ if (values.return && values.return !== 'undefined') {
+ return `${values.return} = rooms.prepend(${values.name}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ }
+ return `rooms.prepend(${values.name}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ },
+ mutators: [{
+ lib: 'core',
+ code: 'rooms.append'
+ }]
+}, {
+ name: 'copy\'s owning room',
+ type: 'computed',
+ code: 'owning room',
+ icon: 'room',
+ lib: 'core',
+ i18nKey: 'owning room',
+ typeHint: 'wildcard',
+ pieces: [],
+ jsTemplate: () => 'this.getRoom()'
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/settings.ts b/src/node_requires/catnip/stdLib/settings.ts
new file mode 100644
index 000000000..5602ca0d4
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/settings.ts
@@ -0,0 +1,31 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ type: 'command',
+ code: 'set ticker speed',
+ lib: 'core.settings',
+ name: 'Set game speed',
+ i18nKey: 'set game speed',
+ displayName: 'Set game speed to',
+ displayI18nKey: 'set game speed to',
+ icon: 'settings',
+ pieces: [{
+ type: 'argument',
+ key: 'speed',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (values) => `pixiApp.ticker.speed = ${values.speed};`
+}, {
+ type: 'computed',
+ typeHint: 'number',
+ code: 'get ticker speed',
+ lib: 'core.settings',
+ name: 'Get game speed',
+ i18nKey: 'get game speed',
+ displayName: 'game speed',
+ displayI18nKey: 'game speed',
+ icon: 'settings',
+ jsTemplate: () => 'pixiApp.ticker.speed',
+ pieces: []
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/sounds.ts b/src/node_requires/catnip/stdLib/sounds.ts
new file mode 100644
index 000000000..e0ba8123b
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/sounds.ts
@@ -0,0 +1,106 @@
+import {optionsToStringObj, getOptions} from './_utils';
+
+const soundOptions: IBlockOptions = {
+ type: 'options',
+ options: [{
+ key: 'volume',
+ name: 'volume',
+ i18nKey: 'soundVolume',
+ typeHint: 'number'
+ }, {
+ key: 'speed',
+ name: 'Speed',
+ i18nKey: 'speed',
+ typeHint: 'number'
+ }, {
+ key: 'start',
+ name: 'Start at',
+ i18nKey: 'start at',
+ typeHint: 'number'
+ }, {
+ key: 'loop',
+ name: 'Loop',
+ i18nKey: 'loop',
+ typeHint: 'boolean'
+ }, {
+ key: 'singleInstance',
+ name: 'Stop other instances',
+ i18nKey: 'soundSingleInstance',
+ typeHint: 'boolean'
+ }]
+};
+
+const getTemplate = (method: 'play' | 'playAt') => (values: Record): string => {
+ let prefix = '';
+ if (values.return && values.return !== 'undefined') {
+ prefix = `${values.return} = `;
+ }
+ const options = getOptions(values, ['volume', 'speed', 'start', 'loop', 'singleInstance']);
+ if (options) {
+ return prefix + `sounds.${method}(${values.name}${method === 'playAt' ? ', ' + values.position : ''}, ${optionsToStringObj(options)});`;
+ }
+ return prefix + `sounds.${method}(${values.name}${method === 'playAt' ? ', ' + values.position : ''});`;
+};
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ code: 'sounds.play',
+ lib: 'core',
+ type: 'command',
+ name: 'Sounds play',
+ i18nKey: 'sounds Sounds play',
+ icon: 'music',
+ pieces: [{
+ type: 'argument',
+ key: 'name',
+ typeHint: 'string',
+ assets: 'sound',
+ required: true
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }, soundOptions],
+ jsTemplate: getTemplate('play')
+}, {
+ code: 'sounds.playAt',
+ lib: 'core',
+ type: 'command',
+ name: 'Sounds play 3D',
+ i18nKey: 'sounds Sounds play at',
+ icon: 'music',
+ pieces: [{
+ type: 'argument',
+ key: 'name',
+ typeHint: 'string',
+ assets: 'sound',
+ required: true
+ }, {
+ type: 'label',
+ name: 'at',
+ i18nKey: 'atPosition'
+ }, {
+ type: 'argument',
+ key: 'position',
+ typeHint: 'wildcard',
+ defaultConstant: 'this'
+ }, {
+ type: 'filler'
+ }, {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ }, {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ }, soundOptions],
+ jsTemplate: getTemplate('playAt')
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/strings.ts b/src/node_requires/catnip/stdLib/strings.ts
new file mode 100644
index 000000000..5d28ed352
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/strings.ts
@@ -0,0 +1,451 @@
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ name: 'Concatenate strings',
+ i18nKey: 'concatenate strings',
+ displayName: 'join',
+ displayI18nKey: 'join',
+ code: 'concat',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ hideLabel: true,
+ jsTemplate: (vals) => `(${vals.a} + ${vals.b})`,
+ lib: 'core.strings',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: '+'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'string',
+ required: true
+ }],
+ mutators: [{
+ code: 'concat3',
+ lib: 'core.strings'
+ }]
+}, {
+ name: 'Concatenate strings (triple)',
+ i18nKey: 'concatenate strings triple',
+ displayName: 'join',
+ displayI18nKey: 'join',
+ code: 'concat3',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ hideLabel: true,
+ jsTemplate: (vals) => `(${vals.a} + ${vals.b} + ${vals.c})`,
+ lib: 'core.strings',
+ pieces: [{
+ type: 'argument',
+ key: 'a',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: '+'
+ }, {
+ type: 'argument',
+ key: 'b',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: '+'
+ }, {
+ type: 'argument',
+ key: 'c',
+ typeHint: 'string',
+ required: true
+ }],
+ mutators: [{
+ code: 'concat',
+ lib: 'core.strings'
+ }]
+}, {
+ name: 'has a substring',
+ hideLabel: true,
+ i18nKey: 'hasSubstring',
+ code: 'hasSubstring',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'contains',
+ i18nKey: 'contains'
+ }, {
+ type: 'argument',
+ key: 'substring',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.string}.includes(${vals.substring})`
+}, {
+ name: 'substring position',
+ i18nKey: 'substringPosition',
+ code: 'substringPosition',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'number',
+ pieces: [{
+ type: 'argument',
+ key: 'substring',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'in',
+ i18nKey: 'inInside'
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.string}.indexOf(${vals.substring})`
+}, {
+ name: 'string length',
+ i18nKey: 'stringLength',
+ displayName: 'length of',
+ displayI18nKey: 'lengthOf',
+ code: 'stringLength',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'number',
+ pieces: [{
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.string}.length`
+}, {
+ name: 'replace substring',
+ i18nKey: 'replace substring',
+ hideLabel: true,
+ code: 'replaceSubstring',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'label',
+ name: 'inInside',
+ i18nKey: 'inInside'
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'replace',
+ i18nKey: 'replace'
+ }, {
+ type: 'argument',
+ key: 'substring',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with',
+ i18nKey: 'with'
+ }, {
+ type: 'argument',
+ key: 'newString',
+ typeHint: 'string'
+ }],
+ jsTemplate: (vals) => `${vals.string}.replace(${vals.substring}, ${vals.newString})`
+}, {
+ name: 'replace all substrings',
+ i18nKey: 'replace all substrings',
+ hideLabel: true,
+ code: 'replaceAllSubstrings',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'label',
+ name: 'inInside',
+ i18nKey: 'inInside'
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'replace all',
+ i18nKey: 'replaceAll'
+ }, {
+ type: 'argument',
+ key: 'substring',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with',
+ i18nKey: 'with'
+ }, {
+ type: 'argument',
+ key: 'newString',
+ typeHint: 'string'
+ }],
+ jsTemplate: (vals) => `${vals.string}.replaceAll(${vals.substring}, ${vals.newString})`
+}, {
+ name: 'regex passes',
+ i18nKey: 'regex passes',
+ code: 'regexTest',
+ lib: 'core.strings',
+ icon: 'code-alt',
+ type: 'computed',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ key: 'regex',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `new RegExp(${vals.regex}).test(${vals.string})`
+}, {
+ name: 'replace by regex',
+ i18nKey: 'replace by regex',
+ hideLabel: true,
+ code: 'replaceSubstringRegex',
+ lib: 'core.strings',
+ icon: 'code-alt',
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'label',
+ name: 'inInside',
+ i18nKey: 'inInside'
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'replace by regex',
+ i18nKey: 'replaceByRegex'
+ }, {
+ type: 'argument',
+ key: 'regex',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with',
+ i18nKey: 'with'
+ }, {
+ type: 'argument',
+ key: 'newString',
+ typeHint: 'string'
+ }],
+ jsTemplate: (vals) => `${vals.string}.replace(new RegExp(${vals.regex}), ${vals.newString})`
+}, {
+ name: 'replace all substrings by regex',
+ i18nKey: 'replace all substrings by regex',
+ hideLabel: true,
+ code: 'replaceAllSubstringsRegex',
+ lib: 'core.strings',
+ icon: 'code-alt',
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'label',
+ name: 'inInside',
+ i18nKey: 'inInside'
+ }, {
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'replace all by regex',
+ i18nKey: 'replace all by regex'
+ }, {
+ type: 'argument',
+ key: 'regex',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'with',
+ i18nKey: 'with'
+ }, {
+ type: 'argument',
+ key: 'newString',
+ typeHint: 'string'
+ }],
+ jsTemplate: (vals) => `${vals.string}.replaceAll(new RegExp(${vals.regex}, 'g'), ${vals.newString})`
+}, {
+ name: 'split by a substring',
+ i18nKey: 'split by a substring',
+ displayName: 'split',
+ displayI18nKey: 'split',
+ code: 'splitBySubstring',
+ lib: 'core.strings',
+ icon: 'grid',
+ type: 'computed',
+ typeHint: 'wildcard',
+ pieces: [{
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'by',
+ i18nKey: 'by'
+ }, {
+ type: 'argument',
+ key: 'substring',
+ typeHint: 'string'
+ }],
+ jsTemplate: (vals) => `${vals.string}.split(${vals.substring})`
+}, {
+ name: 'slice a string',
+ i18nKey: 'slice a string',
+ code: 'slice',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }, {
+ type: 'label',
+ name: 'from',
+ i18nKey: 'fromDestination'
+ }, {
+ type: 'argument',
+ key: 'from',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'to',
+ i18nKey: 'toDestination'
+ }, {
+ type: 'argument',
+ key: 'to',
+ typeHint: 'number',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.string}.slice(${vals.from}, ${vals.to})`
+}, {
+ name: 'trim whitespace',
+ i18nKey: 'trim whitespace',
+ code: 'trimWhitespace',
+ lib: 'core.strings',
+ icon: 'string',
+ hideIcon: true,
+ type: 'computed',
+ typeHint: 'string',
+ pieces: [{
+ type: 'argument',
+ key: 'string',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (vals) => `${vals.string}.trim()`
+}, {
+ name: 'to uppercase',
+ i18nKey: 'to uppercase',
+ type: 'computed',
+ typeHint: 'string',
+ code: 'to uppercase',
+ icon: 'string',
+ hideIcon: true,
+ lib: 'core.strings',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (values) => `${values.val}.toUpperCase()`
+}, {
+ name: 'to lowercase',
+ i18nKey: 'to lowercase',
+ type: 'computed',
+ typeHint: 'string',
+ code: 'to lowercase',
+ icon: 'string',
+ hideIcon: true,
+ lib: 'core.strings',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'string',
+ required: true
+ }],
+ jsTemplate: (values) => `${values.val}.toLowerCase()`
+}, {
+ name: 'convert to string',
+ i18nKey: 'convert to string',
+ type: 'computed',
+ code: 'convert to string',
+ icon: 'string',
+ jsTemplate: (values) => `String(${values.val})`,
+ lib: 'core.utils',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'wildcard',
+ required: true
+ }],
+ typeHint: 'string'
+}, {
+ name: 'constant string',
+ i18nKey: 'const string',
+ type: 'computed',
+ code: 'const string',
+ icon: 'string',
+ jsTemplate: (values) => values.val,
+ lib: 'core.utils',
+ hideLabel: true,
+ documentationI18nKey: 'constant string',
+ pieces: [{
+ type: 'argument',
+ key: 'val',
+ typeHint: 'string',
+ required: true
+ }],
+ typeHint: 'string'
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/templates.ts b/src/node_requires/catnip/stdLib/templates.ts
new file mode 100644
index 000000000..7baf1fe17
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/templates.ts
@@ -0,0 +1,162 @@
+import {getOptions, optionsToStringObj} from './_utils';
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [{
+ code: 'templates.copy',
+ lib: 'core',
+ type: 'command',
+ name: 'Templates copy',
+ icon: 'template',
+ i18nKey: 'templates Templates copy',
+ documentation: 'Creates a new copy of a given template inside the current root room.\nA shorthand for `templates.copyIntoRoom(template, x, y, ct.room, exts)`\n\n**template** The name of the template to use\n**x** The x coordinate of a new copy. Defaults to 0.\n**y** The y coordinate of a new copy. Defaults to 0.\n**params** An optional object which parameters will be applied\nto the copy prior to its OnCreate event.\n\n**Returns** The created copy.',
+ pieces: [
+ {
+ type: 'argument',
+ key: 'template',
+ typeHint: 'string',
+ assets: 'template',
+ required: true
+ },
+ {
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number'
+ },
+ {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number'
+ },
+ {
+ type: 'filler'
+ },
+ {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ },
+ {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ },
+ {
+ type: 'options',
+ options: [],
+ allowCustom: true
+ }
+ ],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions({}, [], custom);
+ if (values.return && values.return !== 'undefined') {
+ return `${values.return} = templates.copy(${values.template}, ${values.x}, ${values.y}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ }
+ return `templates.copy(${values.template}, ${values.x}, ${values.y}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ },
+ mutators: [{
+ lib: 'core',
+ code: 'templates.copyIntoRoom'
+ }]
+}, {
+ code: 'templates.copyIntoRoom',
+ lib: 'core',
+ type: 'command',
+ name: 'Templates copy into room',
+ icon: 'template',
+ i18nKey: 'templates Templates copy into room',
+ documentation: 'Creates a new copy of a given template inside a specific room.\n\n**template** The name of the template to use\n**x** The x coordinate of a new copy. Defaults to 0.\n**y** The y coordinate of a new copy. Defaults to 0.\n**room** The room to which add the copy.\nDefaults to the current room.\n**params** An optional object which parameters will be applied\nto the copy prior to its OnCreate event.\n\n**Returns** The created copy.',
+ pieces: [
+ {
+ type: 'argument',
+ key: 'template',
+ typeHint: 'string',
+ assets: 'template',
+ required: true
+ },
+ {
+ type: 'argument',
+ key: 'x',
+ typeHint: 'number'
+ },
+ {
+ type: 'argument',
+ key: 'y',
+ typeHint: 'number'
+ },
+ {
+ type: 'argument',
+ key: 'room',
+ typeHint: 'wildcard',
+ required: true
+ },
+ {
+ type: 'filler'
+ },
+ {
+ type: 'label',
+ name: 'store in',
+ i18nKey: 'store in'
+ },
+ {
+ type: 'argument',
+ key: 'return',
+ typeHint: 'wildcard'
+ },
+ {
+ type: 'options',
+ options: [],
+ allowCustom: true
+ }
+ ],
+ jsTemplate: (values, id, custom) => {
+ const options = getOptions({}, [], custom);
+ if (values.return && values.return !== 'undefined') {
+ return `${values.return} = templates.copyIntoRoom(${values.template}, ${values.x}, ${values.y}, ${values.room}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ }
+ return `templates.copyIntoRoom(${values.template}, ${values.x}, ${values.y}, ${values.room}${options ? ', ' + optionsToStringObj(options) : ''});`;
+ },
+ mutators: [{
+ lib: 'core',
+ code: 'templates.copy'
+ }]
+}, {
+ name: 'Kill copy',
+ type: 'command',
+ code: 'kill',
+ icon: 'template',
+ i18nKey: 'kill copy',
+ jsTemplate: () => 'this.kill = true;',
+ lib: 'core.templates',
+ pieces: []
+}, {
+ name: 'is copy',
+ type: 'computed',
+ code: 'is copy',
+ icon: 'template',
+ lib: 'core.templates',
+ i18nKey: 'is copy',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ typeHint: 'wildcard',
+ key: 'copy',
+ required: true
+ }],
+ jsTemplate: (values) => `templates.isCopy(${values.copy})`
+}, {
+ name: 'is valid',
+ type: 'computed',
+ code: 'is valid',
+ icon: 'template',
+ lib: 'core.templates',
+ i18nKey: 'is valid',
+ typeHint: 'boolean',
+ pieces: [{
+ type: 'argument',
+ typeHint: 'wildcard',
+ key: 'copy',
+ required: true
+ }],
+ jsTemplate: (values) => `templates.valid(${values.copy})`
+}];
+
+export default blocks;
diff --git a/src/node_requires/catnip/stdLib/timers.ts b/src/node_requires/catnip/stdLib/timers.ts
new file mode 100644
index 000000000..a854623c4
--- /dev/null
+++ b/src/node_requires/catnip/stdLib/timers.ts
@@ -0,0 +1,47 @@
+const makeTimerSetter = (index: number): IBlockCommandDeclaration => ({
+ code: `set timer${index}`,
+ lib: 'core.timers',
+ type: 'command',
+ name: `Set timer ${index}`,
+ i18nKey: `set timer ${index}`,
+ displayName: `set timer ${index} to`,
+ displayI18nKey: `set timer ${index} to`,
+ icon: 'clock',
+ pieces: [{
+ type: 'argument',
+ key: 'time',
+ typeHint: 'number',
+ required: true
+ }, {
+ type: 'label',
+ name: 'seconds',
+ i18nKey: 'secondsUnits'
+ }],
+ jsTemplate: values => `this.timer${index} = ${values.time};`
+});
+const makeTimerGetter = (index: number): IBlockComputedDeclaration => ({
+ code: `get timer${index}`,
+ lib: 'core.timers',
+ type: 'computed',
+ typeHint: 'number',
+ name: `get timer ${index}`,
+ i18nKey: `get timer ${index}`,
+ displayName: 'timer',
+ displayI18nKey: 'timer',
+ icon: 'clock',
+ pieces: [{
+ type: 'label',
+ name: String(index)
+ }],
+ jsTemplate: () => `this.timer${index}`
+});
+
+const blocks: (IBlockCommandDeclaration | IBlockComputedDeclaration)[] = [];
+for (let i = 1; i <= 6; i++) {
+ blocks.push(makeTimerSetter(i));
+}
+for (let i = 1; i <= 6; i++) {
+ blocks.push(makeTimerGetter(i));
+}
+
+export default blocks;
diff --git a/src/node_requires/catniplessTsHoverProvider.ts b/src/node_requires/catniplessTsHoverProvider.ts
new file mode 100644
index 000000000..64a79fb76
--- /dev/null
+++ b/src/node_requires/catniplessTsHoverProvider.ts
@@ -0,0 +1,86 @@
+// This hover provider removes @catnip tags from documentation,
+// but otherwise copies the source of monaco-editor's HoverProvider.
+
+/* eslint-disable id-blacklist */
+/* eslint-disable no-underscore-dangle */
+import type Monaco from 'monaco-editor';
+import type ts from 'typescript';
+
+/** Custom hover provider that removes @catnip tags from documentation */
+const displayPartsToString = function (displayParts?: ts.SymbolDisplayPart[]) {
+ if (displayParts) {
+ return displayParts.map((displayPart) => displayPart.text).join('');
+ }
+ return '';
+};
+
+const tagToString = function (tag: ts.JSDocTagInfo) {
+ let tagLabel = `*@${tag.name}*`;
+ if (tag.name === 'param' && tag.text) {
+ const [paramName, ...rest] = tag.text;
+ tagLabel += `\`${paramName.text}\``;
+ if (rest.length > 0) {
+ tagLabel += ` — ${rest.map((r) => r.text).join(' ')}`;
+ }
+ } else if (Array.isArray(tag.text)) {
+ tagLabel += ` — ${tag.text.map((r) => r.text).join(' ')}`;
+ } else if (tag.text) {
+ tagLabel += ` — ${tag.text}`;
+ }
+ return tagLabel;
+};
+export class HoverProvider {
+ private _worker: (uri: string) => Promise;
+ constructor(worker: (uri: string) => Promise) {
+ this._worker = worker;
+ }
+ // eslint-disable-next-line class-methods-use-this
+ _textSpanToRange(model: Monaco.editor.ITextModel & {
+ ctCodePrefix?: string;
+ }, span: ts.TextSpan): Monaco.IRange {
+ const p1 = model.getPositionAt(span.start);
+ const p2 = model.getPositionAt(span.start + span.length);
+ const {lineNumber: startLineNumber, column: startColumn} = p1;
+ const {lineNumber: endLineNumber, column: endColumn} = p2;
+ return {
+ startLineNumber, startColumn, endLineNumber, endColumn
+ };
+ }
+ async provideHover(model: Monaco.editor.ITextModel & {
+ ctCodePrefix?: string;
+ }, position: Monaco.IPosition) {
+ const resource = model.uri.toString();
+ const offset = model.getOffsetAt(position);
+ const worker = await this._worker(resource);
+ if (model.isDisposed()) {
+ return;
+ }
+ const info = await worker.getQuickInfoAtPosition(
+ resource.toString(),
+ offset
+ ) as ts.QuickInfo | undefined;
+ if (!info || model.isDisposed()) {
+ return;
+ }
+ const documentation = displayPartsToString(info.documentation);
+ const tags = info.tags ?
+ info.tags
+ .filter(tag => !tag.name.startsWith('catnip'))
+ .map((tag) => tagToString(tag))
+ .join(' \n\n') :
+ '';
+ const contents = displayPartsToString(info.displayParts);
+ // eslint-disable-next-line consistent-return
+ return {
+ range: this._textSpanToRange(model, info.textSpan),
+ contents: [
+ {
+ value: '```typescript\n' + contents + '\n```\n'
+ },
+ {
+ value: documentation + (tags ? '\n\n' + tags : '')
+ }
+ ]
+ };
+ }
+}
diff --git a/src/node_requires/coffeescriptSuggestionProvider.js b/src/node_requires/coffeescriptSuggestionProvider.ts
similarity index 63%
rename from src/node_requires/coffeescriptSuggestionProvider.js
rename to src/node_requires/coffeescriptSuggestionProvider.ts
index d2338ee9b..654cc4653 100644
--- a/src/node_requires/coffeescriptSuggestionProvider.js
+++ b/src/node_requires/coffeescriptSuggestionProvider.ts
@@ -1,17 +1,6 @@
/* eslint-disable no-underscore-dangle */
-const {languages} = monaco;
-
-// The principle here is that we create an offscreen TypeScript document,
-// put CoffeeScript statements into it with `@` replacement, and steal
-// its code suggestions into another code editor.
-
-const enslavedModel = monaco.editor.createModel('', 'typescript');
-let workhorse;
-languages.typescript.getTypeScriptWorker()
-.then(worker => worker(enslavedModel.uri))
-.then(service => {
- workhorse = service;
-});
+import type Monaco from 'monaco-editor';
+import type ts from 'typescript';
// There's definitely something not used in this list, but whatever
const workerToTSTypeMap = {
@@ -27,9 +16,19 @@ const workerToTSTypeMap = {
default: monaco.languages.CompletionItemKind.Text
};
-module.exports.atCompletions = {
- triggerCharacters: ['@', '.'],
- provideCompletionItems: async (model, position) => {
+// The principle here is that we create an offscreen TypeScript document,
+// put CoffeeScript statements into it with `@` replacement, and steal
+// its code suggestions into another code editor.
+export class CompletionsProvider {
+ private _worker: (uri: string) => Promise;
+ constructor(worker: (uri: string) => Promise) {
+ this._worker = worker;
+ }
+ triggerCharacters = ['@', '.'];
+ completionsModel = monaco.editor.createModel('', 'typescript');
+ async provideCompletionItems(model: Monaco.editor.ITextModel & {
+ ctCodePrefix?: string;
+ }, position: Monaco.IPosition) {
const range = {
startLineNumber: position.lineNumber,
endLineNumber: position.lineNumber,
@@ -41,16 +40,18 @@ module.exports.atCompletions = {
if (currentLine.endsWith('@')) {
currentLine = currentLine.slice(0, -1) + 'this.';
}
- currentLine = currentLine.split(' ').pop();
+ currentLine = currentLine.split(' ').pop()!;
// Add type definitions set by a code-editor-scriptable tag.
currentLine = (model.ctCodePrefix || 'function () {') + currentLine;
currentLine += '\n}';
const suggestPos = currentLine.length - 1;
- enslavedModel.setValue(currentLine);
- const completions = await workhorse.getCompletionsAtPosition(
- enslavedModel.uri.toString(),
- suggestPos
- );
+ this.completionsModel.setValue(currentLine);
+ const client = await this._worker(this.completionsModel.uri.toString());
+ const completions: ts.CompletionInfo | undefined =
+ await client.getCompletionsAtPosition(
+ this.completionsModel.uri.toString(),
+ suggestPos
+ );
if (!completions) {
return {
suggestions: []
@@ -61,9 +62,10 @@ module.exports.atCompletions = {
.filter(completion => !completion.name.startsWith('_'))
.map(completion => ({
label: completion.name,
- kind: workerToTSTypeMap[completion.kind] || workerToTSTypeMap.default,
+ kind: workerToTSTypeMap[completion.kind as keyof typeof workerToTSTypeMap] ||
+ workerToTSTypeMap.default,
insertText: completion.insertText || completion.name
}))
};
}
-};
+}
diff --git a/src/node_requires/events/IEvent.d.ts b/src/node_requires/events/IEvent.d.ts
index 05e979fff..19044b01c 100644
--- a/src/node_requires/events/IEvent.d.ts
+++ b/src/node_requires/events/IEvent.d.ts
@@ -5,13 +5,14 @@ declare interface IEventCategory {
[key: string]: string;
}
-type EventApplicableEntities = 'template' | 'room';
+type EventApplicableEntities = 'template' | 'room' | 'behavior';
type EventArgumentTypes =
'integer' | 'float' | 'string' | 'boolean' |
'template' | 'room' | 'sound' | 'tandem' | 'font' | 'style' | 'texture' | 'action';
type EventCodeTargets =
'thisOnStep' | 'thisOnCreate' | 'thisOnDraw' | 'thisOnDestroy' |
- 'rootRoomOnCreate' | 'rootRoomOnStep' | 'rootRoomOnDraw' | 'rootRoomOnLeave';
+ 'rootRoomOnCreate' | 'rootRoomOnStep' | 'rootRoomOnDraw' | 'rootRoomOnLeave' |
+ 'thisOnAdded' | 'thisOnRemoved';
declare interface IEventArgumentDeclaration {
name: string;
diff --git a/src/node_requires/events/coreEventsActions.ts b/src/node_requires/events/coreEventsActions.ts
index c1185e810..61294224b 100644
--- a/src/node_requires/events/coreEventsActions.ts
+++ b/src/node_requires/events/coreEventsActions.ts
@@ -44,12 +44,12 @@ coreEvents.core_OnActionPress.locals = {
description: 'Current action\'s value'
}
};
-coreEvents.core_OnActionDown.inlineCodeTemplates.thisOnStep = `
+coreEvents.core_OnActionDown.inlineCodeTemplates!.thisOnStep = `
if (actions[/*%%action%%*/].down) {
let value = actions[/*%%action%%*/].value;
\n/*%%USER_CODE%%*/\n
}`;
-coreEvents.core_OnActionPress.inlineCodeTemplates.thisOnStep = `
+coreEvents.core_OnActionPress.inlineCodeTemplates!.thisOnStep = `
if (actions[/*%%action%%*/].pressed) {
let value = actions[/*%%action%%*/].value;
\n/*%%USER_CODE%%*/\n
diff --git a/src/node_requires/events/coreEventsLifecycle.ts b/src/node_requires/events/coreEventsLifecycle.ts
index f6eb58e5d..79f307385 100644
--- a/src/node_requires/events/coreEventsLifecycle.ts
+++ b/src/node_requires/events/coreEventsLifecycle.ts
@@ -60,6 +60,26 @@ const coreEvents = {
inlineCodeTemplates: {
thisOnDestroy: '{\n/*%%USER_CODE%%*/\n}'
}
+ },
+ core_OnBehaviorAdded: {
+ name: 'On behavior added',
+ applicable: ['behavior'],
+ icon: 'behavior',
+ category: 'lifecycle',
+ codeTargets: ['thisOnAdded'],
+ inlineCodeTemplates: {
+ thisOnAdded: '{\n/*%%USER_CODE%%*/\n}'
+ }
+ },
+ core_OnBehaviorRemoved: {
+ name: 'On behavior removed',
+ applicable: ['behavior'],
+ icon: 'behavior',
+ category: 'lifecycle',
+ codeTargets: ['thisOnRemoved'],
+ inlineCodeTemplates: {
+ thisOnRemoved: '{\n/*%%USER_CODE%%*/\n}'
+ }
}
} as Record;
diff --git a/src/node_requires/events/index.ts b/src/node_requires/events/index.ts
index 6e36779b2..7b296b480 100644
--- a/src/node_requires/events/index.ts
+++ b/src/node_requires/events/index.ts
@@ -1,5 +1,6 @@
import {getLanguageJSON, localizeField} from '../i18n';
-import {getName, getById, getThumbnail} from './../resources';
+import {assetTypes, getById, getThumbnail} from '../resources';
+import {fieldTypeToTsType} from '../resources/content';
const categories: Record = {
lifecycle: {
@@ -60,7 +61,7 @@ const eventNameRegex = /^(\S+?)_(\S+)$/;
* Returns the library and the event code from the full event key
*/
const splitEventName = (name: string): [string, string] => {
- const result = eventNameRegex.exec(name);
+ const result = eventNameRegex.exec(name)!;
return [result[1], result[2]];
};
@@ -105,7 +106,7 @@ const localizeProp = (eventFullCode: string, prop: string): string => {
const event = events[eventFullCode];
if (lib === 'core') {
if (timerPattern.test(eventCode)) {
- return getLanguageJSON().scriptables[propToCoreDictionary[prop]].Timer.replace('$1', timerPattern.exec(eventCode)[1]);
+ return getLanguageJSON().scriptables[propToCoreDictionary[prop]].Timer.replace('$1', timerPattern.exec(eventCode)![1]);
}
return getLanguageJSON().scriptables[propToCoreDictionary[prop]][eventCode];
}
@@ -123,9 +124,9 @@ const localizeParametrized = (eventFullCode: string, scriptedEvent: IScriptableE
}
for (const argName in event.arguments) {
let value = scriptedEvent.arguments[argName];
- if (['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].indexOf(event.arguments[argName].type) !== -1) {
+ if (assetTypes.indexOf(event.arguments[argName].type as resourceType) !== -1) {
if (typeof value === 'string') {
- value = getName(getById(null, value));
+ value = getById(null, value).name;
} else {
value = '(Unset)';
}
@@ -141,7 +142,7 @@ const localizeArgument = (eventFullCode: string, arg: string): string => {
if (lib === 'core') {
return getLanguageJSON().scriptables.coreEventsArguments[arg];
}
- return localizeField(event.arguments[arg], 'name');
+ return localizeField(event.arguments![arg], 'name');
};
const localizeLocalVarDesc = (eventFullCode: string, local: string): string => {
const [lib, eventCode] = splitEventName(eventFullCode);
@@ -149,7 +150,7 @@ const localizeLocalVarDesc = (eventFullCode: string, local: string): string => {
if (lib === 'core') {
return getLanguageJSON().scriptables.coreEventsLocals[`${eventCode}_${local}`];
}
- return localizeField(event.locals[local], 'description');
+ return localizeField(event.locals![local], 'description');
};
const tryGetIcon = (eventFullCode: string, scriptedEvent: IScriptableEvent): string | false => {
const event = events[eventFullCode];
@@ -168,7 +169,7 @@ const tryGetIcon = (eventFullCode: string, scriptedEvent: IScriptableEvent): str
return false;
};
-const canUseBaseClass = (event: IEventDeclaration, baseClass?: TemplateBaseClass): boolean => {
+const canUseBaseClass = (event: IEventDeclaration, baseClass: TemplateBaseClass): boolean => {
if (!event.baseClasses || event.baseClasses.length === 0) {
return true;
}
@@ -178,7 +179,8 @@ const canUseBaseClass = (event: IEventDeclaration, baseClass?: TemplateBaseClass
const bakeCategories = function bakeCategories(
entity: EventApplicableEntities,
callback: (affixedData: IEventDeclaration) => void,
- baseClass?: TemplateBaseClass
+ baseClass?: TemplateBaseClass,
+ isBehavior?: boolean
): EventMenu {
const menu = {
items: [] as IEventMenuSubmenu[]
@@ -198,11 +200,11 @@ const bakeCategories = function bakeCategories(
}
});
}
- const miscCategory = menu.items.find(s => s.affixedData.core && s.affixedData.key === 'misc');
+ const miscCategory = menu.items.find(s => s.affixedData.core && s.affixedData.key === 'misc')!;
for (const eventKey in events) {
const event = events[eventKey];
// Filter out events for other entities
- if (!event.applicable.includes(entity)) {
+ if (!event.applicable.includes(entity) && !(isBehavior && event.applicable.includes('behavior'))) {
continue;
}
// Filter out events that require a specific base class
@@ -236,7 +238,7 @@ const bakeCategories = function bakeCategories(
return menu;
};
-const getEventByLib = (event: string, libName: string): IEventDeclaration =>
+const getEventByLib = (event: string, libName: string): IEventDeclaration | undefined =>
events[`${libName}_${event}`];
const getArgumentsTypeScript = (event: IEventDeclaration): string => {
@@ -249,6 +251,66 @@ const getArgumentsTypeScript = (event: IEventDeclaration): string => {
}
return code;
};
+export const getLocals = (event: string, libName: string): string[] => {
+ const declaration = getEventByLib(event, libName)!;
+ if (!declaration.locals) {
+ return [];
+ }
+ return Object.keys(declaration.locals);
+};
+export const getFieldsTypeScript = (asset: IScriptable | IScriptableBehaviors): string => {
+ let code = '';
+ if ('behaviors' in asset) {
+ for (const behaviorId of asset.behaviors) {
+ const behavior = getById('behavior', behaviorId);
+ if (behavior.specification.length) {
+ code += '&{';
+ for (const field of behavior.specification) {
+ code += `${field.name || field.readableName}: ${fieldTypeToTsType[field.type]};`;
+ }
+ code += behavior.extendTypes.split('\n').join('');
+ code += '}';
+ }
+ }
+ }
+ if (asset.type === 'behavior' && (asset as IBehavior).specification.length) {
+ const behavior = asset as IBehavior;
+ code += '&{';
+ for (const field of behavior.specification) {
+ code += `${field.name || field.readableName}: ${fieldTypeToTsType[field.type]};`;
+ }
+ code += behavior.extendTypes.split('\n').join('');
+ code += '}';
+ } else if (asset.extendTypes) {
+ code += `&{${asset.extendTypes.split('\n').join('')}}`;
+ }
+ return code;
+};
+
+/**
+ * Returns an array of field names from this asset/behavior and all the linked behaviors.
+ * Mainly used for block code editor.
+ */
+export const getBehaviorFields = (asset: IScriptable | IScriptableBehaviors): string[] => {
+ const fields: string[] = [];
+ if ('behaviors' in asset) {
+ for (const behaviorId of asset.behaviors) {
+ const behavior = getById('behavior', behaviorId);
+ if (behavior.specification.length) {
+ for (const field of behavior.specification) {
+ fields.push(field.name || field.readableName);
+ }
+ }
+ }
+ }
+ if (asset.type === 'behavior' && (asset as IBehavior).specification.length) {
+ const behavior = asset as IBehavior;
+ for (const field of behavior.specification) {
+ fields.push(field.name || field.readableName);
+ }
+ }
+ return fields;
+};
import {baseClassToTS} from '../resources/templates';
const baseTypes = `import {BasicCopy} from 'src/ct.release/templates';import {${Object.values(baseClassToTS).join(', ')}} from 'src/ct.release/templateBaseClasses/index';`;
diff --git a/src/node_requires/exporter/ExporterError.ts b/src/node_requires/exporter/ExporterError.ts
index bbb0f9719..eb1a71e56 100644
--- a/src/node_requires/exporter/ExporterError.ts
+++ b/src/node_requires/exporter/ExporterError.ts
@@ -5,7 +5,8 @@ interface IErrorRichInfo {
resourceId?: assetRef,
eventKey?: string,
problematicCode?: string,
- clue: 'syntax' | 'eventConfiguration' | 'emptySound' | 'emptyEmitter' | 'noTemplateTexture' | 'windowsFileLock' | 'unknown'
+ clue: 'syntax' | 'eventConfiguration' | 'eventMissing' | 'emptySound' | 'emptyEmitter' | 'noTemplateTexture' |
+ 'windowsFileLock' | 'unknown' | 'blockArgumentMissing' | 'blockDeclarationMissing'
}
export class ExporterError extends Error {
@@ -56,14 +57,14 @@ export const highlightProblem = (
const lines = code.split('\n');
const output = [];
let firstColumn, lastColumn, firstLine, lastLine;
- if ('first_column' in location) {
+ if ('first_column' in location!) {
firstColumn = location.first_column;
firstLine = location.first_line;
lastLine = location.last_line;
lastColumn = location.last_column;
} else {
- firstColumn = lastColumn = location.column;
- firstLine = lastLine = location.line - 1;
+ firstColumn = lastColumn = location!.column;
+ firstLine = lastLine = location!.line - 1;
}
// Take a couple of lines before the error
output.push(...lines.slice(Math.max(0, firstLine - 2), firstLine + 1));
diff --git a/src/node_requires/exporter/_exporterContracts.ts b/src/node_requires/exporter/_exporterContracts.ts
index 866f92a52..701eec5a3 100644
--- a/src/node_requires/exporter/_exporterContracts.ts
+++ b/src/node_requires/exporter/_exporterContracts.ts
@@ -3,15 +3,16 @@
/* eslint-disable @typescript-eslint/triple-slash-reference */
/* eslint-disable spaced-comment */
+///
+///
+///
///
///
///
///
///
-///
-///
-import * as PIXI from 'node_modules/pixi.js';
+import * as PIXI from 'pixi.js';
/**
* @module
@@ -147,7 +148,7 @@ export type ExportedTemplate = {
loopAnimation: boolean;
texture?: string;
} | {
- baseClass: 'Text';
+ baseClass: 'Text' | 'BitmapText';
textStyle: string | -1;
defaultText: string;
} | {
@@ -165,6 +166,7 @@ export type ExportedTemplate = {
disabledTexture?: string;
textStyle: string | -1;
defaultText: string;
+ useBitmapText: boolean;
} | {
baseClass: 'RepeatingTexture';
scrollX: number;
@@ -187,6 +189,7 @@ export type ExportedTemplate = {
defaultText: string;
fieldType: ITemplate['fieldType'];
maxTextLength: number;
+ useBitmapText: boolean;
} | {
baseClass: 'ScrollBox';
nineSliceSettings: ITemplate['nineSliceSettings'];
@@ -222,14 +225,16 @@ export type ExportedStyle = {
dropShadowDistance?: number;
}
-export type ExportedSound = Omit &
+export type ExportedSound = Omit &
Partial>;
export type ExportedBehaviorDynamic = {
thisOnStep?: () => void,
thisOnCreate?: () => void,
thisOnDraw?: () => void,
- thisOnDestroy?: () => void
+ thisOnDestroy?: () => void,
+ thisOnAdded?: () => void,
+ thisOnRemoved?: () => void
};
export type ExportedBehavior = 'static' | ExportedBehaviorDynamic;
diff --git a/src/node_requires/exporter/assetTree.ts b/src/node_requires/exporter/assetTree.ts
index 336fec436..a3acfcf91 100644
--- a/src/node_requires/exporter/assetTree.ts
+++ b/src/node_requires/exporter/assetTree.ts
@@ -13,9 +13,7 @@ export const getAssetTree = (assets: folderEntries, project: IProject):
};
}
return {
- name: ('name' in asset) ?
- (asset as IAsset & {name: string}).name :
- (asset as IFont).typefaceName,
+ name: asset.name,
type: asset.type
};
});
diff --git a/src/node_requires/exporter/emitterTandems.ts b/src/node_requires/exporter/emitterTandems.ts
index cb43e9e9c..a640029f5 100644
--- a/src/node_requires/exporter/emitterTandems.ts
+++ b/src/node_requires/exporter/emitterTandems.ts
@@ -2,7 +2,7 @@ import {ExporterError} from './ExporterError';
import {ExportedTandems} from './_exporterContracts';
-import {getName, getById} from '../resources/';
+import {getById} from '../resources/';
export const stringifyTandems = (input: ITandem[]): string => {
@@ -21,7 +21,7 @@ export const stringifyTandems = (input: ITandem[]): string => {
}
return {
...emitter,
- texture: getName(getById('texture', emitter.texture))
+ texture: getById('texture', emitter.texture).name
};
});
}
diff --git a/src/node_requires/exporter/fonts.ts b/src/node_requires/exporter/fonts.ts
index 2ac37e1d5..4124dd79a 100644
--- a/src/node_requires/exporter/fonts.ts
+++ b/src/node_requires/exporter/fonts.ts
@@ -1,10 +1,12 @@
-const fs = require('fs-extra');
+import fs from 'fs-extra';
-export const stringifyFont = (font: IFont): string => `
+import {getPathToTtf} from '../resources/typefaces';
+
+export const stringifyFont = (typeface: ITypeface, font: IFont): string => `
@font-face {
- font-family: '${font.typefaceName}';
- src: url('fonts/${font.origname}.woff') format('woff'),
- url('fonts/${font.origname}') format('truetype');
+ font-family: '${typeface.name}';
+ src: url('fonts/${font.uid}.woff') format('woff'),
+ url('fonts/${font.uid}.ttf') format('truetype');
font-weight: ${font.weight};
font-style: ${font.italic ? 'italic' : 'normal'};
}`;
@@ -14,7 +16,7 @@ type fontsBundleResult = {
js: string;
};
export const bundleFonts = async function (
- input: IFont[],
+ input: ITypeface[],
projdir: string,
writeDir: string
): Promise {
@@ -25,20 +27,26 @@ export const bundleFonts = async function (
js += 'if (document.fonts) { for (const font of document.fonts) { font.load(); }}';
await fs.ensureDir(writeDir + '/fonts');
const ttf2woff = require('ttf2woff');
- await Promise.all(input.map(async font => {
- const fontData = await fs.readFile(`${projdir}/fonts/${font.origname}`);
- var ttf = new Uint8Array(fontData);
- let woff;
- try {
- woff = Buffer.from(ttf2woff(ttf).buffer);
- } catch (e) {
- window.alertify.error(`Whoah! A buggy ttf file in the font ${font.typefaceName} ${font.weight} ${font.italic ? 'italic' : 'normal'}. You should either fix it or find a new one.`);
- throw e;
- }
- writePromises.push(fs.copy(`${projdir}/fonts/${font.origname}`, writeDir + '/fonts/' + font.origname));
- writePromises.push(fs.writeFile(writeDir + '/fonts/' + font.origname + '.woff', woff));
- css += stringifyFont(font);
- }));
+ const promises: Promise[] = [];
+ for (const typeface of input) {
+ promises.push(...typeface.fonts.map(async font => {
+ const fontData = await fs.readFile(getPathToTtf(font, true));
+ var ttf = new Uint8Array(fontData);
+ let woff;
+ try {
+ woff = Buffer.from(ttf2woff(ttf).buffer);
+ } catch (e) {
+ window.alertify.error(`Whoah! A buggy ttf file in the typeface ${typeface.name} ${font.weight} ${font.italic ? 'italic' : 'normal'}. You should either fix it or find a new one.`);
+ throw e;
+ }
+ await Promise.all([
+ writePromises.push(fs.copy(getPathToTtf(font, true), writeDir + '/fonts/' + font.uid + '.ttf')),
+ writePromises.push(fs.writeFile(writeDir + '/fonts/' + font.uid + '.woff', woff))
+ ]);
+ return stringifyFont(typeface, font);
+ }));
+ }
+ css += (await Promise.all(promises)).join('\n\n');
}
await Promise.all(writePromises);
@@ -73,14 +81,14 @@ const charCodeToXMLChar = (code: number): string => {
export const generateXML = function generateXML(
fontData: any,
- ctFont: IFont,
- typefaceName: string
+ ctTypeface: ITypeface,
+ font: IFont
): string {
let XMLTemplate = `
-
-
+
+
-
+
`;
@@ -97,60 +105,60 @@ export const generateXML = function generateXML(
return XMLTemplate;
};
+const {generateBitmapFont} = require('../resources/typefaces/bitmapFontGenerator');
/**
- * @returns {Promise>} A promise that resolves into a map
- * from font names to their XML file paths.
+ * @returns {Promise} A promise that resolves into an array of file paths to fonts' XML.
*/
-export const bakeBitmapFonts = function bakeBitmapFonts(
- input: IFont[],
+export const bakeBitmapFonts = async (
+ input: ITypeface[],
projdir: string,
writeDir: string
-): Promise> {
- const generator = require('./../resources/fonts/bitmapFontGenerator');
+): Promise => {
const path = require('path');
- return Promise.all(input.filter(font => font.bitmapFont)
- .map(async font => {
- const fCharsets = font.charsets || ['basicLatin'];
- let letterList;
- if (fCharsets.length === 1 && fCharsets[0] === 'allInFont') {
- letterList = false;
- } else {
- letterList = fCharsets.reduce((
- acc: string,
- charset: Exclude
- ) => acc + (charSets[charset] || ''), '');
- }
- if (fCharsets.indexOf('custom') !== -1) {
- letterList += font.customCharset;
- }
- const settings = {
- fill: '#ffffff',
- // stroke: '#000000',
- list: letterList,
- height: font.bitmapFontSize,
- margin: 2
- };
- const typefaceName = `${font.typefaceName}_${font.weight}${font.italic ? '_Italic' : ''}`,
- xmlPath = `${font.uid}.xml`,
+ const bitmappableTypefaces = input.filter(typeface => typeface.bitmapFont);
+ const fontsMetadataUnflattened = await Promise.all(bitmappableTypefaces.map((typeface) => {
+ const fCharsets = typeface.charsets || ['basicLatin'];
+ let letterList;
+ if (fCharsets.length === 1 && fCharsets[0] === 'allInFont') {
+ letterList = false;
+ } else {
+ letterList = fCharsets.reduce((
+ acc: string,
+ charset: Exclude
+ ) => acc + (charSets[charset] || ''), '');
+ }
+ if (fCharsets.indexOf('custom') !== -1) {
+ letterList += typeface.customCharset!;
+ }
+ const settings = {
+ fill: '#ffffff',
+ // stroke: '#000000',l
+ list: letterList,
+ height: typeface.bitmapFontSize,
+ margin: 2,
+ pixelPerfect: typeface.bitmapPrecision,
+ typefaceName: typeface.name
+ };
+ return Promise.all(typeface.fonts.map(async font => {
+ const xmlPath = `${font.uid}.xml`,
pngPath = `${font.uid}.png`;
- const fontPath = path.join(projdir, 'fonts', font.origname);
- const drawData = await generator(fontPath, path.join(writeDir, `${font.uid}.png`), settings);
-
- const xml = generateXML(drawData, font, typefaceName);
-
+ const fontPath = getPathToTtf(font, true);
+ const drawData = await generateBitmapFont(fontPath, path.join(writeDir, `${font.uid}.png`), {
+ ...settings,
+ fontOrigname: font.origname
+ });
+ const xml = generateXML(drawData, typeface, font);
await fs.writeFile(path.join(writeDir, `${font.uid}.xml`), xml, 'utf8');
-
return {
xmlPath,
pngPath,
- typefaceName
+ typefaceName: typeface.name,
+ weight: font.weight,
+ italic: font.italic
};
- }))
- .then(fontsMetadata => {
- const bitmapFonts: Record = {};
- for (const font of fontsMetadata) {
- bitmapFonts[font.typefaceName] = font.xmlPath;
- }
- return bitmapFonts;
- });
+ }));
+ }));
+ const fontsMetadata = fontsMetadataUnflattened.flat(1);
+ const bitmapFontsXML = fontsMetadata.map(m => m.xmlPath);
+ return bitmapFontsXML;
};
diff --git a/src/node_requires/exporter/icons.ts b/src/node_requires/exporter/icons.ts
index a8f2d6088..3be76d174 100644
--- a/src/node_requires/exporter/icons.ts
+++ b/src/node_requires/exporter/icons.ts
@@ -11,7 +11,7 @@ export const resizeIcon = async function (
soft: boolean
): Promise {
const canvas = document.createElement('canvas'),
- ctx = canvas.getContext('2d');
+ ctx = canvas.getContext('2d')!;
canvas.width = canvas.height = length;
ctx.imageSmoothingQuality = soft ? 'high' : 'low';
// eslint-disable-next-line id-length
diff --git a/src/node_requires/exporter/index.ts b/src/node_requires/exporter/index.ts
index ebce19255..246898d72 100644
--- a/src/node_requires/exporter/index.ts
+++ b/src/node_requires/exporter/index.ts
@@ -28,7 +28,7 @@ import {stringifyScripts, getStartupScripts} from './scripts';
const typeScript = require('sucrase').transform;
import {getByTypes} from '../resources';
-import {getVariantPath} from '../resources/sounds';
+import {getVariantPath} from '../resources/sounds/common';
import {getLanguageJSON} from './../i18n';
import {getExportDir} from './../platformUtils';
@@ -277,7 +277,7 @@ const exportCtProject = async (
}
/* assets — run in parallel */
const texturesTask = packImages(assets.texture, writeDir, production);
- const bitmapFontsTask = bakeBitmapFonts(assets.font, projdir, writeDir);
+ const bitmapFontsTask = bakeBitmapFonts(assets.typeface, projdir, writeDir);
const favicons = bakeFavicons(project, writeDir, production);
const modulesTask = addModules();
/* Run event cache population in parallel as well */
@@ -296,7 +296,7 @@ const exportCtProject = async (
// Process all the scriptables to get combined code for the root rooms
await cacheHandle;
- const fonts = await bundleFonts(assets.font, projdir, writeDir);
+ const typefaces = await bundleFonts(assets.typeface, projdir, writeDir);
const rooms = stringifyRooms(assets, project);
const templates = stringifyTemplates(assets, project);
const behaviors = stringifyBehaviors(assets.behavior, project);
@@ -341,11 +341,15 @@ const exportCtProject = async (
maxfps: Number(settings.rendering.maxFPS),
transparent: Boolean(settings.rendering.transparent),
+ showErrors: settings.export.showErrors,
+ reportLink: JSON.stringify(settings.export.errorsLink || ''),
+
startroom: startroom.name,
startwidth: startroom.width,
startheight: startroom.height,
viewMode: settings.rendering.viewMode,
autocloseDesktop: settings.export.autocloseDesktop,
+ globalVars: project.globalVars?.length ? `let ${project.globalVars.join(', ')};` : '',
atlases: (await texturesTask).atlases,
tiledImages: (await texturesTask).tiledImages,
@@ -364,7 +368,7 @@ const exportCtProject = async (
templates: templates.libCode,
styles: stringifyStyles(assets.style),
tandemTemplates: stringifyTandems(assets.tandem),
- fonts: fonts.js,
+ fonts: typefaces.js,
bitmapFonts: await bitmapFontsTask,
userScripts,
@@ -387,7 +391,7 @@ const exportCtProject = async (
/* CSS styles for rendering settings and branding */
let preloaderColor1 = project.settings.branding.accent,
- preloaderColor2 = (global.brehautColor(preloaderColor1).getLuminance() < 0.5) ? '#ffffff' : '#000000';
+ preloaderColor2 = (window.brehautColor(preloaderColor1).getLuminance() < 0.5) ? '#ffffff' : '#000000';
if (project.settings.branding.invertPreloaderScheme) {
[preloaderColor1, preloaderColor2] = [preloaderColor2, preloaderColor1];
}
@@ -397,7 +401,7 @@ const exportCtProject = async (
hidemadewithctjs: project.settings.branding.hideLoadingLogo,
preloaderforeground: preloaderColor1,
preloaderbackground: preloaderColor2,
- fonts: fonts.css,
+ fonts: typefaces.css,
accent: project.settings.branding.accent
}, injections);
if (!noMinify) {
@@ -448,13 +452,13 @@ const exportCtProject = async (
iconRevision
}
);
- const htmlMinify = noMinify ? (void 0) : require('html-minifier').minify;
+ const htmlMinify = noMinify ? (void 0) : require('html-minifier-terser').minify;
await Promise.all([
fs.writeFile(
path.join(writeDir, '/index.html'),
noMinify ?
html :
- htmlMinify(html, {
+ await htmlMinify(html, {
removeComments: true,
collapseWhitespace: true
})
diff --git a/src/node_requires/exporter/desktopPackager.ts b/src/node_requires/exporter/packagers/desktop.ts
similarity index 73%
rename from src/node_requires/exporter/desktopPackager.ts
rename to src/node_requires/exporter/packagers/desktop.ts
index ace7923c4..a6a9f06a2 100644
--- a/src/node_requires/exporter/desktopPackager.ts
+++ b/src/node_requires/exporter/packagers/desktop.ts
@@ -1,13 +1,15 @@
import {join} from 'path';
import {tmpdir} from 'os';
import {readJson, readFile, outputJSON, outputFile, copy, mkdtemp, remove, ensureDir} from 'fs-extra';
-import {getBuildDir, isNodeInstalled} from '../platformUtils';
-import {getStartingRoom} from './rooms';
-import {getTextureOrig} from '../resources/textures';
-
-const {bundleApp} = require('node_modules/@neutralinojs/neu/src/modules/bundler.js');
+import {getBuildDir} from '../../platformUtils';
+import {getStartingRoom} from '../rooms';
+import {getTextureOrig} from '../../resources/textures';
+const {bundleApp} = require('@neutralinojs/neu/src/modules/bundler.js');
const png2icons = require('png2icons');
+import * as resedit from 'resedit';
+// pe-library is a direct dependency of resedit
+import * as peLibrary from 'pe-library';
const forbidden = /['"\\[\]():*?.]/g;
@@ -109,48 +111,38 @@ export const exportForDesktop = async (
);
const iconPath = join(tempDir, 'icon.ico');
- /*
- // eslint-disable-next-line no-eval
- const resedit = (await eval('import(\'resedit-cli\')')).default;
- await resedit({
- in: winPath,
- out: winPath,
- 'product-name': project.settings.authoring.title || 'A ct.js game',
- 'product-version': project.settings.authoring.version.join('.') + '.0',
- 'file-version': project.settings.authoring.version.join('.') + '.0',
- 'company-name': project.settings.authoring.author || 'A ct.js game developer',
- 'original-filename': `${project.settings.authoring.title || 'Ct.js game'}.exe`,
- icon: [iconPath]
+ const exe = peLibrary.NtExecutable.from(await readFile(winPath));
+ const res = peLibrary.NtExecutableResource.from(exe);
+ const iconBuffer = await readFile(iconPath);
+ const iconFile = resedit.Data.IconFile.from(iconBuffer);
+ // English (United States)
+ const EN_US = 1033;
+ resedit.Resource.IconGroupEntry.replaceIconsForResource(
+ res.entries,
+ 0,
+ EN_US,
+ iconFile.icons.map(i => i.data)
+ );
+ const vi = resedit.Resource.VersionInfo.createEmpty();
+ const [major, minor, patch] = project.settings.authoring.version;
+ vi.setFileVersion(major, minor, patch, 0, EN_US);
+ vi.setStringValues({
+ lang: EN_US,
+ codepage: 1200
+ }, {
+ CompanyName: project.settings.authoring.author || 'A ct.js game developer',
+ FileDescription: project.settings.authoring.title || 'A ct.js game',
+ FileVersion: project.settings.authoring.version.join('.') + '.0',
+ InternalName: project.settings.authoring.title || 'A ct.js game',
+ LegalCopyright: `Copyright © ${new Date().getFullYear()} ${project.settings.authoring.author || 'A ct.js game developer'}`,
+ OriginalFilename: `${project.settings.authoring.title || 'Ct.js game'}.exe`,
+ ProductName: project.settings.authoring.title || 'A ct.js game',
+ ProductVersion: project.settings.authoring.version.join('.') + '.0'
});
- */
- if (isNodeInstalled) {
- const execa = require('execa');
- try {
- const {stdout} = await execa('node', [
- './node_modules/resedit-cli/dist/cli.js',
- '--in',
- winPath,
- '--out',
- winPath,
- '--product-name',
- project.settings.authoring.title || 'A ct.js game',
- '--product-version',
- project.settings.authoring.version.join('.') + '.0',
- '--file-version',
- project.settings.authoring.version.join('.') + '.0',
- '--company-name',
- project.settings.authoring.author || 'A ct.js game developer',
- '--original-filename',
- `${project.settings.authoring.title || 'Ct.js game'}.exe`,
- '--icon',
- iconPath
- ]);
- onProgress(stdout);
- } catch (err) {
- onProgress('Patching the windows executable failed!');
- onProgress(err);
- }
- }
+ vi.outputToResourceEntries(res.entries);
+ res.outputResource(exe);
+ const outBuffer = Buffer.from(exe.generate());
+ await outputFile(winPath, outBuffer);
onProgress('Sorting the artifacts by platform…');
const buildDir = await getBuildDir();
diff --git a/src/node_requires/exporter/mobilePackager.ts b/src/node_requires/exporter/packagers/mobile.ts
similarity index 94%
rename from src/node_requires/exporter/mobilePackager.ts
rename to src/node_requires/exporter/packagers/mobile.ts
index b88c18ace..f1ca6202f 100644
--- a/src/node_requires/exporter/mobilePackager.ts
+++ b/src/node_requires/exporter/packagers/mobile.ts
@@ -1,11 +1,11 @@
import {join} from 'path';
import fs from 'fs-extra';
-const execa = require('execa');
+import {execa} from 'execa';
-import {getBuildDir} from '../platformUtils';
-import {getDOMImageFromTexture} from '../resources/textures';
-import {imageCover, imageContain, imagePlaceInRect, imageRound, outputCanvasToFile} from '../utils/imageUtils';
+import {getBuildDir} from '../../platformUtils';
+import {getDOMImageFromTexture} from '../../resources/textures';
+import {imageCover, imageContain, imagePlaceInRect, imageRound, outputCanvasToFile} from '../../utils/imageUtils';
// @see https://cordova.apache.org/docs/en/latest/config_ref/images.html
const androidIcons: Record = {
@@ -83,7 +83,7 @@ export const exportMobile = async (
'--save'
], execaConfig)).stdout);
onProgress((await execa('node', [
- './node_modules/@capacitor/cli/bin/capacitor',
+ './@capacitor/cli/bin/capacitor',
'init',
settings.authoring.title || 'Ct.js game',
appId,
@@ -92,7 +92,7 @@ export const exportMobile = async (
], execaConfig)).stdout);
onProgress('Adding Android platform…');
onProgress((await execa('node', [
- './node_modules/@capacitor/cli/bin/capacitor',
+ './@capacitor/cli/bin/capacitor',
'add',
'android'
], execaConfig)).stdout);
@@ -176,7 +176,7 @@ export const exportMobile = async (
onProgress('Fetching available emulator devices…');
const [, , device] = (await execa('node', [
- './node_modules/@capacitor/cli/bin/capacitor',
+ './@capacitor/cli/bin/capacitor',
'run',
'--list',
'android'
@@ -188,7 +188,7 @@ export const exportMobile = async (
onProgress('Baking APK…');
onProgress((await execa('node', [
- './node_modules/@capacitor/cli/bin/capacitor',
+ './@capacitor/cli/bin/capacitor',
'run',
'--target',
device,
diff --git a/src/node_requires/exporter/packagers/web.ts b/src/node_requires/exporter/packagers/web.ts
new file mode 100644
index 000000000..dd066c323
--- /dev/null
+++ b/src/node_requires/exporter/packagers/web.ts
@@ -0,0 +1,26 @@
+import fs from 'fs-extra';
+import path from 'path';
+import {getBuildDir, getExportDir} from '../../platformUtils';
+import Archive from 'adm-zip';
+
+/**
+ * Exports the project, zips it and returns the path to the output file.
+ * The resulting file can be directly used on itch.io and similar platforms.
+ */
+export const exportForWeb = async (): Promise => {
+ const buildFolder = await getBuildDir();
+ const runCtExport = require('src/node_requires/exporter').exportCtProject;
+ const exportFile = path.join(
+ buildFolder,
+ `${window.currentProject.settings.authoring.title || 'ct.js game'}.zip`
+ );
+ const inDir = await getExportDir();
+
+ await fs.remove(exportFile);
+ await runCtExport(window.currentProject, window.projdir, true);
+
+ const archive = new Archive();
+ await archive.addLocalFolderPromise(inDir, {});
+ await archive.writeZipPromise(exportFile);
+ return exportFile;
+};
diff --git a/src/node_requires/exporter/rooms.ts b/src/node_requires/exporter/rooms.ts
index 6b94f06a1..be13ffbf1 100644
--- a/src/node_requires/exporter/rooms.ts
+++ b/src/node_requires/exporter/rooms.ts
@@ -110,6 +110,9 @@ const stringifyRooms = (
const exportableCopy = {
...copy,
template: getById('template', copy.uid).name
+ } as ExportedCopy & {
+ uid?: string;
+ bindings?: unknown;
};
delete exportableCopy.uid;
delete exportableCopy.bindings;
diff --git a/src/node_requires/exporter/scriptableProcessor.ts b/src/node_requires/exporter/scriptableProcessor.ts
index 0073dfbb8..3896c276a 100644
--- a/src/node_requires/exporter/scriptableProcessor.ts
+++ b/src/node_requires/exporter/scriptableProcessor.ts
@@ -1,14 +1,15 @@
type ScriptableCode = Record;
import {ExporterError, highlightProblem} from './ExporterError';
-const {getEventByLib} = require('../events');
+import {getEventByLib} from '../events';
import {readFile} from 'fs-extra';
-import {getName, getById} from '../resources';
+import {getById} from '../resources';
import {getModulePathByName, loadModuleByName} from './../resources/modules';
import {join} from 'path';
import {embedStaticBehaviors} from './behaviors';
-const coffeeScript = require('coffeescript');
+const compileCoffee = require('coffeescript').CoffeeScript.compile;
const typeScript = require('sucrase').transform;
+import {compile, resetSafeId} from '../catnip/compiler';
export const coffeeScriptOptions = {
sourceMap: false,
@@ -42,7 +43,7 @@ const populateEventCache = async (project: IProject): Promise {
return eventsCache[cacheName];
};
-// eslint-disable-next-line max-lines-per-function
+// eslint-disable-next-line max-lines-per-function, complexity
const getBaseScripts = function (entity: IScriptable, project: IProject): ScriptableCode {
const domains = {
thisOnStep: '',
thisOnCreate: '',
thisOnDraw: '',
thisOnDestroy: '',
+ thisOnAdded: '',
+ thisOnRemoved: '',
rootRoomOnCreate: '',
rootRoomOnStep: '',
rootRoomOnDraw: '',
@@ -90,9 +93,20 @@ const getBaseScripts = function (entity: IScriptable, project: IProject): Script
let {code} = event;
try { // Apply converters to the user's code first
if (project.language === 'coffeescript') {
- code = coffeeScript.compile(code, coffeeScriptOptions);
+ code = compileCoffee((code as string), coffeeScriptOptions);
+ } else if (project.language === 'catnip') {
+ code = compile(code as BlockScript, {
+ resourceId: entity.uid,
+ resourceName: entity.name,
+ resourceType: entity.type,
+ eventKey
+ });
+ if (event?.variables?.length) {
+ code = `let ${event.variables.join(', ')};\n` + code;
+ }
+ resetSafeId();
} else if (project.language === 'typescript') {
- if (code.trim()) {
+ if ((code as string).trim()) {
({code} = typeScript(code, {
transforms: ['typescript']
}));
@@ -101,6 +115,9 @@ const getBaseScripts = function (entity: IScriptable, project: IProject): Script
}
}
} catch (e) {
+ if (e instanceof ExporterError) {
+ throw e;
+ }
const errorMessage = `${e.name || 'An error'} occured while compiling ${eventKey} (${lib}) event of ${entity.name} ${entity.type}`;
const exporterError = new ExporterError(errorMessage, {
resourceId: entity.uid,
@@ -113,13 +130,25 @@ const getBaseScripts = function (entity: IScriptable, project: IProject): Script
throw exporterError;
}
const eventArgs = event.arguments;
- const eventSpec = getEventByLib(eventKey, lib) as IEventDeclaration;
+ const eventSpec = getEventByLib(eventKey, lib);
+ if (!eventSpec) {
+ const exporterError = new ExporterError(`Could not find an event ${eventKey} from library ${lib}. Did you disable its catmod?`, {
+ resourceId: entity.uid,
+ resourceName: entity.name,
+ resourceType: entity.type,
+ clue: 'eventMissing'
+ });
+ throw exporterError;
+ }
const requiredArgs = eventSpec.arguments || {};
for (const target of eventSpec.codeTargets) {
let resultingCode: string;
// Add a preamble to each event for easier debugging by users
resultingCode = `/* ${entity.type} ${entity.name} — ${event.lib}_${event.eventKey} (${eventSpec.name} event) */\n`;
if (lib === 'core') {
+ if (!eventSpec.inlineCodeTemplates) {
+ throw new Error(`Found a misconfuguration in event ${event.lib}_${event.eventKey} (no inlineCodeTemplate for ${target}). This is a ct.js bug.`);
+ }
resultingCode += eventSpec.inlineCodeTemplates[target];
} else {
resultingCode += getFromCache(event, target);
@@ -136,9 +165,9 @@ const getBaseScripts = function (entity: IScriptable, project: IProject): Script
throw exporterError;
}
const exp = new RegExp(`/\\*%%${argCode}%%\\*/`, 'g');
- const argType = eventSpec.arguments[argCode].type;
+ const argType = eventSpec.arguments![argCode].type;
if (['template', 'room', 'sound', 'tandem', 'font', 'style', 'texture'].indexOf(argType) !== -1) {
- const value = getName(getById(argType, String(eventArgs[argCode])));
+ const value = getById(argType, String(eventArgs[argCode])).name;
resultingCode = resultingCode.replace(exp, `'${value.replace(/'/g, '\\\'')}'`);
} else if (typeof eventArgs[argCode] === 'string') {
// Wrap the value into singular quotes, escape existing quotes
@@ -149,7 +178,7 @@ const getBaseScripts = function (entity: IScriptable, project: IProject): Script
}
resultingCode = resultingCode.replace(/\/\*%%ENTITY_TYPE%%\*\//g, `'${entity.type}'`);
resultingCode = resultingCode.replace(/\/\*%%ENTITY_NAME%%\*\//g, `'${entity.name}'`);
- resultingCode = resultingCode.replace(/\/\*%%USER_CODE%%\*\//g, code);
+ resultingCode = resultingCode.replace(/\/\*%%USER_CODE%%\*\//g, code as string);
domains[target] += resultingCode;
domains[target] += '\n';
}
diff --git a/src/node_requires/exporter/scripts.ts b/src/node_requires/exporter/scripts.ts
index 7016e012a..ff2c02238 100644
--- a/src/node_requires/exporter/scripts.ts
+++ b/src/node_requires/exporter/scripts.ts
@@ -1,7 +1,7 @@
import {ExporterError, highlightProblem} from './ExporterError';
import {coffeeScriptOptions} from './scriptableProcessor';
-const coffeeScript = require('coffeescript');
+const compileCoffee = require('coffeescript').CoffeeScript.compile;
const typeScript = require('sucrase').transform;
export const stringifyScripts = (scripts: IScript[]): string =>
@@ -9,7 +9,7 @@ export const stringifyScripts = (scripts: IScript[]): string =>
let code;
try { // Apply converters to the user's code first
code = script.language === 'coffeescript' ?
- coffeeScript.compile(script.code, coffeeScriptOptions) :
+ compileCoffee(script.code, coffeeScriptOptions) :
typeScript(script.code, {
transforms: ['typescript']
}).code;
diff --git a/src/node_requires/exporter/sounds.ts b/src/node_requires/exporter/sounds.ts
index 6bc47b59e..b01c8766d 100644
--- a/src/node_requires/exporter/sounds.ts
+++ b/src/node_requires/exporter/sounds.ts
@@ -14,21 +14,22 @@ export const getSounds = (input: ISound[]): ExportedSound[] => {
});
throw exporterError;
}
-
- sounds.push({
+ const out: ExportedSound = {
name: s.name,
variants: s.variants.map((v) => ({
uid: v.uid,
source: `./snd/${v.uid}.${v.source.slice(-3)}`
})),
preload: s.preload,
- volume: (s.volume.enabled && s.volume) || void 0,
- pitch: (s.pitch.enabled && s.pitch) || void 0,
- distortion: (s.distortion.enabled && s.distortion) || void 0,
- reverb: (s.reverb.enabled && s.reverb) || void 0,
- eq: (s.eq.enabled && s.eq) || void 0,
panning: s.panning
- });
+ };
+ const keys = ['volume', 'pitch', 'eq', 'distortion', 'reverb'] as const;
+ for (const k of keys) {
+ if (s[k].enabled) {
+ (out as any)[k] = s[k];
+ }
+ }
+ sounds.push(out);
}
return sounds;
};
diff --git a/src/node_requires/exporter/templates.ts b/src/node_requires/exporter/templates.ts
index ac1b09d46..613b139f0 100644
--- a/src/node_requires/exporter/templates.ts
+++ b/src/node_requires/exporter/templates.ts
@@ -16,7 +16,7 @@ interface IBlankTexture {
shape: any;
}
-// eslint-disable-next-line complexity
+// eslint-disable-next-line complexity, max-lines-per-function
const getBaseClassInfo = (blankTextures: IBlankTexture[], template: ITemplate) => {
let classInfo = '';
const bc = template.baseClass;
@@ -41,7 +41,7 @@ const getBaseClassInfo = (blankTextures: IBlankTexture[], template: ITemplate) =
anchorY: ${blankTexture.anchorY},
height: ${blankTexture.height},
width: ${blankTexture.width},`;
- } else if (template.texture !== -1) {
+ } else if (template.texture && template.texture !== -1) {
classInfo += `
texture: "${getById('texture', template.texture).name}",`;
} else {
@@ -74,6 +74,10 @@ const getBaseClassInfo = (blankTextures: IBlankTexture[], template: ITemplate) =
}
classInfo += `
defaultText: ${JSON.stringify(template.defaultText)},`;
+ if (hasCapability(bc, 'embeddedText')) {
+ classInfo += `
+ useBitmapText: ${template.useBitmapText},`;
+ }
}
if (hasCapability(bc, 'textInput')) {
classInfo += `
@@ -86,13 +90,13 @@ const getBaseClassInfo = (blankTextures: IBlankTexture[], template: ITemplate) =
}
if (hasCapability(bc, 'scroller')) {
classInfo += `
- scrollX: ${template.tilingSettings.scrollSpeedX},
- scrollY: ${template.tilingSettings.scrollSpeedY},
- isUi: ${template.tilingSettings.isUi},`;
+ scrollX: ${template.tilingSettings!.scrollSpeedX},
+ scrollY: ${template.tilingSettings!.scrollSpeedY},
+ isUi: ${template.tilingSettings!.isUi},`;
}
if (hasCapability(bc, 'repeater')) {
classInfo += `
- spriteCount: ${template.repeaterSettings.defaultCount},`;
+ spriteCount: ${template.repeaterSettings!.defaultCount},`;
}
return classInfo;
};
diff --git a/src/node_requires/exporter/textures.ts b/src/node_requires/exporter/textures.ts
index 48fb48fb5..a5f71b601 100644
--- a/src/node_requires/exporter/textures.ts
+++ b/src/node_requires/exporter/textures.ts
@@ -36,23 +36,23 @@ export const getTextureShape = (texture: ITexture): TextureShape => {
if (texture.shape === 'rect') {
return {
type: 'rect',
- top: texture.top,
- bottom: texture.bottom,
- left: texture.left,
- right: texture.right
+ top: texture.top || 0,
+ bottom: texture.bottom || 0,
+ left: texture.left || 0,
+ right: texture.right || 0
};
}
if (texture.shape === 'circle') {
return {
type: 'circle',
- r: texture.r
+ r: texture.r || 0
};
}
if (texture.shape === 'strip') {
return {
type: 'strip',
- points: texture.stripPoints,
- closedStrip: texture.closedStrip
+ points: texture.stripPoints!,
+ closedStrip: texture.closedStrip || false
};
}
return {
@@ -145,9 +145,8 @@ const drawAtlasFromBin = (bin: packerBin, binInd: number) => {
const atlas = document.createElement('canvas');
atlas.width = bin.width;
atlas.height = bin.height;
- const cx = atlas.getContext('2d');
+ const cx = atlas.getContext('2d')!;
cx.imageSmoothingQuality = 'low';
- // eslint-disable-next-line id-length
cx.imageSmoothingEnabled = false;
const atlasJSON = {
@@ -253,7 +252,7 @@ const getPackerFor = (textures: ITexture[], spritedTextures: ITexture[]) => {
const packer = new Packer(...packerSettings);
const animationsByTextures = spritedTextures
.map(getTextureFrameCrops);
- const animations = [].concat(...animationsByTextures);
+ const animations = ([] as typeof animationsByTextures[0]).concat(...animationsByTextures);
const getFailedPacks = () => {
const failedPacks: string[] = [];
const allTags: Record = {};
@@ -369,7 +368,7 @@ export const packImages = async (
// Output all the atlases into JSON and WebP files
const atlases: string[] = [];
packer.bins.map(drawAtlasFromBin).forEach((atlas: exportedTextureAtlas, ind: number) => {
- let jsonHash: string;
+ let jsonHash: string | undefined;
for (const format of formats) {
const atlasBase64 = atlas.canvas.toDataURL(`image/${format}`, 1).replace(/^data:image\/\w+;base64,/, '');
const buf = Buffer.from(atlasBase64, 'base64');
@@ -391,7 +390,7 @@ export const packImages = async (
}
}
if (production) {
- atlases.push(`./img/a${ind}${pixiMask}.${jsonHash}.json`);
+ atlases.push(`./img/a${ind}${pixiMask}.${jsonHash!}.json`);
} else {
atlases.push(`./img/a${ind}${pixiMask}.json`);
}
@@ -411,7 +410,7 @@ export const packImages = async (
}
const ind = packer.bins.length + btInd;
const atlas = drawAtlasFromBin(bigPacker.bins[0], ind);
- let jsonHash: string;
+ let jsonHash: string | undefined;
for (const format of formats) {
const atlasBase64 = atlas.canvas.toDataURL(`image/${format}`, 1).replace(/^data:image\/\w+;base64,/, '');
const buf = Buffer.from(atlasBase64, 'base64');
@@ -422,7 +421,7 @@ export const packImages = async (
if (!jsonHash) {
jsonHash = revHash(json);
}
- writePromises.push(fs.outputJSON(`${writeDir}/img/a${ind}.${format}.${jsonHash}.json`, atlas.json));
+ writePromises.push(fs.outputJSON(`${writeDir}/img/a${ind}.${format}.${jsonHash!}.json`, atlas.json));
writePromises.push(fs.writeFile(`${writeDir}/img/a${ind}.${imageHash}.${format}`, buf));
} else {
writePromises.push(fs.outputJSON(`${writeDir}/img/a${ind}.${format}.json`, atlas.json));
@@ -430,7 +429,7 @@ export const packImages = async (
}
}
if (production) {
- atlases.push(`./img/a${ind}${pixiMask}.${jsonHash}.json`);
+ atlases.push(`./img/a${ind}${pixiMask}.${jsonHash!}.json`);
} else {
atlases.push(`./img/a${ind}${pixiMask}.json`);
}
@@ -442,7 +441,7 @@ export const packImages = async (
for (const tex of tiledTextures) {
const atlas = document.createElement('canvas'),
img = getDOMTexture(tex);
- const cx = atlas.getContext('2d');
+ const cx = atlas.getContext('2d')!;
atlas.width = tex.width;
atlas.height = tex.height;
cx.drawImage(img, 0, 0);
@@ -455,15 +454,15 @@ export const packImages = async (
}
};
// Use one hash for both formats to simplify loading on Pixi.js side.
- let imageHash: string;
+ let imageHash: string | undefined;
for (const format of formats) {
const buf = Buffer.from(atlas.toDataURL(`image/${format}`, 1).replace(/^data:image\/\w+;base64,/, ''), 'base64');
if (production) {
if (!imageHash) {
imageHash = revHash(buf);
- tiledImages[tex.name].source = `./img/t${tiledCounter}.${imageHash}${pixiMask}`;
+ tiledImages[tex.name].source = `./img/t${tiledCounter}.${imageHash!}${pixiMask}`;
}
- writePromises.push(fs.writeFile(`${writeDir}/img/t${tiledCounter}.${imageHash}.${format}`, buf));
+ writePromises.push(fs.writeFile(`${writeDir}/img/t${tiledCounter}.${imageHash!}.${format}`, buf));
} else {
writePromises.push(fs.writeFile(`${writeDir}/img/t${tiledCounter}.${format}`, buf));
}
diff --git a/src/node_requires/exporter/utils.ts b/src/node_requires/exporter/utils.ts
index 9e47c4859..77c534afe 100644
--- a/src/node_requires/exporter/utils.ts
+++ b/src/node_requires/exporter/utils.ts
@@ -36,12 +36,8 @@ export const getUnwrappedExtends = (exts: Record): Record {
try {
const asset = getById(fieldMap[i].type, elt);
- if (asset.type === 'font') {
- return asset.typefaceName;
- }
return asset.name;
} catch (e) {
alertify.error(`Could not resolve UID ${elt} for field ${i} as a ${fieldMap[i].type}. Returning -1. Full object: ${JSON.stringify(exts)}`);
diff --git a/src/node_requires/extendGlobals.d.ts b/src/node_requires/extendGlobals.d.ts
index 77aed87c2..5f921e694 100644
--- a/src/node_requires/extendGlobals.d.ts
+++ b/src/node_requires/extendGlobals.d.ts
@@ -2,13 +2,27 @@ type observable = {
trigger(name: string, eventArg?: T): void;
on(name: string, callback: (eventArg?: T) => void): void;
off(name: string, callback: (eventArg?: T) => void): void;
- once(name: string, callback: (eventArg?: T) => void): void
+ one(name: string, callback: (eventArg?: T) => void): void
};
+interface IOpenDialogOptions {
+ openDirectory?: boolean;
+ defaultPath?: string;
+ title?: string;
+ multiple?: boolean;
+ filter?: string;
+ saveAs?: boolean;
+}
+interface ISaveDialogOptions {
+ defaultPath?: string;
+ defaultName?: string;
+ filter?: string;
+}
+
export {};
declare global {
var signals: observable;
- var orders: any;
+ var orders: observable;
var alertify: any;
var brehautColor: any;
var languageJSON: any;
@@ -16,23 +30,30 @@ declare global {
var currentProject: IProject;
/** The directory of the currently opened project */
var projdir: string;
- var migrationProcess: any[];
+ var migrationProcess: {
+ version: string,
+ process: (project: Partial) => Promise
+ }[];
var riot: any;
- function showOpenDialog(options: any): Promise;
- function showSaveDialog(options: any): Promise;
+ function showOpenDialog(options: IOpenDialogOptions): Promise;
+ function showSaveDialog(options: ISaveDialogOptions): Promise;
interface Window {
path: string;
id: number;
signals: observable;
- orders: any;
+ orders: observable;
alertify: any;
currentProject: IProject;
languageJSON: any;
monaco: any;
/** The directory of the currently opened project */
projdir: string;
- showOpenDialog(options: any): Promise;
- showSaveDialog(options: any): Promise;
+ migrationProcess: {
+ version: string,
+ process: (project: Partial) => Promise
+ }[];
+ showOpenDialog(options: IOpenDialogOptions): Promise;
+ showSaveDialog(options: ISaveDialogOptions): Promise;
updateWindowMenu?(): Promise;
}
}
diff --git a/src/node_requires/generators/gridTexture.ts b/src/node_requires/generators/gridTexture.ts
index 93fd01e99..f74e33064 100644
--- a/src/node_requires/generators/gridTexture.ts
+++ b/src/node_requires/generators/gridTexture.ts
@@ -11,7 +11,7 @@ export const generateCanvasGrid = function (
const canvas = document.createElement('canvas');
[canvas.width, canvas.height] = size;
- const ctx = canvas.getContext('2d');
+ const ctx = canvas.getContext('2d')!;
ctx.clearRect(0, 0, size[0], size[1]);
ctx.strokeStyle = color;
ctx.beginPath();
@@ -26,7 +26,7 @@ export const generateCanvasGrid = function (
return canvas;
};
-import * as PIXI from 'node_modules/pixi.js';
+import * as PIXI from 'pixi.js';
export const generatePixiTextureGrid = function (
size: number | [number, number],
diff --git a/src/node_requires/glob.js b/src/node_requires/glob.js
index 582fb8ad4..651912f17 100644
--- a/src/node_requires/glob.js
+++ b/src/node_requires/glob.js
@@ -8,7 +8,7 @@ const glob = {
return modified;
},
set modified(v) {
- if (global.currentProject) {
+ if (window.currentProject) {
if (v) {
document.title = 'ct.js — ' + sessionStorage.projname + ' •';
} else {
@@ -18,7 +18,6 @@ const glob = {
document.title = 'ct.js';
}
modified = v;
- return modified;
},
moduleTypings: {}
};
diff --git a/src/node_requires/monaco-themes/AlmaSakura.json b/src/node_requires/monaco-themes/AlmaSakura.json
new file mode 100644
index 000000000..6ea90ff8d
--- /dev/null
+++ b/src/node_requires/monaco-themes/AlmaSakura.json
@@ -0,0 +1,3190 @@
+{
+ "inherit": true,
+ "base": "vs-dark",
+ "colors": {
+ "activityBar.activeBackground": "#f18eb033",
+ "activityBar.activeBorder": "#f18eb0",
+ "activityBar.background": "#372d2d",
+ "activityBar.border": "#1f191b",
+ "activityBar.foreground": "#c4b0b3",
+ "activityBar.inactiveForeground": "#99758277",
+ "activityBarBadge.background": "#f18eb0",
+ "activityBarBadge.foreground": "#1f191b",
+ "badge.background": "#57313a",
+ "badge.foreground": "#ffffff",
+ "breadcrumb.activeSelectionForeground": "#edebff",
+ "breadcrumb.background": "#322a2d",
+ "breadcrumb.focusForeground": "#f18eb0",
+ "breadcrumb.foreground": "#bbaab0",
+ "breadcrumbPicker.background": "#413036",
+ "button.background": "#412f2c",
+ "button.foreground": "#edebff",
+ "button.hoverBackground": "#00aacc",
+ "debugExceptionWidget.background": "#322a2d",
+ "debugExceptionWidget.border": "#997582",
+ "debugToolBar.background": "#322a2d",
+ "descriptionForeground": "#bb778f",
+ "diffEditor.insertedTextBackground": "#16b67327",
+ "diffEditor.removedTextBackground": "#e6653341",
+ "dropdown.background": "#372d2d",
+ "dropdown.border": "#4d3030",
+ "dropdown.foreground": "#c4b0b3",
+ "editor.background": "#322a2d",
+ "editor.findMatchBackground": "#7f536299",
+ "editor.findMatchHighlightBackground": "#7f536250",
+ "editor.findRangeHighlightBackground": "#7f536220",
+ "editor.foreground": "#cbbec2",
+ "editor.hoverHighlightBackground": "#9975823f",
+ "editor.inactiveSelectionBackground": "#99758233",
+ "editor.lineHighlightBackground": "#423636",
+ "editor.lineHighlightBorder": "#45313899",
+ "editor.rangeHighlightBackground": "#bb778f45",
+ "editor.selectionBackground": "#423636",
+ "editor.selectionHighlightBackground": "#7f536299",
+ "editor.snippetFinalTabstopHighlightBackground": "#272022",
+ "editor.snippetFinalTabstopHighlightBorder": "#2c2528",
+ "editor.snippetTabstopHighlightBackground": "#272022",
+ "editor.snippetTabstopHighlightBorder": "#2c2528",
+ "editor.wordHighlightBackground": "#e4b78133",
+ "editor.wordHighlightStrongBackground": "#cc990033",
+ "editorBracketMatch.background": "#99758222",
+ "editorBracketMatch.border": "#997582",
+ "editorCodeLens.foreground": "#776284",
+ "editorCursor.foreground": "#ffb3cd",
+ "editorError.border": "#322a2d",
+ "editorError.foreground": "#e34e1c",
+ "editorGroup.border": "#1f191b",
+ "editorGroup.dropBackground": "#715b6333",
+ "editorGroup.emptyBackground": "#715b6333",
+ "editorGroupHeader.noTabsBackground": "#413036",
+ "editorGroupHeader.tabsBackground": "#372d2d",
+ "editorGroupHeader.tabsBorder": "#413036",
+ "editorGutter.addedBackground": "#8ce99a",
+ "editorGutter.background": "#322a2d",
+ "editorGutter.deletedBackground": "#e34e1c",
+ "editorGutter.modifiedBackground": "#ffc180",
+ "editorHint.border": "#49e9a600",
+ "editorHint.foreground": "#49e9a6",
+ "editorHoverWidget.background": "#3e2e33",
+ "editorHoverWidget.border": "#1f191b",
+ "editorIndentGuide.activeBackground": "#57313a",
+ "editorIndentGuide.background": "#4d3030",
+ "editorInfo.border": "#322a2d",
+ "editorInfo.foreground": "#40d4e7",
+ "editorLineNumber.activeForeground": "#bb778f",
+ "editorLineNumber.foreground": "#705b5f",
+ "editorLink.activeForeground": "#14a5ff",
+ "editorMarkerNavigation.background": "#5f3a4729",
+ "editorMarkerNavigationError.background": "#e34e1c",
+ "editorMarkerNavigationWarning.background": "#e69533",
+ "editorOverviewRuler.border": "#322a2d",
+ "editorOverviewRuler.commonContentForeground": "#ffc18044",
+ "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+ "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+ "editorRuler.foreground": "#593a46",
+ "editorSuggestWidget.background": "#3e2e33",
+ "editorSuggestWidget.border": "#1f191b",
+ "editorSuggestWidget.foreground": "#bbaab0",
+ "editorSuggestWidget.highlightForeground": "#f18eb0",
+ "editorSuggestWidget.selectedBackground": "#563440",
+ "editorWarning.border": "#322a2d",
+ "editorWarning.foreground": "#e69533",
+ "editorWhitespace.foreground": "#ffccde21",
+ "editorWidget.background": "#413036",
+ "editorWidget.border": "#1f191b",
+ "errorForeground": "#e34e1c",
+ "extensionButton.prominentBackground": "#008c99",
+ "extensionButton.prominentForeground": "#e4e2f9",
+ "extensionButton.prominentHoverBackground": "#00bbcc",
+ "focusBorder": "#413036",
+ "foreground": "#c4b0b3",
+ "gitDecoration.addedResourceForeground": "#16b673",
+ "gitDecoration.conflictingResourceForeground": "#ffc180",
+ "gitDecoration.deletedResourceForeground": "#e34e1c",
+ "gitDecoration.ignoredResourceForeground": "#5b788b",
+ "gitDecoration.modifiedResourceForeground": "#49e9a6",
+ "gitDecoration.untrackedResourceForeground": "#40d4e7",
+ "input.background": "#372d2d",
+ "input.border": "#412a32",
+ "input.foreground": "#ddd5d7",
+ "input.placeholderForeground": "#a48e96",
+ "inputOption.activeBorder": "#997582",
+ "inputValidation.errorBackground": "#501502ee",
+ "inputValidation.errorBorder": "#691c02",
+ "inputValidation.errorForeground": "#ff4000",
+ "inputValidation.infoBackground": "#0f6e7bee",
+ "inputValidation.infoBorder": "#148f9f",
+ "inputValidation.infoForeground": "#40d4e7",
+ "inputValidation.warningBackground": "#82694acc",
+ "inputValidation.warningBorder": "#a88457",
+ "inputValidation.warningForeground": "#e69533",
+ "list.activeSelectionBackground": "#443838",
+ "list.activeSelectionForeground": "#edebff",
+ "list.dropBackground": "#38292e",
+ "list.errorForeground": "#e34e1c",
+ "list.focusBackground": "#824a5e66",
+ "list.focusForeground": "#edebff",
+ "list.focusHighlightForeground": "#f18eb0",
+ "list.highlightForeground": "#824a5e",
+ "list.hoverBackground": "#443838",
+ "list.hoverForeground": "#edebff",
+ "list.inactiveFocusBackground": "#2c2528",
+ "list.inactiveSelectionBackground": "#443838",
+ "list.inactiveSelectionForeground": "#cbbec2",
+ "list.warningForeground": "#ffa857",
+ "listFilterWidget.background": "#202040",
+ "listFilterWidget.noMatchesOutline": "#e34e1c",
+ "listFilterWidget.outline": "#49e9a6",
+ "menu.background": "#372d2d",
+ "menu.foreground": "#c4b0b3",
+ "menu.selectionBackground": "#443838",
+ "menu.selectionBorder": "#824a5e66",
+ "menu.selectionForeground": "#c4b0b3",
+ "menu.separatorBackground": "#f18eb0",
+ "menubar.selectionBackground": "#824a5e66",
+ "menubar.selectionBorder": "#824a5e66",
+ "menubar.selectionForeground": "#f18eb0",
+ "merge.border": "#322a2d00",
+ "merge.commonContentBackground": "#ffc18022",
+ "merge.commonHeaderBackground": "#ffc18044",
+ "merge.currentContentBackground": "#85f1ff22",
+ "merge.currentHeaderBackground": "#85f1ff44",
+ "merge.incomingContentBackground": "#9d92f222",
+ "merge.incomingHeaderBackground": "#9d92f244",
+ "minimap.background": "#322a2d99",
+ "minimap.errorHighlight": "#e34e1cee",
+ "minimap.findMatchHighlight": "#f18eb0ee",
+ "minimap.warningHighlight": "#e69533ee",
+ "minimapGutter.addedBackground": "#16b673",
+ "minimapGutter.deletedBackground": "#e34e1c",
+ "minimapGutter.modifiedBackground": "#49e9a6",
+ "minimapSlider.background": "#f18eb020",
+ "minimapSlider.hoverBackground": "#f18eb047",
+ "minimapSlider.activeBackground": "#f18eb06E",
+ "notificationCenter.border": "#413036",
+ "notificationCenterHeader.background": "#413036",
+ "notificationCenterHeader.foreground": "#a48e96",
+ "notificationLink.foreground": "#a48e96",
+ "notificationToast.border": "#413036",
+ "notifications.background": "#413036",
+ "notifications.border": "#413036",
+ "notifications.foreground": "#ddd5d7",
+ "panel.background": "#2e2b2c",
+ "panel.border": "#997582",
+ "panelTitle.activeBorder": "#997582",
+ "panelTitle.activeForeground": "#c4b0b3",
+ "panelTitle.inactiveForeground": "#936c7a",
+ "peekView.border": "#997582",
+ "peekViewEditor.background": "#2c2125",
+ "peekViewEditor.matchHighlightBackground": "#7f536299",
+ "peekViewEditorGutter.background": "#2c2125",
+ "peekViewResult.background": "#322529",
+ "peekViewResult.fileForeground": "#ffc180",
+ "peekViewResult.lineForeground": "#a48e96",
+ "peekViewResult.matchHighlightBackground": "#47393e",
+ "peekViewResult.selectionBackground": "#47393e",
+ "peekViewResult.selectionForeground": "#a48e96",
+ "peekViewTitle.background": "#322529",
+ "peekViewTitleDescription.foreground": "#a48e96",
+ "peekViewTitleLabel.foreground": "#ffc180",
+ "pickerGroup.border": "#997582",
+ "pickerGroup.foreground": "#f18eb0",
+ "progressBar.background": "#f18eb0",
+ "quickInputList.focusBackground": "#563440",
+ "quickInputList.focusForeground": "#f18eb0",
+ "scrollbar.shadow": "#00000044",
+ "scrollbarSlider.activeBackground": "#f18eb06E",
+ "scrollbarSlider.background": "#f18eb020",
+ "scrollbarSlider.hoverBackground": "#f18eb047",
+ "selection.background": "#443838",
+ "settings.checkboxBackground": "#413036",
+ "settings.checkboxBorder": "#413036",
+ "settings.checkboxForeground": "#00aacc",
+ "settings.dropdownBackground": "#413036",
+ "settings.dropdownBorder": "#413036",
+ "settings.dropdownForeground": "#00aacc",
+ "settings.dropdownListBorder": "#824a5e77",
+ "settings.headerForeground": "#cbbec2",
+ "settings.modifiedItemIndicator": "#15ac31",
+ "settings.numberInputBackground": "#272022",
+ "settings.numberInputBorder": "#272022",
+ "settings.numberInputForeground": "#7060eb",
+ "settings.textInputBackground": "#413036",
+ "settings.textInputBorder": "#413036",
+ "settings.textInputForeground": "#00aacc",
+ "sideBar.background": "#372d2d",
+ "sideBar.border": "#1f191b",
+ "sideBar.dropBackground": "#2c2528",
+ "sideBar.foreground": "#bbaab0",
+ "sideBarSectionHeader.background": "#453430",
+ "sideBarSectionHeader.border": "#1f191b",
+ "sideBarSectionHeader.foreground": "#bbaab0",
+ "sideBarTitle.foreground": "#bbaab0",
+ "statusBar.background": "#372d2d",
+ "statusBar.border": "#1f191b",
+ "statusBar.debuggingBackground": "#322a2d",
+ "statusBar.debuggingBorder": "#ff80acaf",
+ "statusBar.debuggingForeground": "#ff80acaf",
+ "statusBar.foreground": "#c4b0b3",
+ "statusBar.noFolderBackground": "#322a2d",
+ "statusBar.noFolderBorder": "#322a2d",
+ "statusBar.noFolderForeground": "#a48e96",
+ "statusBarItem.activeBackground": "#8f566a77",
+ "statusBarItem.hoverBackground": "#443838",
+ "statusBarItem.prominentBackground": "#272022",
+ "statusBarItem.prominentHoverBackground": "#43142488",
+ "tab.activeBackground": "#453430",
+ "tab.activeBorder": "#322a2d",
+ "tab.activeBorderTop": "#f18eb0",
+ "tab.activeForeground": "#c4b0b3",
+ "tab.activeModifiedBorder": "#49e9a6",
+ "tab.border": "#1f191b",
+ "tab.hoverBackground": "#4d3030",
+ "tab.inactiveBackground": "#372d2d",
+ "tab.inactiveForeground": "#bbaab0",
+ "tab.unfocusedActiveBackground": "#38232b",
+ "tab.unfocusedActiveBorder": "#322a2d",
+ "tab.unfocusedActiveForeground": "#bbaab0",
+ "tab.unfocusedHoverBackground": "#f18eb021",
+ "tab.unfocusedInactiveForeground": "#bbaab0",
+ "terminal.ansiBlack": "#47393e",
+ "terminal.ansiBlue": "#49ace9",
+ "terminal.ansiBrightBlack": "#69545b",
+ "terminal.ansiBrightBlue": "#60b6eb",
+ "terminal.ansiBrightCyan": "#60dbeb",
+ "terminal.ansiBrightGreen": "#60ebb1",
+ "terminal.ansiBrightMagenta": "#e798b3",
+ "terminal.ansiBrightRed": "#e97749",
+ "terminal.ansiBrightWhite": "#cbbec2",
+ "terminal.ansiBrightYellow": "#e69533",
+ "terminal.ansiCyan": "#49d6e9",
+ "terminal.ansiGreen": "#49e9a6",
+ "terminal.ansiMagenta": "#df769b",
+ "terminal.ansiRed": "#e66533",
+ "terminal.ansiWhite": "#b9acb0",
+ "terminal.ansiYellow": "#e4b781",
+ "terminal.background": "#2e2b2c",
+ "terminal.foreground": "#cbbec2",
+ "terminalCursor.background": "#272022",
+ "terminalCursor.foreground": "#cbbec2",
+ "textBlockQuote.background": "#322a2d",
+ "textBlockQuote.border": "#997582",
+ "textCodeBlock.background": "#322a2d",
+ "textLink.activeForeground": "#f18eb0",
+ "textLink.foreground": "#f18eb0",
+ "textPreformat.foreground": "#ffc180",
+ "textSeparator.foreground": "#322a2d",
+ "titleBar.activeBackground": "#57313a",
+ "titleBar.activeForeground": "#c4b0b3",
+ "titleBar.inactiveBackground": "#372d2d",
+ "titleBar.inactiveForeground": "#c4b0b3",
+ "tree.indentGuidesStroke": "#715b63",
+ "walkThrough.embeddedEditorBackground": "#322a2d",
+ "welcomePage.buttonBackground": "#272022",
+ "welcomePage.buttonHoverBackground": "#413036",
+ "widget.shadow": "#00000044"
+ },
+ "rules": [
+ {
+ "foreground": "#8B747C",
+ "token": "comment"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "punctuation.definition.comment"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "punctuation.definition.tag"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "comment.block.documentation punctuation.definition.bracket"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "source.ocaml comment constant.regexp meta.separator"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "markup.other.anchor support.constant"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "markup.fenced_code"
+ },
+ {
+ "foreground": "#8B747C",
+ "token": "markup.fenced_code punctuation.definition"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "constant.character"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "constant.escape"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "text.html.markdown"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "punctuation.definition.list_item"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "keyword.begin.tag.ejs"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "constant.name.attribute.tag.pug"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.clojure meta.symbol"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "constant.other.description.jsdoc"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "keyword.other.array.phpdoc.php"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "keyword.operator.other.powershell"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "meta.link.inline punctuation.definition.string"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.sql"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source meta.brace"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source punctuation"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "text.html punctuation"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "markup meta punctuation.definition"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "meta.bracket.julia"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "meta.array.julia"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "punctuation.separator.key-value"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "entity.name.footnote"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.ocaml punctuation.definition.tag"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.ocaml entity.name.filename"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.reason entity.name.filename"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "entity.other.attribute-name strong"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "binding.fsharp keyword.symbol.fsharp"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "entity.name.record.field.elm"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "entity.name.record.field.accessor.elm"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "storage.modifier.array.bracket"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "source.css entity.other"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "meta.attribute-selector punctuation.definition.entity"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "markup.other.anchor string"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.control"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.other.template"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.other.substitution"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "storage.modifier"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "meta.tag.sgml"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.accessor"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "constant.other.color"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "entity.name.section"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "markup.heading"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "markup.heading punctuation.definition"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "entity.other.attribute-name.pseudo-class"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "entity.other.attribute-name.pseudo-element"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "tag.decorator.js entity.name.tag.js"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "tag.decorator.js punctuation.definition.tag.js"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "storage.type.function.pug"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "text.pug storage.type"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "text.pug meta.tag.other"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.clojure storage.control"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "meta.expression.clojure"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.slice.python"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.question-mark.cs"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.definition.parameters.varargs"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.go keyword.operator"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.pointer-access"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.other.ruby"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.package"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.import"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.definition.keyword"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.hash.cs"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.kotlin storage.type.import"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.kotlin storage.type.package"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "constant.string.documentation.powershell"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.section.directive"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "storage.type.rust"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.definition.attribute"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.definition.preprocessor"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.namespace"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.separator.method"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.control punctuation.definition.function"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.ocaml variable.interpolation string"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.reason variable.interpolation"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.definition.directive"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "storage.type.modifier"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.other.class.fileds"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.toml entity.other.attribute-name"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "source.css entity.name.tag.custom"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "sharing.modifier"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.control.class.ruby"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "keyword.control.def.ruby"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "constant.language.boolean.true.tsx"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "constant.language.boolean.false.tsx"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "constant.language.null.tsx"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.section.embedded.begin.tsx"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "punctuation.section.embedded.end.tsx"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.object"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.other"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.parameter"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "support"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "entity.name.module"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.import.parameter"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.other.class"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "meta.toc-list.id.html"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.json meta.structure.dictionary.json support.type.property-name.json"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "meta.var.clojure"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "entity.name.variable"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.java meta.class.body.java"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "entity.name.package.go"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.c"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.cpp"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.go"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.python"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "meta.function-call.arguments.python"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.ruby"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.coffee.embedded.source"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.coffee"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "storage.modifier.import"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "storage.modifier.package"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "storage.type.annotation"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "punctuation.definition.annotation"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.groovy.embedded.source"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "punctuation.definition.variable"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.powershell"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "string.quoted.interpolated.vala constant.character.escape.vala"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.apacheconf"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.objc"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.crystal"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "string.quoted.double.kotlin entity.string.template.element.kotlin"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "entity.name.package.kotlin"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "meta.template.expression.kotlin"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "parameter.variable.function"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.other.constant.elixir"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.elixir.embedded.source"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.sql.embedded"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "punctuation.definition.placeholder"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.swift"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.julia"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.shell"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "variable.other.normal punctuation.definition.variable.shell"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.reason variable.language"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.reason variable.language string.other.link"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.elm meta.value"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.elm meta.declaration.module"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "meta.embedded.block variable punctuation.definition.variable.php"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "string.quoted.double.class.other"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.toml keyword"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "support.type.nim"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.tf meta.template.expression"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "source.scala entity.name.import"
+ },
+ {
+ "foreground": "#E4B781",
+ "token": "markup.code"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.variable.property"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "constant.other.symbol.hashkey.ruby"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.other.attribute-name.id"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.other.attribute-name.id punctuation.definition.entity"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.name.type.annotation.kotlin"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.type.primitive"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "meta.type.parameters entity.name.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "meta.type.annotation entity.name.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.typeparameters"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.python support.type.python"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "comment.block.documentation.phpdoc.php keyword.other.type.php"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.php"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "keyword.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.cs"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.c"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.objc"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.storage.type.objc"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "markup punctuation.definition"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.powershell"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "comment.block.documentation entity.name.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.java storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.primitive"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.groovy storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.r"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.haskell storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.separator.clause-head-body"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.go storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.core.rust"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.class.std.rust"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.modifier.lifetime.rust"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.name.lifetime.rust"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.type.vb"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.name.type.kotlin"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.type.julia"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "constant.other.reference"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.graphql support.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.reason support.type string"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "entity.name.type.fsharp"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.elm storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.user-defined"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.built-in"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.type.builtin"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.swift support.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.class.crystal"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "storage.type.integral"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.cpp storage.type.cpp"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.vala storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.hlsl storage.type.basic"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.hlsl support.type.other"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.apex storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.nim storage.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.cpp entity.name.type"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "support.class.builtin"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.tf meta.keyword.string"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.tf meta.keyword.number"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "source.scala entity.name.class"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "markup.raw.monospace"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "markup.mark"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "markup.meta.attribute-list"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.string.begin.tsx"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.string.end.tsx"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.parameters.begin.tsx"
+ },
+ {
+ "foreground": "#D67E5C",
+ "token": "punctuation.definition.parameters.end.tsx"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "constant"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "variable.other.constant"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "support.constant"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "punctuation.definition.entity"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "constant.character.entity"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "support.variable.magic"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "markup.quote"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "entity.name.type.type-parameter.cs"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "punctuation.bracket.angle"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "entity.name.function.preprocessor.c"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "storage.type.scala"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "entity.helper.apacheconf"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "variable.language.crystal"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "punctuation.definition.constant"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "support.constant punctuation.definition.variable"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "constant.character.math"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "support.class.math"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.graphql constant.character"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.reason constant.language.list"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.cpp variable.other.enummember"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "support.variable.class.hideshow"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "entity.other.attribute-name.class"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "meta.attribute.id entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "text.html entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "meta.tag.attributes entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "text.xml entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.cs entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "constant.character.format.placeholder"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "constant.other.placeholder"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.vue entity.other.attribute-name"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "entity.other.attribute-name.mjml"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "source.vue meta.directive punctuation.separator.key-value"
+ },
+ {
+ "foreground": "#D5971A",
+ "token": "meta.definition.attribute-entry punctuation.separator"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "variable.language"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "variable.parameter.function.language.special"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.bold"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.italic"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "punctuation.definition.italic"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "punctuation.definition.bold"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "entity.name.tag"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "variable.language punctuation.definition.variable"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.control.clojure"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "support.type.exception.python"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.this.cs"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.base.cs"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.var.cs"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "storage.modifier.super"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.go keyword"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.function.go"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "meta.separator"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.fn.rust"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "storage.modifier.static.rust"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.r meta.function.r keyword.control.r"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "storage.type.def"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "meta.class.identifier storage.modifier"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.scala keyword.declaration"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "storage.type"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "comment.block.documentation punctuation.definition.block.tag"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "comment.block.documentation punctuation.definition.inline.tag"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "entity.tag.apacheconf"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.julia"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.julia storage.modifier"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "constant.language.empty-list.haskell"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "meta.function.powershell storage.type.powershell"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.control.fun"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "punctuation.terminator.function"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.rust"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.declaration-specifier.swift"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.control.class"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.control.def"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.ocaml keyword markup.underline"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.ocaml storage.type markup.underline"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "binding.fsharp keyword"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "function.anonymous keyword"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "function.anonymous keyword.symbol.fsharp"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "meta.embedded.block variable.language punctuation.definition.variable.php"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.declaration.dart"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.wsd keyword.other.class"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.wsd keyword.other.linebegin"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.skinparam.keyword"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "keyword.other.nim"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.deleted.diff"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "source.tf support.class.variable"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "meta.function.lua keyword.control.lua"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.italic punctuation.definition"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.bold punctuation.definition"
+ },
+ {
+ "foreground": "#E66533",
+ "token": "markup.block entity.name.tag"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "string"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "punctuation.definition.string"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "source.css support.constant"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "entity.name.import.go"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "markup.raw.texttt"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "markup.inserted.diff"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "source.scala punctuation.definition.character"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "constant.character.literal.scala"
+ },
+ {
+ "foreground": "#49E9A6",
+ "token": "source.tf entity.name"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.template"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "punctuation.definition.string.template"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.interpolated.python string.quoted.single.python"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.quoted.double.heredoc"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.quoted.interpolated.vala"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.quoted.interpolated.vala punctuation.definition.string"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.regexp.apacheconf"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "markup.inline.raw.string"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "markup.inline.raw punctuation.definition.raw"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.quoted.double.interpolated.crystal"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "string.quoted.double.interpolated.crystal punctuation.definition.string"
+ },
+ {
+ "foreground": "#16B673",
+ "token": "text.tex markup.raw"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "constant.numeric"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "constant.language"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "punctuation.separator.decimal.period.php"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "keyword.operator.null-conditional.cs"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "punctuation.separator.question-mark.cs"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "constant.integer.apacheconf"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "keyword.operator.nullable-type"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "constant.language punctuation.definition.variable"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "constant.others.fsharp"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "keyword.other.unit"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "string.quoted.double.skinparam.value"
+ },
+ {
+ "foreground": "#7060EB",
+ "token": "source.toml constant"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "variable.function"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "support.type.property-name"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "entity.name.function"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "string.other.link"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "markup.link"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "support.type.vendored"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "support.other.variable"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "meta.function-call.generic.python"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "meta.method-call.groovy meta.method.groovy"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "meta.class.body.groovy meta.method.body.java storage.type.groovy"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "punctuation.definition.decorator"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "support.function.any-method"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "text.tex support.function"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "text.tex punctuation.definition.function"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "entity.name.section.fsharp entity.name.section.fsharp"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "support.variable.class.function"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "keyword.control.cucumber.table"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "punctuation.decorator"
+ },
+ {
+ "foreground": "#16A3B6",
+ "token": "source.tf support.class"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.name"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.other"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.orther.namespace.use.php"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "meta.use.php"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.other.namespace.php"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.type"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.class"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "punctuation.definition.parameters"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.function"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "support.function.construct"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "markup.changed.git_gutter"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "markup.underline.link"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "markup.underline.link.image"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "markup.underline"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "meta.symbol.namespace.clojure"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.mime-type.apacheconf"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "keyword.operator.function.infix"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.name.function.infix"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.name.function.call.kotlin"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "text.tex support.function.verb"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "text.tex support.function.texttt"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "source.reason constant.language.unit"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "source.reason entity.other.attribute-name constant.language constant.numeric"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "constant.language.unit.fsharp"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "source.wsd support.class.preprocessings"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "keyword.language.gherkin.feature.scenario"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "source.nim keyword.other.common.function"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.name.type.namespace"
+ },
+ {
+ "foreground": "#49D6E9",
+ "token": "entity.name.scope-resolution.function.call"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.js constant.other.object.key.js string.unquoted.label.js"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.js punctuation.section.embedded"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.definition.template-expression"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.class"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.name.type"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "storage.type.string.python"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "string.interpolated.pug"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.constant.handlebars"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.clojure punctuation.section.set"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.clojure punctuation.section.metadata"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.global.clojure"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.python meta.function-call.python support.type.python"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.other.inherited-class.python"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.definition.interpolation"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.section.embedded.begin.ruby"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.section.embedded.end.ruby source.ruby"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.constant.math"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.namespace.r"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "meta.method-call.groovy storage.type.groovy"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.scala entity.name.class.declaration"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "constant.character.escape"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.function.macro.julia"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "string.replacement.apacheconf"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "storage.modifier.using.vala"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "constant.other.haskell"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.objc entity.name.tag"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "string.quoted.other.literal.upper.crystal punctuation.definition.string"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "meta.embedded.line.crystal punctuation.section.embedded"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "meta.embedded.line.crystal punctuation.section.embedded source.crystal"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.section.embedded"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.section.tag"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "punctuation.section.embedded source.swift"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "variable.other.bracket punctuation.definition.variable"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "string.interpolated.dollar punctuation.definition.string"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "constant.character.escape punctuation.definition.keyword"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.ocaml entity.name.class constant.numeric"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.reason entity.name.class"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "keyword.format.specifier.fsharp"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.module.elm"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "meta.embedded.block.php punctuation.definition.variable.php"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.vala storage.type"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "support.variable.class.group"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.name.type.class"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.tf meta.keyword.list"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "source.tf meta.keyword.map"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "entity.name.class.lua"
+ },
+ {
+ "foreground": "#49ACE9",
+ "token": "markup.substitution"
+ },
+ {
+ "foreground": "#E3541C",
+ "token": "invalid"
+ },
+ {
+ "foreground": "#E3541C",
+ "token": "invalid.illegal"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.modifier"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "punctuation.definition.comment"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.other"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.language"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.type.vendored"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.constant.vendored"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.quote"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.italic"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "tag.decorator.js entity.name.tag.js"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "tag.decorator.js punctuation.definition.tag.js"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.control.clojure"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.clojure meta.symbol.dynamic"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.other.this.cs"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.other.base.cs"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.other.member.c"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.type.core.rust"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.other.object.property"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.other.property"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.r meta.function.r keyword.control.r"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.line.roxygen.r keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.line.roxygen.r variable.parameter.r"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.control.inheritance.coffee"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.documentation.phpdoc.php keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.other.array.phpdoc.php"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.modifier"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.javadoc.java keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.javadoc.java variable.parameter.java"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.operator.documentation.powershell"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.scala"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.parameter.function.language.special"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.documentation.scala keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.documentation.scala variable.parameter"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.function.builtin.go"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.symbol.hashkey.ruby"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.symbol.ruby"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.vala storage.type.generic"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.table-name"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.placeholder"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.other.field"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.alias.import.go"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.swift keyword.other.declaration-specifier"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.variable.swift"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.other.capture-specifier"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "text.tex support.function.emph"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "constant.other.math"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.function.textit"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.name.footnote"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.name.function.directive.graphql"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.graphql support.type.enum"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.ocaml entity.name.filename"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.reason entity.name.filename"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "abstract.definition.fsharp keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "abstract.definition.fsharp entity"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "function.anonymous keyword"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.name.record.field.accessor.elm"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.type.primitive"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.type.builtin"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.type.cs"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.built-in"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.primitive"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.python support.type.python"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.core.rust"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.swift support.type"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.go storage.type"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.php"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.function.kotlin"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.name.type.kotlin"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.type.julia"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.other.member"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.other.import"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.package"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.import"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.wsd keyword.control.diagram"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.language.gherkin.feature.step"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.hlsl storage.type.basic"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.apex keyword.type"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "sharing.modifier"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.nim storage.type.concrete"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "meta.preprocessor.pragma.nim"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "storage.type.integral"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.name.scope-resolution.function.call"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "support.class.builtin"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.documentation storage.type.class"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.tf meta.keyword.string"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.tf meta.keyword.number"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.scala entity.name.class"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "meta.import keyword.control"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.control.export"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "source.vue meta.directive punctuation.separator.key-value"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "keyword.local.lua"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.list"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.mark.constrained markup.mark"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.block.open"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.control"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.operator"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.other.template"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.other.substitution"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.function.arrow"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "constant.other.color"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.accessor"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "entity.name.section"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.bold"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.bold string"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markdown.heading"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.inline.raw punctuation.definition.raw"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.heading"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.function.pug"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.function.python"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.annotation"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.bracket.angle"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.other.new"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.separator.question-mark.cs"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.generic.wildcard"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "source.go keyword.operator"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.separator.namespace"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "constant.other.symbol.ruby punctuation.definition.constant.ruby"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "variable.parameter"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "support.function.builtin.rust"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.function.coffee"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "entity.name.variable.parameter"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.separator.hash.cs"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "constant.other.symbol.ruby punctuation.definition.constant.ruby"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "meta.function.parameters variable.other"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "entity.name.type.annotation.kotlin"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "storage.type.objc"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "parameter.variable.function"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup punctuation.definition"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.section.directive"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.definition.preprocessor"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "source.ruby punctuation.definition.variable"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "punctuation.separator.method"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "support.function.textbf"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "source.graphql support.type.builtin"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "source.ocaml variable.interpolation string"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "entity.name.function.definition.special.constructor"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "entity.name.function.definition.special.member.destructor."
+ },
+ {
+ "fontStyle": "bold",
+ "token": "meta.function.parameters variable punctuation.definition.variable.php"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "source.wsd keyword.other.activity"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.control.class.ruby"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.control.def.ruby"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.function.go"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "keyword.other.fn.rust"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.other.anchor"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.list.bullet"
+ },
+ {
+ "fontStyle": "bold",
+ "token": "markup.list punctuation.definition"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.bold markup.italic"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.italic markup.bold"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.quote markup.bold"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.bold markup.italic string"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.italic markup.bold string"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.quote markup.bold string"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "text.html punctuation.section.embedded"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "variable.other.c"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "storage.modifier.lifetime.rust"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "entity.name.lifetime.rust"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "source.rust meta.attribute.rust"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "meta.attribute.id entity.other.attribute-name"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "source.ocaml punctuation.definition.tag emphasis"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "source.tf entity.name"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.quote punctuation.definition"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "markup.fenced_code punctuation.definition"
+ },
+ {
+ "fontStyle": "bold italic",
+ "token": "fenced_code.block.language"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.begin.tag.ejs"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.python meta.function.decorator.python support.type.python"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.cs keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.var.cs"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.go keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.modifier.static.rust"
+ },
+ {
+ "fontStyle": "",
+ "token": "variable.parameter.r"
+ },
+ {
+ "fontStyle": "",
+ "token": "variable.parameter.handlebars"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.modifier.import"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.modifier.package"
+ },
+ {
+ "fontStyle": "",
+ "token": "meta.class.identifier storage.modifier"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.operator.other.powershell"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.css variable.parameter"
+ },
+ {
+ "fontStyle": "",
+ "token": "string.interpolated variable.parameter"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.apacheconf keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.julia"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.modifier.using.vala"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.objc keyword.other.property.attribute"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.sql keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.using.vala"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.operator.function.infix"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.directive"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.rust"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.declaration-specifier.swift"
+ },
+ {
+ "fontStyle": "",
+ "token": "entity.name.function.swift"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.class"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.def"
+ },
+ {
+ "fontStyle": "",
+ "token": "punctuation.definition.variable"
+ },
+ {
+ "fontStyle": "",
+ "token": "entity.name.section.latex"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.ocaml keyword markup.underline"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.reason entity.other.attribute-name constant.language constant.numeric"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.format.specifier.fsharp"
+ },
+ {
+ "fontStyle": "",
+ "token": "entity.name.section.fsharp"
+ },
+ {
+ "fontStyle": "",
+ "token": "binding.fsharp keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "binding.fsharp keyword.symbol"
+ },
+ {
+ "fontStyle": "",
+ "token": "record.fsharp keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.symbol.fsharp"
+ },
+ {
+ "fontStyle": "",
+ "token": "entity.name.section.fsharp keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "namespace.open.fsharp keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "namespace.open.fsharp entity"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.type"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.cpp keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.c keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.unit"
+ },
+ {
+ "fontStyle": "",
+ "token": "storage.modifier.array.bracket"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.default"
+ },
+ {
+ "fontStyle": "",
+ "token": "meta.import.haskell keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.declaration.dart"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.wsd keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.skinparam"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.css keyword.control"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.css keyword.operator"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.language.gherkin.feature.scenario"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.cucumber.table"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.toml entity.other.attribute-name"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.toml keyword"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.other.nim"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.nim keyword.other.common.function"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.nim keyword.other"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.scala keyword.declaration"
+ },
+ {
+ "fontStyle": "",
+ "token": "source.scala entity.name.class.declaration"
+ },
+ {
+ "fontStyle": "",
+ "token": "keyword.control.lua"
+ },
+ {
+ "foreground": "#B95754",
+ "token": "comment"
+ },
+ {
+ "foreground": "#B95754",
+ "token": "punctuation.definition.comment"
+ },
+ {
+ "foreground": "#FFB3A7",
+ "token": "string"
+ },
+ {
+ "foreground": "#FFB3A7",
+ "token": "meta.embedded.assembly"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "keyword - keyword.operator"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "keyword.control"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "storage"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "storage.type"
+ },
+ {
+ "foreground": "#FCC9B9",
+ "token": "constant.numeric"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "entity.name.type"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "entity.name.class"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "support.type"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "support.class"
+ },
+ {
+ "foreground": "#F47983",
+ "token": "entity.name.function"
+ },
+ {
+ "foreground": "#F47983",
+ "token": "support.function"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "variable"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "entity.name.variable"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "punctuation.definition.parameters.begin.ts"
+ },
+ {
+ "foreground": "#CBBEC2",
+ "token": "punctuation.definition.parameters.end.ts"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "storage.modifier.ts"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "constant.language.import-export-all.ts"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "entity.name.type.class.ts"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "entity.name.type.class"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "entity.other.inherited-class.ts"
+ },
+ {
+ "foreground": "#F2666C",
+ "token": "support.constant.math.ts"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "punctuation.definition.template-expression.begin.ts"
+ },
+ {
+ "foreground": "#DB5A6B",
+ "token": "punctuation.definition.template-expression.end.ts"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "variable.parameter.ts"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "variable.other"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "variable.other.constant"
+ },
+ {
+ "foreground": "#F08F90",
+ "token": "meta.object.member"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "keyword.operator.expression.instanceof"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "keyword.operator.new"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "keyword.operator.ternary"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "keyword.operator.optional"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "keyword.operator.expression.keyof"
+ },
+ {
+ "foreground": "#E35C38",
+ "token": "punctuation.decorator.ts"
+ },
+ {
+ "foreground": "#FFB3A7",
+ "token": "string.template"
+ },
+ {
+ "foreground": "#F07F5E",
+ "token": "punctuation.definition.string.end.ts"
+ },
+ {
+ "foreground": "#F07F5E",
+ "token": "punctuation.definition.string.begin.ts"
+ },
+ {
+ "foreground": "#F07F5E",
+ "token": "punctuation.definition.string.template.begin.ts"
+ },
+ {
+ "foreground": "#F07F5E",
+ "token": "punctuation.definition.string.template.end.ts"
+ },
+ {
+ "foreground": "#B56C60",
+ "token": "variable.language.this.ts"
+ },
+ {
+ "foreground": "#FCA474",
+ "token": "keyword.generator.asterisk.ts"
+ },
+ {
+ "foreground": "#FCA474",
+ "token": "support"
+ },
+ {
+ "foreground": "#FCA474",
+ "token": "meta.import.ts"
+ },
+ {
+ "foreground": "#FCA474",
+ "token": "source.ts"
+ },
+ {
+ "foreground": "#FA7B62",
+ "token": "keyword.operator.logical.ts"
+ },
+ {
+ "foreground": "#FA7B62",
+ "token": "keyword.operator.assignment.ts"
+ },
+ {
+ "foreground": "#FA7B62",
+ "token": "keyword.operator.arithmetic.ts"
+ },
+ {
+ "foreground": "#7FFFFF",
+ "token": "punctuation.definition.string.begin.markdown"
+ },
+ {
+ "foreground": "#7FFFFF",
+ "token": "punctuation.definition.string.end.markdown"
+ },
+ {
+ "foreground": "#7FFFFF",
+ "token": "punctuation.definition.metadata.markdown"
+ },
+ {
+ "foreground": "#FFB3A7",
+ "token": "string.json.comments"
+ },
+ {
+ "foreground": "#FFB3A7",
+ "token": "source.json"
+ },
+ {
+ "foreground": "#F4A079",
+ "token": "type.identifier.ts"
+ },
+ {
+ "foreground": "#DF769B",
+ "token": "pointsOfInterest.ts"
+ },
+ {
+ "foreground": "#F4A079",
+ "token": "type.identifier.js"
+ },
+ {
+ "foreground": "#6796E6",
+ "token": "token.info-token"
+ },
+ {
+ "foreground": "#CD9731",
+ "token": "token.warn-token"
+ },
+ {
+ "foreground": "#F44747",
+ "token": "token.error-token"
+ },
+ {
+ "foreground": "#B267E6",
+ "token": "token.debug-token"
+ }
+ ],
+ "encodedTokensColors": []
+ }
diff --git a/src/node_requires/monaco-themes/GoldenEye.json b/src/node_requires/monaco-themes/GoldenEye.json
new file mode 100644
index 000000000..084db9d44
--- /dev/null
+++ b/src/node_requires/monaco-themes/GoldenEye.json
@@ -0,0 +1,347 @@
+{
+ "inherit": true,
+ "base": "vs-dark",
+ "colors": {
+ "activityBar.activeBackground": "#ffd700",
+ "activityBar.activeBorder": "#ffd700",
+ "activityBar.background": "#144000",
+ "activityBar.border": "#ffd70033",
+ "activityBar.dropBorder": "#ff4500",
+ "activityBar.foreground": "#ff4500",
+ "activityBar.inactiveForeground": "#ffd700",
+ "activityBarBadge.background": "#ff4500",
+ "activityBarBadge.foreground": "#ffd700",
+ "badge.background": "#ff4500",
+ "badge.foreground": "#f0f0f0",
+ "breadcrumb.activeSelectionForeground": "#ffd700",
+ "breadcrumb.background": "#ffd70033",
+ "breadcrumb.focusForeground": "#ffd700",
+ "breadcrumb.foreground": "#ffd700",
+ "breadcrumbPicker.background": "#144000dd",
+ "button.background": "#ffd700",
+ "button.border": "#ffff00",
+ "button.foreground": "#144000",
+ "button.hoverBackground": "#ffff00",
+ "button.secondaryBackground": "#daa520",
+ "button.secondaryForeground": "#144000",
+ "button.secondaryHoverBackground": "#ffd700",
+ "button.separator": "#144000",
+ "charts.blue": "#0000ff",
+ "charts.green": "#008000",
+ "charts.orange": "#ffa500",
+ "charts.purple": "#800080",
+ "charts.red": "#ff0000",
+ "charts.yellow": "#ffff00",
+ "checkbox.background": "#ffd700",
+ "checkbox.border": "#ff4500",
+ "checkbox.foreground": "#144000",
+ "commandCenter.activeBackground": "#ffd700",
+ "commandCenter.activeBorder": "#ffff00",
+ "commandCenter.activeForeground": "#144000",
+ "commandCenter.background": "#14400088",
+ "commandCenter.border": "#ffff00",
+ "commandCenter.foreground": "#ffd700",
+ "commandCenter.inactiveBorder": "#14400088",
+ "contrastActiveBorder": "#00000000",
+ "contrastBorder": "#00000000",
+ "debugToolBar.background": "#ffd700",
+ "debugToolBar.border": "#ff4500",
+ "descriptionForeground": "#ffd700",
+ "dropdown.background": "#ffd700",
+ "dropdown.border": "#ffff00",
+ "dropdown.foreground": "#144000",
+ "dropdown.listBackground": "#144000dd",
+ "editor.background": "#144000",
+ "editor.foldBackground": "#ffff0055",
+ "editor.foreground": "#ffd700",
+ "editor.lineHighlightBackground": "#ffd70033",
+ "editor.selectionBackground": "#ffd70033",
+ "editor.selectionHighlightBackground": "#ffd70033",
+ "editor.wordHighlightTextBackground": "#ffd70033",
+ "editorBracketHighlight.foreground1": "#f5ff25",
+ "editorBracketHighlight.foreground2": "#f6cf23",
+ "editorBracketHighlight.foreground3": "#f89f21",
+ "editorBracketHighlight.foreground4": "#f96f20",
+ "editorBracketHighlight.foreground5": "#fb3f1e",
+ "editorBracketHighlight.foreground6": "#fc0e1c",
+ "editorBracketHighlight.unexpectedBracket.foreground": "#ff0000",
+ "editorBracketMatch.background": "#ffd70033",
+ "editorBracketMatch.border": "#00000000",
+ "editorCursor.background": "#144000",
+ "editorCursor.foreground": "#ffd700",
+ "editorGroup.border": "#ffd70033",
+ "editorGroupHeader.border": "#ffd70033",
+ "editorGroupHeader.tabsBackground": "#144000",
+ "editorGroupHeader.tabsBorder": "#14400044",
+ "editorGutter.background": "#144000",
+ "editorGutter.foldingControlForeground": "#ffd700",
+ "editorHoverWidget.background": "#14400088",
+ "editorHoverWidget.border": "#ffd70033",
+ "editorHoverWidget.foreground": "#ffd700",
+ "editorIndentGuide.activeBackground1": "#ffd70022",
+ "editorIndentGuide.activeBackground2": "#ffd70022",
+ "editorIndentGuide.activeBackground3": "#ffd70022",
+ "editorIndentGuide.activeBackground4": "#ffd70022",
+ "editorIndentGuide.activeBackground5": "#ffd70022",
+ "editorIndentGuide.activeBackground6": "#ffd70022",
+ "editorIndentGuide.background1": "#ffd70033",
+ "editorIndentGuide.background2": "#ffd70033",
+ "editorIndentGuide.background3": "#ffd70033",
+ "editorIndentGuide.background4": "#ffd70033",
+ "editorIndentGuide.background5": "#ffd70033",
+ "editorIndentGuide.background6": "#ffd70033",
+ "editorLineNumber.activeForeground": "#ff4500",
+ "editorLineNumber.foreground": "#ffd70033",
+ "editorLink.activeForeground": "#ff4500",
+ "editorRuler.foreground": "#ffd70033",
+ "editorSuggestWidget.background": "#144000dd",
+ "editorSuggestWidget.border": "#ffd70033",
+ "editorSuggestWidget.focusHighlightForeground": "#ffd700",
+ "editorSuggestWidget.highlightForeground": "#ffd700",
+ "editorSuggestWidget.selectedBackground": "#ffd70033",
+ "editorSuggestWidget.selectedForeground": "#ffff00",
+ "editorSuggestWidget.selectedIconForeground": "#ffff00",
+ "editorWhitespace.foreground": "#ffd70033",
+ "editorWidget.background": "#144000dd",
+ "editorWidget.border": "#ffd70033",
+ "editorWidget.foreground": "#ffd700",
+ "editorWidget.resizeBorder": "#ffff00",
+ "errorForeground": "#ff0000",
+ "extensionButton.background": "#daa520",
+ "extensionIcon.starForeground": "#ffff00",
+ "focusBorder": "#00000000",
+ "foreground": "#ffd700",
+ "gitDecoration.addedResourceForeground": "#ff4500",
+ "gitDecoration.conflictingResourceForeground": "#ff4500",
+ "gitDecoration.deletedResourceForeground": "#ff4500",
+ "gitDecoration.ignoredResourceForeground": "#ff4500",
+ "gitDecoration.modifiedResourceForeground": "#ff4500",
+ "gitDecoration.renamedResourceForeground": "#ff4500",
+ "gitDecoration.stageDeletedResourceForeground": "#ff4500",
+ "gitDecoration.stageModifiedResourceForeground": "#ff4500",
+ "gitDecoration.submoduleResourceForeground": "#ff4500",
+ "gitDecoration.untrackedResourceForeground": "#ff4500",
+ "icon.foreground": "#ffd700",
+ "input.background": "#ffd70088",
+ "input.border": "#ffff00",
+ "input.foreground": "#144000",
+ "input.placeholderForeground": "#14400044",
+ "keybindingLabel.background": "#144000",
+ "keybindingLabel.border": "#ffd700aa",
+ "keybindingLabel.bottomBorder": "#ffd70033",
+ "keybindingLabel.foreground": "#ffd700",
+ "keybindingTable.headerBackground": "#ffd700aa",
+ "keybindingTable.rowsBackground": "#ffd70033",
+ "list.activeSelectionBackground": "#ffd700",
+ "list.activeSelectionForeground": "#144000",
+ "list.activeSelectionIconForeground": "#144000",
+ "list.dropBackground": "#ffd70033",
+ "list.hoverBackground": "#ffd70033",
+ "list.inactiveSelectionBackground": "#ffd70033",
+ "menu.background": "#144000",
+ "menu.border": "#ffd70033",
+ "menu.foreground": "#ffd700",
+ "menu.selectionBackground": "#ffd700",
+ "menu.selectionBorder": "#ffff00",
+ "menu.selectionForeground": "#114400",
+ "menu.separatorBackground": "#ffd70033",
+ "menubar.selectionBackground": "#144000",
+ "menubar.selectionBorder": "#ffd70033",
+ "menubar.selectionForeground": "#ffd700",
+ "panel.background": "#144000",
+ "panel.border": "#ffd70033",
+ "panelInput.border": "#ffff00",
+ "panelTitle.activeBorder": "#ffd700",
+ "panelTitle.activeForeground": "#ffd700",
+ "panelTitle.inactiveForeground": "#ffd70033",
+ "pickerGroup.border": "#ffd70033",
+ "pickerGroup.foreground": "#ffd70033",
+ "sash.hoverBorder": "#ffff00",
+ "scrollbar.shadow": "#ffd70066",
+ "scrollbarSlider.activeBackground": "#ffff00",
+ "scrollbarSlider.background": "#ffd70033",
+ "scrollbarSlider.hoverBackground": "#ffd700",
+ "selection.background": "#ffff00",
+ "settings.dropdownBackground": "#ffd700",
+ "settings.dropdownBorder": "#ffff00",
+ "settings.dropdownForeground": "#144000",
+ "settings.focusedRowBackground": "#ffd70033",
+ "settings.headerForeground": "#ffd700",
+ "settings.modifiedItemIndicator": "#ff4500",
+ "sideBar.background": "#144000",
+ "sideBar.border": "#ffd70033",
+ "sideBar.foreground": "#ffd700",
+ "sideBarSectionHeader.background": "#ffd70033",
+ "sideBarSectionHeader.border": "#ffd70033",
+ "statusBar.background": "#144000",
+ "statusBar.border": "#ffd70033",
+ "statusBar.foreground": "#ffd700",
+ "tab.activeBackground": "#ffd700",
+ "tab.activeBorder": "#ffd700",
+ "tab.activeForeground": "#144000",
+ "tab.border": "#ffd70033",
+ "tab.hoverBorder": "#ffff00",
+ "tab.inactiveBackground": "#144000",
+ "tab.inactiveForeground": "#ffd70033",
+ "tab.unfocusedHoverBackground": "#ffff00",
+ "tab.unfocusedHoverBorder": "#ffff00",
+ "tab.unfocusedHoverForeground": "#14400033",
+ "terminal.ansiBlack": "#000000",
+ "terminal.ansiBlue": "#00008b",
+ "terminal.ansiBrightBlack": "#696969",
+ "terminal.ansiBrightBlue": "#0000ff",
+ "terminal.ansiBrightCyan": "#00ffff",
+ "terminal.ansiBrightGreen": "#008000",
+ "terminal.ansiBrightMagenta": "#ff00ff",
+ "terminal.ansiBrightRed": "#ff0000",
+ "terminal.ansiBrightWhite": "#ffffff",
+ "terminal.ansiBrightYellow": "#ff0000",
+ "terminal.ansiCyan": "#008b8b",
+ "terminal.ansiGreen": "#006400",
+ "terminal.ansiMagenta": "#8b008b",
+ "terminal.ansiRed": "#8b0000",
+ "terminal.ansiWhite": "#fbfbfb",
+ "terminal.ansiYellow": "#ffff00",
+ "terminal.background": "#144000",
+ "terminal.border": "#ffd70033",
+ "terminal.dropBackground": "#14400088",
+ "terminal.foreground": "#ffd700",
+ "terminal.inactiveSelectionBackground": "#ffd70033",
+ "terminal.selectionBackground": "#ffd70033",
+ "terminal.selectionForeground": "#14400033",
+ "terminal.tab.activeBorder": "#ff4500",
+ "terminalCommandDecoration.errorBackground": "#ff4500",
+ "terminalCursor.background": "#144000",
+ "terminalCursor.foreground": "#ffd700",
+ "textLink.activeForeground": "#ff4500",
+ "textLink.foreground": "#ffd700",
+ "textPreformat.foreground": "#ffd700",
+ "titleBar.activeBackground": "#144000",
+ "titleBar.activeForeground": "#ffd700",
+ "titleBar.border": "#ffd70033",
+ "tree.inactiveIndentGuidesStroke": "#ffd70088",
+ "tree.indentGuidesStroke": "#ffd70033",
+ "walkThrough.embeddedEditorBackground": "#144000",
+ "walkthrough.stepTitle.foreground": "#ffd700",
+ "welcomePage.progress.background": "#ffd700",
+ "welcomePage.progress.foreground": "#ff4500",
+ "welcomePage.tileBackground": "#ffffff12",
+ "welcomePage.tileBorder": "#ffff0044",
+ "welcomePage.tileHoverBackground": "#ffd70033",
+ "widget.shadow": "#ffd700"
+ },
+ "rules": [
+ {
+ "foreground": "#ffa500",
+ "token": "support.type.property-name.json"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "string.quoted.double.json"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "entity.name.tag.html"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "punctuation.definition.tag"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "punctuation.separator.key-value.html"
+ },
+ {
+ "foreground": "#ffa500",
+ "token": "entity.other.attribute-name"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "text.html"
+ },
+ {
+ "foreground": "#ff6347",
+ "token": "storage"
+ },
+ {
+ "foreground": "#ff6347",
+ "token": "keyword"
+ },
+ {
+ "foreground": "#ff6347",
+ "token": "meta.var.expr.js"
+ },
+ {
+ "foreground": "#ff6347",
+ "token": "meta.template.expression.js"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "string.quoted.double.js"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "string.quoted.single.js"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "string.template.js"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "variable"
+ },
+ {
+ "foreground": "#9acd32",
+ "token": "meta.function"
+ },
+ {
+ "foreground": "#9acd32",
+ "token": "meta.function-call"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "punctuation.terminator.statement.js"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "punctuation.separator.parameter.js"
+ },
+ {
+ "foreground": "#ffa500",
+ "token": "constant"
+ },
+ {
+ "foreground": "#ffa500",
+ "fontStyle": "bold",
+ "token": "markup.heading.markdown"
+ },
+ {
+ "foreground": "#ffd700",
+ "token": "meta.paragraph.markdown"
+ },
+ {
+ "foreground": "#ffd700",
+ "fontStyle": "bold",
+ "token": "markup.bold.markdown"
+ },
+ {
+ "foreground": "#ffff00",
+ "token": "markup.fenced_code.block.markdown"
+ },
+ {
+ "foreground": "#8fbc8f",
+ "token": "string.other.link.description.markdown"
+ },
+ {
+ "foreground": "#888888",
+ "fontStyle": "italic",
+ "token": "comment"
+ },
+ {
+ "foreground": "#FF4500",
+ "token": "invalid"
+ }
+ ],
+ "encodedTokensColors": []
+ }
diff --git a/src/node_requires/monaco-themes/OneDarkPro.json b/src/node_requires/monaco-themes/OneDarkPro.json
new file mode 100644
index 000000000..1455eb8d1
--- /dev/null
+++ b/src/node_requires/monaco-themes/OneDarkPro.json
@@ -0,0 +1,1994 @@
+{
+ "inherit": true,
+ "base": "vs-dark",
+ "colors": {
+ "activityBar.background": "#282c34",
+ "activityBar.foreground": "#d7dae0",
+ "activityBarBadge.background": "#4d78cc",
+ "activityBarBadge.foreground": "#f8fafd",
+ "badge.background": "#282c34",
+ "button.background": "#404754",
+ "button.secondaryBackground": "#30333d",
+ "button.secondaryForeground": "#c0bdbd",
+ "checkbox.border": "#404754",
+ "debugToolBar.background": "#21252b",
+ "descriptionForeground": "#abb2bf",
+ "diffEditor.insertedTextBackground": "#00809b33",
+ "dropdown.background": "#21252b",
+ "dropdown.border": "#21252b",
+ "editor.background": "#282c34",
+ "editor.findMatchBackground": "#42557b",
+ "editor.findMatchBorder": "#457dff",
+ "editor.findMatchHighlightBackground": "#6199ff2f",
+ "editor.foreground": "#abb2bf",
+ "editorBracketHighlight.foreground1": "#d19a66",
+ "editorBracketHighlight.foreground2": "#c678dd",
+ "editorBracketHighlight.foreground3": "#56b6c2",
+ "editorHoverWidget.highlightForeground": "#61afef",
+ "editorInlayHint.foreground": "#abb2bf",
+ "editorInlayHint.background": "#2c313c",
+ "editor.lineHighlightBackground": "#2c313c",
+ "editorLineNumber.activeForeground": "#abb2bf",
+ "editorGutter.addedBackground": "#109868",
+ "editorGutter.deletedBackground": "#9A353D",
+ "editorGutter.modifiedBackground": "#948B60",
+ "editorOverviewRuler.addedBackground": "#109868",
+ "editorOverviewRuler.deletedBackground": "#9A353D",
+ "editorOverviewRuler.modifiedBackground": "#948B60",
+ "editor.selectionBackground": "#67769660",
+ "editor.selectionHighlightBackground": "#ffffff10",
+ "editor.selectionHighlightBorder": "#dddddd",
+ "editor.wordHighlightBackground": "#d2e0ff2f",
+ "editor.wordHighlightBorder": "#7f848e",
+ "editor.wordHighlightStrongBackground": "#abb2bf26",
+ "editor.wordHighlightStrongBorder": "#7f848e",
+ "editorBracketMatch.background": "#515a6b",
+ "editorBracketMatch.border": "#515a6b",
+ "editorCursor.background": "#ffffffc9",
+ "editorCursor.foreground": "#528bff",
+ "editorError.foreground": "#c24038",
+ "editorGroup.background": "#181a1f",
+ "editorGroup.border": "#181a1f",
+ "editorGroupHeader.tabsBackground": "#21252b",
+ "editorHoverWidget.background": "#21252b",
+ "editorHoverWidget.border": "#181a1f",
+ "editorIndentGuide.activeBackground": "#c8c8c859",
+ "editorIndentGuide.background": "#3b4048",
+ "editorLineNumber.foreground": "#495162",
+ "editorMarkerNavigation.background": "#21252b",
+ "editorRuler.foreground": "#abb2bf26",
+ "editorSuggestWidget.background": "#21252b",
+ "editorSuggestWidget.border": "#181a1f",
+ "editorSuggestWidget.selectedBackground": "#2c313a",
+ "editorWarning.foreground": "#d19a66",
+ "editorWhitespace.foreground": "#ffffff1d",
+ "editorWidget.background": "#21252b",
+ "focusBorder": "#3e4452",
+ "gitDecoration.ignoredResourceForeground": "#636b78",
+ "input.background": "#1d1f23",
+ "input.foreground": "#abb2bf",
+ "list.activeSelectionBackground": "#2c313a",
+ "list.activeSelectionForeground": "#d7dae0",
+ "list.focusBackground": "#323842",
+ "list.focusForeground": "#f0f0f0",
+ "list.highlightForeground": "#ecebeb",
+ "list.hoverBackground": "#2c313a",
+ "list.hoverForeground": "#abb2bf",
+ "list.inactiveSelectionBackground": "#323842",
+ "list.inactiveSelectionForeground": "#d7dae0",
+ "list.warningForeground": "#d19a66",
+ "menu.foreground": "#abb2bf",
+ "menu.separatorBackground": "#343a45",
+ "minimapGutter.addedBackground": "#109868",
+ "minimapGutter.deletedBackground": "#9A353D",
+ "minimapGutter.modifiedBackground": "#948B60",
+ "panel.border": "#3e4452",
+ "panelSectionHeader.background": "#21252b",
+ "peekViewEditor.background": "#1b1d23",
+ "peekViewEditor.matchHighlightBackground": "#29244b",
+ "peekViewResult.background": "#22262b",
+ "scrollbar.shadow": "#23252c",
+ "scrollbarSlider.activeBackground": "#747d9180",
+ "scrollbarSlider.background": "#4e566660",
+ "scrollbarSlider.hoverBackground": "#5a637580",
+ "settings.focusedRowBackground": "#282c34",
+ "settings.headerForeground": "#fff",
+ "sideBar.background": "#21252b",
+ "sideBar.foreground": "#abb2bf",
+ "sideBarSectionHeader.background": "#282c34",
+ "sideBarSectionHeader.foreground": "#abb2bf",
+ "statusBar.background": "#21252b",
+ "statusBar.debuggingBackground": "#cc6633",
+ "statusBar.debuggingBorder": "#ff000000",
+ "statusBar.debuggingForeground": "#ffffff",
+ "statusBar.foreground": "#9da5b4",
+ "statusBar.noFolderBackground": "#21252b",
+ "statusBarItem.remoteBackground": "#4d78cc",
+ "statusBarItem.remoteForeground": "#f8fafd",
+ "tab.activeBackground": "#282c34",
+ "tab.activeBorder": "#b4b4b4",
+ "tab.activeForeground": "#dcdcdc",
+ "tab.border": "#181a1f",
+ "tab.hoverBackground": "#323842",
+ "tab.inactiveBackground": "#21252b",
+ "tab.unfocusedHoverBackground": "#323842",
+ "terminal.ansiBlack": "#3f4451",
+ "terminal.ansiBlue": "#4aa5f0",
+ "terminal.ansiBrightBlack": "#4f5666",
+ "terminal.ansiBrightBlue": "#4dc4ff",
+ "terminal.ansiBrightCyan": "#4cd1e0",
+ "terminal.ansiBrightGreen": "#a5e075",
+ "terminal.ansiBrightMagenta": "#de73ff",
+ "terminal.ansiBrightRed": "#ff616e",
+ "terminal.ansiBrightWhite": "#e6e6e6",
+ "terminal.ansiBrightYellow": "#f0a45d",
+ "terminal.ansiCyan": "#42b3c2",
+ "terminal.ansiGreen": "#8cc265",
+ "terminal.ansiMagenta": "#c162de",
+ "terminal.ansiRed": "#e05561",
+ "terminal.ansiWhite": "#d7dae0",
+ "terminal.ansiYellow": "#d18f52",
+ "terminal.background": "#282c34",
+ "terminal.border": "#3e4452",
+ "terminal.foreground": "#abb2bf",
+ "terminal.selectionBackground": "#abb2bf30",
+ "textBlockQuote.background": "#2e3440",
+ "textBlockQuote.border": "#4b5362",
+ "textLink.foreground": "#61afef",
+ "textPreformat.foreground": "#d19a66",
+ "titleBar.activeBackground": "#282c34",
+ "titleBar.activeForeground": "#9da5b4",
+ "titleBar.inactiveBackground": "#282c34",
+ "titleBar.inactiveForeground": "#6b717d",
+ "tree.indentGuidesStroke": "#ffffff1d",
+ "walkThrough.embeddedEditorBackground": "#2e3440",
+ "welcomePage.buttonHoverBackground": "#404754"
+ },
+ "rules": [
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.embedded"
+ },
+ {
+ "foreground": "#61AFEF",
+ "token": "identifier"
+ },
+ {
+ "foreground": "#E06C75",
+ "token": "type.identifier"
+ },
+ {
+ "foreground": "#D19A66",
+ "token": "number"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.delayed.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.list.begin.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.list.end.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.ability.begin.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.ability.end.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.operator.assignment.as.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.separator.pipe.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.separator.delimiter.unison"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.hash.unison"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "variable.other.generic-type.haskell"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "storage.type.haskell"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.magic.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.period.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.element.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.parenthesis.begin.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.parenthesis.end.python"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.parameter.function.language.special.self.python"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.parameter.function.language.special.cls.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "storage.modifier.lifetime.rust"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "support.function.std.rust"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.lifetime.rust"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.language.rust"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.constant.edge"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "constant.other.character-class.regexp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.word"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "keyword.operator.quantifier.regexp"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "variable.parameter.function"
+ },
+ {
+ "foreground": "#5c6370",
+ "token": "comment markup.link"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "markup.changed.diff"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.diff.header.from-file"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.diff.header.to-file"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "punctuation.definition.from-file.diff"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "punctuation.definition.to-file.diff"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "markup.inserted.diff"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "markup.deleted.diff"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.function.c"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.function.cpp"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.begin.bracket.curly.cpp"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.end.bracket.curly.cpp"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.terminator.statement.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.begin.bracket.curly.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.end.bracket.curly.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.parens.begin.bracket.round.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.parens.end.bracket.round.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.parameters.begin.bracket.round.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.parameters.end.bracket.round.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.key-value"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "keyword.operator.expression.import"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.constant.math"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.property.math"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.other.constant"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.annotation.java"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.object.array.java"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "source.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.begin.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.block.end.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.method-parameters.begin.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.method-parameters.end.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.method.identifier.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.method.begin.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.method.end.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.terminator.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.class.begin.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.class.end.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.inner-class.begin.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.inner-class.end.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.method-call.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.class.begin.bracket.curly.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.class.end.bracket.curly.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.method.begin.bracket.curly.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.method.end.bracket.curly.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.period.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.bracket.angle.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.annotation.java"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.method.body.java"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.method.java"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.modifier.import.java"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.java"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.generic.java"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.instanceof.java"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.definition.variable.name.java"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.logical"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.bitwise"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.channel"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.property-value.scss"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.property-value.css"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.css"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.scss"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.less"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.color.w3c-standard-color-name.css"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.color.w3c-standard-color-name.scss"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.list.comma.css"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.color.w3c-standard-color-name.css"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.vendored.property-name.css"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.module.node"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.object.module"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.module.node"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.type.module"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.other.readwrite"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.object-literal.key"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.property"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.object.process"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.object.node"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.json"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.instanceof"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.new"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.ternary"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.optional"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.keyof"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.type.object.console"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.variable.property.process"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "entity.name.function"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "support.function.console"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "keyword.operator.misc.rust"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.sigil.rust"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.delete"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.object.dom"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.dom"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.variable.property.dom"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.arithmetic"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.comparison"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.decrement"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.increment"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.relational"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.assignment.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.comparison.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.increment.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.decrement.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.bitwise.shift.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.assignment.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.comparison.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.increment.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.decrement.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.bitwise.shift.cpp"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.delimiter"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.separator.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.separator.cpp"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.posix-reserved.c"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.posix-reserved.cpp"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.sizeof.c"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.sizeof.cpp"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "variable.parameter.function.language.python"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.python"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.logical.python"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "variable.parameter.function.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.arguments.begin.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.arguments.end.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.arguments.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.list.begin.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.list.end.python"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.function-call.generic.python"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "constant.character.format.placeholder.other.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "keyword.operator"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.assignment.compound"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.assignment.compound.js"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.assignment.compound.ts"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.namespace"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "variable.c"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.language"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "token.variable.parameter.java"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "import.storage.java"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "token.package.keyword"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "token.package"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "entity.name.function"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.require"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "support.function.any-method"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "variable.function"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.type.namespace"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.class"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": " entity.name.type.class"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.class.identifier.namespace.type"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.class"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.other.class.js"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.other.class.ts"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.other.class.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.type"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.control"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "control.elements"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": " keyword.operator.less"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "keyword.other.special-method"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "storage"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "token.storage"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.delete"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.in"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.of"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.instanceof"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.new"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.typeof"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.void"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "token.storage.type.java"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.function"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "support.type.property-name"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.type.property-name.toml"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": " support.type.property-name.table.toml"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": " support.type.property-name.array.toml"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "support.constant.property-value"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.font-name"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.tag"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "string"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.other.symbol"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "constant.numeric"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "constant"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "punctuation.definition.constant"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.tag"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "entity.other.attribute-name"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "entity.other.attribute-name.id"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "entity.other.attribute-name.class.css"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "meta.selector"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "markup.heading"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "markup.heading punctuation.definition.heading"
+ },
+ {
+ "foreground": "#61afef",
+ "token": " entity.name.section"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "keyword.other.unit"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "markup.bold"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "todo.bold"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "punctuation.definition.bold"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "markup.italic"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": " punctuation.definition.italic"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "todo.emphasis"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "emphasis md"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.section.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.heading.markdown"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "punctuation.definition.list.begin.markdown"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "markup.heading.setext"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "punctuation.definition.bold.markdown"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "markup.inline.raw.markdown"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "markup.inline.raw.string.markdown"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "punctuation.definition.raw.markdown"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "punctuation.definition.list.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.string.begin.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.string.end.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.metadata.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "beginning.punctuation.definition.list.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.definition.metadata.markdown"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "markup.underline.link.markdown"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "markup.underline.link.image.markdown"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "string.other.link.title.markdown"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "string.other.link.description.markdown"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "markup.raw.monospace.asciidoc"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "punctuation.definition.asciidoc"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "markup.list.asciidoc"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "markup.link.asciidoc"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "markup.other.url.asciidoc"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "string.unquoted.asciidoc"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "markup.other.url.asciidoc"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "string.regexp"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "punctuation.section.embedded"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": " variable.interpolation"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.section.embedded.begin"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.section.embedded.end"
+ },
+ {
+ "foreground": "#ffffff",
+ "token": "invalid.illegal"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "invalid.illegal.bad-ampersand.html"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "invalid.illegal.unrecognized-tag.html"
+ },
+ {
+ "foreground": "#ffffff",
+ "token": "invalid.broken"
+ },
+ {
+ "foreground": "#ffffff",
+ "token": "invalid.deprecated"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "invalid.deprecated.entity.other.attribute-name.html"
+ },
+ {
+ "foreground": "#ffffff",
+ "token": "invalid.unimplemented"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "source.json meta.structure.dictionary.json > string.quoted.json"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "source.json meta.structure.dictionary.json > value.json > string.quoted.json"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "source.json meta.structure.array.json > value.json > string.quoted.json"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "source.json meta.structure.array.json > value.json > string.quoted.json > punctuation"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "source.json meta.structure.dictionary.json > constant.language.json"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "source.json meta.structure.array.json > constant.language.json"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.type.property-name.json"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "support.type.property-name.json punctuation"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "text.html.laravel-blade source.php.embedded.line.html entity.name.tag.laravel-blade"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "text.html.laravel-blade source.php.embedded.line.html support.constant.laravel-blade"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.other.namespace.use.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.other.namespace.use-as.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.other.alias.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "meta.interface.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.error-control.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.type.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.array.begin.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.array.end.php"
+ },
+ {
+ "foreground": "#f44747",
+ "token": "invalid.illegal.non-null-typehinted.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "meta.other.type.phpdoc.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "keyword.other.type.php"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "keyword.other.array.phpdoc.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.function-call.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.function-call.object.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.function-call.static.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.parameters.begin.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.parameters.end.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.delimiter.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.scope.begin.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.section.scope.end.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.terminator.expression.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.arguments.begin.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.arguments.end.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.storage-type.begin.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.storage-type.end.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.array.begin.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.array.end.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.begin.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.end.bracket.round.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.begin.bracket.curly.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.end.bracket.curly.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.section.switch-block.end.bracket.curly.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.section.switch-block.start.bracket.curly.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.section.switch-block.begin.bracket.curly.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.section.switch-block.end.bracket.curly.php"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.core.rust"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.ext.php"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.std.php"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.core.php"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.parser-token.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "entity.name.goto-label.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "support.other.php"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.logical.php"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.bitwise.php"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.arithmetic.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.regexp.php"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.comparison.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.heredoc.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.nowdoc.php"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.function.decorator.python"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.token.decorator.python"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "meta.function.decorator.identifier.python"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "function.parameter"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "function.brace"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "function.parameter.ruby"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": " function.parameter.cs"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.language.symbol.ruby"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.language.symbol.hashkey.ruby"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "rgb-value"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "inline-color-decoration rgb-value"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "less rgb-value"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "selector.sass"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.primitive.ts"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.builtin.ts"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.primitive.tsx"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.builtin.tsx"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "block.scope.end"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "block.scope.begin"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.type.cs"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.variable.local.cs"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "token.info-token"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "token.warn-token"
+ },
+ {
+ "foreground": "#f44747",
+ "token": "token.error-token"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "token.debug-token"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.definition.template-expression.begin"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.definition.template-expression.end"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.section.embedded"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "meta.template.expression"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.module"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "support.type.type.flowtype"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.primitive"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.property.object"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.parameter.function.js"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "keyword.other.template.begin"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "keyword.other.template.end"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "keyword.other.substitution.begin"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "keyword.other.substitution.end"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.operator.assignment"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "keyword.operator.assignment.go"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.arithmetic.go"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.address.go"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.package.go"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "support.type.prelude.elm"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.constant.elm"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "punctuation.quasi.element"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "constant.character.entity"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "entity.other.attribute-name.pseudo-element"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "entity.other.attribute-name.pseudo-class"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.global.clojure"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.symbol.clojure"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.keyword.clojure"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.arguments.coffee"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.parameter.function.coffee"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "source.ini"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.scope.prerequisites.makefile"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "source.makefile"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "storage.modifier.import.groovy"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "meta.method.groovy"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "meta.definition.variable.name.groovy"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "meta.definition.class.inherited.classes.groovy"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.variable.semantic.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.texture.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.sampler.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.object.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.object.rw.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.fx.hlsl"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "support.type.object.hlsl"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "text.variable"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "text.bracketed"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.swift"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "support.type.vb.asp"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.function.xi"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "entity.name.class.xi"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "constant.character.character-class.regexp.xi"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "constant.regexp.xi"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "keyword.control.xi"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "invalid.xi"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "beginning.punctuation.definition.quote.markdown.xi"
+ },
+ {
+ "foreground": "#7f848e",
+ "token": "beginning.punctuation.definition.list.markdown.xi"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "constant.character.xi"
+ },
+ {
+ "foreground": "#61afef",
+ "token": "accent.xi"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "wikiword.xi"
+ },
+ {
+ "foreground": "#ffffff",
+ "token": "constant.other.color.rgb-value.xi"
+ },
+ {
+ "foreground": "#5c6370",
+ "token": "punctuation.definition.tag.xi"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.label.cs"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.scope-resolution.function.call"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.scope-resolution.function.definition"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.label.cs"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "markup.heading.setext.1.markdown"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "markup.heading.setext.2.markdown"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": " meta.brace.square"
+ },
+ {
+ "foreground": "#7f848e",
+ "fontStyle": "italic",
+ "token": "comment"
+ },
+ {
+ "foreground": "#7f848e",
+ "fontStyle": "italic",
+ "token": " punctuation.definition.comment"
+ },
+ {
+ "foreground": "#5c6370",
+ "token": "markup.quote.markdown"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.definition.block.sequence.item.yaml"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.language.symbol.elixir"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.language.symbol.double-quoted.elixir"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.name.variable.parameter.cs"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.variable.field.cs"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "markup.deleted"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "markup.inserted"
+ },
+ {
+ "fontStyle": "underline",
+ "token": "markup.underline"
+ },
+ {
+ "foreground": "#BE5046",
+ "token": "punctuation.section.embedded.begin.php"
+ },
+ {
+ "foreground": "#BE5046",
+ "token": "punctuation.section.embedded.end.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "support.other.namespace.php"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.parameter.function.latex"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "variable.other.object"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.other.constant.property"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "entity.other.inherited-class"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "variable.other.readwrite.c"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "entity.name.variable.parameter.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "punctuation.separator.colon.php"
+ },
+ {
+ "foreground": "#abb2bf",
+ "token": "constant.other.php"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "constant.numeric.decimal.asm.x86_64"
+ },
+ {
+ "foreground": "#d19a66",
+ "token": "support.other.parenthesis.regexp"
+ },
+ {
+ "foreground": "#56b6c2",
+ "token": "constant.character.escape"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "string.regexp"
+ },
+ {
+ "foreground": "#98c379",
+ "token": "log.info"
+ },
+ {
+ "foreground": "#e5c07b",
+ "token": "log.warning"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "log.error"
+ },
+ {
+ "foreground": "#c678dd",
+ "token": "keyword.operator.expression.is"
+ },
+ {
+ "foreground": "#e06c75",
+ "token": "entity.name.label"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.other.attribute-name.js"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.other.attribute-name.ts"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.other.attribute-name.jsx"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "entity.other.attribute-name.tsx"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.parameter"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.language.super"
+ },
+ {
+ "fontStyle": "italic",
+ "foreground": "#E5C07B",
+ "token": "pointsOfInterest.ts"
+ },
+ {
+ "fontStyle": "italic",
+ "foreground": "#E5C07B",
+ "token": "pointsOfInterest.coffee"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.line.double-slash"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "comment.block.documentation"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "markup.italic.markdown"
+ }
+ ],
+ "encodedTokensColors": []
+}
diff --git a/src/node_requires/monaco-themes/Synthwave.json b/src/node_requires/monaco-themes/Synthwave.json
new file mode 100644
index 000000000..c4ac00182
--- /dev/null
+++ b/src/node_requires/monaco-themes/Synthwave.json
@@ -0,0 +1,703 @@
+{
+ "inherit": true,
+ "base": "vs-dark",
+ "colors": {
+ "focusBorder": "#1f212b",
+ "foreground": "#ffffff",
+ "widget.shadow": "#2a2139",
+ "selection.background": "#ffffff20",
+ "errorForeground": "#fe4450",
+ "textLink.activeForeground": "#ff7edb",
+ "textLink.foreground": "#f97e72",
+ "button.background": "#614D85",
+ "dropdown.background": "#232530",
+ "dropdown.listBackground": "#2a2139",
+ "input.background": "#2a2139",
+ "inputOption.activeBorder": "#ff7edb99",
+ "inputValidation.errorBackground": "#fe445080",
+ "inputValidation.errorBorder": "#fe445000",
+ "scrollbar.shadow": "#2a2139",
+ "scrollbarSlider.activeBackground": "#9d8bca20",
+ "scrollbarSlider.background": "#9d8bca30",
+ "scrollbarSlider.hoverBackground": "#9d8bca50",
+ "badge.foreground": "#ffffff",
+ "badge.background": "#2a2139",
+ "progressBar.background": "#f97e72",
+ "list.activeSelectionBackground": "#ffffff20",
+ "list.activeSelectionForeground": "#ffffff",
+ "list.dropBackground": "#34294f66",
+ "list.focusBackground": "#ffffff20",
+ "list.focusForeground": "#ffffff",
+ "list.highlightForeground": "#f97e72",
+ "list.hoverBackground": "#37294d99",
+ "list.hoverForeground": "#ffffff",
+ "list.inactiveSelectionBackground": "#ffffff20",
+ "list.inactiveSelectionForeground": "#ffffff",
+ "list.inactiveFocusBackground": "#2a213999",
+ "list.errorForeground": "#fe4450E6",
+ "list.warningForeground": "#72f1b8bb",
+ "activityBar.background": "#171520",
+ "activityBar.dropBackground": "#34294f66",
+ "activityBar.foreground": "#ffffffCC",
+ "activityBarBadge.background": "#f97e72",
+ "activityBarBadge.foreground": "#2a2139",
+ "sideBar.background": "#241b2f",
+ "sideBar.foreground": "#ffffff99",
+ "sideBar.dropBackground": "#34294f4c",
+ "sideBarSectionHeader.background": "#241b2f",
+ "sideBarSectionHeader.foreground": "#ffffffca",
+ "menu.background": "#463465",
+ "editorGroup.border": "#495495",
+ "editorGroup.dropBackground": "#4954954a",
+ "editorGroupHeader.tabsBackground": "#241b2f",
+ "tab.border": "#241b2f00",
+ "tab.activeBorder": "#880088",
+ "tab.inactiveBackground": "#262335",
+ "editor.background": "#241B2F",
+ "editorLineNumber.foreground": "#ffffff73",
+ "editorLineNumber.activeForeground": "#ffffffcc",
+ "editorCursor.background": "#241b2f",
+ "editorCursor.foreground": "#f97e72",
+ "editor.selectionBackground": "#ffffff20",
+ "editor.selectionHighlightBackground": "#ffffff20",
+ "editor.wordHighlightBackground": "#34294f88",
+ "editor.wordHighlightStrongBackground": "#34294f88",
+ "editor.findMatchBackground": "#D18616bb",
+ "editor.findMatchHighlightBackground": "#D1861655",
+ "editor.findRangeHighlightBackground": "#34294f1a",
+ "editor.hoverHighlightBackground": "#463564",
+ "editor.lineHighlightBorder": "#7059AB66",
+ "editor.rangeHighlightBackground": "#49549539",
+ "editorIndentGuide.background": "#444251",
+ "editorIndentGuide.activeBackground": "#A148AB80",
+ "editorRuler.foreground": "#A148AB80",
+ "editorCodeLens.foreground": "#ffffff7c",
+ "editorBracketMatch.background": "#34294f66",
+ "editorBracketMatch.border": "#495495",
+ "editorOverviewRuler.border": "#34294fb3",
+ "editorOverviewRuler.findMatchForeground": "#D1861699",
+ "editorOverviewRuler.modifiedForeground": "#b893ce99",
+ "editorOverviewRuler.addedForeground": "#09f7a099",
+ "editorOverviewRuler.deletedForeground": "#fe445099",
+ "editorOverviewRuler.errorForeground": "#fe4450dd",
+ "editorOverviewRuler.warningForeground": "#72f1b8cc",
+ "editorError.foreground": "#fe4450",
+ "editorWarning.foreground": "#72f1b8cc",
+ "editorGutter.modifiedBackground": "#b893ce8f",
+ "editorGutter.addedBackground": "#206d4bd6",
+ "editorGutter.deletedBackground": "#fa2e46a4",
+ "diffEditor.insertedTextBackground": "#0beb9935",
+ "diffEditor.removedTextBackground": "#fe445035",
+ "editorWidget.background": "#171520DC",
+ "editorWidget.border": "#ffffff22",
+ "editorWidget.resizeBorder": "#ffffff44",
+ "editorSuggestWidget.highlightForeground": "#f97e72",
+ "editorSuggestWidget.selectedBackground": "#ffffff36",
+ "peekView.border": "#495495",
+ "peekViewEditor.background": "#232530",
+ "peekViewEditor.matchHighlightBackground": "#D18616bb",
+ "peekViewResult.background": "#232530",
+ "peekViewResult.matchHighlightBackground": "#D1861655",
+ "peekViewResult.selectionBackground": "#2a213980",
+ "peekViewTitle.background": "#232530",
+ "panelTitle.activeBorder": "#f97e72",
+ "statusBar.background": "#241b2f",
+ "statusBar.foreground": "#ffffff80",
+ "statusBar.debuggingBackground": "#f97e72",
+ "statusBar.debuggingForeground": "#08080f",
+ "statusBar.noFolderBackground": "#241b2f",
+ "statusBarItem.prominentBackground": "#2a2139",
+ "statusBarItem.prominentHoverBackground": "#34294f",
+ "titleBar.activeBackground": "#241b2f",
+ "titleBar.inactiveBackground": "#241b2f",
+ "extensionButton.prominentBackground": "#f97e72",
+ "extensionButton.prominentHoverBackground": "#ff7edb",
+ "pickerGroup.foreground": "#f97e72ea",
+ "terminal.foreground": "#ffffff",
+ "terminal.ansiBlue": "#03edf9",
+ "terminal.ansiBrightBlue": "#03edf9",
+ "terminal.ansiBrightCyan": "#03edf9",
+ "terminal.ansiBrightGreen": "#72f1b8",
+ "terminal.ansiBrightMagenta": "#ff7edb",
+ "terminal.ansiBrightRed": "#fe4450",
+ "terminal.ansiBrightYellow": "#fede5d",
+ "terminal.ansiCyan": "#03edf9",
+ "terminal.ansiGreen": "#72f1b8",
+ "terminal.ansiMagenta": "#ff7edb",
+ "terminal.ansiRed": "#fe4450",
+ "terminal.ansiYellow": "#f3e70f",
+ "terminal.selectionBackground": "#ffffff20",
+ "terminalCursor.background": "#ffffff",
+ "terminalCursor.foreground": "#03edf9",
+ "debugToolBar.background": "#463465",
+ "walkThrough.embeddedEditorBackground": "#232530",
+ "gitDecoration.modifiedResourceForeground": "#b893ceee",
+ "gitDecoration.deletedResourceForeground": "#fe4450",
+ "gitDecoration.addedResourceForeground": "#72f1b8cc",
+ "gitDecoration.untrackedResourceForeground": "#72f1b8",
+ "gitDecoration.ignoredResourceForeground": "#ffffff59",
+ "minimapGutter.addedBackground": "#09f7a099",
+ "minimapGutter.modifiedBackground": "#b893ce",
+ "minimapGutter.deletedBackground": "#fe4450",
+ "breadcrumbPicker.background": "#232530"
+ },
+ "rules": [
+ {
+ "foreground": "#36F9F6",
+ "token": "identifier.ts"
+ },
+ {
+ "foreground": "#72F1B8",
+ "token": "type.identifier.ts"
+ },
+ {
+ "foreground": "#FF7EDB",
+ "token": "pointsOfInterest.ts"
+ },
+ {
+ "foreground": "#848bbd",
+ "fontStyle": "italic",
+ "token": "comment"
+ },
+ {
+ "foreground": "#848bbd",
+ "fontStyle": "italic",
+ "token": "string.quoted.docstring.multi.python"
+ },
+ {
+ "foreground": "#848bbd",
+ "fontStyle": "italic",
+ "token": "string.quoted.docstring.multi.python punctuation.definition.string.begin.python"
+ },
+ {
+ "foreground": "#848bbd",
+ "fontStyle": "italic",
+ "token": "string.quoted.docstring.multi.python punctuation.definition.string.end.python"
+ },
+ {
+ "foreground": "#ff8b39",
+ "token": "string.quoted"
+ },
+ {
+ "foreground": "#ff8b39",
+ "token": "string.template"
+ },
+ {
+ "foreground": "#ff8b39",
+ "token": "punctuation.definition.string"
+ },
+ {
+ "foreground": "#b6b1b1",
+ "token": "string.template meta.embedded.line"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "variable"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "entity.name.variable"
+ },
+ {
+ "foreground": "#fe4450",
+ "fontStyle": "bold",
+ "token": "variable.language"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "variable.parameter"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "storage.type"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "storage.modifier"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "constant"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "string.regexp"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "constant.numeric"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "constant.language"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "constant.character.escape"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "entity.name"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "entity.name.tag"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "punctuation.definition.tag"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "entity.other.attribute-name"
+ },
+ {
+ "foreground": "#fede5d",
+ "fontStyle": "italic",
+ "token": "entity.other.attribute-name.html"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "entity.name.type"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "meta.attribute.class.html"
+ },
+ {
+ "foreground": "#DD5500",
+ "token": "entity.other.inherited-class"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "entity.name.function"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "variable.function"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.export.js"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.import.js"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "constant.numeric.decimal.js"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword.control"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword.operator"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword.operator.new"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword.operator.expression"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "keyword.operator.logical"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "keyword.other.unit"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "support"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "support.function"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "support.variable"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "meta.object-literal.key"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "support.type.property-name"
+ },
+ {
+ "foreground": "#b6b1b1",
+ "token": "punctuation.separator.key-value"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "punctuation.section.embedded"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "punctuation.definition.template-expression.begin"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "punctuation.definition.template-expression.end"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "support.type.property-name.css"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "support.type.property-name.json"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "switch-block.expr.js"
+ },
+ {
+ "foreground": "#2ee2fa",
+ "token": "variable.other.constant.property.js"
+ },
+ {
+ "foreground": "#2ee2fa",
+ "token": " variable.other.property.js"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "constant.other.color"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "support.constant.font-name"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "entity.other.attribute-name.id"
+ },
+ {
+ "foreground": "#DD5500",
+ "token": "entity.other.attribute-name.pseudo-element"
+ },
+ {
+ "foreground": "#DD5500",
+ "token": "entity.other.attribute-name.pseudo-class"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "support.function.misc.css"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "markup.heading"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "entity.name.section"
+ },
+ {
+ "foreground": "#ffffffee",
+ "token": "text.html"
+ },
+ {
+ "foreground": "#ffffffee",
+ "token": "keyword.operator.assignment"
+ },
+ {
+ "foreground": "#b6b1b1cc",
+ "fontStyle": "italic",
+ "token": "markup.quote"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "beginning.punctuation.definition.list"
+ },
+ {
+ "foreground": "#DD5500",
+ "token": "markup.underline.link"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "string.other.link.description"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "meta.function-call.generic.python"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "variable.parameter.function-call.python"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "storage.type.cs"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "entity.name.variable.local.cs"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "entity.name.variable.field.cs"
+ },
+ {
+ "foreground": "#ff7edb",
+ "token": "entity.name.variable.property.cs"
+ },
+ {
+ "foreground": "#72f1b8",
+ "fontStyle": "italic",
+ "token": "constant.other.placeholder.c"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.directive.include.c"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.directive.define.c"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "storage.modifier.c"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.cpp keyword.operator"
+ },
+ {
+ "foreground": "#72f1b8",
+ "fontStyle": "italic",
+ "token": "constant.other.placeholder.cpp"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.directive.include.cpp"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "keyword.control.directive.define.cpp"
+ },
+ {
+ "foreground": "#fe4450",
+ "token": "storage.modifier.specifier.const.cpp"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "source.elixir support.type.elixir"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "source.elixir meta.module.elixir entity.name.class.elixir"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.elixir entity.name.function"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "source.elixir constant.other.symbol.elixir"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "source.elixir constant.other.keywords.elixir"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.elixir punctuation.definition.string"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.elixir variable.other.readwrite.module.elixir"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"
+ },
+ {
+ "foreground": "#ff7edb",
+ "fontStyle": "italic",
+ "token": "source.elixir .punctuation.binary.elixir"
+ },
+ {
+ "foreground": "#36f9f6",
+ "fontStyle": "bold",
+ "token": "entity.global.clojure"
+ },
+ {
+ "foreground": "#36f9f6",
+ "fontStyle": "italic",
+ "token": "storage.control.clojure"
+ },
+ {
+ "foreground": "#fe4450",
+ "fontStyle": "italic",
+ "token": "meta.metadata.simple.clojure"
+ },
+ {
+ "foreground": "#fe4450",
+ "fontStyle": "italic",
+ "token": "meta.metadata.map.clojure"
+ },
+ {
+ "fontStyle": "italic",
+ "token": "meta.quoted-expression.clojure"
+ },
+ {
+ "foreground": "#ff7edbff",
+ "token": "meta.symbol.clojure"
+ },
+ {
+ "foreground": "#ff7edbff",
+ "token": "source.go"
+ },
+ {
+ "foreground": "#36f9f6",
+ "token": "source.go meta.function-call.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.package.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.import.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.function.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.type.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.const.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.var.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.map.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.channel.go"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "source.go keyword.control.go"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.go storage.type"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.go keyword.struct.go"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "source.go keyword.interface.go"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "source.go constant.language.go"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "source.go constant.other.placeholder.go"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "source.go variable"
+ },
+ {
+ "foreground": "#72f1b8",
+ "fontStyle": "italic",
+ "token": "markup.underline.link.markdown"
+ },
+ {
+ "foreground": "#72f1b8",
+ "fontStyle": "italic",
+ "token": "markup.inline.raw.string.markdown"
+ },
+ {
+ "foreground": "#fede5d",
+ "token": "string.other.link.title.markdown"
+ },
+ {
+ "foreground": "#ff7edb",
+ "fontStyle": "bold",
+ "token": "markup.heading.markdown"
+ },
+ {
+ "foreground": "#ff7edb",
+ "fontStyle": "bold",
+ "token": "entity.name.section.markdown"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "fontStyle": "italic",
+ "token": "markup.italic.markdown"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "fontStyle": "bold",
+ "token": "markup.bold.markdown"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "punctuation.definition.quote.begin.markdown"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "markup.quote.markdown"
+ },
+ {
+ "foreground": "#ff7edbff",
+ "token": "source.dart"
+ },
+ {
+ "foreground": "#ff7edbff",
+ "token": "source.python"
+ },
+ {
+ "foreground": "#ff7edbff",
+ "token": "source.scala"
+ },
+ {
+ "foreground": "#f97e72",
+ "token": "string.interpolated.single.dart"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "variable.parameter.dart"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "constant.numeric.dart"
+ },
+ {
+ "foreground": "#2EE2FA",
+ "token": "variable.parameter.scala"
+ },
+ {
+ "foreground": "#72f1b8",
+ "token": "meta.template.expression.scala"
+ }
+ ],
+ "encodedTokensColors": []
+}
diff --git a/src/node_requires/patrons.ts b/src/node_requires/patrons.ts
new file mode 100644
index 000000000..2d2856f05
--- /dev/null
+++ b/src/node_requires/patrons.ts
@@ -0,0 +1,51 @@
+import fs from 'fs-extra';
+
+type ranks = 'cat' |'business cat' | 'partner';
+type Patron = {
+ name: string;
+ rank: ranks;
+ avatar: string;
+}
+type Donor = Omit