Full Code of sohomsahaun/SnowState for AI

master 0d5fbbf4e7c8 cached
112 files
272.9 KB
94.4k tokens
1 requests
Download .txt
Showing preview only (302K chars total). Download the full file or copy to clipboard to get everything.
Repository: sohomsahaun/SnowState
Branch: master
Commit: 0d5fbbf4e7c8
Files: 112
Total size: 272.9 KB

Directory structure:
gitextract_3opgkkmb/

├── .gitattributes
├── LICENSE
├── README.md
├── SnowState.yyp
├── fonts/
│   └── fDemo/
│       └── fDemo.yy
├── notes/
│   └── Credits/
│       ├── Credits.txt
│       └── Credits.yy
├── objects/
│   ├── oCamera/
│   │   ├── Alarm_0.gml
│   │   ├── Create_0.gml
│   │   ├── Step_0.gml
│   │   └── oCamera.yy
│   ├── oCloud/
│   │   ├── Step_0.gml
│   │   └── oCloud.yy
│   ├── oEffect/
│   │   ├── Other_7.gml
│   │   └── oEffect.yy
│   ├── oGame/
│   │   ├── Alarm_0.gml
│   │   ├── Create_0.gml
│   │   ├── Draw_64.gml
│   │   ├── Step_0.gml
│   │   └── oGame.yy
│   ├── oPlayerD/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── KeyRelease_82.gml
│   │   ├── Other_25.gml
│   │   ├── Other_76.gml
│   │   ├── Step_0.gml
│   │   └── oPlayerD.yy
│   ├── oPlayerT/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── KeyRelease_82.gml
│   │   ├── Other_25.gml
│   │   ├── Other_76.gml
│   │   ├── Step_0.gml
│   │   └── oPlayerT.yy
│   ├── oSwordD/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── Other_25.gml
│   │   ├── Step_0.gml
│   │   └── oSwordD.yy
│   ├── oSwordT/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── Other_25.gml
│   │   ├── Step_0.gml
│   │   └── oSwordT.yy
│   └── oWall/
│       └── oWall.yy
├── options/
│   ├── amazonfire/
│   │   └── options_amazonfire.yy
│   ├── android/
│   │   └── options_android.yy
│   ├── html5/
│   │   └── options_html5.yy
│   ├── ios/
│   │   └── options_ios.yy
│   ├── linux/
│   │   └── options_linux.yy
│   ├── mac/
│   │   └── options_mac.yy
│   ├── main/
│   │   └── options_main.yy
│   ├── operagx/
│   │   └── options_operagx.yy
│   ├── ps4/
│   │   └── options_ps4.yy
│   ├── ps5/
│   │   └── options_ps5.yy
│   ├── switch/
│   │   └── options_switch.yy
│   ├── tvos/
│   │   └── options_tvos.yy
│   ├── windows/
│   │   └── options_windows.yy
│   ├── windowsuap/
│   │   └── options_windowsuap.yy
│   └── xboxseriesxs/
│       └── options_xboxseriesxs.yy
├── rooms/
│   └── rDemo/
│       ├── RoomCreationCode.gml
│       └── rDemo.yy
├── scripts/
│   ├── MACROS/
│   │   ├── MACROS.gml
│   │   └── MACROS.yy
│   ├── SnowState/
│   │   ├── SnowState.gml
│   │   └── SnowState.yy
│   ├── Utility/
│   │   ├── Utility.gml
│   │   └── Utility.yy
│   └── __snowstate_config/
│       ├── __snowstate_config.gml
│       └── __snowstate_config.yy
├── sprites/
│   ├── bgBigCloud/
│   │   └── bgBigCloud.yy
│   ├── bgSky/
│   │   └── bgSky.yy
│   ├── sBackTreeRegular/
│   │   └── sBackTreeRegular.yy
│   ├── sBackTreeRight/
│   │   └── sBackTreeRight.yy
│   ├── sFrontTreeTop/
│   │   └── sFrontTreeTop.yy
│   ├── sPlayerFall/
│   │   └── sPlayerFall.yy
│   ├── sPlayerIdle/
│   │   └── sPlayerIdle.yy
│   ├── sPlayerJump/
│   │   └── sPlayerJump.yy
│   ├── sPlayerMask/
│   │   └── sPlayerMask.yy
│   ├── sPlayerRun/
│   │   └── sPlayerRun.yy
│   ├── sPlayerSwordAirAttack1/
│   │   └── sPlayerSwordAirAttack1.yy
│   ├── sPlayerSwordAirAttack2/
│   │   └── sPlayerSwordAirAttack2.yy
│   ├── sPlayerSwordAttack1/
│   │   └── sPlayerSwordAttack1.yy
│   ├── sPlayerSwordAttack2/
│   │   └── sPlayerSwordAttack2.yy
│   ├── sPlayerSwordAttack3/
│   │   └── sPlayerSwordAttack3.yy
│   ├── sPlayerSwordFall/
│   │   └── sPlayerSwordFall.yy
│   ├── sPlayerSwordIdle/
│   │   └── sPlayerSwordIdle.yy
│   ├── sPlayerSwordJump/
│   │   └── sPlayerSwordJump.yy
│   ├── sPlayerSwordRun/
│   │   └── sPlayerSwordRun.yy
│   ├── sPlayerSwordThrowSword/
│   │   └── sPlayerSwordThrowSword.yy
│   ├── sSmallCloud1/
│   │   └── sSmallCloud1.yy
│   ├── sSmallCloud2/
│   │   └── sSmallCloud2.yy
│   ├── sSmallCloud3/
│   │   └── sSmallCloud3.yy
│   ├── sSwordEffectAirAttack1/
│   │   └── sSwordEffectAirAttack1.yy
│   ├── sSwordEffectAirAttack2/
│   │   └── sSwordEffectAirAttack2.yy
│   ├── sSwordEffectAttack1/
│   │   └── sSwordEffectAttack1.yy
│   ├── sSwordEffectAttack2/
│   │   └── sSwordEffectAttack2.yy
│   ├── sSwordEffectAttack3/
│   │   └── sSwordEffectAttack3.yy
│   ├── sSwordEmbedded/
│   │   └── sSwordEmbedded.yy
│   ├── sSwordEmbeddedMask/
│   │   └── sSwordEmbeddedMask.yy
│   ├── sSwordIdle/
│   │   └── sSwordIdle.yy
│   ├── sSwordMask/
│   │   └── sSwordMask.yy
│   ├── sSwordSpinning/
│   │   └── sSwordSpinning.yy
│   ├── sWall/
│   │   └── sWall.yy
│   ├── sWater/
│   │   └── sWater.yy
│   ├── sWaterReflection/
│   │   └── sWaterReflection.yy
│   ├── stFrontTreeBody/
│   │   └── stFrontTreeBody.yy
│   ├── stGrass/
│   │   └── stGrass.yy
│   └── stTerrain/
│       └── stTerrain.yy
└── tilesets/
    ├── tFrontTreeBody/
    │   └── tFrontTreeBody.yy
    ├── tGrass/
    │   └── tGrass.yy
    └── tTerrain/
        └── tTerrain.yy

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.yy linguist-language=Game Maker Language


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020 Sohom Sahaun

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<h1 align="center">SnowState 3.1.4</h1>
<p align="center">@sohomsahaun</p>

---

**SnowState** is a robust finite state machine for GameMaker Studio 2.3+. It's easy to set up and keeps the code neat and organized. No more managing a thousand different scripts for an object, it's all in one place!

You can find downloadable .yyz (project file with demo) and .yymps (SnowState only) in the [Releases](https://github.com/sohomsahaun/SnowState/releases) tab.

&nbsp;

<p align="center">
  <img src="https://user-images.githubusercontent.com/27750907/124273546-f4c82480-db61-11eb-8df2-36948a7a4c07.gif">
</p>

&nbsp;
&nbsp;

## Documentation
To know more about SnowState, please visit the [Wiki](https://github.com/sohomsahaun/SnowState/wiki)!

## Awards
SnowState has been awarded as a winner of the [Helpful Dev Jam](https://gamemaker.io/en/blog/helpful-dev-jam-winners).

It was also nominated as a finalist of the [GameMaker Awards 2024](https://gamemaker.io/en/blog/gamemaker-awards-2024-winners) for the 'Best Tool' category.

![SnowState-BestTool](https://github.com/user-attachments/assets/bc6149f7-d03a-4861-a4c5-2aa02cbf9547)

## Note
This version of SnowState is for GameMaker Studio 2022.9.1 or higher. If you are using earlier version(s) of GameMaker Studio, please check out earlier version(s) of SnowState.


================================================
FILE: SnowState.yyp
================================================
{
  "resourceType": "GMProject",
  "resourceVersion": "1.6",
  "name": "SnowState",
  "resources": [
    {"id":{"name":"oWall","path":"objects/oWall/oWall.yy",},"order":4,},
    {"id":{"name":"sPlayerIdle","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"order":1,},
    {"id":{"name":"sBackTreeRegular","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"order":0,},
    {"id":{"name":"sBackTreeRight","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"order":1,},
    {"id":{"name":"tTerrain","path":"tilesets/tTerrain/tTerrain.yy",},"order":5,},
    {"id":{"name":"sPlayerSwordAttack1","path":"sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy",},"order":7,},
    {"id":{"name":"bgBigCloud","path":"sprites/bgBigCloud/bgBigCloud.yy",},"order":0,},
    {"id":{"name":"rDemo","path":"rooms/rDemo/rDemo.yy",},"order":0,},
    {"id":{"name":"sPlayerFall","path":"sprites/sPlayerFall/sPlayerFall.yy",},"order":0,},
    {"id":{"name":"sPlayerSwordAirAttack1","path":"sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy",},"order":5,},
    {"id":{"name":"__snowstate_config","path":"scripts/__snowstate_config/__snowstate_config.yy",},"order":0,},
    {"id":{"name":"oCloud","path":"objects/oCloud/oCloud.yy",},"order":1,},
    {"id":{"name":"sPlayerMask","path":"sprites/sPlayerMask/sPlayerMask.yy",},"order":3,},
    {"id":{"name":"sSmallCloud3","path":"sprites/sSmallCloud3/sSmallCloud3.yy",},"order":4,},
    {"id":{"name":"sSwordEffectAttack2","path":"sprites/sSwordEffectAttack2/sSwordEffectAttack2.yy",},"order":3,},
    {"id":{"name":"tGrass","path":"tilesets/tGrass/tGrass.yy",},"order":4,},
    {"id":{"name":"sSmallCloud1","path":"sprites/sSmallCloud1/sSmallCloud1.yy",},"order":2,},
    {"id":{"name":"sSwordEmbeddedMask","path":"sprites/sSwordEmbeddedMask/sSwordEmbeddedMask.yy",},"order":3,},
    {"id":{"name":"sPlayerSwordFall","path":"sprites/sPlayerSwordFall/sPlayerSwordFall.yy",},"order":10,},
    {"id":{"name":"SnowState","path":"scripts/SnowState/SnowState.yy",},"order":1,},
    {"id":{"name":"stGrass","path":"sprites/stGrass/stGrass.yy",},"order":1,},
    {"id":{"name":"sPlayerJump","path":"sprites/sPlayerJump/sPlayerJump.yy",},"order":2,},
    {"id":{"name":"Credits","path":"notes/Credits/Credits.yy",},"order":0,},
    {"id":{"name":"sSwordEffectAirAttack2","path":"sprites/sSwordEffectAirAttack2/sSwordEffectAirAttack2.yy",},"order":1,},
    {"id":{"name":"oPlayerT","path":"objects/oPlayerT/oPlayerT.yy",},"order":0,},
    {"id":{"name":"Utility","path":"scripts/Utility/Utility.yy",},"order":1,},
    {"id":{"name":"sWater","path":"sprites/sWater/sWater.yy",},"order":5,},
    {"id":{"name":"sPlayerSwordJump","path":"sprites/sPlayerSwordJump/sPlayerSwordJump.yy",},"order":12,},
    {"id":{"name":"oSwordD","path":"objects/oSwordD/oSwordD.yy",},"order":1,},
    {"id":{"name":"sPlayerSwordIdle","path":"sprites/sPlayerSwordIdle/sPlayerSwordIdle.yy",},"order":11,},
    {"id":{"name":"sSwordEffectAttack3","path":"sprites/sSwordEffectAttack3/sSwordEffectAttack3.yy",},"order":4,},
    {"id":{"name":"sPlayerSwordThrowSword","path":"sprites/sPlayerSwordThrowSword/sPlayerSwordThrowSword.yy",},"order":14,},
    {"id":{"name":"sSwordEffectAirAttack1","path":"sprites/sSwordEffectAirAttack1/sSwordEffectAirAttack1.yy",},"order":0,},
    {"id":{"name":"sSmallCloud2","path":"sprites/sSmallCloud2/sSmallCloud2.yy",},"order":3,},
    {"id":{"name":"stTerrain","path":"sprites/stTerrain/stTerrain.yy",},"order":2,},
    {"id":{"name":"sPlayerRun","path":"sprites/sPlayerRun/sPlayerRun.yy",},"order":4,},
    {"id":{"name":"sPlayerSwordAttack2","path":"sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy",},"order":8,},
    {"id":{"name":"sFrontTreeTop","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"order":2,},
    {"id":{"name":"oCamera","path":"objects/oCamera/oCamera.yy",},"order":0,},
    {"id":{"name":"sSwordEffectAttack1","path":"sprites/sSwordEffectAttack1/sSwordEffectAttack1.yy",},"order":2,},
    {"id":{"name":"sSwordEmbedded","path":"sprites/sSwordEmbedded/sSwordEmbedded.yy",},"order":2,},
    {"id":{"name":"tFrontTreeBody","path":"tilesets/tFrontTreeBody/tFrontTreeBody.yy",},"order":3,},
    {"id":{"name":"oSwordT","path":"objects/oSwordT/oSwordT.yy",},"order":1,},
    {"id":{"name":"sSwordMask","path":"sprites/sSwordMask/sSwordMask.yy",},"order":5,},
    {"id":{"name":"MACROS","path":"scripts/MACROS/MACROS.yy",},"order":0,},
    {"id":{"name":"oEffect","path":"objects/oEffect/oEffect.yy",},"order":2,},
    {"id":{"name":"sPlayerSwordRun","path":"sprites/sPlayerSwordRun/sPlayerSwordRun.yy",},"order":13,},
    {"id":{"name":"bgSky","path":"sprites/bgSky/bgSky.yy",},"order":1,},
    {"id":{"name":"fDemo","path":"fonts/fDemo/fDemo.yy",},"order":0,},
    {"id":{"name":"stFrontTreeBody","path":"sprites/stFrontTreeBody/stFrontTreeBody.yy",},"order":0,},
    {"id":{"name":"sPlayerSwordAttack3","path":"sprites/sPlayerSwordAttack3/sPlayerSwordAttack3.yy",},"order":9,},
    {"id":{"name":"sSwordSpinning","path":"sprites/sSwordSpinning/sSwordSpinning.yy",},"order":6,},
    {"id":{"name":"sWall","path":"sprites/sWall/sWall.yy",},"order":5,},
    {"id":{"name":"sWaterReflection","path":"sprites/sWaterReflection/sWaterReflection.yy",},"order":6,},
    {"id":{"name":"oGame","path":"objects/oGame/oGame.yy",},"order":3,},
    {"id":{"name":"sSwordIdle","path":"sprites/sSwordIdle/sSwordIdle.yy",},"order":4,},
    {"id":{"name":"sPlayerSwordAirAttack2","path":"sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy",},"order":6,},
    {"id":{"name":"oPlayerD","path":"objects/oPlayerD/oPlayerD.yy",},"order":0,},
  ],
  "Options": [
    {"name":"Amazon Fire","path":"options/amazonfire/options_amazonfire.yy",},
    {"name":"Android","path":"options/android/options_android.yy",},
    {"name":"iOS","path":"options/ios/options_ios.yy",},
    {"name":"Linux","path":"options/linux/options_linux.yy",},
    {"name":"macOS","path":"options/mac/options_mac.yy",},
    {"name":"Main","path":"options/main/options_main.yy",},
    {"name":"tvOS","path":"options/tvos/options_tvos.yy",},
    {"name":"Windows","path":"options/windows/options_windows.yy",},
    {"name":"HTML5","path":"options/html5/options_html5.yy",},
    {"name":"operagx","path":"options/operagx/options_operagx.yy",},
    {"name":"PlayStation 4","path":"options/ps4/options_ps4.yy",},
    {"name":"PlayStation 5","path":"options/ps5/options_ps5.yy",},
    {"name":"Switch","path":"options/switch/options_switch.yy",},
    {"name":"Xbox Series XS","path":"options/xboxseriesxs/options_xboxseriesxs.yy",},
  ],
  "defaultScriptType": 1,
  "isEcma": false,
  "configs": {
    "name": "Default",
    "children": [],
  },
  "RoomOrderNodes": [
    {"roomId":{"name":"rDemo","path":"rooms/rDemo/rDemo.yy",},},
  ],
  "Folders": [
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Demo Objects - Direct","folderPath":"folders/Demo Objects - Direct.yy","order":6,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Demo Objects - Triggered Transitions","folderPath":"folders/Demo Objects - Triggered Transitions.yy","order":7,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Fonts","folderPath":"folders/Fonts.yy","order":3,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Notes","folderPath":"folders/Notes.yy","order":9,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Objects","folderPath":"folders/Objects.yy","order":5,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Rooms","folderPath":"folders/Rooms.yy","order":8,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Scripts","folderPath":"folders/Scripts.yy","order":4,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"SnowState","folderPath":"folders/SnowState.yy","order":0,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Sprites","folderPath":"folders/Sprites.yy","order":1,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Background","folderPath":"folders/Sprites/Background.yy","order":1,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Player","folderPath":"folders/Sprites/Player.yy","order":2,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Sword","folderPath":"folders/Sprites/Sword.yy","order":3,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Effects","folderPath":"folders/Sprites/Sword/Effects.yy","order":1,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tree","folderPath":"folders/Sprites/Tree.yy","order":4,},
    {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tile Sets","folderPath":"folders/Tile Sets.yy","order":2,},
  ],
  "AudioGroups": [
    {"resourceType":"GMAudioGroup","resourceVersion":"1.3","name":"audiogroup_default","targets":-1,},
  ],
  "TextureGroups": [
    {"resourceType":"GMTextureGroup","resourceVersion":"1.3","name":"Default","isScaled":true,"compressFormat":"bz2","loadType":"default","directory":"","autocrop":true,"border":2,"mipsToGenerate":0,"groupParent":null,"targets":-1,},
  ],
  "IncludedFiles": [],
  "MetaData": {
    "IDEVersion": "2022.9.1.51",
  },
}

================================================
FILE: fonts/fDemo/fDemo.yy
================================================
{
  "hinting": 0,
  "glyphOperations": 0,
  "interpreter": 0,
  "pointRounding": 0,
  "fontName": "Consolas",
  "styleName": "Regular",
  "size": 16.0,
  "bold": false,
  "italic": false,
  "charset": 0,
  "AntiAlias": 1,
  "first": 0,
  "last": 0,
  "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)",
  "includeTTF": false,
  "TTFName": "",
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "ascenderOffset": 0,
  "glyphs": {
    "32": {"x":2,"y":2,"w":12,"h":25,"character":32,"shift":12,"offset":0,},
    "33": {"x":51,"y":83,"w":4,"h":25,"character":33,"shift":12,"offset":4,},
    "34": {"x":42,"y":83,"w":7,"h":25,"character":34,"shift":12,"offset":2,},
    "35": {"x":28,"y":83,"w":12,"h":25,"character":35,"shift":12,"offset":0,},
    "36": {"x":16,"y":83,"w":10,"h":25,"character":36,"shift":12,"offset":1,},
    "37": {"x":2,"y":83,"w":12,"h":25,"character":37,"shift":12,"offset":0,},
    "38": {"x":240,"y":56,"w":12,"h":25,"character":38,"shift":12,"offset":0,},
    "39": {"x":235,"y":56,"w":3,"h":25,"character":39,"shift":12,"offset":4,},
    "40": {"x":227,"y":56,"w":6,"h":25,"character":40,"shift":12,"offset":3,},
    "41": {"x":218,"y":56,"w":7,"h":25,"character":41,"shift":12,"offset":2,},
    "42": {"x":57,"y":83,"w":9,"h":25,"character":42,"shift":12,"offset":1,},
    "43": {"x":205,"y":56,"w":11,"h":25,"character":43,"shift":12,"offset":0,},
    "44": {"x":186,"y":56,"w":6,"h":25,"character":44,"shift":12,"offset":2,},
    "45": {"x":177,"y":56,"w":7,"h":25,"character":45,"shift":12,"offset":2,},
    "46": {"x":170,"y":56,"w":5,"h":25,"character":46,"shift":12,"offset":3,},
    "47": {"x":159,"y":56,"w":9,"h":25,"character":47,"shift":12,"offset":1,},
    "48": {"x":146,"y":56,"w":11,"h":25,"character":48,"shift":12,"offset":0,},
    "49": {"x":134,"y":56,"w":10,"h":25,"character":49,"shift":12,"offset":1,},
    "50": {"x":122,"y":56,"w":10,"h":25,"character":50,"shift":12,"offset":1,},
    "51": {"x":110,"y":56,"w":10,"h":25,"character":51,"shift":12,"offset":1,},
    "52": {"x":97,"y":56,"w":11,"h":25,"character":52,"shift":12,"offset":0,},
    "53": {"x":194,"y":56,"w":9,"h":25,"character":53,"shift":12,"offset":1,},
    "54": {"x":68,"y":83,"w":10,"h":25,"character":54,"shift":12,"offset":1,},
    "55": {"x":80,"y":83,"w":10,"h":25,"character":55,"shift":12,"offset":1,},
    "56": {"x":92,"y":83,"w":10,"h":25,"character":56,"shift":12,"offset":1,},
    "57": {"x":87,"y":110,"w":10,"h":25,"character":57,"shift":12,"offset":1,},
    "58": {"x":81,"y":110,"w":4,"h":25,"character":58,"shift":12,"offset":4,},
    "59": {"x":73,"y":110,"w":6,"h":25,"character":59,"shift":12,"offset":2,},
    "60": {"x":62,"y":110,"w":9,"h":25,"character":60,"shift":12,"offset":1,},
    "61": {"x":50,"y":110,"w":10,"h":25,"character":61,"shift":12,"offset":1,},
    "62": {"x":39,"y":110,"w":9,"h":25,"character":62,"shift":12,"offset":2,},
    "63": {"x":30,"y":110,"w":7,"h":25,"character":63,"shift":12,"offset":3,},
    "64": {"x":16,"y":110,"w":12,"h":25,"character":64,"shift":12,"offset":0,},
    "65": {"x":2,"y":110,"w":12,"h":25,"character":65,"shift":12,"offset":0,},
    "66": {"x":232,"y":83,"w":10,"h":25,"character":66,"shift":12,"offset":1,},
    "67": {"x":219,"y":83,"w":11,"h":25,"character":67,"shift":12,"offset":0,},
    "68": {"x":207,"y":83,"w":10,"h":25,"character":68,"shift":12,"offset":1,},
    "69": {"x":197,"y":83,"w":8,"h":25,"character":69,"shift":12,"offset":2,},
    "70": {"x":187,"y":83,"w":8,"h":25,"character":70,"shift":12,"offset":2,},
    "71": {"x":174,"y":83,"w":11,"h":25,"character":71,"shift":12,"offset":0,},
    "72": {"x":162,"y":83,"w":10,"h":25,"character":72,"shift":12,"offset":1,},
    "73": {"x":151,"y":83,"w":9,"h":25,"character":73,"shift":12,"offset":1,},
    "74": {"x":141,"y":83,"w":8,"h":25,"character":74,"shift":12,"offset":1,},
    "75": {"x":129,"y":83,"w":10,"h":25,"character":75,"shift":12,"offset":1,},
    "76": {"x":118,"y":83,"w":9,"h":25,"character":76,"shift":12,"offset":2,},
    "77": {"x":104,"y":83,"w":12,"h":25,"character":77,"shift":12,"offset":0,},
    "78": {"x":85,"y":56,"w":10,"h":25,"character":78,"shift":12,"offset":1,},
    "79": {"x":72,"y":56,"w":11,"h":25,"character":79,"shift":12,"offset":0,},
    "80": {"x":60,"y":56,"w":10,"h":25,"character":80,"shift":12,"offset":1,},
    "81": {"x":22,"y":29,"w":12,"h":25,"character":81,"shift":12,"offset":0,},
    "82": {"x":2,"y":29,"w":10,"h":25,"character":82,"shift":12,"offset":1,},
    "83": {"x":235,"y":2,"w":10,"h":25,"character":83,"shift":12,"offset":1,},
    "84": {"x":222,"y":2,"w":11,"h":25,"character":84,"shift":12,"offset":0,},
    "85": {"x":210,"y":2,"w":10,"h":25,"character":85,"shift":12,"offset":1,},
    "86": {"x":196,"y":2,"w":12,"h":25,"character":86,"shift":12,"offset":0,},
    "87": {"x":182,"y":2,"w":12,"h":25,"character":87,"shift":12,"offset":0,},
    "88": {"x":168,"y":2,"w":12,"h":25,"character":88,"shift":12,"offset":0,},
    "89": {"x":154,"y":2,"w":12,"h":25,"character":89,"shift":12,"offset":0,},
    "90": {"x":142,"y":2,"w":10,"h":25,"character":90,"shift":12,"offset":1,},
    "91": {"x":14,"y":29,"w":6,"h":25,"character":91,"shift":12,"offset":3,},
    "92": {"x":130,"y":2,"w":10,"h":25,"character":92,"shift":12,"offset":1,},
    "93": {"x":108,"y":2,"w":7,"h":25,"character":93,"shift":12,"offset":2,},
    "94": {"x":96,"y":2,"w":10,"h":25,"character":94,"shift":12,"offset":1,},
    "95": {"x":82,"y":2,"w":12,"h":25,"character":95,"shift":12,"offset":0,},
    "96": {"x":73,"y":2,"w":7,"h":25,"character":96,"shift":12,"offset":0,},
    "97": {"x":62,"y":2,"w":9,"h":25,"character":97,"shift":12,"offset":1,},
    "98": {"x":50,"y":2,"w":10,"h":25,"character":98,"shift":12,"offset":1,},
    "99": {"x":39,"y":2,"w":9,"h":25,"character":99,"shift":12,"offset":1,},
    "100": {"x":28,"y":2,"w":9,"h":25,"character":100,"shift":12,"offset":1,},
    "101": {"x":16,"y":2,"w":10,"h":25,"character":101,"shift":12,"offset":1,},
    "102": {"x":117,"y":2,"w":11,"h":25,"character":102,"shift":12,"offset":0,},
    "103": {"x":36,"y":29,"w":11,"h":25,"character":103,"shift":12,"offset":0,},
    "104": {"x":162,"y":29,"w":9,"h":25,"character":104,"shift":12,"offset":1,},
    "105": {"x":49,"y":29,"w":10,"h":25,"character":105,"shift":12,"offset":1,},
    "106": {"x":39,"y":56,"w":8,"h":25,"character":106,"shift":12,"offset":1,},
    "107": {"x":27,"y":56,"w":10,"h":25,"character":107,"shift":12,"offset":1,},
    "108": {"x":15,"y":56,"w":10,"h":25,"character":108,"shift":12,"offset":1,},
    "109": {"x":2,"y":56,"w":11,"h":25,"character":109,"shift":12,"offset":0,},
    "110": {"x":232,"y":29,"w":9,"h":25,"character":110,"shift":12,"offset":1,},
    "111": {"x":219,"y":29,"w":11,"h":25,"character":111,"shift":12,"offset":0,},
    "112": {"x":207,"y":29,"w":10,"h":25,"character":112,"shift":12,"offset":1,},
    "113": {"x":196,"y":29,"w":9,"h":25,"character":113,"shift":12,"offset":1,},
    "114": {"x":185,"y":29,"w":9,"h":25,"character":114,"shift":12,"offset":2,},
    "115": {"x":49,"y":56,"w":9,"h":25,"character":115,"shift":12,"offset":1,},
    "116": {"x":173,"y":29,"w":10,"h":25,"character":116,"shift":12,"offset":0,},
    "117": {"x":151,"y":29,"w":9,"h":25,"character":117,"shift":12,"offset":1,},
    "118": {"x":138,"y":29,"w":11,"h":25,"character":118,"shift":12,"offset":0,},
    "119": {"x":124,"y":29,"w":12,"h":25,"character":119,"shift":12,"offset":0,},
    "120": {"x":111,"y":29,"w":11,"h":25,"character":120,"shift":12,"offset":0,},
    "121": {"x":98,"y":29,"w":11,"h":25,"character":121,"shift":12,"offset":0,},
    "122": {"x":87,"y":29,"w":9,"h":25,"character":122,"shift":12,"offset":1,},
    "123": {"x":76,"y":29,"w":9,"h":25,"character":123,"shift":12,"offset":1,},
    "124": {"x":71,"y":29,"w":3,"h":25,"character":124,"shift":12,"offset":4,},
    "125": {"x":61,"y":29,"w":8,"h":25,"character":125,"shift":12,"offset":2,},
    "126": {"x":99,"y":110,"w":11,"h":25,"character":126,"shift":12,"offset":0,},
    "9647": {"x":112,"y":110,"w":13,"h":25,"character":9647,"shift":20,"offset":4,},
  },
  "kerningPairs": [],
  "ranges": [
    {"lower":32,"upper":127,},
    {"lower":9647,"upper":9647,},
  ],
  "regenerateBitmap": false,
  "canGenerateBitmap": true,
  "maintainGms1Font": false,
  "parent": {
    "name": "Fonts",
    "path": "folders/Fonts.yy",
  },
  "resourceVersion": "1.0",
  "name": "fDemo",
  "tags": [],
  "resourceType": "GMFont",
}

================================================
FILE: notes/Credits/Credits.txt
================================================
ART ASSETS
-----------

Treasure Hunters | Pixel Frog
https://pixelfrog-assets.itch.io/treasure-hunters

================================================
FILE: notes/Credits/Credits.yy
================================================
{
  "parent": {
    "name": "Notes",
    "path": "folders/Notes.yy",
  },
  "resourceVersion": "1.1",
  "name": "Credits",
  "tags": [],
  "resourceType": "GMNotes",
}

================================================
FILE: objects/oCamera/Alarm_0.gml
================================================
window_center();

================================================
FILE: objects/oCamera/Create_0.gml
================================================
// Stay in the correct layer
if (layer_exists("Controllers")) layer = layer_get_id("Controllers");

width = 480;
height = 270;

targetPos = [x,y];
targetInst = (DEMO == "D") ? oPlayerD : oPlayerT;
rate = 2;

// Resize window and app surface
scale = 2;
var _width = width*scale, _height = height*scale;
window_set_size(_width, _height);
surface_resize(application_surface, _width, _height);
display_set_gui_size(_width, _height);

// Resize camera
camera_set_view_size(CAM, width, height);

// Room settings
view_enabled = true;
view_visible[0] = true;

// Center Window
alarm[0] = 1;

// State Machine
fsm = new SnowState("instance");

fsm
	.add("instance", {
		step: function() {
			var _targ = targetInst;
			if (!instance_exists(_targ)) return;
			
			var _cw = CAM_W, _ch = CAM_H;
			var _rate = rate;
			
			x = clamp(_targ.x-_cw/2., 0, room_width -_cw);
			y = clamp(_targ.y-_ch/2., 0, room_height-_ch);
			
			camera_set_view_pos(CAM, lerp_smooth(CAM_X, x, _rate),
									 lerp_smooth(CAM_Y, y, _rate));
		}
	});


================================================
FILE: objects/oCamera/Step_0.gml
================================================
fsm.step();

================================================
FILE: objects/oCamera/oCamera.yy
================================================
{
  "resourceType": "GMObject",
  "resourceVersion": "1.0",
  "name": "oCamera",
  "spriteId": null,
  "solid": false,
  "visible": true,
  "managed": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":2,"collisionObjectId":null,},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Objects",
    "path": "folders/Objects.yy",
  },
}

================================================
FILE: objects/oCloud/Step_0.gml
================================================
if (bbox_right < 0) instance_destroy();

================================================
FILE: objects/oCloud/oCloud.yy
================================================
{
  "spriteId": null,
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Objects",
    "path": "folders/Objects.yy",
  },
  "resourceVersion": "1.0",
  "name": "oCloud",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: objects/oEffect/Other_7.gml
================================================
instance_destroy();

================================================
FILE: objects/oEffect/oEffect.yy
================================================
{
  "spriteId": null,
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"isDnD":false,"eventNum":7,"eventType":7,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Objects",
    "path": "folders/Objects.yy",
  },
  "resourceVersion": "1.0",
  "name": "oEffect",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: objects/oGame/Alarm_0.gml
================================================
var _x = room_width + random_range(0, 100);
var _y = random_range(80, 180);

with (instance_create_layer(_x, _y, "SmallClouds", oCloud)) {
	sprite_index = choose(sSmallCloud1, sSmallCloud2, sSmallCloud3);
	hspeed = -random_range(.2, .4);
}

alarm[0] = irandom_range(5, 15) * game_get_speed(gamespeed_fps);

================================================
FILE: objects/oGame/Create_0.gml
================================================
randomize();

showControls = false;
showHistory = false;

alarm[0] = 1;

================================================
FILE: objects/oGame/Draw_64.gml
================================================
draw_set_font(fDemo);
draw_set_halign(fa_right);
draw_set_valign(fa_bottom);

var _x, _y, _diff, _thickness;
_diff = 24;
_thickness = 1;

_x = display_get_gui_width()-10;
_y = display_get_gui_height()-10;

if (showControls) {
				 draw_text_outline(_x, _y, "F2 = Hide Controls",				c_white, c_black, _thickness);
	_y -= _diff; draw_text_outline(_x, _y, "H = Show/Hide history",				c_white, c_black, _thickness);
	_y -= _diff; draw_text_outline(_x, _y, "C/Q = Recall the sword",			c_white, c_black, _thickness);
	_y -= _diff; draw_text_outline(_x, _y, "X/E = Throw the sword",				c_white, c_black, _thickness);
	_y -= _diff; draw_text_outline(_x, _y, "Z/Space = Attack the sword",		c_white, c_black, _thickness);
	_y -= _diff; draw_text_outline(_x, _y, "Arrow Keys = Movement and Jump",	c_white, c_black, _thickness);
} else {
				 draw_text_outline(_x, _y, "F2 = Show Controls",				c_black, c_white, _thickness);
}

if (showHistory) {
	draw_set_halign(fa_left);
	draw_set_valign(fa_top);

	_x = 10;
	_y = 10;

	var _player, _states, _str, _i, _col;
	_player = (DEMO == "D") ? oPlayerD : oPlayerT;
	_states = _player.fsm.history_get();
	_str = "groundAttack3";
	
	draw_set_alpha(.9);
	draw_rectangle_color(0, 0, 20+string_width(_str), display_get_gui_height(),
						 c_black, c_black, c_black, c_black, 0);
	draw_set_alpha(1);
	
	draw_text_color(_x, _y, "HISTORY", c_white, c_white, c_white, c_white, 1);
	_y += 10;
	
	_col = c_white;
	_i = 0; repeat (array_length(_states)) {
		_str = _states[_i];
		_y += _diff;
		draw_text_color(_x, _y, _str, _col, _col, _col, _col, 1);
		_col = c_gray;
		++_i;
	}
}

================================================
FILE: objects/oGame/Step_0.gml
================================================
showControls ^= keyboard_check_released(vk_f2);
showHistory ^= keyboard_check_released(ord("H"));


================================================
FILE: objects/oGame/oGame.yy
================================================
{
  "spriteId": null,
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":64,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":2,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Objects",
    "path": "folders/Objects.yy",
  },
  "resourceVersion": "1.0",
  "name": "oGame",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: objects/oPlayerD/Create_0.gml
================================================
// Setup
mask_index = sPlayerMask;

// Declare methods
event_user(15);

// Sprite management
sprites = {};
init_sprites(
	"idle", "Idle",
	"run",	"Run",
	"jump",	"Jump",
	"fall",	"Fall",
	"groundAttack1", "Attack1",
	"groundAttack2", "Attack2",
	"groundAttack3", "Attack3",
	"airAttack1", "AirAttack1",
	"airAttack2", "AirAttack2",
	"throwSword", "ThrowSword"
);

effectSprites = {};
init_effect_sprites(
	"groundAttack1", "Attack1",
	"groundAttack2", "Attack2",
	"groundAttack3", "Attack3",
	"airAttack1", "AirAttack1",
	"airAttack2", "AirAttack2"
);

// Variables
spd = 3;
hspd = 0;
vspd = 0;
vspdMax = 15;

jspd = 12;
gravGround = .6;	// Normal gravity
gravAttack = .05;	// Low gravity when air attacking
grav = gravGround;

face = 1;
hasSword = 1;
coyoteDuration = 8;
nextAttack = false;
canAirAttack = true;

// Input
input = {};
check_input();

// State Machine
fsm = new SnowState("idle");

fsm
	.history_enable()
	.history_set_max_size(20)
	.event_set_default_function("draw", function() {
		// Draw this no matter what state we are in
		// (Unless it is overridden, ofcourse)
		draw_sprite_ext(sprite_index, image_index, x, y, face * image_xscale, image_yscale, image_angle, image_blend, image_alpha);
	})
	.add("idle", {
		enter: function() {
			sprite_index = get_sprite();
			image_speed = 1;
			
			hspd = 0;
			vspd = 0;
		},
		step: function() {
			// If left or right keys are pressed, run
			if (abs(input.hdir)) {
				fsm.change("run");
				return;
			}
			
			// If jump key is pressed, jump
			if (input.jump) {
				fsm.change("jump");
				return;
			}
			
			if (hasSword) {
				// If attack key is pressed, go into groundAttack1
				if (input.attack) {
					fsm.change("groundAttack1");
					return;
				}
			
				// Throw the sword
				if (input.throwSword && hasSword) {
					fsm.change("throwSword");
					return;
				}
			} else {
				// Recall the sword
				recall_sword();
			}
			
			// Movement
			apply_gravity();
			collide_and_move();
			
			// Check if I'm flating
			if (!on_ground()) {
				fsm.change("fall");
				return;
			}
		}
	})
	.add("run", {
		enter: function() {
			sprite_index = get_sprite();
			image_speed = 1;
		},
		step: function() {
			var _dir = input.hdir;
			hspd = spd * _dir;
			
			// If left and right keys are not pressed, switch back to idle
			if (_dir == 0) {
				fsm.change("idle");
				return;
			}
			
			face = _dir;
			
			// If jump key is pressed, jump
			if (input.jump) {
				fsm.change("jump");
				return;
			}
			
			if (hasSword) {
				// If attack key is pressed, go into groundAttack1
				if (input.attack) {
					fsm.change("groundAttack1");
					return;
				}
			
				// Throw the sword
				if (input.throwSword && hasSword) {
					fsm.change("throwSword");
					return;
				}
			} else {
				// Recall the sword
				recall_sword();
			}
			
			// Movement
			apply_gravity();
			collide_and_move();
			
			// Check if I'm flating
			if (!on_ground()) {
				fsm.change("fall");
				return;
			}
		}
	})
	.add("jump", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			vspd = -jspd;	// Jump
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
			
			// Throw the sword
			if (input.throwSword && hasSword) {
				fsm.change("throwSword");
				return;
			}
			
			// Recall the sword
			recall_sword();
			
			// Movement
			apply_gravity();
			collide_and_move();
			
			// Check when we should start falling
			if (vspd >= 0) {
				fsm.change("fall");
				return;
			}
		}
	})
	.add("fall", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			// If I have not done air attack when falling now, activate air attack
			// Air attack can be done once when falling
			if (fsm.state_is("airAttack", fsm.get_previous_state())) canAirAttack = false;
				else canAirAttack = true;
			
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
			
			var _dir = input.hdir;
			hspd = spd * _dir;
			if (_dir != 0) face = _dir;
			
			if (hasSword) {
				// If attack key is pressed, go into airAttack1
				if (input.attack && canAirAttack) {
					fsm.change("airAttack1");
					return;
				}
			
				// Throw the sword
				if (input.throwSword) {
					fsm.change("throwSword");
					return;
				}
			} else {
				// Recall the sword
				recall_sword();
			}
			
			// Coyote time
			if ((fsm.get_time(false) <= coyoteDuration) && input.jump) {
				// Apply only if we were running
				if (fsm.get_previous_state() == "run") {
					fsm.change("jump");
					return;
				}
			}
			
			// Movement
			apply_gravity();
			collide_and_move();
			
			// Check when we land
			if (on_ground()) {
				fsm.change("idle");
				return;
			}
		}
	})
	.add("attack", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			nextAttack = false;
			
			// Create effect
			var _sprite = effectSprites[$ fsm.get_current_state()];
			var _face = face;
			var _x = x + _face * 8;
			with (instance_create_depth(_x, y, depth, oEffect)) {
				sprite_index = _sprite;
				image_xscale = _face;
			}
		},
		step: function() {
			// If attack key is pressed any time during the current state,
			// go to the next attack state after the animation ends
			if (input.attack) {
				nextAttack = true;	
			}
		}
	})
	.add_child("attack", "groundAttack", {
		/// @override
		enter: function() {
			fsm.inherit();
			
			// Stop
			hspd = 0;
			vspd = 0;
		},
			
		/// @override
		step: function() {
			fsm.inherit();
			
			// When the animation ends, go to the next attack state if attack has been pressed
			// Otherwise, just go idle
			if (animation_end()) {
				if (nextAttack) {
					var _state = fsm.get_current_state();
					var _curr = real(string_digits(_state));
					var _next = string_letters(_state) + string(_curr+1);
					fsm.change(_next);
				} else {
					fsm.change("idle");
				}
				return;
			}
		}
	})
	.add_child("groundAttack", "groundAttack1")
	.add_child("groundAttack", "groundAttack2")
	.add_child("groundAttack", "groundAttack3", {
		/// @override
		step: function() {
			// When the animation ends, go to idle state
			if (animation_end()) {
				fsm.change("idle");
				return;
			}
		}
	})
	.add_child("attack", "airAttack", {
		/// @override
		enter: function() {
			fsm.inherit();
			
			// Lower the gravity
			grav = gravAttack;
			vspd = 0;
		},			
		/// @override
		step: function() {
			fsm.inherit();
			
			// Go down, slowly
			apply_gravity();
			collide_and_move();
			
			// Check when we land
			if (on_ground()) {
				fsm.change("idle");
				return;
			}
			
			// When the animation ends, go to the next attack state if attack has been pressed
			// Otherwise, just back to falling again
			if (animation_end()) {
				if (nextAttack) {
					var _state = fsm.get_current_state();
					var _curr = real(string_digits(_state));
					var _next = string_letters(_state) + string(_curr+1);
					fsm.change(_next);
				} else {
					fsm.change("fall");
				}
				return;
			}
		},
		leave: function() {
			grav = gravGround;	
		}
	})
	.add_child("airAttack", "airAttack1")
	.add_child("airAttack", "airAttack2", {
		/// @override
		step: function() {
			// Go down, slowly
			apply_gravity();
			collide_and_move();
			
			// When the animation ends, go to fall state again
			if (animation_end()) {
				fsm.change("fall");
				return;
			}
		}
	})
	.add("throwSword", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			hspd = 0;
			vspd = 0;
			
			// Lower the gravity
			grav = gravAttack;
		},
		step: function() {
			if (animation_end()) {
				// Switch the state to idle or fall,
				// depending on what the previous state was
				var _state = "idle";
				if (fsm.get_previous_state() == "jump") _state = "fall";
				if (fsm.get_previous_state() == "fall") _state = "fall";
				fsm.change(_state);
				return;
			}
			
			// Movement
			apply_gravity();
			collide_and_move();
		},
		throwSword: function() {
			if (event_data[? "event_type"] == "sprite event") {
				spawn_sword();
				
				// Unequip the sword
				hasSword = false;
			}
		},
		leave: function() {
			grav = gravGround;	
		}
	});

================================================
FILE: objects/oPlayerD/Draw_0.gml
================================================
fsm.draw();

================================================
FILE: objects/oPlayerD/KeyRelease_82.gml
================================================
game_restart();


================================================
FILE: objects/oPlayerD/Other_25.gml
================================================
/// @desc Methods

init_sprites = function() {
	var _i = 0; repeat (argument_count div 2) {
		var _noSword = asset_get_index("sPlayer" + argument[_i+1]);
		if (_noSword == -1) _noSword = sPlayerIdle;
		
		var _sword = asset_get_index("sPlayerSword" + argument[_i+1]);
		if (_sword == -1) _sword = sPlayerSwordIdle;
		
		sprites[$ argument[_i]] = [_noSword, _sword];
		_i += 2;
	}
};

init_effect_sprites = function() {
	var _i = 0; repeat (argument_count div 2) {
		var _effect = asset_get_index("sSwordEffect" + argument[_i+1]);
		effectSprites[$ argument[_i]] = _effect;
		_i += 2;
	}
};

get_sprite = function() {
	return sprites[$ fsm.get_current_state()][@ hasSword];
};

check_input = function() {
	with (input) {
		hdir	= max(keyboard_check(ord("D")), keyboard_check(vk_right)) -
				  max(keyboard_check(ord("A")), keyboard_check(vk_left));
		jump	= max(keyboard_check_pressed(ord("W")), keyboard_check_pressed(vk_up));
		attack	= max(keyboard_check_pressed(ord("Z")), keyboard_check_pressed(vk_space));
		throwSword = max(keyboard_check_pressed(ord("E")), keyboard_check_pressed(ord("X")));
		recallSword = max(keyboard_check_pressed(ord("Q")), keyboard_check_pressed(ord("C")));
	}
};

on_ground = function() {
	return (place_meeting(x, y+1, oWall));	
};

apply_gravity = function() {
	vspd = min(vspd+grav, vspdMax);
};

collide_and_move = function() {
	if (place_meeting(x+hspd, y, oWall)) {
		while (!place_meeting(x+sign(hspd), y, oWall)) x += sign(hspd);
		hspd = 0;
	}
	x += hspd;
	if (place_meeting(x, y+vspd, oWall)) {
		while (!place_meeting(x, y+sign(vspd), oWall)) y += sign(vspd);
		vspd = 0;
	}
	y += vspd;
};

spawn_sword = function() {
	with (instance_create_depth(x+6*face, y-14, depth, oSwordD)) {
		owner = other.id;
		face  = owner.face;
		fsm.change("spinning");
	}
};

equip_sword = function() {
	hasSword = true;
	sprite_index = get_sprite();
};

recall_sword = function() {
	if (!hasSword && input.recallSword) {
		var _sword = instance_find(oSwordD, 0);
		_sword.recall();
	}	
};

================================================
FILE: objects/oPlayerD/Other_76.gml
================================================
fsm.throwSword();

================================================
FILE: objects/oPlayerD/Step_0.gml
================================================
check_input();
fsm.step();

================================================
FILE: objects/oPlayerD/oPlayerD.yy
================================================
{
  "resourceType": "GMObject",
  "resourceVersion": "1.0",
  "name": "oPlayerD",
  "spriteId": {
    "name": "sPlayerIdle",
    "path": "sprites/sPlayerIdle/sPlayerIdle.yy",
  },
  "solid": false,
  "visible": true,
  "managed": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":25,"eventType":7,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":82,"eventType":10,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":76,"eventType":7,"collisionObjectId":null,},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Demo Objects - Direct",
    "path": "folders/Demo Objects - Direct.yy",
  },
}

================================================
FILE: objects/oPlayerT/Create_0.gml
================================================
// Setup
mask_index = sPlayerMask;

// Declare methods
event_user(15);

// Sprite management
sprites = {};
init_sprites(
	"idle", "Idle",
	"run",	"Run",
	"jump",	"Jump",
	"fall",	"Fall",
	"groundAttack1", "Attack1",
	"groundAttack2", "Attack2",
	"groundAttack3", "Attack3",
	"airAttack1", "AirAttack1",
	"airAttack2", "AirAttack2",
	"throwSword", "ThrowSword"
);

effectSprites = {};
init_effect_sprites(
	"groundAttack1", "Attack1",
	"groundAttack2", "Attack2",
	"groundAttack3", "Attack3",
	"airAttack1", "AirAttack1",
	"airAttack2", "AirAttack2"
);

// Variables
spd = 3;
hspd = 0;
vspd = 0;
vspdMax = 15;

jspd = 12;
gravGround = .6;	// Normal gravity
gravAttack = .05;	// Low gravity when air attacking
grav = gravGround;

face = 1;
hasSword = 1;
coyoteDuration = 8;
nextAttack = false;
canAirAttack = true;

// Input
input = {};
check_input();

// State Machine
fsm = new SnowState("idle");

fsm
	.history_enable()
	.history_set_max_size(20)
	.event_set_default_function("draw", function() {
		// Draw this no matter what state we are in
		// (Unless it is overridden, ofcourse)
		draw_sprite_ext(sprite_index, image_index, x, y, face * image_xscale, image_yscale, image_angle, image_blend, image_alpha);
	})
	.add("idle", {
		enter: function() {
			sprite_index = get_sprite();
			image_speed = 1;
			
			hspd = 0;
			vspd = 0;
		},
		step: function() {
			recall_sword();
			apply_gravity();
			collide_and_move();
		}
	})
	.add("run", {
		enter: function() {
			sprite_index = get_sprite();
			image_speed = 1;
		},
		step: function() {
			set_movement();
			recall_sword();
			apply_gravity();
			collide_and_move();
		}
	})
	.add("jump", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			vspd = -jspd;	// Jump
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
			
			recall_sword();
			apply_gravity();
			collide_and_move();
		}
	})
	.add("fall", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			// If I have not done air attack when falling now, activate air attack
			// Air attack can be done once when falling
			if (fsm.state_is("airAttack", fsm.get_previous_state())) canAirAttack = false;
				else canAirAttack = true;
			
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
			
			set_movement();
			recall_sword();
			apply_gravity();
			collide_and_move();
		}
	})
	.add("attack", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			nextAttack = false;
			
			// Create effect
			var _sprite = effectSprites[$ fsm.get_current_state()];
			var _face = face;
			var _x = x + _face * 8;
			with (instance_create_depth(_x, y, depth, oEffect)) {
				sprite_index = _sprite;
				image_xscale = _face;
			}
		},
		step: function() {
			// If attack key is pressed any time during the current state,
			// go to the next attack state after the animation ends
			if (input.attack) {
				nextAttack = true;	
			}
		}
	})
	.add_child("attack", "groundAttack", {
		/// @override
		enter: function() {
			fsm.inherit();
			
			// Stop
			hspd = 0;
			vspd = 0;
		},
	})
	.add_child("groundAttack", "groundAttack1")
	.add_child("groundAttack", "groundAttack2")
	.add_child("groundAttack", "groundAttack3")
	.add_child("attack", "airAttack", {
		/// @override
		enter: function() {
			fsm.inherit();
			
			// Lower the gravity
			grav = gravAttack;
			vspd = 0;
		},			
		/// @override
		step: function() {
			fsm.inherit();
			
			// Go down, slowly
			apply_gravity();
			collide_and_move();
		},
		leave: function() {
			grav = gravGround;	
		}
	})
	.add_child("airAttack", "airAttack1")
	.add_child("airAttack", "airAttack2", {
		/// @override
		step: function() {
			// Go down, slowly
			apply_gravity();
			collide_and_move();
		}
	})
	.add("throwSword", {
		enter: function() {
			sprite_index = get_sprite();
			image_index = 0;
			image_speed = 1;
			
			hspd = 0;
			vspd = 0;
			
			// Lower the gravity
			grav = gravAttack;
		},
		step: function() {
			// Movement
			apply_gravity();
			collide_and_move();
		},
		throwSword: function() {
			if (event_data[? "event_type"] == "sprite event") {
				spawn_sword();
				
				// Unequip the sword
				hasSword = false;
			}
		},
		leave: function() {
			grav = gravGround;	
		}
	})
	.add_transition("t_run", "idle", "run")
	.add_transition("t_jump", ["idle", "run"], "jump")
	.add_transition("t_attack", ["idle", "run"], "groundAttack1", function() { return hasSword; })
	.add_transition("t_attack", "fall", "airAttack1", function() { return (hasSword && canAirAttack); })
	.add_transition("t_throw", ["idle", "run", "jump", "fall"], "throwSword", function() { return hasSword; })
	.add_transition("t_coyote", "fall", "jump", function() {
		return (input.jump && (fsm.get_previous_state() == "run") && (fsm.get_time(false) <= coyoteDuration));
	})
	.add_transition("t_transition", ["idle", "run"], "fall", function() { return !on_ground(); })
	.add_transition("t_transition", "jump", "fall", function() { return (vspd >= 0); })
	.add_transition("t_transition", "run", "idle", function() { return (input.hdir == 0); })
	.add_transition("t_transition", ["fall", "airAttack"], "idle", function() { return on_ground(); })
	.add_transition("t_transition", "groundAttack1", "groundAttack2", function() { return (nextAttack && animation_end()); })
	.add_transition("t_transition", "groundAttack1", "idle", function() { return animation_end(); })
	.add_transition("t_transition", "groundAttack2", "groundAttack3", function() { return (nextAttack && animation_end()); })
	.add_transition("t_transition", ["groundAttack2", "groundAttack3"], "idle", function() { return animation_end(); })
	.add_transition("t_transition", "airAttack1", "airAttack2", function() { return (nextAttack && animation_end()); })
	.add_transition("t_transition", ["airAttack1", "airAttack2"], "fall", function() { return animation_end(); })
	.add_transition("t_transition", "throwSword", "fall", function() { return ((fsm.get_previous_state() == "jump") && animation_end()); })
	.add_transition("t_transition", "throwSword", "fall", function() { return ((fsm.get_previous_state() == "fall") && animation_end()); })
	.add_transition("t_transition", "throwSword", "idle", function() { return animation_end(); });


================================================
FILE: objects/oPlayerT/Draw_0.gml
================================================
fsm.draw();

================================================
FILE: objects/oPlayerT/KeyRelease_82.gml
================================================
game_restart();


================================================
FILE: objects/oPlayerT/Other_25.gml
================================================
/// @desc Methods

init_sprites = function() {
	var _i = 0; repeat (argument_count div 2) {
		var _noSword = asset_get_index("sPlayer" + argument[_i+1]);
		if (_noSword == -1) _noSword = sPlayerIdle;
		
		var _sword = asset_get_index("sPlayerSword" + argument[_i+1]);
		if (_sword == -1) _sword = sPlayerSwordIdle;
		
		sprites[$ argument[_i]] = [_noSword, _sword];
		_i += 2;
	}
};

init_effect_sprites = function() {
	var _i = 0; repeat (argument_count div 2) {
		var _effect = asset_get_index("sSwordEffect" + argument[_i+1]);
		effectSprites[$ argument[_i]] = _effect;
		_i += 2;
	}
};

get_sprite = function() {
	return sprites[$ fsm.get_current_state()][@ hasSword];
};

check_input = function() {
	with (input) {
		hdir	= max(keyboard_check(ord("D")), keyboard_check(vk_right)) -
				  max(keyboard_check(ord("A")), keyboard_check(vk_left));
		jump	= max(keyboard_check_pressed(ord("W")), keyboard_check_pressed(vk_up));
		attack	= max(keyboard_check_pressed(ord("Z")), keyboard_check_pressed(vk_space));
		throwSword = max(keyboard_check_pressed(ord("E")), keyboard_check_pressed(ord("X")));
		recallSword = max(keyboard_check_pressed(ord("Q")), keyboard_check_pressed(ord("C")));
	}
};

on_ground = function() {
	return (place_meeting(x, y+1, oWall));	
};

apply_gravity = function() {
	vspd = min(vspd+grav, vspdMax);
};

set_movement = function() {
	var _dir = input.hdir;
	hspd = spd * _dir;
	if (_dir != 0) face = _dir;
};

collide_and_move = function() {
	if (place_meeting(x+hspd, y, oWall)) {
		while (!place_meeting(x+sign(hspd), y, oWall)) x += sign(hspd);
		hspd = 0;
	}
	x += hspd;
	if (place_meeting(x, y+vspd, oWall)) {
		while (!place_meeting(x, y+sign(vspd), oWall)) y += sign(vspd);
		vspd = 0;
	}
	y += vspd;
};

spawn_sword = function() {
	with (instance_create_depth(x+6*face, y-14, depth, oSwordT)) {
		owner = other.id;
		face  = owner.face;
		fsm.trigger("t_spin");
	}
};

equip_sword = function() {
	hasSword = true;
	sprite_index = get_sprite();
};

recall_sword = function() {
	if (!hasSword && input.recallSword) {
		var _sword = instance_find(oSwordT, 0);
		_sword.recall();
	}	
};

================================================
FILE: objects/oPlayerT/Other_76.gml
================================================
fsm.throwSword();

================================================
FILE: objects/oPlayerT/Step_0.gml
================================================
check_input();

fsm.trigger("t_coyote");
fsm.step();
if (abs(input.hdir)) fsm.trigger("t_run");
if (input.jump) fsm.trigger("t_jump");
if (input.throwSword) fsm.trigger("t_throw");
if (input.attack) fsm.trigger("t_attack");
fsm.trigger("t_transition");

================================================
FILE: objects/oPlayerT/oPlayerT.yy
================================================
{
  "resourceType": "GMObject",
  "resourceVersion": "1.0",
  "name": "oPlayerT",
  "spriteId": {
    "name": "sPlayerIdle",
    "path": "sprites/sPlayerIdle/sPlayerIdle.yy",
  },
  "solid": false,
  "visible": true,
  "managed": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":25,"eventType":7,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":82,"eventType":10,"collisionObjectId":null,},
    {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":76,"eventType":7,"collisionObjectId":null,},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Demo Objects - Triggered Transitions",
    "path": "folders/Demo Objects - Triggered Transitions.yy",
  },
}

================================================
FILE: objects/oSwordD/Create_0.gml
================================================
// Setup
mask_index = sSwordMask;

// Declare methods
event_user(15);

// Variables
owner = noone;
spd = 6;
hspd = 0;
face = 1;

// State Machine
fsm = new SnowState("NULL");

fsm
	.event_set_default_function("draw", function() {
		// Draw this no matter what state we are in
		// (Unless it is overridden, ofcourse)
		draw_sprite_ext(sprite_index, image_index, x, y, face * image_xscale, image_yscale, image_angle, image_blend, image_alpha);
	})
	.add("NULL", {})
	.add("idle", {})
	.add("spinning", {
		enter: function() {
			sprite_index = sSwordSpinning;
			mask_index = sSwordMask;
			image_speed = 1;
			image_index = 0;
			
			hspd = face * spd;
		},
		step: function() {
			if (place_meeting(x+hspd, y, oWall)) {
				fsm.change("embedded");
				return;
			}
			x += hspd;
		}
	})
	.add("embedded", {
		enter: function() {
			sprite_index = sSwordEmbedded;
			mask_index = sSwordEmbeddedMask;
			image_speed = 1;
			image_index = 0;
			
			// Embed into the wall
			while (!place_meeting(x+hspd, y, oWall)) x += hspd;
			while (!place_meeting(x+sign(hspd), y, oWall)) x += sign(hspd);
			
			hspd = 0;
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
		}
	})
	.add("recall", {
		enter: function() {
			sprite_index = sSwordSpinning;
			mask_index = sSwordMask;
			image_speed = 1;
			image_index = 0;
			
			speed = spd;
		},
		step: function() {
			if (!instance_exists(owner)) {
				instance_destroy();
				return;
			}
			
			direction = point_direction(x, y, owner.x, owner.y-owner.sprite_height/2);
			face = (x > xprevious) * 2 - 1;
			if (place_meeting(x, y, owner)) {
				owner.equip_sword();
				instance_destroy();
				return;
			}
		}
	});

================================================
FILE: objects/oSwordD/Draw_0.gml
================================================
fsm.draw();

================================================
FILE: objects/oSwordD/Other_25.gml
================================================
/// @desc Methods

recall = function() {
	if (instance_exists(owner) && fsm.state_is("embedded")) {
		fsm.change("recall");
	}
};

================================================
FILE: objects/oSwordD/Step_0.gml
================================================
fsm.step();

================================================
FILE: objects/oSwordD/oSwordD.yy
================================================
{
  "spriteId": {
    "name": "sSwordIdle",
    "path": "sprites/sSwordIdle/sSwordIdle.yy",
  },
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":25,"eventType":7,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Demo Objects - Direct",
    "path": "folders/Demo Objects - Direct.yy",
  },
  "resourceVersion": "1.0",
  "name": "oSwordD",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: objects/oSwordT/Create_0.gml
================================================
// Setup
mask_index = sSwordMask;

// Declare methods
event_user(15);

// Variables
owner = noone;
spd = 6;
hspd = 0;
face = 1;

// State Machine
fsm = new SnowState("NULL");

fsm
	.event_set_default_function("draw", function() {
		// Draw this no matter what state we are in
		// (Unless it is overridden, ofcourse)
		draw_sprite_ext(sprite_index, image_index, x, y, face * image_xscale, image_yscale, image_angle, image_blend, image_alpha);
	})
	.add("NULL")
	.add("spinning", {
		enter: function() {
			sprite_index = sSwordSpinning;
			mask_index = sSwordMask;
			image_speed = 1;
			image_index = 0;
			
			hspd = face * spd;
		},
		step: function() {
			x += hspd;
		}
	})
	.add("embedded", {
		enter: function() {
			sprite_index = sSwordEmbedded;
			mask_index = sSwordEmbeddedMask;
			image_speed = 1;
			image_index = 0;
			
			// Embed into the wall
			while (!place_meeting(x+hspd, y, oWall)) x += hspd;
			while (!place_meeting(x+sign(hspd), y, oWall)) x += sign(hspd);
			
			hspd = 0;
		},
		step: function() {
			// Play the animation once
			if (animation_end()) {
				image_speed = 0;
				image_index = image_number - 1;
			}
		}
	})
	.add("recall", {
		enter: function() {
			sprite_index = sSwordSpinning;
			mask_index = sSwordMask;
			image_speed = 1;
			image_index = 0;
			
			speed = spd;
		},
		step: function() {
			if (instance_exists(owner)) {
				direction = point_direction(x, y, owner.x, owner.y-owner.sprite_height/2);
				face = (x > xprevious) * 2 - 1;
				if (place_meeting(x, y, owner)) {
					owner.equip_sword();
					instance_destroy();
					return;
				}
			}
		}
	})
	.add_wildcard_transition("t_spin", "spinning")
	.add_wildcard_transition("t_recall", "recall", function() {
		return(instance_exists(owner) && fsm.state_is("embedded"));
	})
	.add_transition("t_pre_step", "spinning", "embedded", function() {
		return place_meeting(x+hspd, y, oWall);
	});

================================================
FILE: objects/oSwordT/Draw_0.gml
================================================
fsm.draw();

================================================
FILE: objects/oSwordT/Other_25.gml
================================================
/// @desc Methods

recall = function() {
	fsm.trigger("t_recall");
};

================================================
FILE: objects/oSwordT/Step_0.gml
================================================
fsm.trigger("t_pre_step");

fsm.step();

================================================
FILE: objects/oSwordT/oSwordT.yy
================================================
{
  "spriteId": {
    "name": "sSwordIdle",
    "path": "sprites/sSwordIdle/sSwordIdle.yy",
  },
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [
    {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
    {"isDnD":false,"eventNum":25,"eventType":7,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",},
  ],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Demo Objects - Triggered Transitions",
    "path": "folders/Demo Objects - Triggered Transitions.yy",
  },
  "resourceVersion": "1.0",
  "name": "oSwordT",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: objects/oWall/oWall.yy
================================================
{
  "spriteId": {
    "name": "sWall",
    "path": "sprites/sWall/sWall.yy",
  },
  "solid": false,
  "visible": true,
  "spriteMaskId": null,
  "persistent": false,
  "parentObjectId": null,
  "physicsObject": false,
  "physicsSensor": false,
  "physicsShape": 1,
  "physicsGroup": 1,
  "physicsDensity": 0.5,
  "physicsRestitution": 0.1,
  "physicsLinearDamping": 0.1,
  "physicsAngularDamping": 0.1,
  "physicsFriction": 0.2,
  "physicsStartAwake": true,
  "physicsKinematic": false,
  "physicsShapePoints": [],
  "eventList": [],
  "properties": [],
  "overriddenProperties": [],
  "parent": {
    "name": "Objects",
    "path": "folders/Objects.yy",
  },
  "resourceVersion": "1.0",
  "name": "oWall",
  "tags": [],
  "resourceType": "GMObject",
}

================================================
FILE: options/amazonfire/options_amazonfire.yy
================================================
{
  "option_amazonfire_sync_android": false,
  "option_amazonfire_display_name": "Created with GameMaker Studio 2",
  "option_amazonfire_version": "1.0.0.0",
  "option_amazonfire_tools_from_version": false,
  "option_amazonfire_build_tools": "",
  "option_amazonfire_support_lib": "",
  "option_amazonfire_target_sdk": "",
  "option_amazonfire_minimum_sdk": "",
  "option_amazonfire_compile_sdk": "",
  "option_amazonfire_package_domain": "com",
  "option_amazonfire_package_company": "company",
  "option_amazonfire_package_product": "game",
  "option_amazonfire_orient_portrait": true,
  "option_amazonfire_orient_portrait_flipped": true,
  "option_amazonfire_orient_landscape": true,
  "option_amazonfire_orient_landscape_flipped": true,
  "option_amazonfire_gamepad_support": true,
  "option_amazonfire_lint": false,
  "option_amazonfire_install_location": 0,
  "option_amazonfire_sleep_margin": 4,
  "option_amazonfire_splash_screens_landscape": "${base_options_dir}/amazonfire/splash/landscape.png",
  "option_amazonfire_splash_screens_portrait": "${base_options_dir}/amazonfire/splash/portrait.png",
  "option_amazonfire_splash_time": 0,
  "option_amazonfire_launchscreen_fill": 0,
  "option_amazonfire_splashscreen_background_colour": 255,
  "option_amazonfire_tv_banner": "${base_options_dir}/amazonfire/tv_banner.png",
  "option_amazonfire_interpolate_pixels": false,
  "option_amazonfire_screen_depth": 0,
  "option_amazonfire_scale": 0,
  "option_amazonfire_texture_page": "2048x2048",
  "option_amazonfire_icon_ldpi": "${base_options_dir}/android/icons/ldpi.png",
  "option_amazonfire_icon_mdpi": "${base_options_dir}/android/icons/mdpi.png",
  "option_amazonfire_icon_hdpi": "${base_options_dir}/android/icons/hdpi.png",
  "option_amazonfire_icon_xhdpi": "${base_options_dir}/android/icons/xhdpi.png",
  "option_amazonfire_icon_xxhdpi": "${base_options_dir}/android/icons/xxhdpi.png",
  "option_amazonfire_icon_xxxhdpi": "${base_options_dir}/android/icons/xxxhdpi.png",
  "option_amazonfire_permission_write_external_storage": false,
  "option_amazonfire_permission_read_phone_state": false,
  "option_amazonfire_permission_network_state": false,
  "option_amazonfire_permission_internet": true,
  "option_amazonfire_permission_bluetooth": true,
  "option_amazonfire_permission_record_audio": false,
  "option_amazonfire_application_tag_inject": "",
  "resourceVersion": "1.0",
  "name": "Amazon Fire",
  "tags": [],
  "resourceType": "GMAmazonFireOptions",
}

================================================
FILE: options/android/options_android.yy
================================================
{
  "option_android_sync_amazon": false,
  "option_android_display_name": "Created with GameMaker Studio 2",
  "option_android_version": "1.0.0.0",
  "option_android_tools_from_version": false,
  "option_android_build_tools": "",
  "option_android_support_lib": "",
  "option_android_target_sdk": "",
  "option_android_minimum_sdk": "",
  "option_android_compile_sdk": "",
  "option_android_package_domain": "com",
  "option_android_package_company": "company",
  "option_android_package_product": "game",
  "option_android_arch_armv7": true,
  "option_android_arch_x86": false,
  "option_android_arch_arm64": false,
  "option_android_arch_x86_64": false,
  "option_android_orient_portrait": true,
  "option_android_orient_portrait_flipped": true,
  "option_android_orient_landscape": true,
  "option_android_orient_landscape_flipped": true,
  "option_android_gamepad_support": true,
  "option_android_lint": false,
  "option_android_install_location": 0,
  "option_android_sleep_margin": 4,
  "option_android_splash_screens_landscape": "${base_options_dir}/android/splash/landscape.png",
  "option_android_splash_screens_portrait": "${base_options_dir}/android/splash/portrait.png",
  "option_android_splash_time": 0,
  "option_android_launchscreen_fill": 0,
  "option_android_splashscreen_background_colour": 255,
  "option_android_tv_banner": "${base_options_dir}/android/tv_banner.png",
  "option_android_interpolate_pixels": false,
  "option_android_screen_depth": 0,
  "option_android_device_support": 0,
  "option_android_scale": 0,
  "option_android_texture_page": "2048x2048",
  "option_android_icon_ldpi": "${base_options_dir}/android/icons/ldpi.png",
  "option_android_icon_mdpi": "${base_options_dir}/android/icons/mdpi.png",
  "option_android_icon_hdpi": "${base_options_dir}/android/icons/hdpi.png",
  "option_android_icon_xhdpi": "${base_options_dir}/android/icons/xhdpi.png",
  "option_android_icon_xxhdpi": "${base_options_dir}/android/icons/xxhdpi.png",
  "option_android_icon_xxxhdpi": "${base_options_dir}/android/icons/xxxhdpi.png",
  "option_android_icon_adaptive_generate": false,
  "option_android_icon_adaptive_ldpi": "${base_options_dir}/android/icons_adaptive/ldpi.png",
  "option_android_icon_adaptive_mdpi": "${base_options_dir}/android/icons_adaptive/mdpi.png",
  "option_android_icon_adaptive_hdpi": "${base_options_dir}/android/icons_adaptive/hdpi.png",
  "option_android_icon_adaptive_xhdpi": "${base_options_dir}/android/icons_adaptive/xhdpi.png",
  "option_android_icon_adaptive_xxhdpi": "${base_options_dir}/android/icons_adaptive/xxhdpi.png",
  "option_android_icon_adaptive_xxxhdpi": "${base_options_dir}/android/icons_adaptive/xxxhdpi.png",
  "option_android_icon_adaptivebg_ldpi": "${base_options_dir}/android/icons_adaptivebg/ldpi.png",
  "option_android_icon_adaptivebg_mdpi": "${base_options_dir}/android/icons_adaptivebg/mdpi.png",
  "option_android_icon_adaptivebg_hdpi": "${base_options_dir}/android/icons_adaptivebg/hdpi.png",
  "option_android_icon_adaptivebg_xhdpi": "${base_options_dir}/android/icons_adaptivebg/xhdpi.png",
  "option_android_icon_adaptivebg_xxhdpi": "${base_options_dir}/android/icons_adaptivebg/xxhdpi.png",
  "option_android_icon_adaptivebg_xxxhdpi": "${base_options_dir}/android/icons_adaptivebg/xxxhdpi.png",
  "option_android_use_facebook": false,
  "option_android_facebook_id": "",
  "option_android_facebook_app_display_name": "",
  "option_android_google_cloud_saving": false,
  "option_android_google_services_app_id": "",
  "option_android_permission_write_external_storage": false,
  "option_android_permission_read_phone_state": false,
  "option_android_permission_network_state": false,
  "option_android_permission_internet": true,
  "option_android_permission_bluetooth": true,
  "option_android_permission_record_audio": false,
  "option_android_application_tag_inject": "",
  "option_android_google_apk_expansion": false,
  "option_android_google_dynamic_asset_delivery": false,
  "option_android_google_licensing_public_key": "",
  "option_android_tv_isgame": true,
  "resourceVersion": "1.0",
  "name": "Android",
  "tags": [],
  "resourceType": "GMAndroidOptions",
}

================================================
FILE: options/html5/options_html5.yy
================================================
{
  "option_html5_browser_title": "Created with GameMaker Studio 2",
  "option_html5_version": "1.0.0.0",
  "option_html5_foldername": "html5game",
  "option_html5_outputname": "index.html",
  "option_html5_splash_png": "${base_options_dir}/html5/splash.png",
  "option_html5_usesplash": false,
  "option_html5_outputdebugtoconsole": true,
  "option_html5_display_cursor": true,
  "option_html5_localrunalert": true,
  "option_html5_index": "",
  "option_html5_loadingbar": "",
  "option_html5_jsprepend": "",
  "option_html5_icon": "${base_options_dir}/html5/fav.ico",
  "option_html5_allow_fullscreen": true,
  "option_html5_interpolate_pixels": true,
  "option_html5_centregame": false,
  "option_html5_usebuiltinparticles": true,
  "option_html5_usebuiltinfont": true,
  "option_html5_webgl": 2,
  "option_html5_scale": 0,
  "option_html5_texture_page": "2048x2048",
  "option_html5_use_facebook": false,
  "option_html5_facebook_id": "",
  "option_html5_facebook_app_display_name": "",
  "option_html5_flurry_enable": false,
  "option_html5_flurry_id": "",
  "option_html5_google_analytics_enable": false,
  "option_html5_google_tracking_id": "",
  "resourceVersion": "1.0",
  "name": "HTML5",
  "tags": [],
  "resourceType": "GMHtml5Options",
}

================================================
FILE: options/ios/options_ios.yy
================================================
{
  "option_ios_display_name": "Created with GameMaker Studio 2",
  "option_ios_bundle_name": "com.company.game",
  "option_ios_version": "1.0.0.0",
  "option_ios_output_dir": "~/gamemakerstudio2",
  "option_ios_team_id": "",
  "option_ios_orientation_portrait": true,
  "option_ios_orientation_portrait_flipped": true,
  "option_ios_orientation_landscape": true,
  "option_ios_orientation_landscape_flipped": true,
  "option_ios_devices": 2,
  "option_ios_defer_home_indicator": false,
  "option_ios_icon_iphone_app_120": "${base_options_dir}/ios/icons/app/iphone_120.png",
  "option_ios_icon_iphone_app_180": "${base_options_dir}/ios/icons/app/iphone_180.png",
  "option_ios_icon_ipad_app_76": "${base_options_dir}/ios/icons/app/ipad_76.png",
  "option_ios_icon_ipad_app_152": "${base_options_dir}/ios/icons/app/ipad_152.png",
  "option_ios_icon_ipad_pro_app_167": "${base_options_dir}/ios/icons/app/ipad_pro_167.png",
  "option_ios_icon_iphone_notification_40": "${base_options_dir}/ios/icons/notification/iphone_40.png",
  "option_ios_icon_iphone_notification_60": "${base_options_dir}/ios/icons/notification/iphone_60.png",
  "option_ios_icon_ipad_notification_20": "${base_options_dir}/ios/icons/notification/ipad_20.png",
  "option_ios_icon_ipad_notification_40": "${base_options_dir}/ios/icons/notification/ipad_40.png",
  "option_ios_icon_iphone_spotlight_80": "${base_options_dir}/ios/icons/spotlight/iphone_80.png",
  "option_ios_icon_iphone_spotlight_120": "${base_options_dir}/ios/icons/spotlight/iphone_120.png",
  "option_ios_icon_ipad_spotlight_40": "${base_options_dir}/ios/icons/spotlight/ipad_40.png",
  "option_ios_icon_ipad_spotlight_80": "${base_options_dir}/ios/icons/spotlight/ipad_80.png",
  "option_ios_icon_iphone_settings_58": "${base_options_dir}/ios/icons/settings/iphone_58.png",
  "option_ios_icon_iphone_settings_87": "${base_options_dir}/ios/icons/settings/iphone_87.png",
  "option_ios_icon_ipad_settings_29": "${base_options_dir}/ios/icons/settings/ipad_29.png",
  "option_ios_icon_ipad_settings_58": "${base_options_dir}/ios/icons/settings/ipad_58.png",
  "option_ios_icon_itunes_artwork_1024": "${base_options_dir}/ios/icons/itunes/itunes_1024.png",
  "option_ios_splashscreen_background_colour": 255,
  "option_ios_launchscreen_image": "${base_options_dir}/ios/splash/launchscreen.png",
  "option_ios_launchscreen_image_landscape": "${base_options_dir}/ios/splash/launchscreen-landscape.png",
  "option_ios_launchscreen_fill": 0,
  "option_ios_interpolate_pixels": false,
  "option_ios_half_ipad1_textures": false,
  "option_ios_scale": 0,
  "option_ios_texture_page": "2048x2048",
  "option_ios_use_facebook": false,
  "option_ios_facebook_id": "",
  "option_ios_facebook_app_display_name": "",
  "option_ios_push_notifications": false,
  "option_ios_apple_sign_in": false,
  "option_ios_podfile_path": "${options_dir}/ios/Podfile",
  "option_ios_podfile_lock_path": "${options_dir}/ios/Podfile.lock",
  "resourceVersion": "1.3",
  "name": "iOS",
  "tags": [],
  "resourceType": "GMiOSOptions",
}

================================================
FILE: options/linux/options_linux.yy
================================================
{
  "option_linux_display_name": "Created with GameMaker Studio 2",
  "option_linux_version": "1.0.0.0",
  "option_linux_maintainer_email": "",
  "option_linux_homepage": "http://www.yoyogames.com",
  "option_linux_short_desc": "",
  "option_linux_long_desc": "",
  "option_linux_splash_screen": "${base_options_dir}/linux/splash/splash.png",
  "option_linux_display_splash": false,
  "option_linux_icon": "${base_options_dir}/linux/icons/64.png",
  "option_linux_start_fullscreen": false,
  "option_linux_allow_fullscreen": false,
  "option_linux_interpolate_pixels": true,
  "option_linux_display_cursor": true,
  "option_linux_sync": false,
  "option_linux_resize_window": false,
  "option_linux_scale": 0,
  "option_linux_texture_page": "2048x2048",
  "option_linux_enable_steam": false,
  "option_linux_disable_sandbox": false,
  "resourceVersion": "1.0",
  "name": "Linux",
  "tags": [],
  "resourceType": "GMLinuxOptions",
}

================================================
FILE: options/mac/options_mac.yy
================================================
{
  "option_mac_display_name": "Created with GameMaker Studio 2",
  "option_mac_app_id": "com.company.game",
  "option_mac_version": "1.0.0.0",
  "option_mac_output_dir": "~/gamemakerstudio2",
  "option_mac_team_id": "",
  "option_mac_signing_identity": "Developer ID Application:",
  "option_mac_copyright": "",
  "option_mac_splash_png": "${base_options_dir}/mac/splash/splash.png",
  "option_mac_icon_png": "${base_options_dir}/mac/icons/1024.png",
  "option_mac_installer_background_png": "${base_options_dir}/mac/splash/installer_background.png",
  "option_mac_menu_dock": false,
  "option_mac_display_cursor": true,
  "option_mac_start_fullscreen": false,
  "option_mac_allow_fullscreen": false,
  "option_mac_interpolate_pixels": true,
  "option_mac_vsync": false,
  "option_mac_resize_window": false,
  "option_mac_enable_retina": false,
  "option_mac_scale": 0,
  "option_mac_texture_page": "2048x2048",
  "option_mac_build_app_store": false,
  "option_mac_allow_incoming_network": false,
  "option_mac_allow_outgoing_network": false,
  "option_mac_app_category": "Games",
  "option_mac_enable_steam": false,
  "option_mac_disable_sandbox": false,
  "option_mac_apple_sign_in": false,
  "resourceVersion": "1.0",
  "name": "macOS",
  "tags": [],
  "resourceType": "GMMacOptions",
}

================================================
FILE: options/main/options_main.yy
================================================
{
  "option_gameguid": "e853c891-a127-4810-a122-eb28266b9756",
  "option_gameid": "0",
  "option_game_speed": 60,
  "option_mips_for_3d_textures": false,
  "option_draw_colour": 4294967295,
  "option_window_colour": 255,
  "option_steam_app_id": "0",
  "option_sci_usesci": false,
  "option_author": "",
  "option_collision_compatibility": true,
  "option_copy_on_write_enabled": true,
  "option_lastchanged": "",
  "option_spine_licence": false,
  "option_template_image": "${base_options_dir}/main/template_image.png",
  "option_template_icon": "${base_options_dir}/main/template_icon.png",
  "option_template_description": null,
  "resourceVersion": "1.4",
  "name": "Main",
  "tags": [],
  "resourceType": "GMMainOptions",
}

================================================
FILE: options/operagx/options_operagx.yy
================================================
{
  "option_operagx_version": "1.0.0.0",
  "option_operagx_game_name": "${project_name}",
  "option_operagx_splash_screen": "${base_options_dir}/operagx/splash.png",
  "option_operagx_interpolate_pixels": true,
  "option_operagx_scale": 0,
  "option_operagx_texture_page": "2048x2048",
  "option_operagx_icon": "${base_options_dir}/operagx/icon.png",
  "resourceVersion": "1.0",
  "name": "operagx",
  "tags": [],
  "resourceType": "GMOperaGXOptions",
}

================================================
FILE: options/ps4/options_ps4.yy
================================================
{
  "resourceType": "GMPS4Options",
  "resourceVersion": "1.0",
  "name": "PlayStation 4",
  "option_ps4_package_id": "IV0002-NPXS29129_00-APP0990000000022",
  "option_ps4_passcode": "GvE6xCpZxd96scOUGuLPbuLp8O800B0s",
  "option_ps4_nptitleid": "",
  "option_ps4_nptitlesecret": "",
  "option_ps4_paramsfo": "",
  "option_ps4_nptitledat": "",
  "option_ps4_trophyedit": "",
  "option_ps4_shareparam": "",
  "option_ps4_pronunciation": "",
  "option_ps4_splash_screen": "${base_options_dir}/ps4/sce_sys/pic1.png",
  "option_ps4_save_data_icon": "${base_options_dir}/ps4/sce_sys/save_data.png",
  "option_ps4_trophy_screen": "${base_options_dir}/ps4/sce_sys/pic0.png",
  "option_ps4_interpolate_pixels": true,
  "option_ps4_display_cursor": false,
  "option_ps4_scale": 0,
  "option_ps4_texture_page": "2048x2048",
  "option_ps4_max_display_width": -1,
  "option_ps4_max_display_height": -1,
  "option_ps4_icon": "${base_options_dir}/ps4/sce_sys/icon0.png",
  "option_ps4_shareoverlay_image": "${base_options_dir}/ps4/sce_sys/shareoverlayimage.png",
  "option_ps4_nptitledat_file": "${options_dir}\\ps4\\sce_sys\\nptitle.dat",
  "option_ps4_paramsfo_file": "${options_dir}\\ps4\\sce_sys\\param.sfo",
  "option_ps4_trophy00trp_file": "${options_dir}\\ps4\\sce_sys\\trophy\\trophy00.trp",
  "option_ps4_shareparam_file": "${options_dir}\\ps4\\sce_sys\\shareparam.json",
  "option_ps4_pronunciation_file": "${options_dir}\\ps4\\sce_sys\\pronunciation.xml",
  "option_ps4_pronunciation_sig": "${options_dir}\\ps4\\sce_sys\\pronunciation.sig",
  "option_ps4_onion": 2048,
  "option_ps4_garlic": 1024,
  "option_ps4_neo_onion": 2048,
  "option_ps4_neo_garlic": 1536,
}

================================================
FILE: options/ps5/options_ps5.yy
================================================
{
  "resourceType": "GMPS5Options",
  "resourceVersion": "1.0",
  "name": "PlayStation 5",
  "option_ps5_package_id": "IV0002-NPXS29129_00-APP0990000000022",
  "option_ps5_passcode": "GvE6xCpZxd96scOUGuLPbuLp8O800B0s",
  "option_ps5_nptitleid": "",
  "option_ps5_nptitlesecret": "",
  "option_ps5_sharedbinarysubconfigs": "",
  "option_ps5_paramsfo": "",
  "option_ps5_nptitledat": "",
  "option_ps5_trophyedit": "",
  "option_ps5_shareparam": "",
  "option_ps5_pronunciation": "",
  "option_ps5_splash_screen": "${base_options_dir}/ps5/sce_sys/pic1.png",
  "option_ps5_foreground_screen": "${base_options_dir}/ps5/sce_sys/pic2.png",
  "option_ps5_save_data_icon": "${base_options_dir}/ps5/sce_sys/save_data.png",
  "option_ps5_trophy_screen": "${base_options_dir}/ps5/sce_sys/pic0.png",
  "option_ps5_interpolate_pixels": true,
  "option_ps5_display_cursor": false,
  "option_ps5_scale": 0,
  "option_ps5_texture_page": "2048x2048",
  "option_ps5_max_display_width": -1,
  "option_ps5_max_display_height": -1,
  "option_ps5_icon": "${base_options_dir}/ps5/sce_sys/icon0.png",
  "option_ps5_shareoverlay_image": "${base_options_dir}/ps5/sce_sys/shareoverlayimage.png",
  "option_ps5_nptitledat_file": "${options_dir}\\ps5\\sce_sys\\nptitle.dat",
  "option_ps5_paramsfo_file": "${options_dir}\\ps5\\sce_sys\\param.sfo",
  "option_ps5_trophy00trp_file": "${options_dir}\\ps5\\sce_sys\\trophy\\trophy00.trp",
}

================================================
FILE: options/switch/options_switch.yy
================================================
{
  "resourceType": "GMSwitchOptions",
  "resourceVersion": "1.0",
  "name": "Switch",
  "option_switch_project_nmeta": "${options_dir}/switch/application.nmeta",
  "option_switch_enable_nex_libraries": false,
  "option_switch_interpolate_pixels": true,
  "option_switch_scale": 0,
  "option_switch_texture_page": "2048x2048",
  "option_switch_check_nsp_publish_errors": true,
  "option_switch_enable_fileaccess_checking": true,
  "option_switch_splash_screen": "${base_options_dir}/switch/splash.png",
  "option_switch_use_splash": false,
  "option_switch_allow_debug_output": false,
}

================================================
FILE: options/tvos/options_tvos.yy
================================================
{
  "option_tvos_display_name": "Made in GameMaker Studio 2",
  "option_tvos_bundle_name": "com.company.game",
  "option_tvos_version": "1.0.0.0",
  "option_tvos_output_dir": "~/GameMakerStudio2/tvOS",
  "option_tvos_team_id": "",
  "option_tvos_icon_400": "${base_options_dir}/tvos/icons/400.png",
  "option_tvos_icon_400_2x": "${base_options_dir}/tvos/icons/400_2x.png",
  "option_tvos_icon_1280": "${base_options_dir}/tvos/icons/1280.png",
  "option_tvos_topshelf": "${base_options_dir}/tvos/topshelf/topshelf.png",
  "option_tvos_topshelf_2x": "${base_options_dir}/tvos/topshelf/topshelf_2x.png",
  "option_tvos_topshelf_wide": "${base_options_dir}/tvos/topshelf/topshelf_wide.png",
  "option_tvos_topshelf_wide_2x": "${base_options_dir}/tvos/topshelf/topshelf_wide_2x.png",
  "option_tvos_splashscreen": "${base_options_dir}/tvos/splash/splash.png",
  "option_tvos_splashscreen_2x": "${base_options_dir}/tvos/splash/splash_2x.png",
  "option_tvos_splash_time": 0,
  "option_tvos_interpolate_pixels": true,
  "option_tvos_scale": 0,
  "option_tvos_texture_page": "2048x2048",
  "option_tvos_display_cursor": false,
  "option_tvos_push_notifications": false,
  "option_tvos_apple_sign_in": false,
  "option_tvos_podfile_path": "${options_dir}\\tvos\\Podfile",
  "option_tvos_podfile_lock_path": "${options_dir}\\tvos\\Podfile.lock",
  "resourceVersion": "1.3",
  "name": "tvOS",
  "tags": [],
  "resourceType": "GMtvOSOptions",
}

================================================
FILE: options/windows/options_windows.yy
================================================
{
  "option_windows_display_name": "Created with GameMaker Studio 2",
  "option_windows_executable_name": "${project_name}.exe",
  "option_windows_version": "1.0.0.0",
  "option_windows_company_info": "YoYo Games Ltd",
  "option_windows_product_info": "Created with GameMaker Studio 2",
  "option_windows_copyright_info": "",
  "option_windows_description_info": "A GameMaker Studio 2 Game",
  "option_windows_display_cursor": true,
  "option_windows_icon": "${base_options_dir}/windows/icons/icon.ico",
  "option_windows_save_location": 0,
  "option_windows_splash_screen": "${base_options_dir}/windows/splash/splash.png",
  "option_windows_use_splash": false,
  "option_windows_start_fullscreen": false,
  "option_windows_allow_fullscreen_switching": false,
  "option_windows_interpolate_pixels": false,
  "option_windows_vsync": false,
  "option_windows_resize_window": false,
  "option_windows_borderless": false,
  "option_windows_scale": 0,
  "option_windows_copy_exe_to_dest": false,
  "option_windows_sleep_margin": 10,
  "option_windows_texture_page": "2048x2048",
  "option_windows_installer_finished": "${base_options_dir}/windows/installer/finished.bmp",
  "option_windows_installer_header": "${base_options_dir}/windows/installer/header.bmp",
  "option_windows_license": "${base_options_dir}/windows/installer/license.txt",
  "option_windows_nsis_file": "${base_options_dir}/windows/installer/nsis_script.nsi",
  "option_windows_enable_steam": false,
  "option_windows_disable_sandbox": false,
  "option_windows_steam_use_alternative_launcher": false,
  "option_windows_use_x64": false,
  "resourceVersion": "1.1",
  "name": "Windows",
  "tags": [],
  "resourceType": "GMWindowsOptions",
}

================================================
FILE: options/windowsuap/options_windowsuap.yy
================================================
{
  "option_windowsuap_display_name": "Created with GameMaker",
  "option_windowsuap_package_name": "YourPackageName",
  "option_windowsuap_publisher_display_name": "YourPublisherName",
  "option_windowsuap_package_display_name": "YourPackageDisplayName",
  "option_windowsuap_description": "Your Description",
  "option_windowsuap_version": "1.0.0.0",
  "option_windowsuap_orient_portrait": true,
  "option_windowsuap_orient_portrait_flipped": true,
  "option_windowsuap_orient_landscape": true,
  "option_windowsuap_orient_landscape_flipped": true,
  "option_windowsuap_small_logo": "${base_options_dir}/windowsuap/logos/SmallLogo.scale-100.png",
  "option_windowsuap_smallish_logo": "${base_options_dir}/windowsuap/logos/SmallishLogo.scale-100.png",
  "option_windowsuap_store_logo": "${base_options_dir}/windowsuap/logos/StoreLogo.scale-100.png",
  "option_windowsuap_logo": "${base_options_dir}/windowsuap/logos/Logo.scale-100.png",
  "option_windowsuap_logo_background_colour": 4278190080,
  "option_windowsuap_logo_foreground_text": 0,
  "option_windowsuap_wide_logo": "${base_options_dir}/windowsuap/logos/WideLogo.scale-100.png",
  "option_windowsuap_large_logo": "${base_options_dir}/windowsuap/logos/LargeLogo.scale-100.png",
  "option_windowsuap_splash_png": "${base_options_dir}/windowsuap/splash/SplashScreen.scale-100.png",
  "option_windowsuap_splash_background_colour": 4278190080,
  "option_windowsuap_interpolate_pixels": false,
  "option_windowsuap_display_cursor": true,
  "option_windowsuap_start_fullscreen": false,
  "option_windowsuap_allow_fullscreen_switching": false,
  "option_windowsuap_use_synchronization": true,
  "option_windowsuap_scale": 0,
  "option_windowsuap_texture_page": "2048x2048",
  "option_windowsuap_certificate_location": "${base_options_dir}\\windowsuap\\keys\\WinUWPRunner_TemporaryKey.pfx",
  "option_windowsuap_certificate_publishername": "CN=Sandbox",
  "option_windowsuap_native_cpu": 0,
  "option_windowsuap_internet_capable": false,
  "option_windowsuap_microphone_capable": false,
  "option_windowsuap_iap_sandbox": false,
  "option_windowsuap_targetdevicefamily_universal": true,
  "option_windowsuap_target_platform_version": "10.0.14393.0",
  "option_windowsuap_target_platform_min_version": "10.0.14393.0",
  "option_windowsuap_targetdevicefamily_desktop": false,
  "option_windowsuap_desktop_family_platform_version": "10.0.14393.0",
  "option_windowsuap_desktop_family_platform_min_version": "10.0.14393.0",
  "option_windowsuap_targetdevicefamily_xbox": false,
  "option_windowsuap_xbox_family_platform_version": "10.0.14393.0",
  "option_windowsuap_xbox_family_platform_min_version": "10.0.14393.0",
  "option_windowsuap_targetdevicefamily_mobile": false,
  "option_windowsuap_mobile_family_platform_version": "10.0.14393.0",
  "option_windowsuap_mobile_family_platform_min_version": "10.0.14393.0",
  "option_windowsuap_targetdevicefamily_holographic": false,
  "option_windowsuap_holographic_family_platform_version": "10.0.14393.0",
  "option_windowsuap_holographic_family_platform_min_version": "10.0.14393.0",
  "option_windowsuap_targetdevicefamily_team": false,
  "option_windowsuap_team_family_platform_version": "10.0.14393.0",
  "option_windowsuap_team_family_platform_min_version": "10.0.14393.0",
  "option_windowsuap_xbox_live": false,
  "option_windowsuap_xbox_live_creators_program": false,
  "option_windowsuap_xbox_live_title_id": "0",
  "option_windowsuap_xbox_live_scid": "00000000-0000-0000-0000-000000000000",
  "resourceVersion": "1.0",
  "name": "Windows UWP",
  "tags": [],
  "resourceType": "GMWindowsUAPOptions",
}

================================================
FILE: options/xboxseriesxs/options_xboxseriesxs.yy
================================================
{
  "resourceType": "GMXboxSeriesXSOptions",
  "resourceVersion": "1.1",
  "name": "Xbox Series XS",
  "option_xboxseriesxs_display_name": "Created with GameMaker",
  "option_xboxseriesxs_description": "Your Description",
  "option_xboxseriesxs_publisher": "Company Name",
  "option_xboxseriesxs_publisher_display_name": "Company Display Name",
  "option_xboxseriesxs_version": "1.0.0.0",
  "option_xboxseriesxs_product_id": "",
  "option_xboxseriesxs_title_id": "01234567",
  "option_xboxseriesxs_service_config_id": "00000000-0000-0000-0000-000000000000",
  "option_xboxseriesxs_program_id": "ExactName.InPartnerCenter",
  "option_xboxseriesxs_store_id": "",
  "option_xboxseriesxs_msaappid": "",
  "option_xboxseriesxs_content_id": "",
  "option_xboxseriesxs_ekbid": "",
  "option_xboxseriesxs_playfab_party_id": "00000",
  "option_xboxseriesxs_simplified_user_model": false,
  "option_xboxseriesxs_require_xbox_live": false,
  "option_xboxseriesxs_require_game_chat": false,
  "option_xboxseriesxs_game_chat_slots": 4,
  "option_xboxseriesxs_require_audio_recording": false,
  "option_xboxseriesxs_stats_system": 0,
  "option_xboxseriesxs_service_config_manifest": "",
  "option_xboxseriesxs_network_config_manifest": "",
  "option_xboxseriesxs_splash_screen": "${base_options_dir}/xboxseriesxs/SplashScreen.png",
  "option_xboxseriesxs_splash_screen_colour": 4282795590,
  "option_xboxseriesxs_logo_store": "${base_options_dir}/xboxseriesxs/logos/StoreLogo.png",
  "option_xboxseriesxs_logo_small": "${base_options_dir}/xboxseriesxs/logos/SmallLogo.png",
  "option_xboxseriesxs_logo_medium": "${base_options_dir}/xboxseriesxs/logos/Logo.png",
  "option_xboxseriesxs_logo_large": "${base_options_dir}/xboxseriesxs/logos/LargeLogo.png",
  "option_xboxseriesxs_logo_background_colour": 4282795590,
  "option_xboxseriesxs_foreground_text": 0,
  "option_xboxseriesxs_interpolate_pixels": false,
  "option_xboxseriesxs_scale": 0,
  "option_xboxseriesxs_texture_page": "2048x2048",
  "option_xboxseriesxs_support_4k_one_x": false,
  "option_xboxseriesxs_support_4k_one_s": false,
  "option_xboxseriesxs_languages": "<!-- Add languages you support here -->\n <!-- os_get_language will only return languages listed -->\n <!-- \"en-us\" is supported by default, do not add it here-->\n <!-- See \"NLS APIs and Localization\" white paper -->\n <!-- from developer.xboxlive.com for info -->",
}

================================================
FILE: rooms/rDemo/RoomCreationCode.gml
================================================
var _player = (DEMO == "D") ? oPlayerD : oPlayerT;
instance_create_layer(384, 288, "Instances", _player);

================================================
FILE: rooms/rDemo/rDemo.yy
================================================
{
  "resourceType": "GMRoom",
  "resourceVersion": "1.0",
  "name": "rDemo",
  "isDnd": false,
  "volume": 1.0,
  "parentRoom": null,
  "views": [
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
    {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":1366,"hview":768,"xport":0,"yport":0,"wport":1366,"hport":768,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,},
  ],
  "layers": [
    {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Walls","instances":[
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_1B3D8657","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":10.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":64.0,"y":352.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_64520098","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":9.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":64.0,"y":96.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_529BC3E4","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":3.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":352.0,"y":288.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_5C2BB655","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":5.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":352.0,"y":288.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_3FFF6E2F","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":9.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":480.0,"y":32.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_5C9EBEC9","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":2.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":64.0,"y":96.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_4D98C060","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":3.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":128.0,"y":32.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_A64D164","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":12.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":128.0,"y":32.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_F58C7C6","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":2.0,"scaleY":3.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":224.0,"y":32.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_4250AABF","properties":[],"isDnd":false,"objectId":{"name":"oWall","path":"objects/oWall/oWall.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":0.84375006,"scaleY":0.6875,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":98.0,"y":224.0,},
      ],"visible":false,"depth":0,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRTileLayer","resourceVersion":"1.1","name":"FrontTrees","tilesetId":{"name":"tFrontTreeBody","path":"tilesets/tFrontTreeBody/tFrontTreeBody.yy",},"x":0,"y":0,"tiles":{"TileDataFormat":1,"SerialiseWidth":18,"SerialiseHeight":13,"TileCompressedData":[
-146,-2147483648,2,3,4,-34,-2147483648,-2,0,-50,-2147483648,],},"visible":true,"depth":100,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRAssetLayer","resourceVersion":"1.0","name":"TreesTop","assets":[
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_26BE2FD1","spriteId":{"name":"sFrontTreeTop","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"headPosition":1.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":111.0,"y":256.0,},
      ],"visible":true,"depth":200,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRTileLayer","resourceVersion":"1.1","name":"Grass","tilesetId":{"name":"tGrass","path":"tilesets/tGrass/tGrass.yy",},"x":0,"y":0,"tiles":{"TileDataFormat":1,"SerialiseWidth":18,"SerialiseHeight":13,"TileCompressedData":[
-156,-2147483648,1,1,-29,-2147483648,3,2,-2147483648,1,-45,-2147483648,],},"visible":true,"depth":300,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Instances","instances":[],"visible":true,"depth":400,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Controllers","instances":[
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_66E3BDE1","properties":[],"isDnd":false,"objectId":{"name":"oCamera","path":"objects/oCamera/oCamera.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":32.0,"y":0.0,},
        {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_4A28008F","properties":[],"isDnd":false,"objectId":{"name":"oGame","path":"objects/oGame/oGame.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":0.0,"y":0.0,},
      ],"visible":true,"depth":500,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRTileLayer","resourceVersion":"1.1","name":"Terrain","tilesetId":{"name":"tTerrain","path":"tilesets/tTerrain/tTerrain.yy",},"x":0,"y":0,"tiles":{"TileDataFormat":1,"SerialiseWidth":18,"SerialiseHeight":13,"TileCompressedData":[
-22,1,5,9,13,13,5,9,-6,13,1,5,-6,1,5,11,0,0,
6,11,-6,0,1,6,-4,1,7,9,13,15,0,0,14,15,-6,0,
1,6,-4,1,1,11,-12,0,1,6,-4,1,1,11,-12,0,1,6,
-4,1,1,11,-12,0,1,6,-4,1,1,11,-12,0,1,6,-4,1,
1,11,-12,0,1,6,-4,1,1,11,-8,0,1,8,-3,4,1,2,
-4,1,1,11,-8,0,1,6,-8,1,1,3,-8,4,1,2,-24,1,
],},"visible":true,"depth":600,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRAssetLayer","resourceVersion":"1.0","name":"BackTrees","assets":[
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_4A90BD3B","spriteId":{"name":"sBackTreeRegular","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"headPosition":0.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":238.0,"y":380.0,},
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_23631E46","spriteId":{"name":"sBackTreeRegular","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"headPosition":0.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":288.0,"y":363.0,},
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_6F35A848","spriteId":{"name":"sBackTreeRight","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"headPosition":1.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":464.0,"y":240.0,},
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_78E859F9","spriteId":{"name":"sBackTreeRegular","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"headPosition":2.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":160.0,"y":352.0,},
      ],"visible":true,"depth":700,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRAssetLayer","resourceVersion":"1.0","name":"Water","assets":[
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_6F19A3CE","spriteId":{"name":"sWater","path":"sprites/sWater/sWater.yy",},"headPosition":0.0,"rotation":0.0,"scaleX":9.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":80.0,"y":336.0,},
        {"resourceType":"GMRSpriteGraphic","resourceVersion":"1.0","name":"graphic_19EB1A99","spriteId":{"name":"sWaterReflection","path":"sprites/sWaterReflection/sWaterReflection.yy",},"headPosition":0.0,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"animationSpeed":1.0,"colour":4294967295,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":128.0,"y":336.0,},
      ],"visible":true,"depth":800,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":16,"gridY":16,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"SmallClouds","instances":[],"visible":true,"depth":900,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":8,"gridY":8,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRBackgroundLayer","resourceVersion":"1.0","name":"BigClouds","spriteId":{"name":"bgBigCloud","path":"sprites/bgBigCloud/bgBigCloud.yy",},"colour":4294967295,"x":0,"y":235,"htiled":true,"vtiled":false,"hspeed":-1.0,"vspeed":0.0,"stretch":false,"animationFPS":30.0,"animationSpeedType":0,"userdefinedAnimFPS":false,"visible":true,"depth":1000,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
    {"resourceType":"GMRBackgroundLayer","resourceVersion":"1.0","name":"Background","spriteId":{"name":"bgSky","path":"sprites/bgSky/bgSky.yy",},"colour":4294967295,"x":0,"y":0,"htiled":true,"vtiled":false,"hspeed":0.0,"vspeed":0.0,"stretch":false,"animationFPS":30.0,"animationSpeedType":0,"userdefinedAnimFPS":false,"visible":true,"depth":1100,"userdefinedDepth":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"effectEnabled":true,"effectType":null,"properties":[],},
  ],
  "inheritLayers": false,
  "creationCodeFile": "${project_dir}/rooms/rDemo/RoomCreationCode.gml",
  "inheritCode": false,
  "instanceCreationOrder": [
    {"name":"inst_4A28008F","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_66E3BDE1","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_1B3D8657","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_64520098","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_529BC3E4","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_5C2BB655","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_3FFF6E2F","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_5C9EBEC9","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_4D98C060","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_A64D164","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_F58C7C6","path":"rooms/rDemo/rDemo.yy",},
    {"name":"inst_4250AABF","path":"rooms/rDemo/rDemo.yy",},
  ],
  "inheritCreationOrder": false,
  "sequenceId": null,
  "roomSettings": {
    "inheritRoomSettings": false,
    "Width": 576,
    "Height": 416,
    "persistent": false,
  },
  "viewSettings": {
    "inheritViewSettings": false,
    "enableViews": false,
    "clearViewBackground": false,
    "clearDisplayBuffer": true,
  },
  "physicsSettings": {
    "inheritPhysicsSettings": false,
    "PhysicsWorld": false,
    "PhysicsWorldGravityX": 0.0,
    "PhysicsWorldGravityY": 10.0,
    "PhysicsWorldPixToMetres": 0.1,
  },
  "parent": {
    "name": "Rooms",
    "path": "folders/Rooms.yy",
  },
}

================================================
FILE: scripts/MACROS/MACROS.gml
================================================
#macro DEMO "T"		// D = Changing States Directly
					// T = Changing States Using Triggered Transitions

#macro CAM   view_camera[0]					// Main camera view
#macro CAM_W camera_get_view_width(CAM)		// Width of the camera
#macro CAM_H camera_get_view_height(CAM)	// Height of the camera
#macro CAM_X camera_get_view_x(CAM)			// x position of the camera
#macro CAM_Y camera_get_view_y(CAM)			// y position of the camera

================================================
FILE: scripts/MACROS/MACROS.yy
================================================
{
  "isDnD": false,
  "isCompatibility": false,
  "parent": {
    "name": "Scripts",
    "path": "folders/Scripts.yy",
  },
  "resourceVersion": "1.0",
  "name": "MACROS",
  "tags": [],
  "resourceType": "GMScript",
}

================================================
FILE: scripts/SnowState/SnowState.gml
================================================
/**
*	SnowState | v3.1.4
*	Documentation: https://github.com/sohomsahaun/SnowState/wiki
*
*	Author: Sohom Sahaun | @sohomsahaun
*/

/// @func SnowState(initial_state, [execute_enter])
/// @param {string} initial_state		Initial state for the state machine
/// @param {bool}   [execute_enter]		Whether to execute the "enter" event for the initial state (true) or not (false) [Default: true]
function SnowState(_initState, _execEnter = true) constructor {
	
	#region SnowState System
	
	enum SNOWSTATE_EVENT {
		NOT_DEFINED	= 0,
		DEFINED		= 1,
		INHERITED	= 2,
		DEFAULT		= 4,
	}
	
	enum SNOWSTATE_TRIGGER {
		NOT_DEFINED	= 0,
		DEFINED		= 1,
		INHERITED	= 2,
	}
	
	var _owner = other;
	__owner				= _owner;		// Context of the SnowState instances
	__states			= {};			// Struct holding states
	__transitions		= {};			// Struct holding transitions
	__wildTransitions	= {};			// Struct holding wildcard transitions
	__on_events			= {};			// Struct holding events for .on()
	__initState			= _initState;	// Initial state of the SnowState instance
	__execEnter			= _execEnter;	// If the "enter" event should be executed by default or not
	__currEvent			= undefined;	// Current event
	__tempEvent			= undefined;	// Temporary event - Used when changing states
	__parent			= {};			// Inheritance tree
	__childQueue		= [];			// Path from current state to it's ancestor(s)
	__stateStartTime	= get_timer();	// Start time of the current state (in microseconds)
	__history			= array_create(2, undefined);	// Array holding the history
	__historyMaxSize	= max(0, SNOWSTATE_DEFAULT_HISTORY_MAX_SIZE);	// Maximum size of history
	__historyEnabled	= SNOWSTATE_HISTORY_ENABLED;	// If history is enabled or not
	__defaultEvents		= {		// Default functions for events
		enter: {
			exists: SNOWSTATE_EVENT.NOT_DEFINED,
			func: function() {}
		},
		leave: {
			exists: SNOWSTATE_EVENT.NOT_DEFINED,
			func: function() {}
		},
	};
	__invalidStateNames = [	// It is what it is
		SNOWSTATE_WILDCARD_TRANSITION_NAME,
		SNOWSTATE_REFLEXIVE_TRANSITION_NAME,
	];
	
	// Add .on() events
	__on_events[$ "state changed"] = undefined;
		
	/// @param {string} state_name
	/// @param {struct} state_struct
	/// @param {bool} has_parent
	/// @returns {SnowState} self
	__add = function(_name, _struct, _hasParent) {
		var _events, _state, _event, _i;
		
		_state = __create_events_struct(_struct);
		__states[$ _name] = _state;
		
		// Update from parent
		if (_hasParent) {
			// Get events from parent
			__update_events_from_parent(_name);

			// Replace parent's events with defined ones
			_events = variable_struct_get_names(_struct);
			_i = 0; repeat (array_length(_events)) {
				_event = _events[_i];
				_state[$ _event] = {
					exists: SNOWSTATE_EVENT.DEFINED,
					func: method(__owner, _struct[$ _event])
				};
				++_i;
			}
		}
				
		// Update all the states
		__update_states();
				
		// Execute "enter" event
		if (_name == __initState) {
			if (__execEnter) {
				__stateStartTime = get_timer();
				enter();
			}
		}
		
		return self;
	};
		
	/// @param {string} name
	/// @param {string} from
	/// @param {string} to
	/// @param {function} condition
	/// @param {function} leave_func
	/// @param {function} enter_func
	/// @returns {SnowState} self
	__add_transition = function(_transitionName, _from, _to, _condition, _leave, _enter) {
		// Define the transition
		var _transition = {
			//from		: _from,
			to			: _to,
			condition	: _condition,
			exists		: SNOWSTATE_TRIGGER.DEFINED,
			leave		: _leave,
			enter		: _enter
		};
				
		if (_from == SNOWSTATE_WILDCARD_TRANSITION_NAME) {
			// Wildcard transition
			if (!variable_struct_exists(__wildTransitions, _transitionName)) {
				__wildTransitions[$ _transitionName] = [];
			}
					
			array_push(__wildTransitions[$ _transitionName], _transition);
		} else {
			// Normal transition
    		if (!variable_struct_exists(__transitions, _from)) {
    			__transitions[$ _from] = {};
    		}
    		if (!variable_struct_exists(__transitions[$ _from], _transitionName)) {
    			__transitions[$ _from][$ _transitionName] = [];
    		}
    				
    		array_push(__transitions[$ _from][$ _transitionName], _transition);
		}
			
		return self;
	};
	
	/// @param {string} event
	/// @returns {SnowState} self
	__add_event_method = function(_event) {
		var _temp = {
			exec : __execute,
			event: _event
		};
		self[$ _event] = method(_temp, function() {
			var _args = undefined;
			if (argument_count > 0) {
				_args = array_create(argument_count);
				var _i = 0; repeat(argument_count) {
					_args[_i] = argument[_i];
					++_i;
				}
			}
			exec(event, undefined, _args);
		});
		
		return self;
	};
	
	/// @param {string} event
	/// @returns {SnowState} self
	__assert_event_available = function(_event) {
		if (!variable_struct_exists(__defaultEvents, _event)) {
			__set_default_event(_event, function() {}, SNOWSTATE_EVENT.NOT_DEFINED);
		}

		return self;
	};
	
	/// @param {string} event
	/// @returns {SnowState} self
	__assert_event_name_valid = function(_event) {
		if (variable_struct_exists(__defaultEvents, _event)) return true;
		if (variable_struct_exists(self, _event)) {
			__snowstate_error("Can not use \"", _event, "\" as an event.");
			return false;
		}
			
		return true;
	};
	
	/// @param {string} state_name
	/// @param {bool} [show_error]
	/// @returns {bool} Whether the name is valid (true), or not (false)
	__assert_state_name_valid = function(_state, _error = true) {
		var _func = __snowstate_error;
		if (!_error) {
			_func = SNOWSTATE_DEBUG_WARNING ? __snowstate_trace : undefined;
		}
				
		if (!is_string(_state) || (_state == "")) {
			if (_func != undefined) _func("State name should be a non-empty string.");
			return false;
		}
				
		var _name, _i;
		_i = 0; repeat (array_length(__invalidStateNames)) {
			_name = __invalidStateNames[_i]; ++_i;
			if (_state == _name) {
				if (_func != undefined) _func("State name can not be \"", _name, "\".");
				return false;
			}
		}
				
		return true;
	};
	
	/// @param {string} transition_name
	/// @param {bool} [show_error]
	/// @returns {bool} Whether the name is valid (true), or not (false)
	__assert_transition_name_valid = function(_state, _error = true) {
		var _func = __snowstate_error;
		if (!_error) {
			_func = SNOWSTATE_DEBUG_WARNING ? __snowstate_trace : undefined;
		}
				
		if (!is_string(_state) || (_state == "")) {
			if (_func != undefined) _func("Transition name should be a non-empty string.");
			return false;
		}
				
		return true;
	};
	
	/// @param {string} event
	/// @param {array<any>} [args]
	/// @returns {SnowState} self
	__broadcast_event = function(_event, _args) {
		var _func = __on_events[$ _event];
		if (_func != undefined) __func_exec(_func, _args);
		
		return self;
	};
	
	/// @param {string} state_name
	/// @param {function} leave_func
	/// @param {function} enter_func
	/// @param {struct} [data]
	/// @returns {SnowState} self
	__change = function(_state, _leave, _enter, _data) {
		var _defLeave, _defEnter;
		_defLeave = leave;
		_defEnter = enter;
		leave = _leave;
		enter = _enter;
			
		// Leave current state
		if (leave == undefined) leave = _defLeave;
			else __tempEvent = _defLeave;
		leave(_data);
				
		// Add to history
		if (array_length(__childQueue) > 0) {
			__history[@ 0] = __childQueue[0];
			__childQueue = [];
		}
				
		// Init state
		__stateStartTime = get_timer();
		__history_add(_state);
				
		// Enter next state
		if (enter == undefined) enter = _defEnter;
			else __tempEvent = _defEnter;
		enter(_data);
				
		// Reset temp variable
		__tempEvent = undefined;
			
		leave = _defLeave;
		enter = _defEnter;
		
		return self;
	};
		
	/// @param {struct} state_struct
	/// @return {struct} Struct filled with all possible events
	__create_events_struct = function(_struct) {
		var _events = {};
		var _arr, _i, _event, _defEvent;
			
		_arr = variable_struct_get_names(_struct);
		_i = 0; repeat(array_length(_arr)) {
			_event = _arr[_i];
			__assert_event_name_valid(_event);
			__assert_event_available(_event);
			_events[$ _event] = {
				exists: SNOWSTATE_EVENT.DEFINED,
				func: method(__owner, _struct[$ _event])
			};
			++_i;
		}
		
		_arr = variable_struct_get_names(__defaultEvents);
		_i = 0; repeat(array_length(_arr)) {
			_event = _arr[_i];
			_defEvent = __defaultEvents[$ _event];
			if (!variable_struct_exists(_struct, _event)) {
				_events[$ _event] = {
					exists: _defEvent.exists,
					func: method(__owner, _defEvent.func)
				};
			}
			++_i;
		}
		
		return _events;
	};
		
	/// @param {string} event
	/// @param {string} [state_name]
	/// @param {array} [args]
	/// @returns {SnowState} self
	__execute = function(_event, _state = undefined, _args = undefined) {
		if (_state == undefined) _state = __history[0];
		
		if (!__is_state_defined(_state)) {
			__snowstate_error("State \"", _state, "\" is not defined.");
			return undefined;
		}
				
		__currEvent = _event;
		var _func = __states[$ _state][$ _event].func;
		var _pyramid = __func_exec;
		with (__owner) _pyramid(_func, _args);
			
		return self;
	};
	
	/// @param {function} function
	/// @param {array<any>} [args=undefined]
	/// @returns {any} Return value of function
	__func_exec = function(_func, _args = undefined) {
		if (_args == undefined) return _func();
		if (!is_array(_args)) return _func(_args);
		
		switch (array_length(_args)) {
			case  0: return _func();
			case  1: return _func(_args[0]);
			case  2: return _func(_args[0], _args[1]);
			case  3: return _func(_args[0], _args[1], _args[2]);
			case  4: return _func(_args[0], _args[1], _args[2], _args[3]);
			case  5: return _func(_args[0], _args[1], _args[2], _args[3], _args[4]);
			case  6: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5]);
			case  7: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6]);
			case  8: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7]);
			case  9: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8]);
			case 10: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9]);
			case 11: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10]);
			case 12: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11]);
			case 13: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12]);
			case 14: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13]);
			case 15: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13], _args[14]);
			case 16: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13], _args[14], _args[15]);
			default: __snowstate_error("Can't use more than 16 arguments."); break;
		}
		
		return undefined;
	};

	/// @returns {string} The current state
	__get_current_state = function() {
		var _state = ((array_length(__history) > 0) ? __history[0] : undefined);
		if (array_length(__childQueue) > 0) _state = __childQueue[0];
		return _state;
	};
		
	/// @param {string} state
	/// @returns {SnowState} self
	__history_add = function(_state) {
		if (__historyEnabled) {
			if (__history[1] == undefined) {
				__history[@ 1] = __history[0];
				__history[@ 0] = _state;
			} else {
				array_insert(__history, 0, _state);
				__history_fit_contents();
			}
		} else {
			__history[@ 1] = __history[0];
			__history[@ 0] = _state;
		}
		
		return self;
	};
		
	/// @returns {SnowState} self
	__history_fit_contents = function() {
		array_resize(__history, max(2, min(__historyMaxSize, array_length(__history))));
		return self;
	};
		
	/// @returns {bool} Whether the argument is a method or a function (true), or not (false)
	__is_really_a_method = function(_method) {
		try {
			return is_method(method(undefined, _method));
		} catch (_e) {
			return false;	
		}
	};
		
	/// @param {string} state_name
	/// @return {bool} Whether the state is defined (true), or not (false)
	__is_state_defined = function(_state) {
		return (is_string(_state) && variable_struct_exists(__states, _state));
	};
		
	/// @param {string} event
	/// @param {function} method
	/// @param {int} defined
	/// @returns {SnowState} self
	__set_default_event = function(_event, _method, _defined) {
		__defaultEvents[$ _event] = {
			exists: _defined,
			func: _method
		};
		__add_event_method(_event);
		
		return self;
	};
		
	/// @param {any} [args]
	/// @returns {SnowState} self
	__snowstate_error = function() {
		var _str = "[SnowState]\n";
		var _i = 0; repeat(argument_count) {
			_str += string(argument[_i++]);	
		}
		_str += "\n\n\n";
		show_error(_str, true);
		return self;
	};
		
	/// @param {any} [args]
	/// @returns {SnowState} self
	__snowstate_trace = function() {
		var _str = "[SnowState] ";
		var _i = 0; repeat(argument_count) {
			_str += string(argument[_i++]);	
		}
		show_debug_message(_str);
		return self;
	};
		
	/// @param {string} transition_name
	/// @param {string} from_state
	/// @returns {int} SNOWSTATE_TRIGGER
	__transition_exists = function(_transitionName, _from) {
		if (_from == SNOWSTATE_WILDCARD_TRANSITION_NAME) {
			// Wildcard transition
			if (variable_struct_exists(__wildTransitions, _transitionName)) {
				return SNOWSTATE_TRIGGER.DEFINED;
			}
		} else {
			// Default	
			if (variable_struct_exists(__transitions, _from) && variable_struct_exists(__transitions[$ _from], _transitionName)) {
				return SNOWSTATE_TRIGGER.DEFINED;
			}
			while (variable_struct_exists(__parent, _from)) {
				_from = __parent[$ _from];
				if (variable_struct_exists(__transitions, _from) && variable_struct_exists(__transitions[$ _from], _transitionName)) {
					return SNOWSTATE_TRIGGER.INHERITED;
				}
			}
		}
				
		return SNOWSTATE_TRIGGER.NOT_DEFINED;
	};
	
	/// @param {string} transition_name
	/// @param {struct} [data]
	/// @returns {bool} Whether the transition has been triggered (true), or not (false)
	__trigger = function(_transitionName, _data) {
		if (!__assert_transition_name_valid(_transitionName)) return false;
			
		var _currState, _source;
		_currState = __get_current_state();
		_source    = _currState;
			
		// My triggers
		if (__transition_exists(_transitionName, _source) == SNOWSTATE_TRIGGER.DEFINED) {
			if (__try_triggers(__transitions[$ _source][$ _transitionName], _currState, _transitionName, _data)) return true;
		}
				
		// Wild triggers
		if (__transition_exists(_transitionName, SNOWSTATE_WILDCARD_TRANSITION_NAME) == SNOWSTATE_TRIGGER.DEFINED) {
			if (__try_triggers(__wildTransitions[$ _transitionName], _currState, _transitionName, _data)) return true;
		}
			
		// Parent triggers
		while (variable_struct_exists(__parent, _source)) {
			_source = __parent[$ _source];
			if (__transition_exists(_transitionName, _source) == SNOWSTATE_TRIGGER.DEFINED) {
				if (__try_triggers(__transitions[$ _source][$ _transitionName], _currState, _transitionName, _data)) return true;
			}
		}
			
		return false;
	};
	
	/// @param {array} transitions
	/// @param {string} source_state
	/// @param {string} trigger_name
	/// @param {struct} [data]
	/// @returns {bool} Whether the trigger is successful (true), or not (false)
	__try_triggers = function(_transitions, _source, _trigger, _data) {
		var _transition, _dest, _i;
		_i = 0; repeat(array_length(_transitions)) {
			_transition = _transitions[_i]; ++_i;
					
			// For reflexive wildcard transitions, change to source
			_dest = _transition.to;
			if (_dest == SNOWSTATE_REFLEXIVE_TRANSITION_NAME) _dest = _source;
					
			// Check condition
			if (_transition.condition(_data)) {
				__change(_dest, _transition.leave, _transition.enter, _data);
				__broadcast_event("state changed", [_dest, _source, _trigger]);
				return true;
			}
		}
					
		return false;
	};
		
	/// @param {string} state_name
	/// @returns {SnowState} self
	__update_events_from_parent = function(_name) {
		var _parent, _state, _events, _event, _exists, _parEvent, _i;
			
		_parent = __states[$ __parent[$ _name]];
		_state  = __states[$ _name];
				
		_events = variable_struct_get_names(_parent);
		_i = 0; repeat (array_length(_events)) {
			_event = _events[_i];
			_parEvent = _parent[$ _event];
					
			_exists = SNOWSTATE_EVENT.NOT_DEFINED;
			switch (_parEvent.exists) {
				case SNOWSTATE_EVENT.DEFINED	: _exists = SNOWSTATE_EVENT.INHERITED;	break;	
				case SNOWSTATE_EVENT.INHERITED	: _exists = SNOWSTATE_EVENT.INHERITED;	break;	
				case SNOWSTATE_EVENT.DEFAULT	: _exists = SNOWSTATE_EVENT.DEFAULT;	break;
				default: break;
			}
					
			_state[$ _event] = {
				exists: _exists,
				func: _parEvent.func
			};
			++_i;
		}
			
		return self;
	};
		
	/// @param {bool} has_parent
	/// @returns {SnowState} self
	__update_states = function(_hasParent) {
		var _states, _events, _state, _event, _defEvent, _i, _j;
		_states = variable_struct_get_names(__states);
		_events = variable_struct_get_names(__defaultEvents);
		
		_i = 0; repeat(array_length(_states)) {
			_state = __states[$ _states[_i]];
			_j = 0; repeat(array_length(_events)) {
				_event = _events[_j];
				if (!variable_struct_exists(_state, _event)) {
					_defEvent = __defaultEvents[$ _event];
					_state[$ _event] = {
						exists: _defEvent.exists,
						func: method(__owner, _defEvent.func)
					};
				}
				++_j;
			}
			++_i;
		}
		
		return self;
	};

	#endregion
	
	#region Basics
	
	/// @param {string} state_name
	/// @param {struct} [state_struct]
	/// @returns {SnowState} self
	add = function(_name, _struct = {}) {
		if (!__assert_state_name_valid(_name)) return undefined;
	
		if (!is_struct(_struct)) {
			__snowstate_error("State struct should be a struct.");
			return undefined;
		}
	
		if (SNOWSTATE_DEBUG_WARNING && __is_state_defined(_name)) {
			__snowstate_trace("State \"", _name, "\" has been defined already. Replacing the previous definition.");
		}
			
		__add(_name, _struct, false);
		
		return self;
	};

	/// @param {string} state_name
	/// @param {function} [leave_func=undefined]
	/// @param {function} [enter_func=undefined]
	/// @param {struct} [data=undefined]
	/// @returns {SnowState} self
	change = function(_state, _leave = undefined, _enter = undefined, _data = undefined) {
		if ((_leave != undefined) && !__is_really_a_method(_leave)) {
			__snowstate_error("Invalid value for \"leave_func\" in change(). Should be a function.");
			return undefined;
		}
		
		if ((_enter != undefined) && !__is_really_a_method(_enter)) {
			__snowstate_error("Invalid value for \"enter_func\" in change(). Should be a function.");
			return undefined;
		}
		
		var _source = get_current_state();
		__change(_state, _leave, _enter, _data);
		__broadcast_event("state changed", [_state, _source]);
		
		return self;
	};

	/// @param {string} state_name
	/// @param {string} [state_to_check]
	/// @returns {bool} Whether state_name is state_to_check or a parent of state_to_check (true), or not (false)
	state_is = function(_target, _source = get_current_state()) {
		var _state = _source;
		
		if (!__assert_state_name_valid(_target)) return false;
		if (!__assert_state_name_valid(_source)) return false;
		
		while (_state != undefined) {
			if (_state == _target) return true;
			_state = variable_struct_exists(__parent, _state) ? __parent[$ _state] : undefined;
		}
		
		return false;
	};
	
	/// @param {string} state_name
	/// @returns {bool} Whether state_name exists (true), or not (false)
	state_exists = function(_state) {
		return variable_struct_exists(__states, _state);
	};
	
	/// @returns {array} Array containing the states defined
	get_states = function() {
		return variable_struct_get_names(__states);	
	};
	
	/// @returns {string} The current state
	get_current_state = function() {
		return __get_current_state();
	};
	
	/// @returns {string} The previous state
	get_previous_state = function() {
		return ((array_length(__history) > 1) ? __history[1] : undefined);
	};
	
	/// @param {bool} [in_microseconds]
	/// @returns {number} Number of microseconds (or steps) the current state has been running for
	get_time = function(_us = true) {
		var _time = (get_timer()-__stateStartTime);
		return (_us ? _time : (_time * game_get_speed(gamespeed_fps) * 1/1000000));
	};
	
	/// @param {number} time
	/// @param {bool} [in_microseconds]
	/// @returns {SnowState} self
	set_time = function(_time, _us = true) {
		if (!is_real(_time)) {
			__snowstate_error("Time should be a number");
			return undefined;
		}
		
		__stateStartTime = get_timer() - (_us ? _time : (_time * 1/game_get_speed(gamespeed_fps) * 1000000));
		
		return self;
	};
	
	/// @param {string} event
	/// @param {string} callback
	/// @param {struct} [context=noone]
	/// @returns {SnowState} self
	on = function(_event, _callback, _context = noone) {
		if (!is_string(_event)) {
			__snowstate_error("Event name should be a string.");
			return undefined;
		}
		
		if (!__is_really_a_method(_callback)) {
			__snowstate_error("Callback should be a string.");
			return undefined;
		}
		
		if (variable_struct_exists(__on_events, _event)) {
			if (_context != noone) _callback = method(_context, _callback);
			__on_events[$ _event] = _callback;
		} else if (SNOWSTATE_DEBUG_WARNING) {
			__snowstate_trace("Event \"", _event, "\" does not exist.");
		}
		
		return self;
	};
	#endregion
	
	#region Inheritance
	
	/// @param {string} parent_state_name
	/// @param {string} state_name
	/// @param {struct} [state_struct]
	/// @return {SnowState} self
	add_child = function(_parent, _name, _struct = {}) {
		if (!__assert_state_name_valid(_name)) return undefined;
		if (!__assert_state_name_valid(_parent)) return undefined;
			
		if (!__is_state_defined(_parent)) {
			__snowstate_error("State \"", _parent, "\" is not defined.");
			return undefined;
		}
				
		if (_parent == _name) {
			__snowstate_error("Cannot set a state as a parent to itself.");
			return undefined;
		}
	
		if (!is_struct(_struct)) {
			__snowstate_error("State struct should be a struct.");
			return undefined;
		}
			
		if (SNOWSTATE_DEBUG_WARNING) {
			if (__is_state_defined(_name)) {
				__snowstate_trace("State \"", _name, "\" has been defined already. The previous definition has been replaced.");
			}
				
			if (variable_struct_exists(__parent, _name)) {
				if (__parent[$ _name] == _parent) {
					__snowstate_trace("State \"", _name, "\" is already a child of \"", _parent, "\".");
				}
			}
		}
			
		__parent[$ _name] = _parent;
		__add(_name, _struct, true);
		
		return self;		
	};
	
	/// @returns {SnowState} self
	inherit = function() {
		var _state = __history[0];
			
		if (!variable_struct_exists(__parent, _state)) {
			if (SNOWSTATE_DEBUG_WARNING) {
				__snowstate_trace("State \"", _state, "\" has no parent state.");
			}
			return self;
		}
			
		if (SNOWSTATE_CIRCULAR_INHERITANCE_ERROR) {
			var _str, _len, _i;
			_len = array_length(__childQueue);
			_str = "";
			_i = 0; repeat (_len) {
				if (__childQueue[_i] == _state) break;
				++_i;
			}
				
			if (_i < _len) {
				_str += string(_state);
				repeat (_len-_i-1) {
					++_i;
					_str += " -> " + string(__childQueue[_i]);
				}
				_str += " -> " + string(_state);
				__snowstate_error("Circular inheritance found. Inheritance chain: ",
								"(-> reads as \"inherits from\")\n", _str);
				return undefined;
			}
		}
			
		array_push(__childQueue, _state);
		_state = __parent[$ _state];
		__history[@ 0] = _state;
		__execute(__currEvent);
		if (array_length(__childQueue) > 0) __history[@ 0] = array_pop(__childQueue);
		
		return self;
	};
	
	#endregion
	
	#region Events
	
	/// @param {string} event
	/// @param {function} function
	/// @returns {SnowState} self
	event_set_default_function = function(_event, _function) {
		if (SNOWSTATE_DEBUG_WARNING && (variable_struct_names_count(__states) > 0)) {
			__snowstate_trace("event_set_default_function() should be called before defining any state.");
		}
		
		if (!is_string(_event) || (_event == "")) {
			__snowstate_error("Event should be a non-empty string.");
			return undefined;
		}
		
		if (!__is_really_a_method(_function)) {
			__snowstate_error("Default function should be a function.");
			return undefined;
		}
		
		__assert_event_name_valid(_event);
		__set_default_event(_event, method(__owner, _function), SNOWSTATE_EVENT.DEFAULT);
		__update_states();
		
		return self;
	};
	
	/// NOTE: This function is only meant to be used in change()
	/// @returns {function}
	event_get_current_function = function() {
		return __tempEvent;
	}
	
	/// @param {string} event
	/// @returns {int} SNOWSTATE_EVENT
	event_exists = function(_event) {
		if (!is_string(_event) || (_event == "")) {
			if (SNOWSTATE_DEBUG_WARNING) {
				__snowstate_trace("Event should be a non-empty string.");
			}
			return SNOWSTATE_EVENT.NOT_DEFINED;
		}
			
		var _state = __get_current_state();
		if (!variable_struct_exists(__states[$ _state], _event)) return SNOWSTATE_EVENT.NOT_DEFINED;
		return __states[$ _state][$ _event].exists;
	};

	/// @param {struct} [data]
	/// @returns {SnowState} self
	enter = function(_data = undefined) {
		__execute("enter", undefined, _data);
		return self;
	};
	
	/// @param {struct} [data]
	/// @returns {SnowState} self
	leave = function(_data = undefined) {
		__execute("leave", undefined, _data);
		return self;
	};
	
	#endregion
	
	#region Transitions

	/// @param {string} transition_name
	/// @param {string/array} source_state
	/// @param {string} dest_state
	/// @param {function} [condition]
	/// @param {function} [leave_func]
	/// @param {function} [enter_func]
	/// @returns {SnowState} self
	add_transition = function(_transitionName, _source, _dest, _condition = function() { return true; }, _leave = leave, _enter = enter) {
		if (!__assert_transition_name_valid(_transitionName)) return undefined;
		if (!is_string(_dest) || (_dest == "")) {
			__snowstate_error("State name should be a non-empty string.");
			return undefined;
		}
		if (_dest == SNOWSTATE_WILDCARD_TRANSITION_NAME) {
			__snowstate_error("Destination state name can not be the same as SNOWSTATE_WILDCARD_TRANSITION_NAME.");
			return undefined;
		}
			
		if (!__is_really_a_method(_condition)) {
			__snowstate_error("Invalid value for \"condition\" in add_transition(). Should be a function.");
			return undefined;
		}
		if (!__is_really_a_method(_leave)) {
			__snowstate_error("Invalid value for \"leave_func\" in add_transition(). Should be a function.");
			return undefined;
		}
		if (!__is_really_a_method(_enter)) {
			__snowstate_error("Invalid value for \"enter_func\" in add_transition(). Should be a function.");
			return undefined;
		}
			
		if (!is_array(_source)) _source = [_source];
			
		var _i, _from;
		_i = 0; repeat (array_length(_source)) {
			_from = _source[_i]; ++_i;
			if (!is_string(_from) || (_from == "")) {
				if (SNOWSTATE_DEBUG_WARNING) {
					__snowstate_trace("State name should be a non-empty string. Transition not added.");	
				}
			} else if (_from == SNOWSTATE_REFLEXIVE_TRANSITION_NAME) {
				if (SNOWSTATE_DEBUG_WARNING) {
					__snowstate_trace("Source state name can not be the same as SNOWSTATE_REFLEXIVE_TRANSITION_NAME. Transition not added.");	
				}
			} else {
				__add_transition(_transitionName, _from, _dest, _condition, _leave, _enter);
			}
		}
		
		return self;
	};
	
	/// @param {string} transition_name
	/// @param {string} dest_state
	/// @param {function} [condition]
	/// @param {function} [leave_func]
	/// @param {function} [enter_func]
	/// @returns {SnowState} self
	add_wildcard_transition = function(_transitionName, _dest, _condition = function() { return true; }, _leave = undefined, _enter = undefined) {
		return add_transition(_transitionName, SNOWSTATE_WILDCARD_TRANSITION_NAME, _dest, _condition, _leave, _enter);
	};
	
	/// @param {string} transition_name
	/// @param {string/array} source_state
	/// @param {function} [condition]
	/// @param {function} [leave_func]
	/// @param {function} [enter_func]
	/// @returns {SnowState} self
	add_reflexive_transition = function(_transitionName, _source, _condition = function() { return true; }, _leave = undefined, _enter = undefined) {
		return add_transition(_transitionName, _source, SNOWSTATE_REFLEXIVE_TRANSITION_NAME, _condition, _leave, _enter);
	};
	
	/// @param {string} transition_name
	/// @param {string} source_state
	/// @returns {int} SNOWSTATE_TRIGGER
	transition_exists = function(_transitionName, _source) {
		if (!is_string(_transitionName)) return false;
		if (!is_string(_source)) return false;
		if (_source == SNOWSTATE_WILDCARD_TRANSITION_NAME) return true;
		
		if (!__assert_transition_name_valid(_transitionName, false)) return false;
			
		return __transition_exists(_transitionName, _source);
	};
	
	/// @param {string|array} transition_name
	/// @param {struct} [data=undefined]
	/// @returns {bool} Whether a transition has been triggered (true), or not (false)
	trigger = function(_transition, _data = undefined) {
		if (is_array(_transition)) {
			var _i = 0; repeat (array_length(_transition)) {
				if (__trigger(_transition[_i], _data)) return true;
				++_i;
			}
			return false;
		} else {
			return __trigger(_transition, _data);
		}
	}

	#endregion
	
	#region History
	
	/// @returns {SnowState} self
	history_enable = function() {
		if (!__historyEnabled) {
			__historyEnabled = true;
			__history_fit_contents();
		}
		
		return self;
	};
	
	/// @returns {SnowState} self
	history_disable = function() {
		if (__historyEnabled) {
			__historyEnabled = false;
			array_resize(__history, 2);
		}
		
		return self;
	};
	
	/// @returns {bool} Whether state history is enabled (true), or not (false)
	history_is_enabled = function() {
		return __historyEnabled;
	};
	
	/// @param {int} size
	/// @returns {SnowState} self
	history_set_max_size = function(_size) {
		if (!is_real(_size)) {
			__snowstate_error("Size should be a number.");
			return undefined;
		}
		if (_size < 0) {
			if (SNOWSTATE_DEBUG_WARNING) {
				__snowstate_trace("History size should non-negative. Setting the size to 0 instead of ", _size, ".");
			}
			_size = 0;
		}
		__historyMaxSize = _size;
		__history_fit_contents();
		
		return self;
	};
	
	/// @returns {int} The maximum storage capacity of state history
	history_get_max_size = function() {
		return __historyMaxSize;
	};
	
	/// @returns {array} Array containing the state history
	history_get = function() {
		if (!__historyEnabled) {
			if (SNOWSTATE_DEBUG_WARNING) {
				__snowstate_trace("History is disabled, can not get_history().");	
			}
			return [];
		}
		if (get_previous_state() == undefined) return [__get_current_state()];
		var _len = min(array_length(__history), __historyMaxSize);
		var _arr = array_create(_len);
		array_copy(_arr, 0, __history, 0, _len);
		_arr[@ 0] = __get_current_state();
		return _arr;
	};
	
	#endregion
	
	// Initialization
	__assert_state_name_valid(_initState);
	__history_add(_initState);
}
// Startup errors
if (!is_string(SNOWSTATE_WILDCARD_TRANSITION_NAME) || (string_length(SNOWSTATE_WILDCARD_TRANSITION_NAME) != 1)) {
	var _str = "[SnowState]\n";
	_str += "SNOWSTATE_WILDCARD_TRANSITION_NAME should be a string of length 1."
	_str += "\n\n\n";
	show_error(_str, true);
}

if (!is_string(SNOWSTATE_REFLEXIVE_TRANSITION_NAME) || (string_length(SNOWSTATE_REFLEXIVE_TRANSITION_NAME) != 1)) {
	var _str = "[SnowState]\n";
	_str += "SNOWSTATE_REFLEXIVE_TRANSITION_NAME should be a string of length 1."
	_str += "\n\n\n";
	show_error(_str, true);
}

// Some info
#macro SNOWSTATE_VERSION "v3.1.4"
#macro SNOWSTATE_DATE "26-10-2022"

show_debug_message("[SnowState] You are using SnowState by @sohomsahaun (Version: " + string(SNOWSTATE_VERSION) + " | Date: " + string(SNOWSTATE_DATE) + ")");


================================================
FILE: scripts/SnowState/SnowState.yy
================================================
{
  "resourceType": "GMScript",
  "resourceVersion": "1.0",
  "name": "SnowState",
  "isDnD": false,
  "isCompatibility": false,
  "parent": {
    "name": "SnowState",
    "path": "folders/SnowState.yy",
  },
}

================================================
FILE: scripts/Utility/Utility.gml
================================================
/**
*	Some commonly used scripts
*	Credit goes to the awesome GM community
*/

/// @func animation_end()
function animation_end() {
	return (image_index + image_speed*sprite_get_speed(sprite_index)/(sprite_get_speed_type(sprite_index)==spritespeed_framespergameframe? 1 : game_get_speed(gamespeed_fps)) >= image_number);	
}

/// @func lerp_smooth(val1, val2, amount, [offset])
function lerp_smooth(_val1, _val2, _amount, _offset = 0.01) {
	return ((abs(_val1-_val2) <= _offset) ? _val2 : lerp(_val1, _val2, 1/_amount));
}

/// @func draw_text_outline(x, y, string, text_col, outline_col, thickness)
function draw_text_outline(_x, _y, _string, _textCol, _outCol, _thickness) {
	var _xx, _yy;
	for (_xx = _x-_thickness; _xx <= _x+_thickness; ++_xx) {
		for (_yy = _y-_thickness; _yy <= _y+_thickness; ++_yy) {
			draw_text_color(_xx, _yy, _string, _outCol, _outCol, _outCol, _outCol, 1);
		}
	}
	draw_text_color(_x, _y, _string, _textCol, _textCol, _textCol, _textCol, 1);
}

================================================
FILE: scripts/Utility/Utility.yy
================================================
{
  "isDnD": false,
  "isCompatibility": false,
  "parent": {
    "name": "Scripts",
    "path": "folders/Scripts.yy",
  },
  "resourceVersion": "1.0",
  "name": "Utility",
  "tags": [],
  "resourceType": "GMScript",
}

================================================
FILE: scripts/__snowstate_config/__snowstate_config.gml
================================================
/**
*	SnowState Configuration
*	Documentation: https://github.com/sohomsahaun/SnowState/wiki/Configuration
*/

#macro SNOWSTATE_DEBUG_WARNING					true		// Whether to show warning messages in Output (true) or not (false)
#macro SNOWSTATE_HISTORY_ENABLED				false		// Whether history should be tracked by default (true) or not (false)
#macro SNOWSTATE_DEFAULT_HISTORY_MAX_SIZE		5			// Default maxmimum history count
#macro SNOWSTATE_CIRCULAR_INHERITANCE_ERROR		true		// Whether to throw an error when circular inheritance is found (true) or not (false)
#macro SNOWSTATE_WILDCARD_TRANSITION_NAME		"*"			// Default wildcard transition name
#macro SNOWSTATE_REFLEXIVE_TRANSITION_NAME		"="			// Default reflexive transition name

================================================
FILE: scripts/__snowstate_config/__snowstate_config.yy
================================================
{
  "isDnD": false,
  "isCompatibility": false,
  "parent": {
    "name": "SnowState",
    "path": "folders/SnowState.yy",
  },
  "resourceVersion": "1.0",
  "name": "__snowstate_config",
  "tags": [],
  "resourceType": "GMScript",
}

================================================
FILE: sprites/bgBigCloud/bgBigCloud.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "bgBigCloud",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 0,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 447,
  "bbox_top": 0,
  "bbox_bottom": 100,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 448,
  "height": 101,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d71a5bdd-0bcb-4831-9ce4-30b6348dc4c1",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "bgBigCloud",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 30.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 1.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"dc3a3b2a-b268-4cca-b9f4-21b05927f91d","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"d71a5bdd-0bcb-4831-9ce4-30b6348dc4c1","path":"sprites/bgBigCloud/bgBigCloud.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 0,
    "yorigin": 0,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"2957961d-c108-4049-9089-a54fa8a84296","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Background",
    "path": "folders/Sprites/Background.yy",
  },
}

================================================
FILE: sprites/bgSky/bgSky.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "bgSky",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 0,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 31,
  "bbox_top": 0,
  "bbox_bottom": 511,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 32,
  "height": 512,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"638cd969-0fe1-4d47-a72d-ffcdebb6dd56",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "bgSky",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 30.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 1.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"46cc1aed-88db-40b0-9e78-a0dd85b00e6a","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"638cd969-0fe1-4d47-a72d-ffcdebb6dd56","path":"sprites/bgSky/bgSky.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 0,
    "yorigin": 0,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"c5a78228-ae71-4c06-b8d6-91727fe9c167","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Background",
    "path": "folders/Sprites/Background.yy",
  },
}

================================================
FILE: sprites/sBackTreeRegular/sBackTreeRegular.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sBackTreeRegular",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 38,
  "bbox_top": 0,
  "bbox_bottom": 63,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 39,
  "height": 64,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b95366cb-6916-443c-9b89-0b677dc57e04",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"9c9efec3-d73f-477b-9cb1-0a5545677078",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"afe6a435-e26a-4b81-a526-ae23f2cfe32c",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"e63c1a5c-dc96-45e2-9158-7bf5c3410032",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sBackTreeRegular",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 4.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"60c1eb97-4424-4304-9922-61d836241c0f","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"b95366cb-6916-443c-9b89-0b677dc57e04","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"f0cd643b-7764-46ba-9b9c-d99d11127017","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"9c9efec3-d73f-477b-9cb1-0a5545677078","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"9240301c-8e26-4239-845a-0d93508331c7","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"afe6a435-e26a-4b81-a526-ae23f2cfe32c","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"22435f26-905c-4098-b83e-d6a64874460b","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"e63c1a5c-dc96-45e2-9158-7bf5c3410032","path":"sprites/sBackTreeRegular/sBackTreeRegular.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 19,
    "yorigin": 64,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"dea5738f-0953-4b4f-b796-6e9fb1bbf188","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Tree",
    "path": "folders/Sprites/Tree.yy",
  },
}

================================================
FILE: sprites/sBackTreeRight/sBackTreeRight.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sBackTreeRight",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 51,
  "bbox_top": 0,
  "bbox_bottom": 52,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 52,
  "height": 53,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b8618b11-a8cf-45fa-a81d-1db5236b5e3a",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"1d37091a-7d2d-4c26-9acd-7c08c444a967",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"cf4e9d37-d1fb-4dc6-82a1-bf0d4aae9849",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"a9a9a2dc-1b86-445a-8054-8a0fa8de210c",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sBackTreeRight",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 4.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"83fd1ded-3275-4f29-bea6-419d0667e3ad","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"b8618b11-a8cf-45fa-a81d-1db5236b5e3a","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"ac755590-3f9e-4432-a9c0-c96146fe37cf","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"1d37091a-7d2d-4c26-9acd-7c08c444a967","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"648857d8-e9b2-4987-96d7-5713265f886f","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"cf4e9d37-d1fb-4dc6-82a1-bf0d4aae9849","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"4e6d8d72-01a6-4a2d-9cfd-6af3d670961f","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"a9a9a2dc-1b86-445a-8054-8a0fa8de210c","path":"sprites/sBackTreeRight/sBackTreeRight.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 26,
    "yorigin": 53,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"d57ed653-76f1-46af-9d87-9708bbaf5a6d","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Tree",
    "path": "folders/Sprites/Tree.yy",
  },
}

================================================
FILE: sprites/sFrontTreeTop/sFrontTreeTop.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sFrontTreeTop",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 38,
  "bbox_top": 0,
  "bbox_bottom": 31,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 39,
  "height": 32,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"7549665f-950e-481d-b56a-78d9c6a0ad2d",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d3513f89-73d5-4a3f-9095-61ce80892935",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"9fb18426-8385-4c8b-9c6d-bece668a4754",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"c7716812-ce7e-4afe-9210-a4e34160e273",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sFrontTreeTop",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 4.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"c330eee3-1033-4b7e-a064-d55164a21cea","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"7549665f-950e-481d-b56a-78d9c6a0ad2d","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"ffa80ece-7956-4fc9-a0ff-8dbda750f52a","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"d3513f89-73d5-4a3f-9095-61ce80892935","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"4fabb9e0-133a-40cf-8f07-a3fe2a1705e0","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"9fb18426-8385-4c8b-9c6d-bece668a4754","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"ca2a4289-f483-402c-b663-fca383d1c51f","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"c7716812-ce7e-4afe-9210-a4e34160e273","path":"sprites/sFrontTreeTop/sFrontTreeTop.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 19,
    "yorigin": 32,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"12dc8a96-6c5e-48a6-ab7f-5238681c5dbd","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Tree",
    "path": "folders/Sprites/Tree.yy",
  },
}

================================================
FILE: sprites/sPlayerFall/sPlayerFall.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerFall",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 24,
  "bbox_top": 0,
  "bbox_bottom": 27,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 25,
  "height": 28,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"faa9d1e2-68db-4cbd-ad40-fe47a2efbdc6",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerFall",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 1.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"3f2cddb2-a439-4753-adf9-beaf6f89b36a","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"faa9d1e2-68db-4cbd-ad40-fe47a2efbdc6","path":"sprites/sPlayerFall/sPlayerFall.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 12,
    "yorigin": 28,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f7b1d78a-9b46-4948-9b18-0852e779dc87","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerIdle/sPlayerIdle.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerIdle",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 23,
  "bbox_top": 0,
  "bbox_bottom": 27,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 24,
  "height": 28,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"7c36eecb-a734-470f-b983-f89a015476d1",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"3d2efb88-9e5f-46ac-8d83-c7e9282b6a1f",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6c6fbc0a-6aa3-43c1-aefc-218e0578f39e",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"41c3776f-a577-4fcb-a162-ac989bf8e8fa",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6f3f1ee9-ef73-4433-9c2a-239b47f2f6b8",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerIdle",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 5.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"3a2e899f-b3a7-4610-8aa7-4eca7a41b20f","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"7c36eecb-a734-470f-b983-f89a015476d1","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"f0ced655-4ccc-46ee-bc17-d06d2461d9a7","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"3d2efb88-9e5f-46ac-8d83-c7e9282b6a1f","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"242997b2-c792-401a-ba77-889873c6a048","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"6c6fbc0a-6aa3-43c1-aefc-218e0578f39e","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"e364c259-0291-41fc-9cf1-2e8734da361e","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"41c3776f-a577-4fcb-a162-ac989bf8e8fa","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"c853108f-4534-4a55-9ca0-36cc5fa17ef7","Key":4.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"6f3f1ee9-ef73-4433-9c2a-239b47f2f6b8","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 12,
    "yorigin": 28,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"075b9501-6b5d-4b42-9cd2-037a96614b1e","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerJump/sPlayerJump.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerJump",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 25,
  "bbox_top": 0,
  "bbox_bottom": 31,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 26,
  "height": 32,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"83254951-a432-49df-b21f-95c941b3ef71",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f445290c-419a-43c6-8beb-6f3b7521d8dc",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"04827da0-d96c-4ee9-a09b-1882ec7cf396",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerJump",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 3.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"1c9168bc-2248-4c44-a97f-cf98ab4688c1","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"83254951-a432-49df-b21f-95c941b3ef71","path":"sprites/sPlayerJump/sPlayerJump.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"381212ca-13e1-4276-af49-35e38e9bf91c","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"f445290c-419a-43c6-8beb-6f3b7521d8dc","path":"sprites/sPlayerJump/sPlayerJump.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"22a69071-f60a-4ece-9fc1-3dc86c38e254","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"04827da0-d96c-4ee9-a09b-1882ec7cf396","path":"sprites/sPlayerJump/sPlayerJump.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 13,
    "yorigin": 32,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f7b1d78a-9b46-4948-9b18-0852e779dc87","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerMask/sPlayerMask.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerMask",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 9,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 4,
  "bbox_right": 19,
  "bbox_top": 0,
  "bbox_bottom": 27,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 24,
  "height": 28,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f89bec84-625a-4390-a21f-241929f2ff90",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerMask",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 1.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"3ff63d34-4f99-4ccd-b50d-9749095bbe6e","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"f89bec84-625a-4390-a21f-241929f2ff90","path":"sprites/sPlayerMask/sPlayerMask.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 11,
    "yorigin": 28,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"91265d5f-e71f-4f71-882a-187f79c9336c","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"Layer 1",},
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"075b9501-6b5d-4b42-9cd2-037a96614b1e","visible":false,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerRun/sPlayerRun.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerRun",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 7,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 24,
  "bbox_top": 0,
  "bbox_bottom": 29,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 25,
  "height": 30,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"03745f02-832a-4525-9bdb-d29ef8ca442c",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"57bc6b8c-0148-40c6-83f8-d05921d1fe75",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"ec090a34-ae8d-4901-8539-eb59bd1b15c9",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"92e7ca1a-2164-4c0a-8a70-316f6158fb67",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"2d314115-1f4b-4463-8247-faededa0400e",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"8dae8fb0-922f-4a2f-a879-bbc5d8f40bd7",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerRun",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 6.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"a2964a9d-ba74-40b3-8fa4-61ca63cd5433","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"03745f02-832a-4525-9bdb-d29ef8ca442c","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"42e9f3fa-8865-469d-a0ed-641d4e181deb","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"57bc6b8c-0148-40c6-83f8-d05921d1fe75","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"0becdd6a-4873-4188-9f14-86349a05bed5","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"ec090a34-ae8d-4901-8539-eb59bd1b15c9","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"b7a48254-107c-4919-a05f-17fa996a1b56","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"92e7ca1a-2164-4c0a-8a70-316f6158fb67","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"47d72e9a-31e8-4e84-b498-4259d4a17d0e","Key":4.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"2d314115-1f4b-4463-8247-faededa0400e","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"b06c4a41-0893-4dd2-84db-4ac256313b4e","Key":5.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"8dae8fb0-922f-4a2f-a879-bbc5d8f40bd7","path":"sprites/sPlayerRun/sPlayerRun.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 12,
    "yorigin": 30,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f7b1d78a-9b46-4948-9b18-0852e779dc87","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerSwordAirAttack1",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 9,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 31,
  "bbox_top": 0,
  "bbox_bottom": 34,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 32,
  "height": 35,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"fc789121-5d78-41bd-97c8-ae437318d44e",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"60eadbb6-4a62-470a-900b-1b1628988c9e",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f3aba6b0-4f6a-4338-9e7c-85d42c92a067",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerSwordAirAttack1",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 3.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"ab87590b-55d3-4f75-88a2-365ed23253df","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"fc789121-5d78-41bd-97c8-ae437318d44e","path":"sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"de4f400c-561d-4bad-a93e-385e81676d90","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"60eadbb6-4a62-470a-900b-1b1628988c9e","path":"sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"be3059eb-e92f-4e17-9c2c-dd9c6c4bbbe3","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"f3aba6b0-4f6a-4338-9e7c-85d42c92a067","path":"sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 14,
    "yorigin": 27,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a1179343-2345-49e2-9f85-2ae9668d7fdb","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerSwordAirAttack2",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 9,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 37,
  "bbox_top": 0,
  "bbox_bottom": 36,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 38,
  "height": 37,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"74a0b2e1-9cb7-4fbb-afe5-c0641c5e1430",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"515a76fc-2fed-4f9f-9161-ef21964b2fab",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0932109a-7600-4beb-8cc3-39f512c90eb0",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerSwordAirAttack2",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 3.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"89e41636-83c2-4bd4-8f80-70d0765b3f7e","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"74a0b2e1-9cb7-4fbb-afe5-c0641c5e1430","path":"sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"9ef93af9-930e-4d22-bea3-f2d08b527c06","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"515a76fc-2fed-4f9f-9161-ef21964b2fab","path":"sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"e68c4acf-1023-4399-b69a-e5f609a7ec86","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"0932109a-7600-4beb-8cc3-39f512c90eb0","path":"sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 13,
    "yorigin": 27,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a1179343-2345-49e2-9f85-2ae9668d7fdb","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerSwordAttack1",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 9,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 43,
  "bbox_top": 0,
  "bbox_bottom": 28,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 44,
  "height": 29,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"98cc2c82-cbd1-43eb-addd-ce5c9c3753ca",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6de477b7-c3b4-4930-8943-412fef79f39f",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d9fe2a35-5358-48f9-a7ca-f62d70a45316",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerSwordAttack1",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 3.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"fdbefd02-25cd-458f-9c80-43d5b2a8e295","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"98cc2c82-cbd1-43eb-addd-ce5c9c3753ca","path":"sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"f4b3e7f7-d136-4833-b442-c94977596e3c","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"6de477b7-c3b4-4930-8943-412fef79f39f","path":"sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"2048068a-fb8c-4247-a143-aeabe853b371","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"d9fe2a35-5358-48f9-a7ca-f62d70a45316","path":"sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 12,
    "yorigin": 29,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a1179343-2345-49e2-9f85-2ae9668d7fdb","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerSwordAttack2",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  "origin": 9,
  "preMultiplyAlpha": false,
  "edgeFiltering": false,
  "collisionTolerance": 0,
  "swfPrecision": 2.525,
  "bbox_left": 0,
  "bbox_right": 39,
  "bbox_top": 0,
  "bbox_bottom": 36,
  "HTile": false,
  "VTile": false,
  "For3D": false,
  "DynamicTexturePage": false,
  "width": 40,
  "height": 37,
  "textureGroupId": {
    "name": "Default",
    "path": "texturegroups/Default",
  },
  "swatchColours": null,
  "gridX": 0,
  "gridY": 0,
  "frames": [
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"a25cd12e-b81e-421c-b01b-ed89900ca53b",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"62b3ef2d-4684-4b42-8e5f-7f076d92e334",},
    {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0e087a9c-14cf-46ac-9d48-2c2df7893000",},
  ],
  "sequence": {
    "resourceType": "GMSequence",
    "resourceVersion": "1.4",
    "name": "sPlayerSwordAttack2",
    "timeUnits": 1,
    "playback": 1,
    "playbackSpeed": 10.0,
    "playbackSpeedType": 0,
    "autoRecord": true,
    "volume": 1.0,
    "length": 3.0,
    "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MessageEventKeyframe>",},
    "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore<MomentsEventKeyframe>",},
    "tracks": [
      {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[
            {"id":"4a53ee08-5c46-44da-97c9-e5790c5cfa84","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"a25cd12e-b81e-421c-b01b-ed89900ca53b","path":"sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"ef56c119-1a3c-4530-9f5e-d6672a804267","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"62b3ef2d-4684-4b42-8e5f-7f076d92e334","path":"sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
            {"id":"01456ffc-c87d-4ce9-999e-99cb9668482e","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"0e087a9c-14cf-46ac-9d48-2c2df7893000","path":"sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe<SpriteFrameKeyframe>",},
          ],"resourceVersion":"1.0","resourceType":"KeyframeStore<SpriteFrameKeyframe>",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],},
    ],
    "visibleRange": null,
    "lockOrigin": false,
    "showBackdrop": true,
    "showBackdropImage": false,
    "backdropImagePath": "",
    "backdropImageOpacity": 0.5,
    "backdropWidth": 1366,
    "backdropHeight": 768,
    "backdropXOffset": 0.0,
    "backdropYOffset": 0.0,
    "xorigin": 13,
    "yorigin": 29,
    "eventToFunction": {},
    "eventStubScript": null,
  },
  "layers": [
    {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a1179343-2345-49e2-9f85-2ae9668d7fdb","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",},
  ],
  "nineSlice": null,
  "parent": {
    "name": "Player",
    "path": "folders/Sprites/Player.yy",
  },
}

================================================
FILE: sprites/sPlayerSwordAttack3/sPlayerSwordAttack3.yy
================================================
{
  "resourceType": "GMSprite",
  "resourceVersion": "1.0",
  "name": "sPlayerSwordAttack3",
  "bboxMode": 0,
  "collisionKind": 1,
  "type": 0,
  
Download .txt
gitextract_3opgkkmb/

├── .gitattributes
├── LICENSE
├── README.md
├── SnowState.yyp
├── fonts/
│   └── fDemo/
│       └── fDemo.yy
├── notes/
│   └── Credits/
│       ├── Credits.txt
│       └── Credits.yy
├── objects/
│   ├── oCamera/
│   │   ├── Alarm_0.gml
│   │   ├── Create_0.gml
│   │   ├── Step_0.gml
│   │   └── oCamera.yy
│   ├── oCloud/
│   │   ├── Step_0.gml
│   │   └── oCloud.yy
│   ├── oEffect/
│   │   ├── Other_7.gml
│   │   └── oEffect.yy
│   ├── oGame/
│   │   ├── Alarm_0.gml
│   │   ├── Create_0.gml
│   │   ├── Draw_64.gml
│   │   ├── Step_0.gml
│   │   └── oGame.yy
│   ├── oPlayerD/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── KeyRelease_82.gml
│   │   ├── Other_25.gml
│   │   ├── Other_76.gml
│   │   ├── Step_0.gml
│   │   └── oPlayerD.yy
│   ├── oPlayerT/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── KeyRelease_82.gml
│   │   ├── Other_25.gml
│   │   ├── Other_76.gml
│   │   ├── Step_0.gml
│   │   └── oPlayerT.yy
│   ├── oSwordD/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── Other_25.gml
│   │   ├── Step_0.gml
│   │   └── oSwordD.yy
│   ├── oSwordT/
│   │   ├── Create_0.gml
│   │   ├── Draw_0.gml
│   │   ├── Other_25.gml
│   │   ├── Step_0.gml
│   │   └── oSwordT.yy
│   └── oWall/
│       └── oWall.yy
├── options/
│   ├── amazonfire/
│   │   └── options_amazonfire.yy
│   ├── android/
│   │   └── options_android.yy
│   ├── html5/
│   │   └── options_html5.yy
│   ├── ios/
│   │   └── options_ios.yy
│   ├── linux/
│   │   └── options_linux.yy
│   ├── mac/
│   │   └── options_mac.yy
│   ├── main/
│   │   └── options_main.yy
│   ├── operagx/
│   │   └── options_operagx.yy
│   ├── ps4/
│   │   └── options_ps4.yy
│   ├── ps5/
│   │   └── options_ps5.yy
│   ├── switch/
│   │   └── options_switch.yy
│   ├── tvos/
│   │   └── options_tvos.yy
│   ├── windows/
│   │   └── options_windows.yy
│   ├── windowsuap/
│   │   └── options_windowsuap.yy
│   └── xboxseriesxs/
│       └── options_xboxseriesxs.yy
├── rooms/
│   └── rDemo/
│       ├── RoomCreationCode.gml
│       └── rDemo.yy
├── scripts/
│   ├── MACROS/
│   │   ├── MACROS.gml
│   │   └── MACROS.yy
│   ├── SnowState/
│   │   ├── SnowState.gml
│   │   └── SnowState.yy
│   ├── Utility/
│   │   ├── Utility.gml
│   │   └── Utility.yy
│   └── __snowstate_config/
│       ├── __snowstate_config.gml
│       └── __snowstate_config.yy
├── sprites/
│   ├── bgBigCloud/
│   │   └── bgBigCloud.yy
│   ├── bgSky/
│   │   └── bgSky.yy
│   ├── sBackTreeRegular/
│   │   └── sBackTreeRegular.yy
│   ├── sBackTreeRight/
│   │   └── sBackTreeRight.yy
│   ├── sFrontTreeTop/
│   │   └── sFrontTreeTop.yy
│   ├── sPlayerFall/
│   │   └── sPlayerFall.yy
│   ├── sPlayerIdle/
│   │   └── sPlayerIdle.yy
│   ├── sPlayerJump/
│   │   └── sPlayerJump.yy
│   ├── sPlayerMask/
│   │   └── sPlayerMask.yy
│   ├── sPlayerRun/
│   │   └── sPlayerRun.yy
│   ├── sPlayerSwordAirAttack1/
│   │   └── sPlayerSwordAirAttack1.yy
│   ├── sPlayerSwordAirAttack2/
│   │   └── sPlayerSwordAirAttack2.yy
│   ├── sPlayerSwordAttack1/
│   │   └── sPlayerSwordAttack1.yy
│   ├── sPlayerSwordAttack2/
│   │   └── sPlayerSwordAttack2.yy
│   ├── sPlayerSwordAttack3/
│   │   └── sPlayerSwordAttack3.yy
│   ├── sPlayerSwordFall/
│   │   └── sPlayerSwordFall.yy
│   ├── sPlayerSwordIdle/
│   │   └── sPlayerSwordIdle.yy
│   ├── sPlayerSwordJump/
│   │   └── sPlayerSwordJump.yy
│   ├── sPlayerSwordRun/
│   │   └── sPlayerSwordRun.yy
│   ├── sPlayerSwordThrowSword/
│   │   └── sPlayerSwordThrowSword.yy
│   ├── sSmallCloud1/
│   │   └── sSmallCloud1.yy
│   ├── sSmallCloud2/
│   │   └── sSmallCloud2.yy
│   ├── sSmallCloud3/
│   │   └── sSmallCloud3.yy
│   ├── sSwordEffectAirAttack1/
│   │   └── sSwordEffectAirAttack1.yy
│   ├── sSwordEffectAirAttack2/
│   │   └── sSwordEffectAirAttack2.yy
│   ├── sSwordEffectAttack1/
│   │   └── sSwordEffectAttack1.yy
│   ├── sSwordEffectAttack2/
│   │   └── sSwordEffectAttack2.yy
│   ├── sSwordEffectAttack3/
│   │   └── sSwordEffectAttack3.yy
│   ├── sSwordEmbedded/
│   │   └── sSwordEmbedded.yy
│   ├── sSwordEmbeddedMask/
│   │   └── sSwordEmbeddedMask.yy
│   ├── sSwordIdle/
│   │   └── sSwordIdle.yy
│   ├── sSwordMask/
│   │   └── sSwordMask.yy
│   ├── sSwordSpinning/
│   │   └── sSwordSpinning.yy
│   ├── sWall/
│   │   └── sWall.yy
│   ├── sWater/
│   │   └── sWater.yy
│   ├── sWaterReflection/
│   │   └── sWaterReflection.yy
│   ├── stFrontTreeBody/
│   │   └── stFrontTreeBody.yy
│   ├── stGrass/
│   │   └── stGrass.yy
│   └── stTerrain/
│       └── stTerrain.yy
└── tilesets/
    ├── tFrontTreeBody/
    │   └── tFrontTreeBody.yy
    ├── tGrass/
    │   └── tGrass.yy
    └── tTerrain/
        └── tTerrain.yy
Condensed preview — 112 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (322K chars).
[
  {
    "path": ".gitattributes",
    "chars": 43,
    "preview": "*.yy linguist-language=Game Maker Language\n"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2020 Sohom Sahaun\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 1319,
    "preview": "<h1 align=\"center\">SnowState 3.1.4</h1>\n<p align=\"center\">@sohomsahaun</p>\n\n---\n\n**SnowState** is a robust finite state "
  },
  {
    "path": "SnowState.yyp",
    "chars": 9130,
    "preview": "{\n  \"resourceType\": \"GMProject\",\n  \"resourceVersion\": \"1.6\",\n  \"name\": \"SnowState\",\n  \"resources\": [\n    {\"id\":{\"name\":\""
  },
  {
    "path": "fonts/fDemo/fDemo.yy",
    "chars": 8587,
    "preview": "{\n  \"hinting\": 0,\n  \"glyphOperations\": 0,\n  \"interpreter\": 0,\n  \"pointRounding\": 0,\n  \"fontName\": \"Consolas\",\n  \"styleNa"
  },
  {
    "path": "notes/Credits/Credits.txt",
    "chars": 103,
    "preview": "ART ASSETS\n-----------\n\nTreasure Hunters | Pixel Frog\nhttps://pixelfrog-assets.itch.io/treasure-hunters"
  },
  {
    "path": "notes/Credits/Credits.yy",
    "chars": 167,
    "preview": "{\n  \"parent\": {\n    \"name\": \"Notes\",\n    \"path\": \"folders/Notes.yy\",\n  },\n  \"resourceVersion\": \"1.1\",\n  \"name\": \"Credits"
  },
  {
    "path": "objects/oCamera/Alarm_0.gml",
    "chars": 16,
    "preview": "window_center();"
  },
  {
    "path": "objects/oCamera/Create_0.gml",
    "chars": 1022,
    "preview": "// Stay in the correct layer\nif (layer_exists(\"Controllers\")) layer = layer_get_id(\"Controllers\");\n\nwidth = 480;\nheight "
  },
  {
    "path": "objects/oCamera/Step_0.gml",
    "chars": 11,
    "preview": "fsm.step();"
  },
  {
    "path": "objects/oCamera/oCamera.yy",
    "chars": 1101,
    "preview": "{\n  \"resourceType\": \"GMObject\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"oCamera\",\n  \"spriteId\": null,\n  \"solid\": false,\n "
  },
  {
    "path": "objects/oCloud/Step_0.gml",
    "chars": 39,
    "preview": "if (bbox_right < 0) instance_destroy();"
  },
  {
    "path": "objects/oCloud/oCloud.yy",
    "chars": 839,
    "preview": "{\n  \"spriteId\": null,\n  \"solid\": false,\n  \"visible\": true,\n  \"spriteMaskId\": null,\n  \"persistent\": false,\n  \"parentObjec"
  },
  {
    "path": "objects/oEffect/Other_7.gml",
    "chars": 19,
    "preview": "instance_destroy();"
  },
  {
    "path": "objects/oEffect/oEffect.yy",
    "chars": 840,
    "preview": "{\n  \"spriteId\": null,\n  \"solid\": false,\n  \"visible\": true,\n  \"spriteMaskId\": null,\n  \"persistent\": false,\n  \"parentObjec"
  },
  {
    "path": "objects/oGame/Alarm_0.gml",
    "chars": 305,
    "preview": "var _x = room_width + random_range(0, 100);\nvar _y = random_range(80, 180);\n\nwith (instance_create_layer(_x, _y, \"SmallC"
  },
  {
    "path": "objects/oGame/Create_0.gml",
    "chars": 71,
    "preview": "randomize();\n\nshowControls = false;\nshowHistory = false;\n\nalarm[0] = 1;"
  },
  {
    "path": "objects/oGame/Draw_64.gml",
    "chars": 1603,
    "preview": "draw_set_font(fDemo);\ndraw_set_halign(fa_right);\ndraw_set_valign(fa_bottom);\n\nvar _x, _y, _diff, _thickness;\n_diff = 24;"
  },
  {
    "path": "objects/oGame/Step_0.gml",
    "chars": 98,
    "preview": "showControls ^= keyboard_check_released(vk_f2);\nshowHistory ^= keyboard_check_released(ord(\"H\"));\n"
  },
  {
    "path": "objects/oGame/oGame.yy",
    "chars": 1268,
    "preview": "{\n  \"spriteId\": null,\n  \"solid\": false,\n  \"visible\": true,\n  \"spriteMaskId\": null,\n  \"persistent\": false,\n  \"parentObjec"
  },
  {
    "path": "objects/oPlayerD/Create_0.gml",
    "chars": 8369,
    "preview": "// Setup\nmask_index = sPlayerMask;\n\n// Declare methods\nevent_user(15);\n\n// Sprite management\nsprites = {};\ninit_sprites("
  },
  {
    "path": "objects/oPlayerD/Draw_0.gml",
    "chars": 11,
    "preview": "fsm.draw();"
  },
  {
    "path": "objects/oPlayerD/KeyRelease_82.gml",
    "chars": 16,
    "preview": "game_restart();\n"
  },
  {
    "path": "objects/oPlayerD/Other_25.gml",
    "chars": 2013,
    "preview": "/// @desc Methods\n\ninit_sprites = function() {\n\tvar _i = 0; repeat (argument_count div 2) {\n\t\tvar _noSword = asset_get_i"
  },
  {
    "path": "objects/oPlayerD/Other_76.gml",
    "chars": 17,
    "preview": "fsm.throwSword();"
  },
  {
    "path": "objects/oPlayerD/Step_0.gml",
    "chars": 26,
    "preview": "check_input();\nfsm.step();"
  },
  {
    "path": "objects/oPlayerD/oPlayerD.yy",
    "chars": 1611,
    "preview": "{\n  \"resourceType\": \"GMObject\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"oPlayerD\",\n  \"spriteId\": {\n    \"name\": \"sPlayerId"
  },
  {
    "path": "objects/oPlayerT/Create_0.gml",
    "chars": 6490,
    "preview": "// Setup\nmask_index = sPlayerMask;\n\n// Declare methods\nevent_user(15);\n\n// Sprite management\nsprites = {};\ninit_sprites("
  },
  {
    "path": "objects/oPlayerT/Draw_0.gml",
    "chars": 11,
    "preview": "fsm.draw();"
  },
  {
    "path": "objects/oPlayerT/KeyRelease_82.gml",
    "chars": 16,
    "preview": "game_restart();\n"
  },
  {
    "path": "objects/oPlayerT/Other_25.gml",
    "chars": 2117,
    "preview": "/// @desc Methods\n\ninit_sprites = function() {\n\tvar _i = 0; repeat (argument_count div 2) {\n\t\tvar _noSword = asset_get_i"
  },
  {
    "path": "objects/oPlayerT/Other_76.gml",
    "chars": 17,
    "preview": "fsm.throwSword();"
  },
  {
    "path": "objects/oPlayerT/Step_0.gml",
    "chars": 252,
    "preview": "check_input();\n\nfsm.trigger(\"t_coyote\");\nfsm.step();\nif (abs(input.hdir)) fsm.trigger(\"t_run\");\nif (input.jump) fsm.trig"
  },
  {
    "path": "objects/oPlayerT/oPlayerT.yy",
    "chars": 1641,
    "preview": "{\n  \"resourceType\": \"GMObject\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"oPlayerT\",\n  \"spriteId\": {\n    \"name\": \"sPlayerId"
  },
  {
    "path": "objects/oSwordD/Create_0.gml",
    "chars": 1752,
    "preview": "// Setup\nmask_index = sSwordMask;\n\n// Declare methods\nevent_user(15);\n\n// Variables\nowner = noone;\nspd = 6;\nhspd = 0;\nfa"
  },
  {
    "path": "objects/oSwordD/Draw_0.gml",
    "chars": 11,
    "preview": "fsm.draw();"
  },
  {
    "path": "objects/oSwordD/Other_25.gml",
    "chars": 129,
    "preview": "/// @desc Methods\n\nrecall = function() {\n\tif (instance_exists(owner) && fsm.state_is(\"embedded\")) {\n\t\tfsm.change(\"recall"
  },
  {
    "path": "objects/oSwordD/Step_0.gml",
    "chars": 11,
    "preview": "fsm.step();"
  },
  {
    "path": "objects/oSwordD/oSwordD.yy",
    "chars": 1373,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"sSwordIdle\",\n    \"path\": \"sprites/sSwordIdle/sSwordIdle.yy\",\n  },\n  \"solid\": false,\n  \"vi"
  },
  {
    "path": "objects/oSwordT/Create_0.gml",
    "chars": 1898,
    "preview": "// Setup\nmask_index = sSwordMask;\n\n// Declare methods\nevent_user(15);\n\n// Variables\nowner = noone;\nspd = 6;\nhspd = 0;\nfa"
  },
  {
    "path": "objects/oSwordT/Draw_0.gml",
    "chars": 11,
    "preview": "fsm.draw();"
  },
  {
    "path": "objects/oSwordT/Other_25.gml",
    "chars": 69,
    "preview": "/// @desc Methods\n\nrecall = function() {\n\tfsm.trigger(\"t_recall\");\n};"
  },
  {
    "path": "objects/oSwordT/Step_0.gml",
    "chars": 39,
    "preview": "fsm.trigger(\"t_pre_step\");\n\nfsm.step();"
  },
  {
    "path": "objects/oSwordT/oSwordT.yy",
    "chars": 1403,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"sSwordIdle\",\n    \"path\": \"sprites/sSwordIdle/sSwordIdle.yy\",\n  },\n  \"solid\": false,\n  \"vi"
  },
  {
    "path": "objects/oWall/oWall.yy",
    "chars": 752,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"sWall\",\n    \"path\": \"sprites/sWall/sWall.yy\",\n  },\n  \"solid\": false,\n  \"visible\": true,\n "
  },
  {
    "path": "options/amazonfire/options_amazonfire.yy",
    "chars": 2473,
    "preview": "{\n  \"option_amazonfire_sync_android\": false,\n  \"option_amazonfire_display_name\": \"Created with GameMaker Studio 2\",\n  \"o"
  },
  {
    "path": "options/android/options_android.yy",
    "chars": 4154,
    "preview": "{\n  \"option_android_sync_amazon\": false,\n  \"option_android_display_name\": \"Created with GameMaker Studio 2\",\n  \"option_a"
  },
  {
    "path": "options/html5/options_html5.yy",
    "chars": 1250,
    "preview": "{\n  \"option_html5_browser_title\": \"Created with GameMaker Studio 2\",\n  \"option_html5_version\": \"1.0.0.0\",\n  \"option_html"
  },
  {
    "path": "options/ios/options_ios.yy",
    "chars": 3036,
    "preview": "{\n  \"option_ios_display_name\": \"Created with GameMaker Studio 2\",\n  \"option_ios_bundle_name\": \"com.company.game\",\n  \"opt"
  },
  {
    "path": "options/linux/options_linux.yy",
    "chars": 931,
    "preview": "{\n  \"option_linux_display_name\": \"Created with GameMaker Studio 2\",\n  \"option_linux_version\": \"1.0.0.0\",\n  \"option_linux"
  },
  {
    "path": "options/mac/options_mac.yy",
    "chars": 1290,
    "preview": "{\n  \"option_mac_display_name\": \"Created with GameMaker Studio 2\",\n  \"option_mac_app_id\": \"com.company.game\",\n  \"option_m"
  },
  {
    "path": "options/main/options_main.yy",
    "chars": 728,
    "preview": "{\n  \"option_gameguid\": \"e853c891-a127-4810-a122-eb28266b9756\",\n  \"option_gameid\": \"0\",\n  \"option_game_speed\": 60,\n  \"opt"
  },
  {
    "path": "options/operagx/options_operagx.yy",
    "chars": 453,
    "preview": "{\n  \"option_operagx_version\": \"1.0.0.0\",\n  \"option_operagx_game_name\": \"${project_name}\",\n  \"option_operagx_splash_scree"
  },
  {
    "path": "options/ps4/options_ps4.yy",
    "chars": 1660,
    "preview": "{\n  \"resourceType\": \"GMPS4Options\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"PlayStation 4\",\n  \"option_ps4_package_id\": \"I"
  },
  {
    "path": "options/ps5/options_ps5.yy",
    "chars": 1407,
    "preview": "{\n  \"resourceType\": \"GMPS5Options\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"PlayStation 5\",\n  \"option_ps5_package_id\": \"I"
  },
  {
    "path": "options/switch/options_switch.yy",
    "chars": 586,
    "preview": "{\n  \"resourceType\": \"GMSwitchOptions\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"Switch\",\n  \"option_switch_project_nmeta\": "
  },
  {
    "path": "options/tvos/options_tvos.yy",
    "chars": 1432,
    "preview": "{\n  \"option_tvos_display_name\": \"Made in GameMaker Studio 2\",\n  \"option_tvos_bundle_name\": \"com.company.game\",\n  \"option"
  },
  {
    "path": "options/windows/options_windows.yy",
    "chars": 1702,
    "preview": "{\n  \"option_windows_display_name\": \"Created with GameMaker Studio 2\",\n  \"option_windows_executable_name\": \"${project_nam"
  },
  {
    "path": "options/windowsuap/options_windowsuap.yy",
    "chars": 3605,
    "preview": "{\n  \"option_windowsuap_display_name\": \"Created with GameMaker\",\n  \"option_windowsuap_package_name\": \"YourPackageName\",\n "
  },
  {
    "path": "options/xboxseriesxs/options_xboxseriesxs.yy",
    "chars": 2387,
    "preview": "{\n  \"resourceType\": \"GMXboxSeriesXSOptions\",\n  \"resourceVersion\": \"1.1\",\n  \"name\": \"Xbox Series XS\",\n  \"option_xboxserie"
  },
  {
    "path": "rooms/rDemo/RoomCreationCode.gml",
    "chars": 105,
    "preview": "var _player = (DEMO == \"D\") ? oPlayerD : oPlayerT;\ninstance_create_layer(384, 288, \"Instances\", _player);"
  },
  {
    "path": "rooms/rDemo/rDemo.yy",
    "chars": 16124,
    "preview": "{\n  \"resourceType\": \"GMRoom\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"rDemo\",\n  \"isDnd\": false,\n  \"volume\": 1.0,\n  \"paren"
  },
  {
    "path": "scripts/MACROS/MACROS.gml",
    "chars": 418,
    "preview": "#macro DEMO \"T\"\t\t// D = Changing States Directly\n\t\t\t\t\t// T = Changing States Using Triggered Transitions\n\n#macro CAM   v"
  },
  {
    "path": "scripts/MACROS/MACROS.yy",
    "chars": 217,
    "preview": "{\n  \"isDnD\": false,\n  \"isCompatibility\": false,\n  \"parent\": {\n    \"name\": \"Scripts\",\n    \"path\": \"folders/Scripts.yy\",\n "
  },
  {
    "path": "scripts/SnowState/SnowState.gml",
    "chars": 32138,
    "preview": "/**\n*\tSnowState | v3.1.4\n*\tDocumentation: https://github.com/sohomsahaun/SnowState/wiki\n*\n*\tAuthor: Sohom Sahaun | @soho"
  },
  {
    "path": "scripts/SnowState/SnowState.yy",
    "chars": 210,
    "preview": "{\n  \"resourceType\": \"GMScript\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"SnowState\",\n  \"isDnD\": false,\n  \"isCompatibility\""
  },
  {
    "path": "scripts/Utility/Utility.gml",
    "chars": 972,
    "preview": "/**\n*\tSome commonly used scripts\n*\tCredit goes to the awesome GM community\n*/\n\n/// @func animation_end()\nfunction animat"
  },
  {
    "path": "scripts/Utility/Utility.yy",
    "chars": 218,
    "preview": "{\n  \"isDnD\": false,\n  \"isCompatibility\": false,\n  \"parent\": {\n    \"name\": \"Scripts\",\n    \"path\": \"folders/Scripts.yy\",\n "
  },
  {
    "path": "scripts/__snowstate_config/__snowstate_config.gml",
    "chars": 722,
    "preview": "/**\n*\tSnowState Configuration\n*\tDocumentation: https://github.com/sohomsahaun/SnowState/wiki/Configuration\n*/\n\n#macro SN"
  },
  {
    "path": "scripts/__snowstate_config/__snowstate_config.yy",
    "chars": 233,
    "preview": "{\n  \"isDnD\": false,\n  \"isCompatibility\": false,\n  \"parent\": {\n    \"name\": \"SnowState\",\n    \"path\": \"folders/SnowState.yy"
  },
  {
    "path": "sprites/bgBigCloud/bgBigCloud.yy",
    "chars": 2689,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"bgBigCloud\",\n  \"bboxMode\": 0,\n  \"collisionKind\": "
  },
  {
    "path": "sprites/bgSky/bgSky.yy",
    "chars": 2667,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"bgSky\",\n  \"bboxMode\": 0,\n  \"collisionKind\": 1,\n  "
  },
  {
    "path": "sprites/sBackTreeRegular/sBackTreeRegular.yy",
    "chars": 4223,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sBackTreeRegular\",\n  \"bboxMode\": 0,\n  \"collisionK"
  },
  {
    "path": "sprites/sBackTreeRight/sBackTreeRight.yy",
    "chars": 4203,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sBackTreeRight\",\n  \"bboxMode\": 0,\n  \"collisionKin"
  },
  {
    "path": "sprites/sFrontTreeTop/sFrontTreeTop.yy",
    "chars": 4193,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sFrontTreeTop\",\n  \"bboxMode\": 0,\n  \"collisionKind"
  },
  {
    "path": "sprites/sPlayerFall/sPlayerFall.yy",
    "chars": 2683,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerFall\",\n  \"bboxMode\": 0,\n  \"collisionKind\":"
  },
  {
    "path": "sprites/sPlayerIdle/sPlayerIdle.yy",
    "chars": 4675,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerIdle\",\n  \"bboxMode\": 0,\n  \"collisionKind\":"
  },
  {
    "path": "sprites/sPlayerJump/sPlayerJump.yy",
    "chars": 3679,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerJump\",\n  \"bboxMode\": 0,\n  \"collisionKind\":"
  },
  {
    "path": "sprites/sPlayerMask/sPlayerMask.yy",
    "chars": 2878,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerMask\",\n  \"bboxMode\": 0,\n  \"collisionKind\":"
  },
  {
    "path": "sprites/sPlayerRun/sPlayerRun.yy",
    "chars": 5159,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerRun\",\n  \"bboxMode\": 0,\n  \"collisionKind\": "
  },
  {
    "path": "sprites/sPlayerSwordAirAttack1/sPlayerSwordAirAttack1.yy",
    "chars": 3767,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordAirAttack1\",\n  \"bboxMode\": 0,\n  \"coll"
  },
  {
    "path": "sprites/sPlayerSwordAirAttack2/sPlayerSwordAirAttack2.yy",
    "chars": 3767,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordAirAttack2\",\n  \"bboxMode\": 0,\n  \"coll"
  },
  {
    "path": "sprites/sPlayerSwordAttack1/sPlayerSwordAttack1.yy",
    "chars": 3743,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordAttack1\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sPlayerSwordAttack2/sPlayerSwordAttack2.yy",
    "chars": 3743,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordAttack2\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sPlayerSwordAttack3/sPlayerSwordAttack3.yy",
    "chars": 3743,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordAttack3\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sPlayerSwordFall/sPlayerSwordFall.yy",
    "chars": 2703,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordFall\",\n  \"bboxMode\": 0,\n  \"collisionK"
  },
  {
    "path": "sprites/sPlayerSwordIdle/sPlayerSwordIdle.yy",
    "chars": 4735,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordIdle\",\n  \"bboxMode\": 0,\n  \"collisionK"
  },
  {
    "path": "sprites/sPlayerSwordJump/sPlayerSwordJump.yy",
    "chars": 3719,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordJump\",\n  \"bboxMode\": 0,\n  \"collisionK"
  },
  {
    "path": "sprites/sPlayerSwordRun/sPlayerSwordRun.yy",
    "chars": 5229,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordRun\",\n  \"bboxMode\": 0,\n  \"collisionKi"
  },
  {
    "path": "sprites/sPlayerSwordThrowSword/sPlayerSwordThrowSword.yy",
    "chars": 4121,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sPlayerSwordThrowSword\",\n  \"bboxMode\": 0,\n  \"coll"
  },
  {
    "path": "sprites/sSmallCloud1/sSmallCloud1.yy",
    "chars": 2693,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSmallCloud1\",\n  \"bboxMode\": 0,\n  \"collisionKind\""
  },
  {
    "path": "sprites/sSmallCloud2/sSmallCloud2.yy",
    "chars": 2695,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSmallCloud2\",\n  \"bboxMode\": 0,\n  \"collisionKind\""
  },
  {
    "path": "sprites/sSmallCloud3/sSmallCloud3.yy",
    "chars": 2695,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSmallCloud3\",\n  \"bboxMode\": 0,\n  \"collisionKind\""
  },
  {
    "path": "sprites/sSwordEffectAirAttack1/sSwordEffectAirAttack1.yy",
    "chars": 3253,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEffectAirAttack1\",\n  \"bboxMode\": 0,\n  \"coll"
  },
  {
    "path": "sprites/sSwordEffectAirAttack2/sSwordEffectAirAttack2.yy",
    "chars": 3253,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEffectAirAttack2\",\n  \"bboxMode\": 0,\n  \"coll"
  },
  {
    "path": "sprites/sSwordEffectAttack1/sSwordEffectAttack1.yy",
    "chars": 3750,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEffectAttack1\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sSwordEffectAttack2/sSwordEffectAttack2.yy",
    "chars": 3750,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEffectAttack2\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sSwordEffectAttack3/sSwordEffectAttack3.yy",
    "chars": 3750,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEffectAttack3\",\n  \"bboxMode\": 0,\n  \"collisi"
  },
  {
    "path": "sprites/sSwordEmbedded/sSwordEmbedded.yy",
    "chars": 4203,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEmbedded\",\n  \"bboxMode\": 0,\n  \"collisionKin"
  },
  {
    "path": "sprites/sSwordEmbeddedMask/sSwordEmbeddedMask.yy",
    "chars": 2900,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordEmbeddedMask\",\n  \"bboxMode\": 0,\n  \"collisio"
  },
  {
    "path": "sprites/sSwordIdle/sSwordIdle.yy",
    "chars": 6145,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordIdle\",\n  \"bboxMode\": 0,\n  \"collisionKind\": "
  },
  {
    "path": "sprites/sSwordMask/sSwordMask.yy",
    "chars": 2868,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordMask\",\n  \"bboxMode\": 0,\n  \"collisionKind\": "
  },
  {
    "path": "sprites/sSwordSpinning/sSwordSpinning.yy",
    "chars": 4203,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sSwordSpinning\",\n  \"bboxMode\": 0,\n  \"collisionKin"
  },
  {
    "path": "sprites/sWall/sWall.yy",
    "chars": 2651,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sWall\",\n  \"bboxMode\": 0,\n  \"collisionKind\": 1,\n  "
  },
  {
    "path": "sprites/sWater/sWater.yy",
    "chars": 2669,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sWater\",\n  \"bboxMode\": 0,\n  \"collisionKind\": 1,\n "
  },
  {
    "path": "sprites/sWaterReflection/sWaterReflection.yy",
    "chars": 4234,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"sWaterReflection\",\n  \"bboxMode\": 0,\n  \"collisionK"
  },
  {
    "path": "sprites/stFrontTreeBody/stFrontTreeBody.yy",
    "chars": 2695,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"stFrontTreeBody\",\n  \"bboxMode\": 0,\n  \"collisionKi"
  },
  {
    "path": "sprites/stGrass/stGrass.yy",
    "chars": 2665,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"stGrass\",\n  \"bboxMode\": 0,\n  \"collisionKind\": 1,\n"
  },
  {
    "path": "sprites/stTerrain/stTerrain.yy",
    "chars": 2675,
    "preview": "{\n  \"resourceType\": \"GMSprite\",\n  \"resourceVersion\": \"1.0\",\n  \"name\": \"stTerrain\",\n  \"bboxMode\": 0,\n  \"collisionKind\": 1"
  },
  {
    "path": "tilesets/tFrontTreeBody/tFrontTreeBody.yy",
    "chars": 1038,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"stFrontTreeBody\",\n    \"path\": \"sprites/stFrontTreeBody/stFrontTreeBody.yy\",\n  },\n  \"tileW"
  },
  {
    "path": "tilesets/tGrass/tGrass.yy",
    "chars": 866,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"stGrass\",\n    \"path\": \"sprites/stGrass/stGrass.yy\",\n  },\n  \"tileWidth\": 32,\n  \"tileHeight"
  },
  {
    "path": "tilesets/tTerrain/tTerrain.yy",
    "chars": 1312,
    "preview": "{\n  \"spriteId\": {\n    \"name\": \"stTerrain\",\n    \"path\": \"sprites/stTerrain/stTerrain.yy\",\n  },\n  \"tileWidth\": 32,\n  \"tile"
  }
]

About this extraction

This page contains the full source code of the sohomsahaun/SnowState GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 112 files (272.9 KB), approximately 94.4k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!