From a2f0a93a75b884c156f97aa66f2cc7975c292de3 Mon Sep 17 00:00:00 2001
From: MonkeyGG2
Date: Fri, 8 Sep 2023 21:05:46 -0400
Subject: [PATCH] logo change, style change, games json file; almost whole
revamp is in this commit
---
css/loading.css | 3 +-
css/style.css | 136 +-
game-info.jsonc | 169 +
games/core-ball/image/WB_logo.png | Bin 0 -> 1361 bytes
games/core-ball/image/arrow.png | Bin 0 -> 5707 bytes
games/core-ball/image/btn_fw.png | Bin 0 -> 1742 bytes
games/core-ball/index.html | 40 +
games/core-ball/index.js | 692 +
games/core-ball/js/conf/requireConf.js | 3 +
games/core-ball/js/general/Ball.js | 67 +
games/core-ball/js/general/BallQueue.js | 139 +
games/core-ball/js/general/BeginStage.js | 64 +
games/core-ball/js/general/Collide.js | 30 +
games/core-ball/js/general/Core.js | 101 +
games/core-ball/js/general/Game.js | 172 +
games/core-ball/js/general/LevelCode.js | 35 +
games/core-ball/js/general/Levels.js | 292 +
games/core-ball/js/general/Scene.js | 196 +
games/core-ball/js/general/Switcher.js | 84 +
games/core-ball/js/general/Tween.js | 28 +
games/core-ball/js/lib/CustEvent.js | 77 +
games/core-ball/js/lib/Storage.js | 27 +
games/core-ball/js/lib/addEvent.js | 26 +
games/core-ball/js/lib/md5.js | 274 +
games/core-ball/js/lib/require.js | 36 +
games/core-ball/js/lib/stopEvent.js | 21 +
games/core-ball/js/lib/util.js | 50 +
games/core-ball/js/page/index.js | 15 +
games/core-ball/pr_source.png | Bin 0 -> 28912 bytes
games/core-ball/style.css | 65 +
games/core-ball/tool/js_builder/Gruntfile.js | 114 +
.../tool/js_builder/built/index.min.js | 694 +
games/mario-game/all.js | 6256 +-
games/mario-game/index.html | 5 +
games/subway-surfers-ny/NewYorkIcon.png | Bin 0 -> 64816 bytes
.../assets/audio/guard_catch.ogg | Bin 0 -> 25320 bytes
.../assets/audio/guard_proximity.ogg | Bin 0 -> 79970 bytes
.../assets/audio/guard_start.ogg | Bin 0 -> 33575 bytes
.../assets/audio/hero_death.ogg | Bin 0 -> 11175 bytes
.../assets/audio/hero_death_hitcam.ogg | Bin 0 -> 7573 bytes
.../assets/audio/hero_dodge.ogg | Bin 0 -> 5179 bytes
.../assets/audio/hero_foot_l.ogg | Bin 0 -> 3746 bytes
.../assets/audio/hero_foot_r.ogg | Bin 0 -> 3761 bytes
.../assets/audio/hero_hoverboard_crash.ogg | Bin 0 -> 11385 bytes
.../assets/audio/hero_jump.ogg | Bin 0 -> 8018 bytes
.../assets/audio/hero_revive.ogg | Bin 0 -> 31367 bytes
.../assets/audio/hero_roll.ogg | Bin 0 -> 6267 bytes
.../assets/audio/hero_sneakers_foot_l.ogg | Bin 0 -> 4241 bytes
.../assets/audio/hero_sneakers_foot_r.ogg | Bin 0 -> 4229 bytes
.../assets/audio/hero_sneakers_jump.ogg | Bin 0 -> 6292 bytes
.../assets/audio/hero_stumble.ogg | Bin 0 -> 7223 bytes
.../assets/audio/pickup_coin.ogg | Bin 0 -> 6030 bytes
.../assets/audio/pickup_powerup.ogg | Bin 0 -> 16652 bytes
.../assets/audio/special_jetpack.ogg | Bin 0 -> 32211 bytes
.../assets/audio/special_jetpack_start.ogg | Bin 0 -> 22867 bytes
.../assets/audio/special_magnet.ogg | Bin 0 -> 9789 bytes
.../subway-surfers-ny/assets/audio/theme.ogg | Bin 0 -> 1277137 bytes
.../assets/audio/ui_button.ogg | Bin 0 -> 5891 bytes
.../assets/data/chunks_game.json | 1 +
.../assets/data/chunks_idle.json | 1 +
.../subway-surfers-ny/assets/data/config.json | 21 +
.../assets/data/strings_en.json | 53 +
.../assets/font/lilita-one.css | 6 +
.../assets/font/lilita-one.woff2 | Bin 0 -> 11924 bytes
.../assets/font/titan-one.css | 6 +
.../assets/font/titan-one.woff2 | Bin 0 -> 18240 bytes
.../assets/game/board_new_york.fbx | Bin 0 -> 43488 bytes
.../assets/game/board_new_york01.fbx | Bin 0 -> 61184 bytes
.../assets/game/board_new_york_tex_mip.png | Bin 0 -> 889 bytes
.../assets/game/effects_tex_mip.png | Bin 0 -> 2932 bytes
.../assets/game/enemies_mip.png | Bin 0 -> 78376 bytes
.../assets/game/environment.fbx | Bin 0 -> 4541020 bytes
.../assets/game/halo_mip.png | Bin 0 -> 4330 bytes
.../assets/game/jetpackSmoke_mip.png | Bin 0 -> 23855 bytes
.../assets/game/model_avatar_catch.fbx | Bin 0 -> 1037152 bytes
.../assets/game/model_avatar_movement.fbx | Bin 0 -> 1432316 bytes
.../game/model_avatar_powerup_jet_pack.fbx | Bin 0 -> 418860 bytes
.../game/model_avatar_powerup_pogostick.fbx | Bin 0 -> 1007952 bytes
.../assets/game/model_avatar_start.fbx | Bin 0 -> 477804 bytes
.../assets/game/model_dog_catch.fbx | Bin 0 -> 305804 bytes
.../assets/game/model_dog_movement.fbx | Bin 0 -> 288044 bytes
.../assets/game/model_guard_catch.fbx | Bin 0 -> 371408 bytes
.../assets/game/model_guard_movement.fbx | Bin 0 -> 336972 bytes
.../assets/game/ocean_mip.png | Bin 0 -> 24521 bytes
games/subway-surfers-ny/assets/game/props.fbx | Bin 0 -> 1674332 bytes
.../assets/game/shadow_mip.png | Bin 0 -> 3801 bytes
.../assets/game/spraySplash_mip.png | Bin 0 -> 932 bytes
.../subway-surfers-ny/assets/game/trains.fbx | Bin 0 -> 197852 bytes
.../assets/idle/environment_idle.fbx | Bin 0 -> 101996 bytes
.../assets/idle/environment_tex_mip.png | Bin 0 -> 63671 bytes
.../assets/idle/jake_tex_mip.png | Bin 0 -> 84193 bytes
.../assets/idle/model_avatar_idle_paint.fbx | Bin 0 -> 343244 bytes
.../assets/idle/props_start.fbx | Bin 0 -> 84588 bytes
.../assets/idle/props_tex_mip.png | Bin 0 -> 67959 bytes
.../assets/idle/train_start_mip.png | Bin 0 -> 45058 bytes
.../assets/idle/trains_start.fbx | Bin 0 -> 82732 bytes
.../assets/idle/trains_tex_mip.png | Bin 0 -> 27820 bytes
.../assets/placeholder/icon_00_brody.png | Bin 0 -> 18661 bytes
.../assets/placeholder/icon_01_tagbot.png | Bin 0 -> 16876 bytes
.../assets/placeholder/icon_02_tasha.png | Bin 0 -> 17311 bytes
.../assets/placeholder/icon_03_ninja.png | Bin 0 -> 17431 bytes
.../assets/placeholder/icon_04_lucy.png | Bin 0 -> 17974 bytes
.../assets/placeholder/icon_05_king.png | Bin 0 -> 19439 bytes
.../assets/placeholder/icon_07_yutani.png | Bin 0 -> 16345 bytes
.../assets/placeholder/icon_08_spike.png | Bin 0 -> 19193 bytes
.../assets/placeholder/icon_09_fresh.png | Bin 0 -> 17423 bytes
.../assets/placeholder/icon_11_tricky.png | Bin 0 -> 19608 bytes
.../assets/placeholder/icon_friend.png | Bin 0 -> 1184 bytes
.../assets/placeholder/jake.png | Bin 0 -> 19115 bytes
.../assets/preload/splash_mip.png | Bin 0 -> 31303 bytes
games/subway-surfers-ny/assets/ui/ui.json | 1191 +
games/subway-surfers-ny/assets/ui/ui.png | Bin 0 -> 270140 bytes
games/subway-surfers-ny/index.html | 55 +
games/subway-surfers-ny/js/boot.js | 122 +
.../js/games_lib/ludiAdapter.js | 57 +
games/subway-surfers-ny/js/inflate.min.js | 358 +
games/subway-surfers-ny/js/main.js | 13254 ++
games/subway-surfers-ny/js/vendor.js | 28979 +++++
.../js/workers/worker.21cc18ec46e616e4eed8.js | 671 +
.../Build/TimeShooter3_GD.data.unityweb | Bin 0 -> 4295021 bytes
.../TimeShooter3_GD.framework.js.unityweb | 7 +
.../time-shooter-3/Build/TimeShooter3_GD.jpg | Bin 0 -> 9169 bytes
.../Build/TimeShooter3_GD.wasm.unityweb | Bin 0 -> 3765109 bytes
games/time-shooter-3/Build/UnityLoader.js | 3 +
games/time-shooter-3/TemplateData/favicon.ico | 466 +
games/time-shooter-3/TemplateData/style.css | 104 +
games/time-shooter-3/index.html | 105 +
games/time-shooter-3/logo.png | Bin 0 -> 474706 bytes
.../branding/gamelotte-splash.png | Bin 0 -> 40421 bytes
games/x-trench-run/branding/logo.png | Bin 0 -> 2114 bytes
games/x-trench-run/game.css | 2 +
games/x-trench-run/game.js | 1117 +
games/x-trench-run/index.html | 243 +
games/x-trench-run/media/audio/bgm.mp3 | Bin 0 -> 362684 bytes
games/x-trench-run/media/audio/click.ogg | Bin 0 -> 22889 bytes
.../media/audio/explosion-enemy.ogg | Bin 0 -> 28325 bytes
.../media/audio/explosion-player.ogg | Bin 0 -> 63339 bytes
.../x-trench-run/media/audio/laser-enemy.ogg | Bin 0 -> 25533 bytes
.../x-trench-run/media/audio/laser-player.ogg | Bin 0 -> 18526 bytes
.../media/audio/opening/kittyopening.ogg | Bin 0 -> 11690 bytes
.../media/audio/opening/opening.ogg | Bin 0 -> 7867 bytes
.../x-trench-run/media/audio/play/static.ogg | Bin 0 -> 5632 bytes
games/x-trench-run/media/audio/powerup.ogg | Bin 0 -> 29737 bytes
games/x-trench-run/media/audio/woosh.ogg | Bin 0 -> 80036 bytes
.../media/graphics/font/mainfont.woff | Bin 0 -> 44720 bytes
.../media/graphics/loading/ajax-loader.gif | Bin 0 -> 3208 bytes
.../media/graphics/misc/invisible.png | Bin 0 -> 156 bytes
.../media/graphics/opening/kitty.png | Bin 0 -> 53084 bytes
.../media/graphics/opening/kittytitle.png | Bin 0 -> 5669 bytes
.../media/graphics/opening/m_icon.png | Bin 0 -> 32305 bytes
.../media/graphics/opening/shield.png | Bin 0 -> 26778 bytes
.../media/graphics/opening/title.png | Bin 0 -> 40044 bytes
.../media/graphics/orientate/portrait.jpg | Bin 0 -> 87960 bytes
.../media/graphics/splash/loading.png | Bin 0 -> 213391 bytes
.../graphics/splash/mobile/cover-start.jpg | Bin 0 -> 92391 bytes
.../media/graphics/sprites/bg-popup.png | Bin 0 -> 2245 bytes
.../graphics/sprites/button-continue.png | Bin 0 -> 1008 bytes
.../media/graphics/sprites/button-home.png | Bin 0 -> 1192 bytes
.../graphics/sprites/button-maximize.png | Bin 0 -> 1517 bytes
.../graphics/sprites/button-minimize.png | Bin 0 -> 1573 bytes
.../graphics/sprites/button-more-games.png | Bin 0 -> 1939 bytes
.../media/graphics/sprites/button-pause.png | Bin 0 -> 916 bytes
.../media/graphics/sprites/button-play.png | Bin 0 -> 1589 bytes
.../media/graphics/sprites/button-restart.png | Bin 0 -> 1176 bytes
.../graphics/sprites/button-settings.png | Bin 0 -> 2068 bytes
.../media/graphics/sprites/dot.png | Bin 0 -> 83 bytes
.../media/graphics/sprites/dpad-button.png | Bin 0 -> 386 bytes
.../media/graphics/sprites/dpad.png | Bin 0 -> 1195 bytes
.../media/graphics/sprites/fire.png | Bin 0 -> 1212 bytes
.../media/graphics/sprites/game-over.png | Bin 0 -> 7859 bytes
.../media/graphics/sprites/hd.png | Bin 0 -> 1360 bytes
.../media/graphics/sprites/icon-bgm.png | Bin 0 -> 1064 bytes
.../media/graphics/sprites/icon-sfx.png | Bin 0 -> 1706 bytes
.../media/graphics/sprites/sd.png | Bin 0 -> 1436 bytes
.../media/graphics/sprites/slider.png | Bin 0 -> 224 bytes
.../media/graphics/sprites/title.png | Bin 0 -> 40490 bytes
.../media/graphics/sprites/warning.png | Bin 0 -> 2869 bytes
games/x-trench-run/media/scenes/boss.png | Bin 0 -> 17754 bytes
.../media/scenes/boss_shot_bubble.png | Bin 0 -> 14809 bytes
.../media/scenes/game-scene.babylon | 4176 +
games/x-trench-run/media/scenes/obstacles.png | Bin 0 -> 120368 bytes
games/x-trench-run/media/scenes/power_ups.png | Bin 0 -> 6312 bytes
.../media/scenes/shield_bubble.png | Bin 0 -> 3905 bytes
.../x-trench-run/media/scenes/spacecraft.png | Bin 0 -> 35077 bytes
.../media/scenes/stars_skybox.png | Bin 0 -> 45514 bytes
.../x-trench-run/media/scenes/trench_main.png | Bin 0 -> 227670 bytes
.../x-trench-run/media/scenes/trench_side.png | Bin 0 -> 9639 bytes
.../media/scenes/wall_breaker.png | Bin 0 -> 16295 bytes
imgs/icon-256-256.png | Bin 0 -> 56134 bytes
imgs/icon.png | Bin 69668 -> 0 bytes
imgs/secret-icon.png | Bin 75881 -> 0 bytes
imgs/violet-256-256.png | Bin 0 -> 519464 bytes
index.html | 197 +-
js/bg.js | 22 +-
js/index.js | 189 +-
js/jquery-dev.js | 10716 ++
js/jquery-min.js | 2 +
js/loading.js | 20 +-
js/p5-dev.js | 100567 +++++++++++++++
js/p5-min.js | 3 +
200 files changed, 172568 insertions(+), 57 deletions(-)
create mode 100644 game-info.jsonc
create mode 100644 games/core-ball/image/WB_logo.png
create mode 100644 games/core-ball/image/arrow.png
create mode 100644 games/core-ball/image/btn_fw.png
create mode 100644 games/core-ball/index.html
create mode 100644 games/core-ball/index.js
create mode 100644 games/core-ball/js/conf/requireConf.js
create mode 100644 games/core-ball/js/general/Ball.js
create mode 100644 games/core-ball/js/general/BallQueue.js
create mode 100644 games/core-ball/js/general/BeginStage.js
create mode 100644 games/core-ball/js/general/Collide.js
create mode 100644 games/core-ball/js/general/Core.js
create mode 100644 games/core-ball/js/general/Game.js
create mode 100644 games/core-ball/js/general/LevelCode.js
create mode 100644 games/core-ball/js/general/Levels.js
create mode 100644 games/core-ball/js/general/Scene.js
create mode 100644 games/core-ball/js/general/Switcher.js
create mode 100644 games/core-ball/js/general/Tween.js
create mode 100644 games/core-ball/js/lib/CustEvent.js
create mode 100644 games/core-ball/js/lib/Storage.js
create mode 100644 games/core-ball/js/lib/addEvent.js
create mode 100644 games/core-ball/js/lib/md5.js
create mode 100644 games/core-ball/js/lib/require.js
create mode 100644 games/core-ball/js/lib/stopEvent.js
create mode 100644 games/core-ball/js/lib/util.js
create mode 100644 games/core-ball/js/page/index.js
create mode 100644 games/core-ball/pr_source.png
create mode 100644 games/core-ball/style.css
create mode 100644 games/core-ball/tool/js_builder/Gruntfile.js
create mode 100644 games/core-ball/tool/js_builder/built/index.min.js
create mode 100644 games/subway-surfers-ny/NewYorkIcon.png
create mode 100644 games/subway-surfers-ny/assets/audio/guard_catch.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/guard_proximity.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/guard_start.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_death.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_death_hitcam.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_dodge.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_foot_l.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_foot_r.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_hoverboard_crash.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_jump.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_revive.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_roll.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_sneakers_foot_l.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_sneakers_foot_r.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_sneakers_jump.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/hero_stumble.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/pickup_coin.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/pickup_powerup.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/special_jetpack.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/special_jetpack_start.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/special_magnet.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/theme.ogg
create mode 100644 games/subway-surfers-ny/assets/audio/ui_button.ogg
create mode 100644 games/subway-surfers-ny/assets/data/chunks_game.json
create mode 100644 games/subway-surfers-ny/assets/data/chunks_idle.json
create mode 100644 games/subway-surfers-ny/assets/data/config.json
create mode 100644 games/subway-surfers-ny/assets/data/strings_en.json
create mode 100644 games/subway-surfers-ny/assets/font/lilita-one.css
create mode 100644 games/subway-surfers-ny/assets/font/lilita-one.woff2
create mode 100644 games/subway-surfers-ny/assets/font/titan-one.css
create mode 100644 games/subway-surfers-ny/assets/font/titan-one.woff2
create mode 100644 games/subway-surfers-ny/assets/game/board_new_york.fbx
create mode 100644 games/subway-surfers-ny/assets/game/board_new_york01.fbx
create mode 100644 games/subway-surfers-ny/assets/game/board_new_york_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/effects_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/enemies_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/environment.fbx
create mode 100644 games/subway-surfers-ny/assets/game/halo_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/jetpackSmoke_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/model_avatar_catch.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_avatar_movement.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_avatar_powerup_jet_pack.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_avatar_powerup_pogostick.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_avatar_start.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_dog_catch.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_dog_movement.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_guard_catch.fbx
create mode 100644 games/subway-surfers-ny/assets/game/model_guard_movement.fbx
create mode 100644 games/subway-surfers-ny/assets/game/ocean_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/props.fbx
create mode 100644 games/subway-surfers-ny/assets/game/shadow_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/spraySplash_mip.png
create mode 100644 games/subway-surfers-ny/assets/game/trains.fbx
create mode 100644 games/subway-surfers-ny/assets/idle/environment_idle.fbx
create mode 100644 games/subway-surfers-ny/assets/idle/environment_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/idle/jake_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/idle/model_avatar_idle_paint.fbx
create mode 100644 games/subway-surfers-ny/assets/idle/props_start.fbx
create mode 100644 games/subway-surfers-ny/assets/idle/props_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/idle/train_start_mip.png
create mode 100644 games/subway-surfers-ny/assets/idle/trains_start.fbx
create mode 100644 games/subway-surfers-ny/assets/idle/trains_tex_mip.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_00_brody.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_01_tagbot.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_02_tasha.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_03_ninja.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_04_lucy.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_05_king.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_07_yutani.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_08_spike.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_09_fresh.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_11_tricky.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/icon_friend.png
create mode 100644 games/subway-surfers-ny/assets/placeholder/jake.png
create mode 100644 games/subway-surfers-ny/assets/preload/splash_mip.png
create mode 100644 games/subway-surfers-ny/assets/ui/ui.json
create mode 100644 games/subway-surfers-ny/assets/ui/ui.png
create mode 100644 games/subway-surfers-ny/index.html
create mode 100644 games/subway-surfers-ny/js/boot.js
create mode 100644 games/subway-surfers-ny/js/games_lib/ludiAdapter.js
create mode 100644 games/subway-surfers-ny/js/inflate.min.js
create mode 100644 games/subway-surfers-ny/js/main.js
create mode 100644 games/subway-surfers-ny/js/vendor.js
create mode 100644 games/subway-surfers-ny/js/workers/worker.21cc18ec46e616e4eed8.js
create mode 100644 games/time-shooter-3/Build/TimeShooter3_GD.data.unityweb
create mode 100644 games/time-shooter-3/Build/TimeShooter3_GD.framework.js.unityweb
create mode 100644 games/time-shooter-3/Build/TimeShooter3_GD.jpg
create mode 100644 games/time-shooter-3/Build/TimeShooter3_GD.wasm.unityweb
create mode 100644 games/time-shooter-3/Build/UnityLoader.js
create mode 100644 games/time-shooter-3/TemplateData/favicon.ico
create mode 100644 games/time-shooter-3/TemplateData/style.css
create mode 100644 games/time-shooter-3/index.html
create mode 100644 games/time-shooter-3/logo.png
create mode 100644 games/x-trench-run/branding/gamelotte-splash.png
create mode 100644 games/x-trench-run/branding/logo.png
create mode 100644 games/x-trench-run/game.css
create mode 100644 games/x-trench-run/game.js
create mode 100644 games/x-trench-run/index.html
create mode 100644 games/x-trench-run/media/audio/bgm.mp3
create mode 100644 games/x-trench-run/media/audio/click.ogg
create mode 100644 games/x-trench-run/media/audio/explosion-enemy.ogg
create mode 100644 games/x-trench-run/media/audio/explosion-player.ogg
create mode 100644 games/x-trench-run/media/audio/laser-enemy.ogg
create mode 100644 games/x-trench-run/media/audio/laser-player.ogg
create mode 100644 games/x-trench-run/media/audio/opening/kittyopening.ogg
create mode 100644 games/x-trench-run/media/audio/opening/opening.ogg
create mode 100644 games/x-trench-run/media/audio/play/static.ogg
create mode 100644 games/x-trench-run/media/audio/powerup.ogg
create mode 100644 games/x-trench-run/media/audio/woosh.ogg
create mode 100644 games/x-trench-run/media/graphics/font/mainfont.woff
create mode 100644 games/x-trench-run/media/graphics/loading/ajax-loader.gif
create mode 100644 games/x-trench-run/media/graphics/misc/invisible.png
create mode 100644 games/x-trench-run/media/graphics/opening/kitty.png
create mode 100644 games/x-trench-run/media/graphics/opening/kittytitle.png
create mode 100644 games/x-trench-run/media/graphics/opening/m_icon.png
create mode 100644 games/x-trench-run/media/graphics/opening/shield.png
create mode 100644 games/x-trench-run/media/graphics/opening/title.png
create mode 100644 games/x-trench-run/media/graphics/orientate/portrait.jpg
create mode 100644 games/x-trench-run/media/graphics/splash/loading.png
create mode 100644 games/x-trench-run/media/graphics/splash/mobile/cover-start.jpg
create mode 100644 games/x-trench-run/media/graphics/sprites/bg-popup.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-continue.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-home.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-maximize.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-minimize.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-more-games.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-pause.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-play.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-restart.png
create mode 100644 games/x-trench-run/media/graphics/sprites/button-settings.png
create mode 100644 games/x-trench-run/media/graphics/sprites/dot.png
create mode 100644 games/x-trench-run/media/graphics/sprites/dpad-button.png
create mode 100644 games/x-trench-run/media/graphics/sprites/dpad.png
create mode 100644 games/x-trench-run/media/graphics/sprites/fire.png
create mode 100644 games/x-trench-run/media/graphics/sprites/game-over.png
create mode 100644 games/x-trench-run/media/graphics/sprites/hd.png
create mode 100644 games/x-trench-run/media/graphics/sprites/icon-bgm.png
create mode 100644 games/x-trench-run/media/graphics/sprites/icon-sfx.png
create mode 100644 games/x-trench-run/media/graphics/sprites/sd.png
create mode 100644 games/x-trench-run/media/graphics/sprites/slider.png
create mode 100644 games/x-trench-run/media/graphics/sprites/title.png
create mode 100644 games/x-trench-run/media/graphics/sprites/warning.png
create mode 100644 games/x-trench-run/media/scenes/boss.png
create mode 100644 games/x-trench-run/media/scenes/boss_shot_bubble.png
create mode 100644 games/x-trench-run/media/scenes/game-scene.babylon
create mode 100644 games/x-trench-run/media/scenes/obstacles.png
create mode 100644 games/x-trench-run/media/scenes/power_ups.png
create mode 100644 games/x-trench-run/media/scenes/shield_bubble.png
create mode 100644 games/x-trench-run/media/scenes/spacecraft.png
create mode 100644 games/x-trench-run/media/scenes/stars_skybox.png
create mode 100644 games/x-trench-run/media/scenes/trench_main.png
create mode 100644 games/x-trench-run/media/scenes/trench_side.png
create mode 100644 games/x-trench-run/media/scenes/wall_breaker.png
create mode 100644 imgs/icon-256-256.png
delete mode 100644 imgs/icon.png
delete mode 100644 imgs/secret-icon.png
create mode 100644 imgs/violet-256-256.png
create mode 100644 js/jquery-dev.js
create mode 100644 js/jquery-min.js
create mode 100644 js/p5-dev.js
create mode 100644 js/p5-min.js
diff --git a/css/loading.css b/css/loading.css
index 12e55b96..ac0f5e8d 100644
--- a/css/loading.css
+++ b/css/loading.css
@@ -22,7 +22,7 @@ body {
justify-content: center;
align-items: center;
z-index: 6;
- pointer-events: none;
+ cursor: progress;
}
.loading-icon {
@@ -35,7 +35,6 @@ body {
width: 256;
height: 256;
scale: 0.6;
- pointer-events: visiblePainted;
}
.loading-tip {
diff --git a/css/style.css b/css/style.css
index 0e4dd87c..33f44537 100644
--- a/css/style.css
+++ b/css/style.css
@@ -1,14 +1,37 @@
@import url('https://fonts.googleapis.com/css2?family=Trispace:wght@100&display=swap');
-@import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@300&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Assistant:wght@500&display=swap');
-/*i titled these poorly, without trying how any of it looks*/
:root {
--bg: #202020;
--block-color: #2b2b2b;
--button-color: #373737;
+ --games-color: #373737a6;
--hover-color: #3c3c3c;
+ --scrollbar-color: #434343;
+ --scroll-track-color: #111;
--font-color: #dcddde;
- --font-family: 'Work Sans', sans-serif;
+ --font-family: 'Assistant', sans-serif;
+}
+
+::-webkit-scrollbar {
+ width: 20px;
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--scrollbar-color);
+ background-clip: content-box;
+ border-radius: 16px;
+ border: 2.9px solid transparent;
+ box-shadow: inset 2px 2px 2px hsla(0,0%,100%,.25),inset -2px -2px 2px rgba(0,0,0,.25);
+ transition: all 0.2s ease-in;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: var(--hover-color);
+}
+
+::-webkit-scrollbar-track {
+ background: linear-gradient(90deg,var(--scrollbar-color),var(--scrollbar-color) 1px,var(--scroll-track-color) 0,var(--scroll-track-color));
}
html {
@@ -59,17 +82,23 @@ body.noscript {
display: grid;
}
-.homepage {
+.homepage, .games, .proxy, .settings {
position: absolute;
top: 0;
left: 0;
margin-top: 15rem;
+ width: 100vw;
display: flex;
justify-content: center;
align-items: center;
z-index: 10;
}
+.games {
+ flex-direction: column;
+ top: 2.5%;
+}
+
#title {
z-index: 50;
position: relative;
@@ -89,6 +118,57 @@ body.noscript {
pointer-events: none;
}
+#gamesList {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ z-index: 10;
+ width: 75%;
+ height: 60vh;
+ font-family: var(--font-family);
+ overflow-y: scroll;
+}
+
+#gamesList li {
+ padding: 1rem;
+ transition: all 0.2s ease-in;
+ letter-spacing: 1px;
+ background-color: var(--games-color);
+}
+
+#gamesList li:hover, #gamesList li:focus, #gamesList .active {
+ background-color: var(--hover-color);
+}
+
+.searchbar {
+ display: flex;
+ width: 75%;
+ justify-content: center;
+ margin-bottom: 5px;
+}
+
+#search {
+ all: unset;
+ margin-right: 4px;
+ width: 100%;
+ padding: 1rem;
+ font-family: var(--font-family);
+ color: var(--font-color);
+ background-color: var(--block-color);
+}
+
+#sort {
+ all: unset;
+ margin: 0;
+ border: none;
+ background-color: var(--block-color);
+ color: var(--font-color);
+ font-size: 1rem;
+ font-family: var(--font-family);
+ padding: 1rem;
+ width: 20%;
+}
+
logo img {
z-index: 50;
position: fixed;
@@ -97,18 +177,38 @@ logo img {
scale: 0.45;
}
+img[alt="MonkeyGG2 Icon"] {
+ filter: brightness(110%);
+}
+
+img[alt="Proxy Icon"] {
+ margin: -1rem 0;
+}
+
+.card .img-container {
+ max-width: 256px;
+ max-height: 256px;
+ margin: 2rem 0;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.card .img-container > img, svg {
+ width: 100%;
+}
+
.card-row {
display: flex;
flex-direction: row;
- width: 90%;
+ width: 75%;
}
.column {
text-align: center;
float: left;
- width: 25%;
+ width: 33%;
padding: 0 10px;
- cursor: pointer;
}
.column button {
@@ -122,11 +222,11 @@ logo img {
.card {
box-shadow: var(--button-color) 0 4px 8px 0;
- padding: 16px;
+ padding: 12px;
text-align: center;
background-color: var(--button-color);
border-radius: 50px;
- font-size: 150%;
+ font-size: 1.2rem;
text-decoration: none;
color: var(--font-color);
font-family: var(--font-family);
@@ -134,6 +234,24 @@ logo img {
cursor: pointer;
}
+.card h5 {
+ font-size: 2rem;
+ letter-spacing: 1px;
+ margin: 2px;
+}
+
.card:hover {
background-color: var(--hover-color);
+}
+
+#page-loader iframe {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 999;
+ margin: 0;
+ padding: 0;
+ border: 0;
}
\ No newline at end of file
diff --git a/game-info.jsonc b/game-info.jsonc
new file mode 100644
index 00000000..066ab812
--- /dev/null
+++ b/game-info.jsonc
@@ -0,0 +1,169 @@
+/*
+ Data for all games
+
+ "name-of-game": "path/to/game"
+
+ The path should be from the games directory.
+
+ The list does not have to be ordered in any way but for the
+ sake of simplicity we will order this list alphanumerically.
+*/
+{
+ "1v1.LOL": "1v1-lol",
+ "2048": "2048",
+ "Achievement Unlocked": "flash/?game=achievement-unlocked",
+ "Achievement Unlocked 2": "w-flash/?game=achievement-unlocked-2",
+ "Achievement Unlocked 3": "w-flash/?game=achievement-unlocked-3",
+ "A Dark Room": "a-dark-room",
+ "Abandoned": "abandoned",
+ "Ages of Conflict": "ages-of-conflict",
+ "Age of War": "flash/?game=age-of-war",
+ "Age of War Hacked": "flash/?game=age-of-war-hacked",
+ "Amidst The Sky": "amidst-the-sky",
+ "Another Gentlemans Adventure": "another-gentlemans-adventure",
+ "Awesome Tanks": "awesome-tanks",
+ "Awesome Tanks 2": "awesome-tanks-2",
+ "Babel Tower": "babel-tower",
+ "Basketball Stars": "basketball-stars",
+ "Bloons": "flash/?game=bloons",
+ "Bloons TD 1": "flash/?game=bloons-td-1",
+ "Bloons TD 2": "flash/?game=bloons-td-2",
+ "Bloons TD 3": "w-flash/?game=bloons-tower-defense-3",
+ "Bloons TD 4": "w-flash/?game=bloons-tower-defense-4",
+ "Bloons TD 5": "w-flash/?game=bloons-tower-defense-5",
+ "Bloxorz": "flash/?game=bloxorz",
+ "Brawl Stars Project Laser": "brawl-stars-project-laser",
+ "Breaklock": "breaklock",
+ "Cat Ninja": "w-flash/?game=cat-ninja",
+ "Curveball": "flash/?game=curveball",
+ "Chrome Dino": "chrome-dino",
+ "Clicker Heroes": "clicker-heroes",
+ "Clicker Heroes Updated": "clicker-heroes-updated",
+ "Cookie Clicker": "cookie-clicker",
+ "Core Ball": "core-ball",
+ "Crossy Road": "crossy-road",
+ "Conway's Game of Life": "conways-game-of-life",
+ "Creative Kill Chamber": "flash/?game=creative-kill-chamber",
+ "Cut The Rope": "cut-the-rope",
+ "Dadish": "dadish",
+ "Dadish 2": "dadish-2",
+ "Don't Escape": "w-flash/?game=dont-escape",
+ "Don't Escape 2": "w-flash/?game=dont-escape-2",
+ "Don't Escape 3": "w-flash/?game=dont-escape-3",
+ "Doodle Jump": "doodle-jump",
+ "Drift Boss": "drift-boss",
+ "Drift Hunters": "drift-hunters",
+ "Drive Mad": "drive-mad",
+ "Duck Life": "flash/?game=duck-life",
+ "Duck Life 2": "flash/?game=duck-life-2",
+ "Duck Life 3": "flash/?game=duck-life-3",
+ "Duck Life 4": "duck-life-4",
+ "Duck Life Treasure Hunt": "w-flash/?game=duck-life-treasure-hunt",
+ "Dune!": "dune",
+ "Eaglercraft 1.5.2": "eaglercraft",
+ "Eaglercraft 1.8.8 (Multiplayer Only)": "eaglercraftx/",
+ "EvoWars": "evowars",
+ "Escape The Car": "flash/?game=escape-the-car",
+ "Escape The Closet": "flash/?game=escape-the-closet",
+ "Escape The Phonebooth": "flash/?game=escape-the-phonebooth",
+ "Escape The Bathroom": "flash/?game=escape-the-bathroom",
+ "Escape The Freezer": "w-flash/?game=escape-the-freezer",
+ "Escape The Shack": "w-flash/?game=escape-the-shack",
+ "Fireboy and Watergirl": "fireboy-and-watergirl",
+ "Fireboy and Watergirl 2": "fireboy-and-watergirl-2",
+ "Fireboy and Watergirl 3": "fireboy-and-watergirl-3",
+ "Fireboy and Watergirl 4": "fireboy-and-watergirl-4",
+ "Flash Chess": "flash/?game=flash-chess",
+ "Friday Night Funkin": "friday-night-funkin",
+ "Factory Balls": "flash/?game=factory-balls",
+ "Flappy Bird": "flappy-bird",
+ "Getaway Shootout": "getaway-shootout",
+ "Gons io": "gons-io",
+ "Gun Mayhem": "flash/?game=gun-mayhem",
+ "Gun Mayhem 2": "flash/?game=gun-mayhem-2",
+ "Gun Spin": "gunspin",
+ "Henry Stickmin 0: Breaking The Bank": "flash/?game=breaking-the-bank",
+ "Henry Stickmin 1: Escaping The Prison": "flash/?game=escaping-the-prison",
+ "Henry Stickmin 2: Stealing The Diamond": "flash/?game=stealing-the-diamond",
+ "Henry Stickmin 3: Infiltrating The Airship": "flash/?game=infiltrating-the-airship",
+ "Henry Stickmin 4: Fleeing the Complex": "flash/?game=fleeing-the-complex",
+ "Hextris": "hextris",
+ "Incremancer": "incremancer",
+ "Learn To Fly": "flash/?game=learn-to-fly",
+ "Learn To Fly 2": "w-flash/?game=learn-to-fly-2",
+ "Idle Breakout": "idle-breakout",
+ "Maptroid": "maptroid",
+ "Mario": "mario-game",
+ "Monkey Mart": "monkey-mart",
+ "MotoX3M": "motox3m",
+ "N-gon": "n-gon",
+ "Papas Pizzeria": "flash/?game=papas-pizzaria",
+ "Papas Freezeria": "w-flash/?game=papas-freezeria",
+ "Particle Clicker": "particle-clicker",
+ "Planet Life": "planet-life",
+ "P.craft": "pcraft",
+ "Precision Client (Eaglercraft 1.5.2)": "precision-client/",
+ "Progress Knight": "progress-knight",
+ "Pull Of War": "pull-of-war",
+ "Reach The Core": "reach-the-core",
+ "Raft Wars": "flash/?game=raft-wars",
+ "Raft Wars 2": "flash/?game=raft-wars-2",
+ "Retro Bowl": "retro-bowl",
+ "Retro Bowl Old": "retro-bowl-old",
+ "Rogue Soul": "w-flash/?game=rogue-soul",
+ "Rogue Soul 2": "w-flash/?game=rogue-soul-2",
+ "Riddle School": "flash/?game=riddle-school",
+ "Riddle School 2": "flash/?game=riddle-school-2",
+ "Riddle School 3": "flash/?game=riddle-school-3",
+ "Riddle School 4": "flash/?game=riddle-school-4",
+ "Riddle School 5": "flash/?game=riddle-school-5",
+ "Riddle Transfer": "flash/?game=riddle-transfer",
+ "Riddle Transfer 2": "flash/?game=riddle-transfer-2",
+ "Rooftop Snipers": "rooftop-snipers",
+ "Rookie Bowman": "rookie-bowman",
+ "Run 3": "run-3",
+ "Sandspiel": "sandspiel",
+ "Scuba Bear": "scuba-bear",
+ "Slope": "slope",
+ "Smash Karts": "smash-karts",
+ "Stickman Hook": "stickman-hook",
+ "Subway Surfers": "subway-surfers",
+ "Subway Surfers New York": "subway-surfers-ny",
+ "Stick War": "flash/?game=stick-war",
+ "Submachine": "flash/?game=submachine",
+ "Submachine 2": "flash/?game=submachine-2",
+ "Submachine 3": "flash/?game=submachine-3",
+ "Submachine 4": "flash/?game=submachine-4",
+ "Submachine 5": "flash/?game=submachine-5",
+ "Submachine 6": "flash/?game=submachine-6",
+ "Submachine 7": "flash/?game=submachine-7",
+ "Submachine 8": "flash/?game=submachine-8",
+ "Submachine 9": "flash/?game=submachine-9",
+ "Submachine 10": "flash/?game=submachine-10",
+ "Submachine 0": "flash/?game=submachine-0",
+ "Submachine 32 Chambers": "flash/?game=submachine-32-chambers",
+ "Submachine FLF": "flash/?game=submachine-flf",
+ "Sugar Sugar": "w-flash/?game=sugar-sugar",
+ "The Final Earth": "the-final-earth",
+ "There Is No Game": "there-is-no-game",
+ "Time Shooter": "time-shooter",
+ "Time Shooter 3": "time-shooter-3",
+ "Tiny Fishing": "tiny-fishing",
+ "Trace": "trace",
+ "Tanuki Sunset": "tanuki-sunset",
+ "Temple Run 2": "temple-run-2",
+ "The Impossible Quiz": "flash/?game=the-impossible-quiz",
+ "This Is The Only Level": "flash/?game=this-is-the-only-level",
+ "This Is The Only Level 2": "w-flash/?game=this-is-the-only-level-2",
+ "Tunnel Rush": "tunnel-rush",
+ "Two Ball 3d": "two-ball-3d",
+ "Vex 3": "vex-3",
+ "Vex 4": "vex-4",
+ "Vex 5": "vex-5",
+ "Vex 6": "vex-6",
+ "Vex 7": "vex-7",
+ "Web OSU": "web-osu",
+ "Ultimate Chess": "w-flash/?game=ultimate-chess",
+ "X Trench Run": "x-trench-run",
+ "Yohoho": "yohoho"
+}
\ No newline at end of file
diff --git a/games/core-ball/image/WB_logo.png b/games/core-ball/image/WB_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ad3d7f13b5978271e6a6b947458d0f276ea28b5
GIT binary patch
literal 1361
zcmV-X1+MyuP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002
zVoOIv0RM-N%)bBt00(qQO+^Rh2@Dno1BL9DNdN!>i+WU8bW&k=AaHVTW@&6?Aar?f
zWgvKMZ~y=}jg?hh*4!WnePi{hyIFSSWNg{os_oL4_kO$GIy2Jl2If#(3kKxM5&fA*y&|3#Ze~
z_wX2An5>yq)lQ)?jl~GBxZ+N-BAo8y;@zRe`|#KYa*ca@Z34g}7e{`A5ibY}
z2(kX|1zbR?kO;Oqn5tk18jp2b2!wS9vEkJu_Lz$xSQ}FP;qw68UuhytK(;l6Q{YpI
z06;HB7;KNM9gK@>jygLLLRZ$mHXfDe2o5?u%(;ws*o07u!+!8`71+Onny_?*`!IRu
zXVu7BoreYnHVqTvIm$NDq*ZlP_S^)^I!@E7tc>yl8Hj}AQB#Fvkp(h^ti(*CO!0wq
zCK6mYU?x@h!;=f-D_~*GqzlZz6zpb=qfub=jtt{K!+Mn{q9Ku@A%RyaM_?MrQIHZP
zX+d26K&~(31F#-}>3hfkjq1)wj>f^s5q!5z8l74~LX+x4Nyb--?f_GX(JV&uo5yLa
zbA2AALT}XOah42-nBY5#G97ApwJ%AacNUyVtH4-hTv9U^_
zSc0Y~D6t}lw&-eS|3?cGbp_94@8}}0xbX{3a*M-hq(ilm%8aR)V5e7H8VS>BeM97cn#{+=
zFtm8sC@n=7Lb2jXNv;3hD;hr)N5IWt$wudNniF{R`I@$M-3}rDdE4Kr95pX&^Kx{)
z7|k&+16h=1@#T_C$rzh5sJQX)d-x^au~+6Yx!YXi8TWX?63;19mm^|WH?CqbVY?Wc
z#6PBWc4;xjeXg;?Q}%!|Ry8JTZ3icvs1}DkQ63O53rtV|)`(3GZF7)fXZN~i`hFwv
z^|3sn&s`oe!b_H&bFA>17^Fo~O`2y<*X>5KrB$6`SKi5nwcB=;RYCx10ckEenH@iL
z+#6M|r`=xiE%VW|+5dCwCwp9*;o2<@;s5{uC3HntbYx+4WjbSWWnpw>05UK#GA%GU
zEip1wGBP?aGdeIgD=;uRFfdaqDC7VD03~!qSaf7zbY(hiZ)9m^c>ppnGBPbNIV~|V
zR5CI;Ff%$ZH!CnOIxsLIc92*A000?uMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_
Tami&o00000NkvXXu0mjfYAa4I
literal 0
HcmV?d00001
diff --git a/games/core-ball/image/arrow.png b/games/core-ball/image/arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..636759e5eda60d2438acf33f6470e8e093472875
GIT binary patch
literal 5707
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
literal 0
HcmV?d00001
diff --git a/games/core-ball/image/btn_fw.png b/games/core-ball/image/btn_fw.png
new file mode 100644
index 0000000000000000000000000000000000000000..52aad62a32ee53c61f11961f049c03b2450b2de5
GIT binary patch
literal 1742
zcmV;<1~K`GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002
zVoOIv0RM-N%)bBt0ylb8SaechcOY0Uh9VqzD|uAGc5
zn_IO_8uQjKmrG}cy_$w4yJT&Ww0Tm2Z?Q^Re06Nh;;U|14Q~V#!6s(uvT>5D7g@a+
zHd+fXTR6qsuC}?v8U+H_sP*6>>s&b82a{VE*e5RTmKCOoC$?~Uy7?zP1`Crlv#Q!tYD{A>(krgG
zldMRm`?z>>c=0wE`#`R74ujB8ZkEH89$_+*b!bs;EW&|waWp}?fTM`35?(nPBKO*
z8dL?{gMJ;~->m3Z=X!$}daW9(5)~&4@>#2nx=kk}RL2LpDk~!{#6Tu21#{CtT4aGu
z!xl5m6z#2o7D2OPgs4)LUyvgS@f_b^Fnj@4Iz_JUk>3H+eoQ=|=h49ibWAXgx~02v
zuXbp&OGE#pjeTZFC)(U2f7E6NrUzvIe{J~Z3?=S=|H7x+&1;@UhxIr+X+Kow(#anI
zQkqA;^E|`p4~WEUueNQ$V*mgHfk{L`R5;6>m0M_BRTPH5wf8>f%%#(biAgU>O-qv+
z!FWN%hZICD#FToWs8j?khzKFAO`=Ur
zOk*;cBup~bGv}P`!%S{o6aUA3`S)7?`q$cWgn(X(EJ3I;&adRK%pr6zPB$Yg(n5%W
z&it|PspiQ>8i~=0i(y^R#m2~-
z?Q+t77-&%zg~xBP)6a?h`T2jNNOBzq&)<{xCQ<@S)e};HMTn76eTS1n=I`^CM0D?B
zZ}x`J3zy~6e>rC;rR{M83b*bHsfi-?eN2O|$;%|!vgu2CtB8N~u4v{6L}h{(cy
z11HX5fEXq2+s1lkD==WrI_Js5-2o2C4Rd8qoY5hz`+t>@hM<2IK+sPAh}FX
z!O;0q;}ZrnaiY3J?k$Ntl!Z87$Q{gxcfVKan4^O
zr-~088S0J^;LsE%zGyvnvA?OXqdGO}RvM&*O>CjBIeJt{l{h^g-uTQw-qx&TiHJ~?
z9{B!_G6}nFVaL0?KR>joq^luSES8W6#XF2CS3->Kc%${%Y9Szl0mCHU(1ukP4rh{E
z=Ta~4=`Rn9tqHi&Xu>JRaokYi?0zlXtD}<)vU4R02XFsK=g!I9herF?7Oo~<$Qgbo
zh9&0jKfCqyAEQySHFpT$kYy6RZ;QA6p@lEY_4==d!zE@&0L*thea*+2X&;RN6vjU)
z34dk$z3*H2W9MLZS5oxRx7G!&70>V1k^aquEN;qv6{OArL3xQzD9#
zF%-#SC<7XcLNF8=W-~!m%}O%J83BYepK~RhEK=k+RTeOHD{FMUJ1iCpT;Lbd%X-Pu
z$Pr4+vYofd5hA$%(Ek>w;;#{W*_|mq;}e{9%|iK8%hwRuddM303~!qSaf7z
zbY(hYa%Ew3WdJfTGBPbNIV~|VR5CI;Ff%$ZH!CnOIxsL(D=6du001R)MObuXVRU6W
zZEs|0W_bWIFfuYNFgYzTGE_1$IxsUjFgGhOFgh?WB6g5i0000PbVXQnQ*UN;cVTj6
k06}DLVr3vnZDD6+Qe|Oed2z{QJOBUy07*qoM6N<$f@pIG&Hw-a
literal 0
HcmV?d00001
diff --git a/games/core-ball/index.html b/games/core-ball/index.html
new file mode 100644
index 00000000..e0c90170
--- /dev/null
+++ b/games/core-ball/index.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+ Core Ball
+
+
+
+
+
+
+
+
+
+
diff --git a/games/core-ball/index.js b/games/core-ball/index.js
new file mode 100644
index 00000000..f98a6ba3
--- /dev/null
+++ b/games/core-ball/index.js
@@ -0,0 +1,692 @@
+"undefined" == typeof window.define && ((window.define = function () {}), (window.define.amd = 1)),
+ "undefined" == typeof window.$AJB && (window.$AJB = {}),
+ ($AJB.lib = {}),
+ ($AJB.general = {}),
+ ($AJB.page = {}),
+ ($AJB.lib.stopEvent = function () {
+ "use strict";
+ return function (a) {
+ a && (a.preventDefault ? (a.preventDefault(), a.stopPropagation()) : ((a.returnValue = !1), (a.cancelBubble = !0)));
+ };
+ }),
+ ($AJB.lib.Storage = function () {
+ "use strict";
+ var a = {
+ setValue: function (a, b) {
+ window.localStorage && (window.localStorage[a] = b);
+ },
+ getValue: function (a) {
+ return window.localStorage ? window.localStorage[a] : void 0;
+ },
+ };
+ return a;
+ }),
+ ($AJB.general.BeginStage = function () {
+ "use strict";
+ function a(a) {
+ function c() {
+ b(h, "click", function () {
+ e.fire(g, f);
+ }),
+ (j.innerHTML = "GO");
+ }
+ var h = a.getElementsByClassName("button")[0],
+ i = a.getElementsByClassName("text")[0],
+ j = document.getElementById("txtAr"),
+ k = {
+ show: function () {
+ a.style.display = "";
+ },
+ hide: function () {
+ a.style.display = "none";
+ },
+ level: function (a) {
+ (f = a), (i.innerHTML = "Level " + a);
+ },
+ on: function (a, b) {
+ e.add(a, b);
+ },
+ off: function (a, b) {
+ e.remove(a, b);
+ },
+ };
+ return c(), k;
+ }
+ var b = $AJB.lib.addEvent(),
+ c = $AJB.lib.CustEvent(),
+ d = $AJB.lib.util(),
+ e = c(),
+ f = 0,
+ g = "start";
+ return a;
+ }),
+ ($AJB.general.Switcher = function () {
+ "use strict";
+ function a(a, b, c) {
+ var d,
+ e,
+ f = null,
+ g = !1,
+ h = {
+ point: [0, 0],
+ enabled: !1,
+ color: "#c8c8c8",
+ update: function () {
+ var a = h.point,
+ c = 30;
+ h.enabled &&
+ (0 === e
+ ? ((d = h.color), a[0] < b / 2 ? ((a[0] = Math.min(a[0] + c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0)))
+ : 1 === e && ((d = "#000"), a[0] > b / 2 ? ((a[0] = Math.max(a[0] - c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0))));
+ },
+ render: function () {
+ var e = h.point;
+ h.enabled && ((a.fillStyle = d), a.fillRect(e[0] - b / 2, e[1] - c / 2, b, c), g && ((h.enabled = !1), f && f()));
+ },
+ switchStage: function (d, i) {
+ 0 === d ? (h.point = [-b / 2, c / 2]) : 1 === d && ((a.fillStyle = h.color), a.fillRect(0, 0, b, c), (h.point = [b + b / 2, c / 2])), (h.enabled = !0), (g = !1), (e = d), (f = i);
+ },
+ };
+ return h;
+ }
+ return a;
+ }),
+ ($AJB.lib.addEvent = function () {
+ var a = $AJB.lib.util(),
+ b = { click: "touchstart", mousedown: "touchstart", mouseup: "touchend" };
+ return function (c, d, e, f) {
+ c.addEventListener ? c.addEventListener(a.isMobile ? b[d] || d : d, e, f) : c.attachEvent ? c.attachEvent("on" + d, e) : (c["on" + d] = e);
+ };
+ }),
+ ($AJB.general.Levels = function () {
+ "use strict";
+ function a(a, b) {
+ return function () {
+ var c = 0;
+ return function () {
+ return (c += (a * b) % 360);
+ };
+ };
+ }
+ function b(a, b) {
+ return function () {
+ var c = 0,
+ d = 1,
+ e = +new Date();
+ return function () {
+ var f = +new Date();
+ return f - e > b && ((d = -d), (e = f)), (c += (d * a) % 360);
+ };
+ };
+ }
+ function c(a, b, c, d) {
+ return function () {
+ var e = 0,
+ f = +new Date();
+ return function () {
+ var g = +new Date();
+ return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
+ };
+ };
+ }
+ function d(a) {
+ var b = 1;
+ return (
+ h(document.body, "mousedown", function () {
+ b = -b;
+ }),
+ function () {
+ var c = 0;
+ return function () {
+ return (c += (a * b) % 360);
+ };
+ }
+ );
+ }
+ function e(a, b, c, d) {
+ return (
+ h(document.body, "mousedown", function () {
+ d = -d;
+ }),
+ function () {
+ var e = 0,
+ f = +new Date();
+ return function () {
+ var g = +new Date();
+ return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
+ };
+ }
+ );
+ }
+ function f(a, b, c, d) {
+ i[a] = { childs: k[b], queueCount: c, round: j[d] };
+ }
+ var g,
+ h = $AJB.lib.addEvent(),
+ i = {},
+ j = {
+ A1: a(1.5, 1),
+ A2: a(1.5, -1),
+ B1: a(2.5, 1),
+ B2: a(2.5, -1),
+ C1: b(2.2, 3e3),
+ C2: b(3.5, 2e3),
+ D1: c(2, 2.3, 1200, 1),
+ D2: c(2, 2.3, 1200, -1),
+ D3: c(4, 4.5, 1700, 1),
+ D4: c(4, 4.5, 1700, -1),
+ D5: c(4, 4.5, 1700, 1),
+ D6: c(4, 4.5, 1700, -1),
+ E1: d(2),
+ E2: e(2, 2.3, 1e3, 1),
+ },
+ k = {
+ 0: [],
+ 2: [0, 180],
+ 3: [0, 120, 240],
+ 4: [0, 90, 180, 270],
+ 5: [0, 72, 144, 216, 288],
+ 6: [0, 60, 120, 180, 240, 300],
+ 7: [0, 52, 103, 155, 206, 258, 309],
+ 8: [0, 45, 90, 135, 180, 225, 270, 315],
+ 9: [0, 40, 80, 120, 160, 200, 240, 280, 320],
+ 10: [0, 36, 72, 108, 144, 180, 216, 252, 288, 324],
+ 11: [0, 33, 66, 99, 131, 164, 197, 230, 262, 295, 328],
+ 12: [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],
+ 13: [0, 28, 56, 84, 111, 139, 167, 194, 222, 250, 277, 305, 333],
+ 14: [0, 26, 52, 78, 103, 129, 155, 180, 206, 232, 258, 283, 309, 335],
+ 15: [0, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 312, 336],
+ 16: [0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338],
+ },
+ l = {
+ 1: ["4", 8, "A1"],
+ 2: ["6", 10, "A1"],
+ 3: ["2", 20, "A1"],
+ 4: ["8", 12, "A2"],
+ 5: ["12", 8, "A1"],
+ 6: ["10", 10, "A2"],
+ 7: ["12", 12, "A1"],
+ 8: ["16", 3, "A2"],
+ 9: ["0", 26, "A2"],
+ 10: ["16", 10, "A1"],
+ 11: ["10", 8, "B1"],
+ 12: ["6", 12, "B2"],
+ 13: ["12", 4, "B1"],
+ 14: ["8", 14, "B2"],
+ 15: ["8", 6, "B1"],
+ 16: ["5", 10, "B2"],
+ 17: ["6", 12, "B1"],
+ 18: ["8", 14, "B2"],
+ 19: ["0", 23, "B1"],
+ 20: ["10", 13, "B2"],
+ 21: ["4", 12, "C1"],
+ 22: ["6", 10, "C1"],
+ 23: ["8", 12, "C1"],
+ 24: ["7", 14, "C1"],
+ 25: ["2", 18, "C1"],
+ 26: ["4", 18, "C1"],
+ 27: ["0", 24, "C1"],
+ 28: ["4", 10, "C2"],
+ 29: ["6", 13, "C2"],
+ 30: ["4", 20, "C1"],
+ 31: ["6", 8, "D1"],
+ 32: ["2", 12, "D2"],
+ 33: ["3", 14, "D2"],
+ 34: ["3", 18, "D1"],
+ 35: ["8", 12, "D1"],
+ 36: ["7", 15, "D2"],
+ 37: ["16", 8, "D2"],
+ 38: ["0", 23, "D1"],
+ 39: ["12", 12, "D1"],
+ 40: ["12", 15, "D2"],
+ 41: ["5", 10, "E1"],
+ 42: ["6", 12, "E1"],
+ 43: ["3", 15, "E1"],
+ 44: ["3", 19, "E1"],
+ 45: ["0", 24, "E1"],
+ 46: ["2", 15, "E2"],
+ 47: ["4", 16, "E2"],
+ 48: ["12", 8, "E2"],
+ 49: ["3", 20, "E2"],
+ 50: ["16", 14, "E2"],
+ 51: ["4", 6, "D3"],
+ 52: ["4", 12, "D4"],
+ 53: ["6", 13, "D3"],
+ 54: ["0", 24, "D4"],
+ 55: ["4", 21, "D3"],
+ 56: ["16", 16, "A1"],
+ 57: ["4", 24, "C1"],
+ 58: ["4", 26, "D1"],
+ 59: ["4", 25, "E2"],
+ 60: ["13", 19, "E2"],
+ };
+ for (g in l) f(g, l[g][0], l[g][1], l[g][2]);
+ return i;
+ }),
+ ($AJB.general.Collide = function () {
+ "use strict";
+ var a = $AJB.lib.util(),
+ b = {
+ check: function (b, c, d) {
+ var e = b.childs(),
+ f = e.length,
+ g = Math.ceil(2 * c.rad());
+ for (d = d || 1; f--; ) if (c !== e[f].ball && a.getPointDistance(c.pos(), e[f].ball.pos()) <= g + Math.ceil(2 * d)) return !0;
+ return !1;
+ },
+ };
+ return b;
+ }),
+ ($AJB.general.Tween = function () {
+ "use strict";
+ var a = {
+ simple: function (b, c, d, e) {
+ var f = (c - b) / e,
+ g = +new Date();
+ return e > g - d ? ((a.isEnd = !1), b + (g - d) * f) : ((a.isEnd = !0), c);
+ },
+ isEnd: !0,
+ };
+ return a;
+ }),
+ ($AJB.general.BallQueue = function () {
+ "use strict";
+ function a(a, f, g, h, i) {
+ function j() {
+ var b,
+ d,
+ e = k(a),
+ j = e.length;
+ for (b = 0; j > b; b++) (d = c(h, null, e[b], null, i)), d.pos(f, g + 3 * d.rad() * b), m.push(d);
+ }
+ function k(a) {
+ for (var b = a, c = []; b--; ) c.push(b + 1);
+ return c;
+ }
+ var l,
+ m = [],
+ n = [],
+ o = b();
+ return (
+ (i = i || 1),
+ (l = {
+ ballList: m,
+ add: function () {},
+ remove: function (a) {
+ var b = m[a];
+ return m.splice(a, 1), b;
+ },
+ clear: function () {
+ (n = []), (m = []);
+ },
+ popup: function () {
+ var a = m.shift();
+ (a.st = +new Date()), (a.sv = a.pos().y), n.push(a);
+ },
+ update: function () {
+ var a,
+ b,
+ c,
+ h = n.length,
+ i = m.length;
+ if (h) {
+ for (b = n[0].rad(), a = g - 3 * b; h--; ) n[h].pos(f, d.simple(n[h].sv, a, n[h].st, 50)), (c = n[n.length - 1].pos().y), n[h].pos().y === a && (o.fire(e, n[h]), n.splice(h, 1));
+ for (; i--; ) m[i].pos(f, c + 3 * b * (i + 1));
+ }
+ },
+ render: function () {
+ for (var a = m.length, b = n.length; a--; ) m[a].render();
+ for (; b--; ) n[b].render();
+ },
+ on: function (a, b) {
+ o.add(a, b);
+ },
+ off: function (a, b) {
+ o.remove(a, b);
+ },
+ destroy: function () {
+ for (var a = m.length; a--; ) m[a].destroy();
+ o.destroy();
+ },
+ }),
+ j(),
+ l
+ );
+ }
+ var b = $AJB.lib.CustEvent(),
+ c = $AJB.general.Ball(),
+ d = $AJB.general.Tween(),
+ e = "popup";
+ return a;
+ }),
+ ($AJB.general.Ball = function () {
+ "use strict";
+ function a(a, c, d, e, f) {
+ function g() {
+ var c = b.getTextWidth(a, 0, 0, d, e);
+ b.drawText(a, i - c / 2, j + e / 3, d, e, "black");
+ }
+ var h,
+ i = 0,
+ j = 0;
+ return (
+ (f = f || 1),
+ (c = (c || 12) * f),
+ (e = (e || 15) * f),
+ (h = {
+ pos: function (a, b) {
+ return "undefined" != typeof a && (i = a), "undefined" != typeof b && (j = b), { x: i, y: j };
+ },
+ scale: function (a) {
+ return "undefined" != typeof a && (f = a), f;
+ },
+ rad: function (a) {
+ return "undefined" != typeof a && (c = a), c;
+ },
+ render: function (e) {
+ b.drawCircle(a, i, j, c, "#ffffff"), "undefined" != typeof d ? g(d) : "undefined" != typeof e && g(e);
+ },
+ destroy: function () {
+ h = null;
+ },
+ })
+ );
+ }
+ var b = $AJB.lib.util();
+ return a;
+ }),
+ ($AJB.lib.util = function () {
+ "use strict";
+ return {
+ drawCircle: function (a, b, c, d, e) {
+ a.beginPath(), a.arc(b, c, d, 0, 2 * Math.PI, !1), (a.fillStyle = e || "red"), a.fill();
+ },
+ drawLine: function (a, b, c, d, e, f, g) {
+ (a.strokeStyle = f || "red"), (a.lineWidth = g || 1), a.beginPath(), a.moveTo(b, c), a.lineTo(d, e), a.stroke();
+ },
+ drawText: function (a, b, c, d, e, f) {
+ (a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.fillText(d, b, c);
+ },
+ getTextWidth: function (a, b, c, d, e, f) {
+ return (a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.measureText(d).width;
+ },
+ getPointDistance: function (a, b) {
+ return Math.floor(Math.sqrt(Math.floor(Math.pow(a.x - b.x, 2)) + Math.floor(Math.pow(a.y - b.y, 2))));
+ },
+ isMobile: /(mobile|iphone|ipod|ipad|ios|android|windows phone)/i.test(navigator.userAgent),
+ isAndroid: /android/i.test(navigator.userAgent),
+ isWeixin: /MicroMessenger/i.test(navigator.userAgent),
+ };
+ }),
+ ($AJB.general.Core = function () {
+ "use strict";
+ function a(a, d, e, f, g) {
+ function h() {
+ for (var a, b, c, d, e = l.length; e--; )
+ (a = 3 * Math.cos(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + n), (b = 3 * Math.sin(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + o), (c = a / Math.abs(a)), (d = b / Math.abs(b)), l[e].ball.pos(a, b);
+ }
+ var i,
+ j,
+ k = 0,
+ l = [],
+ m = 50,
+ n = a.width / 2,
+ o = 4 * m * g;
+ return (
+ (g = g || 1),
+ (i = c(d, m, e, f, g)),
+ i.pos(n, o),
+ (j = {
+ pos: i.pos,
+ scale: i.scale,
+ rad: i.rad,
+ angle: function (a) {
+ return "undefined" != typeof a && (k = a), k;
+ },
+ addChild: function (a, b) {
+ l.push({ angle: a, ball: b });
+ },
+ clear: function () {
+ l = [];
+ },
+ childs: function () {
+ return l;
+ },
+ update: function () {
+ h();
+ },
+ render: function () {
+ var c,
+ e = l.length,
+ f = a.width,
+ h = a.height;
+ for (d.clearRect(0, 0, f, h), c = 0; e > c; c++) b.drawLine(d, n, o, l[c].ball.pos().x, l[c].ball.pos().y, "#ffffff", 1.5 * g), l[c].ball.render();
+ i.render();
+ },
+ destroy: function () {
+ j.clear(), (i = null), (j = null);
+ },
+ })
+ );
+ }
+ var b = $AJB.lib.util(),
+ c = $AJB.general.Ball();
+ return a;
+ }),
+ ($AJB.lib.CustEvent = function () {
+ return function (a) {
+ function b(a) {
+ return Object.prototype.toString.call(a).slice(8, -1).toLowerCase();
+ }
+ var c = {};
+ return (
+ !a && (a = {}),
+ {
+ add: function (a, d) {
+ if ("function" === b(d)) {
+ var e = c;
+ (a = a.toLowerCase()), !e[a] && (e[a] = []), e[a].push(d);
+ }
+ },
+ remove: function (a, d) {
+ var e,
+ f = c[a];
+ if (((a = a.toLowerCase()), "function" === b(d) && f && f.length)) for (e = f.length - 1; e >= 0; e--) f[e] === d && f.splice(e, 1);
+ },
+ fire: function (b) {
+ var d, e, f, g;
+ if (((b = b.toLowerCase()), (d = c[b]), d && d.length)) for (e = Array.prototype.slice.call(arguments, 1), g = d.length, f = 0; g > f; f++) d[f].apply(a, e);
+ },
+ destroy: function () {
+ var a,
+ b = c.length - 1;
+ for (a = b; a >= 0; a--) evts.splice(a, 1);
+ },
+ }
+ );
+ };
+ }),
+ ($AJB.general.Scene = function () {
+ "use strict";
+ function a(a, b, l, m) {
+ function n(a) {
+ var g = a.childs,
+ h = g.length;
+ for (y = a.round(), w && w.destroy(), w = c(b, l, B, 50, m); h--; ) w.addChild(g[h], d(l, null, "", null, m));
+ x && x.destroy(),
+ (x = e(a.queueCount, b.width / 2, w.pos().y + 4 * w.rad(), l, m)),
+ x.on("popup", function (a) {
+ w.addChild(90 - w.angle(), a), f.check(w, a, m) ? ((z = a), s()) : !x.ballList.length && r();
+ });
+ }
+ function o() {
+ y && (w.angle(y()), w.update(), x.update());
+ }
+ function p() {
+ var b,
+ c,
+ d,
+ e,
+ f = w.childs(),
+ g = f.length,
+ h = 25;
+ for (a.style.backgroundColor = u.bgColor; g--; ) (b = f[g].angle + w.angle()), (c = Math.cos((b * Math.PI) / 180) * h), (d = Math.sin((b * Math.PI) / 180) * h), (e = f[g].ball.pos()), f[g].ball.pos(e.x + c, e.y + d);
+ }
+ function q(a) {
+ var b,
+ c = [25, 15, 20, 15],
+ d = c.length,
+ e = 200,
+ f = e / d;
+ for (w.update(), b = 1; d >= b; b++) a > f * b && z.rad(c[b - 1] * m);
+ }
+ function r() {
+ "pass" !== A && ((a.style.backgroundColor = "#1CB01A"), (A = "pass"), (v = +new Date()));
+ }
+ function s() {
+ "fail" !== l && ((a.style.backgroundColor = "#B8111C"), (A = "fail"), (v = +new Date()));
+ }
+ function t() {
+ var a = "to be continued...",
+ c = h.getTextWidth(l, 0, 0, a, 30 * m);
+ h.drawText(l, (b.width - c) / 2, 200 * m, a, 30 * m, "yellow");
+ }
+ var u,
+ v,
+ w,
+ x,
+ y,
+ z,
+ A = "run",
+ B = 1;
+ return (u = {
+ enabled: !1,
+ run: function (b) {
+ var c = g[b];
+ (B = b), c ? ((u.enabled = !0), n(c), (a.style.backgroundColor = "#000"), (A = "run")) : t();
+ },
+ shot: function () {
+ x && x.ballList.length && x.popup();
+ },
+ update: function () {
+ var a;
+ u.enabled && ("run" === A ? o() : "pass" === A ? (p(), +new Date() - v > 1e3 && ((A = ""), k.fire(i))) : "fail" === A && ((a = +new Date() - v), q(a), a > 1e3 && ((A = ""), k.fire(j))));
+ },
+ render: function () {
+ u.enabled && (w.render(), x.render());
+ },
+ on: function (a, b) {
+ k.add(a, b);
+ },
+ off: function (a, b) {
+ k.remove(a, b);
+ },
+ });
+ }
+ var b = $AJB.lib.CustEvent(),
+ c = $AJB.general.Core(),
+ d = $AJB.general.Ball(),
+ e = $AJB.general.BallQueue(),
+ f = $AJB.general.Collide(),
+ g = $AJB.general.Levels(),
+ h = $AJB.lib.util(),
+ i = "passed",
+ j = "failed",
+ k = b();
+ return a;
+ }),
+ ($AJB.general.Game = function () {
+ "use strict";
+ function a() {
+ var a = document.body.scrollWidth || document.documentElement.scrollWidth,
+ b = document.body.scrollHeight || document.documentElement.scrollHeight;
+ (r.width = a), (r.height = b), (i = l(x, a, b)), (s.style.backgroundColor = i.color), (s.style.width = a + "px"), (s.style.height = b + "px"), (j = b / 560);
+ }
+ function b() {}
+ function c() {
+ n(u, "mousedown", function () {});
+ }
+ function d(a) {
+ (D = +a), o.setValue(z, D), (document.title = A.replace(/\#\{level\}/, D)), (GlobalLevel = D), C.level(D), !p.isWeixin && p.isMobile && b();
+ }
+ function e() {
+ n(document.body, "mousedown", function (a) {
+ var b;
+ if (a && a.changedTouches) for (b = a.changedTouches.length; b--; ) h.shot();
+ else h.shot();
+ "1" != a.target.getAttribute("data-capture") && q(a);
+ }),
+ n(w, "mousedown", function () {
+ w.style.display = "none";
+ }),
+ n(v, "mousedown", function () {
+ E ||
+ ((E = !0),
+ (t.style.display = ""),
+ d(1),
+ setTimeout(function () {
+ (t.style.display = "none"), (E = !1);
+ }, 1e3));
+ }),
+ h.on("passed", function () {
+ i.switchStage(0, function () {
+ (h.enabled = !1), d(D + 1), (r.style.display = "none"), C.show();
+ });
+ }),
+ h.on("failed", function () {
+ i.switchStage(0, function () {
+ (h.enabled = !1), (r.style.display = "none"), C.level(D), C.show();
+ });
+ }),
+ C.on("start", function () {
+ (r.style.display = ""),
+ C.hide(),
+ i.switchStage(1, function () {
+ h.run(D);
+ });
+ });
+ }
+ function f() {
+ window.clearTimeout(F), h.update(), h.render(), i.update(), i.render(), (F = window.setTimeout(f, 1e3 / y));
+ }
+ function g() {
+ a(), (h = k(document.body, r, x, j)), e(), c(), C.level(D), C.show(), f();
+ }
+ var h,
+ i,
+ j,
+ k = $AJB.general.Scene(),
+ l = $AJB.general.Switcher(),
+ m = $AJB.general.BeginStage(),
+ n = $AJB.lib.addEvent(),
+ o = $AJB.lib.Storage(),
+ p = $AJB.lib.util(),
+ q = $AJB.lib.stopEvent(),
+ r = document.getElementById("stage"),
+ s = document.getElementById("begin"),
+ t = document.getElementById("tip"),
+ u = document.getElementById("btnFW"),
+ v = document.getElementById("btnReset"),
+ w = document.getElementById("wxArrow"),
+ x = r.getContext("2d"),
+ y = 60,
+ z = "core-ball-level",
+ A = "",
+ B = "",
+ C = m(s),
+ D = +o.getValue(z) || 1,
+ E = !1,
+ F = 0,
+ G = { start: g, shareTitle: A, shareLevel: D };
+ return G;
+ }),
+ function share() {
+ console.log("share");
+ };
+($AJB.page.index = function () {
+ "use strict";
+ var a = $AJB.general.Game();
+ a.start();
+}),
+ $AJB.page.index();
+GlobalLevel = $AJB.general.Game().shareLevel;
diff --git a/games/core-ball/js/conf/requireConf.js b/games/core-ball/js/conf/requireConf.js
new file mode 100644
index 00000000..ecf2fdf0
--- /dev/null
+++ b/games/core-ball/js/conf/requireConf.js
@@ -0,0 +1,3 @@
+requirejs.config({
+ baseUrl : "http://dev.me/h5/core-ball/js"
+});
\ No newline at end of file
diff --git a/games/core-ball/js/general/Ball.js b/games/core-ball/js/general/Ball.js
new file mode 100644
index 00000000..f2714d5a
--- /dev/null
+++ b/games/core-ball/js/general/Ball.js
@@ -0,0 +1,67 @@
+/**
+ * @fileoverview Ball
+ * @author Random | http://weibo.com/random
+ * @date 2015-02-05
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ var util = require("lib/util");
+
+ function Ball(stage, rad, num, fontSize, scale){
+ var x = 0;
+ var y = 0;
+ var me;
+
+ scale = scale || 1;
+ rad = (rad || 12) * scale;
+ fontSize = (fontSize || 15) * scale;
+
+ function renderNumber(n){
+ var w = util.getTextWidth(stage, 0, 0, num, fontSize);
+ util.drawText(stage, x - w / 2, y + fontSize / 2, num, fontSize, "black");
+ }
+
+ me = {
+ pos : function(bx, by){
+ typeof bx !== "undefined" && (x = bx);
+ typeof by !== "undefined" && (y = by);
+ return {
+ x : x,
+ y : y
+ };
+ },
+
+ //n :num,
+
+ scale : function(sc){
+ typeof sc !== "undefined" && (scale = sc);
+ return scale;
+ },
+
+ rad : function(r){
+ typeof r !== "undefined" && (rad = r);
+ return rad;
+ },
+
+ render : function(n){
+ util.drawCircle(stage, x, y, rad, "#ffffff");
+
+ if(typeof num !== "undefined"){
+ renderNumber(num);
+ }else if(typeof n !== "undefined"){
+ renderNumber(n);
+ }
+ },
+
+ destroy : function(){
+ me = null;
+ }
+ };
+
+ return me;
+ }
+
+ module.exports = Ball;
+});
\ No newline at end of file
diff --git a/games/core-ball/js/general/BallQueue.js b/games/core-ball/js/general/BallQueue.js
new file mode 100644
index 00000000..cb3ad5d9
--- /dev/null
+++ b/games/core-ball/js/general/BallQueue.js
@@ -0,0 +1,139 @@
+/**
+ * @fileoverview BallQueue
+ * @author Random | http://weibo.com/random
+ * @date 2015-02-05
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ var CustEvent = require("lib/CustEvent");
+ var Ball = require("general/Ball");
+ var Tween = require("general/Tween");
+
+ var EVENT_POPUP = "popup";
+
+ function BallQueue(n, x, y, stage, scale){
+ var me;
+ var ballList = [];
+ var popList = [];
+ var custEvent = CustEvent();
+
+ scale = scale || 1;
+
+ function init(){
+ var numList = numToArr(n);
+ var l = numList.length;
+ var i;
+ var ball;
+
+ for(i=0; i td){
+ d = -d;
+ t = t2;
+ }
+ angle += d * v % 360;
+ return angle;
+ };
+ };
+ }
+
+ function typeD(v, sum, td, d){
+ return function(){
+ var angle = 0;
+ var t = +(new Date);
+
+ return function(){
+ var t2 = +(new Date);
+ if(t2 - t > td){
+ v = sum - v;
+ t = t2;
+ }
+ angle += v * d % 360;
+ return angle;
+ };
+ };
+ }
+
+ function typeE(v1, v2){
+ var d = 1;
+ var map = {
+ "-1" : v2,
+ "1" : v1
+ };
+ var v = v2 ? map[d] : v1;
+
+ addEvent(document.body, "mousedown", function(){
+ d = -d;
+ v = v2 ? map[d] : v1;
+ });
+ return function(){
+ var angle = 0;
+
+ return function(){
+ angle += v * d % 360;
+ return angle;
+ };
+ };
+ }
+
+ function typeDE(v, sum, td, d){
+ addEvent(document.body, "mousedown", function(){
+ d = -d;
+ });
+ return function(){
+ var angle = 0;
+ var t = +(new Date);
+
+ return function(){
+ var t2 = +(new Date);
+ if(t2 - t > td){
+ v = sum - v;
+ t = t2;
+ }
+ angle += v * d % 360;
+ return angle;
+ };
+ };
+ }
+
+ function typeF(v1, v2, td1, td2){
+ return function(){
+ var angle = 0;
+ var t = +(new Date);
+ var i = 0;
+ var arr = [[v1, td1], [v2, td2]];
+ var d = 1;
+
+ return function(){
+ var t2 = +(new Date);
+ var v = arr[i][0];
+ if(t2 - t > arr[i][1]){
+ v = arr[i][0];
+ i = (i + 1) % 2;
+ t = +(new Date);
+ d = -d;
+ }
+
+ angle += d * v;
+ return angle;
+ }
+ }
+ }
+
+
+ var roundTypes = {
+ "A1" : typeAB(1.5, 1),
+ "A2" : typeAB(1.5, -1),
+
+ "B1" : typeAB(2.5, 1),
+ "B2" : typeAB(2.5, -1),
+
+ "C1" : typeC(2.2, 3000),
+ "C2" : typeC(3.5, 2000),
+
+ "D1" : typeD(2, 2.3, 1200, 1),
+ "D2" : typeD(2, 2.3, 1200, -1),
+ "D3" : typeD(4, 4.5, 700, 1),
+ "D4" : typeD(4, 4.5, 700, -1),
+ "D5" : typeD(4, 4.5, 1700, 1),
+ "D6" : typeD(4, 4.5, 1700, -1),
+
+ "E1" : typeE(2),
+ "E2" : typeDE(2, 2.3, 1000, 1),
+ "E3" : typeDE(2, 2.5, 1000, 1),
+ "E4" : typeE(3, 2),
+ "E5" : typeE(1.5, 3.2),
+
+ "F1" : typeF(2, 0.3, 200, 300),
+ "F2" : typeF(3.5, 1, 250, 1500),
+ "F3" : typeF(0.5, 1.8, 350, 1500),
+ "F4" : typeF(1.8, 0.5, 1000, 150),
+ "F5" : typeF(0.5, 2.2, 350, 1500)
+ };
+
+ var childsTypes = {
+ "0" : [],
+ "2" : [0, 180],
+ "3" : [0, 120, 240],
+ "4" : [0, 90, 180, 270],
+ "5" : [0, 72, 144, 216, 288],
+ "6" : [0, 60, 120, 180, 240, 300],
+ "7" : [0, 52, 103, 155, 206, 258, 309],
+ "8" : [0, 45, 90, 135, 180, 225, 270, 315],
+ "9" : [0, 40, 80, 120, 160, 200, 240, 280, 320],
+ "10" : [0, 36, 72, 108, 144, 180, 216, 252, 288, 324],
+ "11" : [0, 33, 66, 99, 131, 164, 197, 230, 262, 295, 328],
+ "12" : [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],
+ "13" : [0, 28, 56, 84, 111, 139, 167, 194, 222, 250, 277, 305, 333],
+ "14" : [0, 26, 52, 78, 103, 129, 155, 180, 206, 232, 258, 283, 309, 335],
+ "15" : [0, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 312, 336],
+ "16" : [0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338]
+ };
+
+ var data = {
+ "1" : ["4", 8, "A1"],
+ "2" : ["6", 10, "A1"],
+ "3" : ["2", 20, "A1"],
+ "4" : ["8", 12, "A2"],
+ "5" : ["12", 8, "A1"],
+ "6" : ["10", 10, "A2"],
+ "7" : ["11", 12, "A1"],
+ "8" : ["14", 6, "A2"],
+ "9" : ["0", 26, "A2"],
+ "10" : ["14", 10, "A1"],
+
+ "11" : ["10", 8, "B1"],
+ "12" : ["6", 12, "B2"],
+ "13" : ["12", 4, "B1"],
+ "14" : ["8", 14, "B2"],
+ "15" : ["8", 6, "B1"],
+ "16" : ["5", 10, "B2"],
+ "17" : ["6", 12, "B1"],
+ "18" : ["8", 14, "B2"],
+ "19" : ["0", 23, "B1"],
+ "20" : ["10", 13, "B2"],
+
+ "21" : ["4", 12, "C1"],
+ "22" : ["6", 10, "C1"],
+ "23" : ["8", 12, "C1"],
+ "24" : ["7", 14, "C1"],
+ "25" : ["2", 18, "C1"],
+ "26" : ["4", 18, "C1"],
+ "27" : ["0", 24, "C1"],
+ "28" : ["4", 10, "C2"],
+ "29" : ["6", 13, "C2"],
+ "30" : ["4", 20, "C1"],
+
+ "31" : ["6", 8, "D1"],
+ "32" : ["2", 12, "D2"],
+ "33" : ["3", 14, "D2"],
+ "34" : ["3", 18, "D1"],
+ "35" : ["8", 12, "D1"],
+ "36" : ["7", 15, "D2"],
+ "37" : ["16", 8, "D2"],
+ "38" : ["0", 23, "D1"],
+ "39" : ["12", 12, "D1"],
+ "40" : ["12", 15, "D2"],
+
+ "41" : ["5", 10, "E1"],
+ "42" : ["6", 12, "E1"],
+ "43" : ["3", 15, "E1"],
+ "44" : ["3", 19, "E1"],
+ "45" : ["0", 24, "E1"],
+ "46" : ["2", 15, "E2"],
+ "47" : ["4", 16, "E2"],
+ "48" : ["12", 8, "E2"],
+ "49" : ["3", 20, "E2"],
+ "50" : ["16", 14, "E3"],
+
+ "51" : ["6", 10, "D3"],
+ "52" : ["2", 18, "D4"],
+ "53" : ["8", 14, "D3"],
+ "54" : ["0", 24, "D4"],
+ "55" : ["4", 21, "D3"],
+ "56" : ["16", 16, "A1"],
+ "57" : ["4", 22, "C1"],
+ "58" : ["4", 26, "D1"],
+ "59" : ["4", 25, "E2"],
+ "60" : ["12", 14, "E2"],
+
+ "61" : ["10", 11, "F1"],
+ "62" : ["4", 21, "F1"],
+ "63" : ["8", 16, "F1"],
+ "64" : ["2", 24, "F1"],
+ "65" : ["16", 8, "F1"],
+ "66" : ["12", 14, "F2"],
+ "67" : ["8", 19, "F2"],
+ "68" : ["3", 21, "F2"],
+ "69" : ["0", 32, "F2"],
+ "70" : ["8", 20, "F1"],
+
+ "71" : ["12", 12, "F5"],
+ "72" : ["8", 18, "F3"],
+ "73" : ["15", 15, "F5"],
+ "74" : ["3", 18, "F3"],
+ "75" : ["3", 22, "F5"],
+ "76" : ["5", 22, "F4"],
+ "77" : ["6", 21, "F4"],
+ "78" : ["9", 18, "F4"],
+ "79" : ["8", 21, "F4"],
+ "80" : ["6", 24, "F4"],
+
+ "81" : ["5", 12, "E4"],
+ "82" : ["7", 14, "E4"],
+ "83" : ["2", 21, "E4"],
+ "84" : ["0", 24, "E4"],
+ "85" : ["7", 16, "E4"],
+ "86" : ["12", 13, "E5"],
+ "87" : ["4", 15, "E5"],
+ "88" : ["5", 19, "E5"],
+ "89" : ["8", 18, "E4"],
+ "90" : ["16", 16, "E4"]
+
+ };
+
+
+ function bindLevles(lv, ct, count, rt){
+ Levels[lv] = {
+ childs : childsTypes[ct],
+ queueCount : count,
+ round : roundTypes[rt]
+ };
+ }
+
+ for(k in data){
+ bindLevles(k, data[k][0], data[k][1], data[k][2]);
+ }
+
+
+ module.exports = Levels;
+});
diff --git a/games/core-ball/js/general/Scene.js b/games/core-ball/js/general/Scene.js
new file mode 100644
index 00000000..61541f6e
--- /dev/null
+++ b/games/core-ball/js/general/Scene.js
@@ -0,0 +1,196 @@
+/**
+ * @fileoverview Scene
+ * @author Random | http://weibo.com/random
+ * @date 2015-02-11
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ var CustEvent = require("lib/CustEvent");
+ var Core = require("general/Core");
+ var Ball = require("general/Ball");
+ var BallQueue = require("general/BallQueue");
+ var Collide = require("general/Collide");
+ var Levels = require("general/Levels");
+ var util = require("lib/util");
+
+ var EVENT_PASSED = "passed";
+ var EVENT_FAILED = "failed";
+
+ var custEvent = CustEvent();
+
+
+
+ function Scene(container, canvas, stage, scale){
+ var me;
+ var state = "run";
+ var level = 1;
+ var ts;
+ var core;
+ var ballQueue;
+ var roundHandle;
+ var failedBall;
+
+ function initStage(conf){
+ var childs = conf.childs;
+ var i = childs.length;
+
+ roundHandle = conf.round();
+
+ core && core.destroy();
+ core = Core(canvas, stage, level, 50, scale);
+
+ while(i--){
+ core.addChild(childs[i], Ball(stage, null, "", null, scale));
+ }
+
+ ballQueue && ballQueue.destroy();
+ ballQueue = BallQueue(conf.queueCount, canvas.width / 2, core.pos().y + core.rad() * 4, stage, scale);
+ ballQueue.on("popup", function(ball){
+ core.addChild(90 - core.angle(), ball);
+ if(Collide.check(core, ball, scale)){
+ failedBall = ball;
+ fail();
+ }else{
+ !ballQueue.ballList.length && pass();
+ }
+ });
+ }
+
+
+ function stageUpdate(){
+ if(roundHandle){
+ core.angle(roundHandle());
+ core.update();
+ ballQueue.update();
+ }
+ }
+
+ function updatePass(){
+ var childs = core.childs();
+ var i = childs.length;
+ var angle;
+ var v = 25;
+ var dx;
+ var dy;
+ var pos;
+
+ container.style.backgroundColor = me.bgColor;
+ while(i--){
+ angle = childs[i].angle + core.angle();
+ dx = Math.cos(angle * Math.PI / 180) * v;
+ dy = Math.sin(angle * Math.PI / 180) * v;
+
+ pos = childs[i].ball.pos();
+ childs[i].ball.pos(pos.x + dx, pos.y + dy);
+ }
+ }
+
+ function updateFail(t){
+ var rs = [25, 15, 20, 15];
+ var l = rs.length;
+ var tm = 200;
+ var m = tm / l;
+ var i;
+
+ core.update();
+
+ for(i=1; i<=l; i++){
+ t > m * i && failedBall.rad(rs[i-1] * scale);
+ }
+ }
+
+ function pass(){
+ if(state !== "pass"){
+ container.style.backgroundColor = "#1CB01A";
+ state = "pass";
+ ts = +(new Date);
+ }
+ }
+
+ function fail(){
+ if(stage !== "fail"){
+ container.style.backgroundColor = "#B8111C";
+ state = "fail";
+ ts = +(new Date);
+ }
+ }
+
+ function toBeContinued(){
+ var text = "to be continued...";
+ var w = util.getTextWidth(stage, 0, 0, text, 30 * scale);
+
+ util.drawText(stage, (canvas.width - w) / 2, 200 * scale, text, 30 * scale, "yellow");
+
+
+ }
+
+ me = {
+ enabled : false,
+
+ run : function(lv){
+ var conf = Levels[lv];
+ level = lv;
+ if(conf){
+ me.enabled = true;
+ initStage(conf);
+ container.style.backgroundColor = "#000";
+ state = "run";
+
+ }else{
+ toBeContinued();
+ }
+ },
+
+ shot : function(){
+ ballQueue && ballQueue.ballList.length && ballQueue.popup();
+ },
+
+ update : function(){
+ var t;
+ if(!me.enabled){
+ return;
+ }
+
+ if(state === "run"){
+ stageUpdate();
+
+ }else if(state === "pass"){
+ updatePass();
+ if(+(new Date) - ts > 1000){
+ state = "";
+ custEvent.fire(EVENT_PASSED);
+ }
+
+ }else if(state === "fail"){
+ t = +(new Date) - ts;
+ updateFail(t);
+ if(t > 1000){
+ state = "";
+ custEvent.fire(EVENT_FAILED);
+ }
+ }
+ },
+
+ render : function(){
+ if(me.enabled){
+ core.render();
+ ballQueue.render();
+ }
+ },
+
+ on : function(type, handle){
+ custEvent.add(type, handle);
+ },
+
+ off : function(type, handle){
+ custEvent.remove(type, handle);
+ }
+ };
+
+ return me;
+ }
+
+ module.exports = Scene;
+});
\ No newline at end of file
diff --git a/games/core-ball/js/general/Switcher.js b/games/core-ball/js/general/Switcher.js
new file mode 100644
index 00000000..5161dd6c
--- /dev/null
+++ b/games/core-ball/js/general/Switcher.js
@@ -0,0 +1,84 @@
+/**
+ * @fileoverview Switcher
+ * @author Random | http://weibo.com/random
+ * @date 2015-03-04
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ function Switcher(stage, width, height){
+ var color;
+ var callBack = null;
+ var type;
+ var isEnd = false;
+
+ var me = {
+ point : [0, 0],
+
+ enabled : false,
+
+ color : "#c8c8c8",
+
+ update : function(){
+ var p = me.point;
+ var v = 30;
+
+ if(me.enabled){
+ if(type === 0){
+ color = me.color;
+ if(p[0] < width / 2){
+ p[0] = Math.min(p[0] + v, width / 2);
+ me.point = p;
+ }else{
+ me.point = p;
+ isEnd = true;
+ }
+
+ }else if(type === 1){
+ color = "#000";
+ if(p[0] > width / 2){
+ p[0] = Math.max(p[0] - v, width / 2);
+ me.point = p;
+ }else{
+ me.point = p;
+ isEnd = true;
+ }
+ }
+ }
+ },
+
+ render : function(){
+ var p = me.point;
+
+ if(me.enabled){
+ stage.fillStyle = color;
+ stage.fillRect(p[0] - width / 2, p[1] - height / 2, width, height);
+ if(isEnd){
+ me.enabled = false
+ callBack && callBack();
+ }
+ }
+ },
+
+ switchStage : function(tp, cb){
+ if(tp === 0){
+ me.point = [-width / 2, height /2];
+ }else if(tp === 1){
+ stage.fillStyle = me.color;
+ stage.fillRect(0, 0, width, height);
+ me.point = [width + width / 2, height /2];
+ }
+
+ me.enabled = true;
+ isEnd = false;
+ type = tp;
+ callBack = cb;
+ }
+ };
+
+ return me;
+ }
+
+ module.exports = Switcher;
+});
\ No newline at end of file
diff --git a/games/core-ball/js/general/Tween.js b/games/core-ball/js/general/Tween.js
new file mode 100644
index 00000000..a92e4c8f
--- /dev/null
+++ b/games/core-ball/js/general/Tween.js
@@ -0,0 +1,28 @@
+/**
+ * @fileoverview Tween
+ * @author Random | http://weibo.com/random
+ * @date 2015-03-09
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ var Tween = {
+ simple : function(sv, ev, st, d){
+ var v = (ev - sv) / d;
+ var t = +(new Date);
+
+ if(t - st < d){
+ Tween.isEnd = false;
+ return sv + (t - st) * v;
+ }else {
+ Tween.isEnd = true;
+ return ev;
+ }
+ },
+
+ isEnd : true
+ };
+
+ module.exports = Tween;
+});
\ No newline at end of file
diff --git a/games/core-ball/js/lib/CustEvent.js b/games/core-ball/js/lib/CustEvent.js
new file mode 100644
index 00000000..bf30ef9a
--- /dev/null
+++ b/games/core-ball/js/lib/CustEvent.js
@@ -0,0 +1,77 @@
+/**
+ * @fileoverview 自定义事件
+ * @author Random | http://weibo.com/random
+ * @date 2013-05-21
+ */
+
+define(function(require, exports, module){
+
+ module.exports = function(target){
+ var events={};
+
+ !target && (target={});
+
+ function getType(obj){
+ return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
+ }
+
+ return {
+ add:function(type,handle){
+ if (getType(handle) !== "function") {
+ return;
+ }
+
+ var evts=events;
+ type=type.toLowerCase();
+
+ !evts[type] && (evts[type]=[]);
+ evts[type].push(handle);
+ },
+
+
+ remove:function(type,handle){
+ var evts=events[type];
+ var i;
+
+ type=type.toLowerCase();
+
+ if (getType(handle) !== "function" || !evts || !evts.length) {
+ return;
+ }
+ for(i=evts.length-1;i>=0;i--){
+ evts[i]===handle && evts.splice(i,1);
+ }
+ },
+
+
+ fire:function(type){
+ var evts;
+ var args;
+ var i;
+ var l;
+
+ type=type.toLowerCase();
+ evts=events[type];
+
+ if (!evts || !evts.length) {
+ return;
+ }
+
+ args=Array.prototype.slice.call(arguments,1);
+ l=evts.length;
+ for(i=0;i=0;i--){
+ evts.splice(i,1);
+ }
+ }
+ };
+ };
+});
\ No newline at end of file
diff --git a/games/core-ball/js/lib/Storage.js b/games/core-ball/js/lib/Storage.js
new file mode 100644
index 00000000..e079eb33
--- /dev/null
+++ b/games/core-ball/js/lib/Storage.js
@@ -0,0 +1,27 @@
+/**
+ * @fileoverview Storage
+ * @author Random | http://weibo.com/random
+ * @date 2015-03-11
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ var Storage = {
+ setValue : function(key, value){
+ try{
+ window.localStorage && (window.localStorage[key] = value);
+ }catch(ex){}
+ },
+
+ getValue : function(key){
+ if(window.localStorage){
+ try{
+ return window.localStorage[key];
+ }catch(ex){}
+ }
+ }
+ };
+
+ module.exports = Storage;
+});
\ No newline at end of file
diff --git a/games/core-ball/js/lib/addEvent.js b/games/core-ball/js/lib/addEvent.js
new file mode 100644
index 00000000..a74fa3ce
--- /dev/null
+++ b/games/core-ball/js/lib/addEvent.js
@@ -0,0 +1,26 @@
+/**
+ * @fileoverview addEvent
+ * @author Random | http://weibo.com/random
+ * @date 2015-03-05
+ */
+
+define(function(require, exports, module) {
+ var util = require("lib/util");
+
+ var map = {
+ "click" : "touchstart",
+ "mousedown" : "touchstart",
+ "mouseup" : "touchend"
+ };
+
+ module.exports = function(dom, type, handle, isCapture){
+ if(dom.addEventListener){
+ dom.addEventListener(util.isMobile ? map[type] || type : type, handle, isCapture);
+ }else if(dom.attachEvent){
+ dom.attachEvent("on" + type, handle);
+ }else{
+ dom["on" + type] = handle;
+ }
+
+ };
+});
\ No newline at end of file
diff --git a/games/core-ball/js/lib/md5.js b/games/core-ball/js/lib/md5.js
new file mode 100644
index 00000000..a7053431
--- /dev/null
+++ b/games/core-ball/js/lib/md5.js
@@ -0,0 +1,274 @@
+/*
+ * JavaScript MD5 1.0.1
+ * https://github.com/blueimp/JavaScript-MD5
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ *
+ * Based on
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*jslint bitwise: true */
+/*global unescape, define */
+
+(function ($) {
+ 'use strict';
+
+ /*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+ function safe_add(x, y) {
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF),
+ msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+ }
+
+ /*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+ function bit_rol(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+ }
+
+ /*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+ function md5_cmn(q, a, b, x, s, t) {
+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
+ }
+ function md5_ff(a, b, c, d, x, s, t) {
+ return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+ }
+ function md5_gg(a, b, c, d, x, s, t) {
+ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+ }
+ function md5_hh(a, b, c, d, x, s, t) {
+ return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+ }
+ function md5_ii(a, b, c, d, x, s, t) {
+ return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+ }
+
+ /*
+ * Calculate the MD5 of an array of little-endian words, and a bit length.
+ */
+ function binl_md5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i, olda, oldb, oldc, oldd,
+ a = 1732584193,
+ b = -271733879,
+ c = -1732584194,
+ d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5_ff(a, b, c, d, x[i], 7, -680876936);
+ d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = md5_gg(b, c, d, a, x[i], 20, -373897302);
+ a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = md5_hh(d, a, b, c, x[i], 11, -358537222);
+ c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = md5_ii(a, b, c, d, x[i], 6, -198630844);
+ d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ }
+ return [a, b, c, d];
+ }
+
+ /*
+ * Convert an array of little-endian words to a string
+ */
+ function binl2rstr(input) {
+ var i,
+ output = '';
+ for (i = 0; i < input.length * 32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
+ }
+ return output;
+ }
+
+ /*
+ * Convert a raw string to an array of little-endian words
+ * Characters >255 have their high-byte silently ignored.
+ */
+ function rstr2binl(input) {
+ var i,
+ output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ for (i = 0; i < input.length * 8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
+ }
+ return output;
+ }
+
+ /*
+ * Calculate the MD5 of a raw string
+ */
+ function rstr_md5(s) {
+ return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
+ }
+
+ /*
+ * Calculate the HMAC-MD5, of a key and some data (raw strings)
+ */
+ function rstr_hmac_md5(key, data) {
+ var i,
+ bkey = rstr2binl(key),
+ ipad = [],
+ opad = [],
+ hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = binl_md5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+ hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+ return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
+ }
+
+ /*
+ * Convert a raw string to a hex string
+ */
+ function rstr2hex(input) {
+ var hex_tab = '0123456789abcdef',
+ output = '',
+ x,
+ i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hex_tab.charAt((x >>> 4) & 0x0F) +
+ hex_tab.charAt(x & 0x0F);
+ }
+ return output;
+ }
+
+ /*
+ * Encode a string as utf-8
+ */
+ function str2rstr_utf8(input) {
+ return unescape(encodeURIComponent(input));
+ }
+
+ /*
+ * Take string arguments and return either raw or hex encoded strings
+ */
+ function raw_md5(s) {
+ return rstr_md5(str2rstr_utf8(s));
+ }
+ function hex_md5(s) {
+ return rstr2hex(raw_md5(s));
+ }
+ function raw_hmac_md5(k, d) {
+ return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
+ }
+ function hex_hmac_md5(k, d) {
+ return rstr2hex(raw_hmac_md5(k, d));
+ }
+
+ function md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return hex_md5(string);
+ }
+ return raw_md5(string);
+ }
+ if (!raw) {
+ return hex_hmac_md5(key, string);
+ }
+ return raw_hmac_md5(key, string);
+ }
+
+ if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return md5;
+ });
+ } else {
+ $.md5 = md5;
+ }
+}(this));
\ No newline at end of file
diff --git a/games/core-ball/js/lib/require.js b/games/core-ball/js/lib/require.js
new file mode 100644
index 00000000..84d1d678
--- /dev/null
+++ b/games/core-ball/js/lib/require.js
@@ -0,0 +1,36 @@
+/*
+ RequireJS 2.1.10 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ Available via the MIT or new BSD license.
+ see: http://github.com/jrburke/requirejs for details
+*/
+var requirejs,require,define;
+(function(ca){function G(b){return"[object Function]"===N.call(b)}function H(b){return"[object Array]"===N.call(b)}function v(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&
+(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
+this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);
+if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval",
+"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(K,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b,
+a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(K,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,
+nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,
+a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=
+!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(K,f))return K[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}M();i.nextTick(function(){M();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==
+d&&(!("."===g||".."===g)||1g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):
+(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,M=g,D?y.insertBefore(g,D):y.appendChild(g),M=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(L=b.getAttribute("data-main"))return q=L,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl=
+Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=L),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=M))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b||
+(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);
diff --git a/games/core-ball/js/lib/stopEvent.js b/games/core-ball/js/lib/stopEvent.js
new file mode 100644
index 00000000..8a46ebd3
--- /dev/null
+++ b/games/core-ball/js/lib/stopEvent.js
@@ -0,0 +1,21 @@
+/**
+ * @fileoverview stopEvent
+ * @author Random | http://weibo.com/random
+ * @date 2015-03-11
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ module.exports = function(evt){
+ if(evt){
+ if(evt.preventDefault) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ }else{
+ evt.returnValue = false;
+ evt.cancelBubble = true;
+ }
+ }
+ };
+});
\ No newline at end of file
diff --git a/games/core-ball/js/lib/util.js b/games/core-ball/js/lib/util.js
new file mode 100644
index 00000000..f192a9c4
--- /dev/null
+++ b/games/core-ball/js/lib/util.js
@@ -0,0 +1,50 @@
+/**
+ * @fileoverview util
+ * @author Random | http://weibo.com/random
+ * @date 2015-02-05
+ */
+
+define(function(require, exports, module) {
+ "use strict";
+
+ module.exports = {
+ drawCircle : function(ctx, x, y, r, c){
+ ctx.beginPath();
+ ctx.arc(x, y, r, 0, 2 * Math.PI, false);
+ ctx.fillStyle = c || "red";
+ ctx.fill();
+ },
+
+ drawLine : function(ctx, x1, y1, x2, y2, c, w){
+ ctx.strokeStyle = c || "red";
+ ctx.lineWidth = w || 1
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ },
+
+ drawText : function(ctx, x, y, text, size, c){
+ ctx.font = size + "px Verdana";
+ ctx.fillStyle = c || "red";
+ ctx.fillText(text, x, y);
+ },
+
+ getTextWidth : function(ctx, x, y, text, size, c){
+ ctx.font = size + "px Verdana";
+ ctx.fillStyle = c || "red";
+ return ctx.measureText(text).width;
+ },
+
+ getPointDistance : function(p1, p2){
+ return Math.floor(Math.sqrt(Math.floor(Math.pow(p1.x - p2.x, 2)) + Math.floor(Math.pow(p1.y - p2.y, 2))));
+ },
+
+ isMobile : (/(mobile|iphone|ipod|ipad|ios|android|windows phone)/i).test(navigator.userAgent),
+
+ isAndroid : (/android/i).test(navigator.userAgent),
+
+ isWeixin : (/MicroMessenger/i).test(navigator.userAgent)
+
+ };
+});
\ No newline at end of file
diff --git a/games/core-ball/js/page/index.js b/games/core-ball/js/page/index.js
new file mode 100644
index 00000000..861e92fa
--- /dev/null
+++ b/games/core-ball/js/page/index.js
@@ -0,0 +1,15 @@
+/**
+ * @fileoverview index
+ * @author Random | http://weibo.com/random
+ * @date 2015-02-05
+ */
+
+define("page/index", function(require, exports, module) {
+ "use strict";
+
+ var Game = require("general/Game");
+
+ Game.start();
+});
+
+require(["page/index"]);
\ No newline at end of file
diff --git a/games/core-ball/pr_source.png b/games/core-ball/pr_source.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6b1387b6e85ac2edcb6ba8f5a30c5bb60d91840
GIT binary patch
literal 28912
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 -1){
+ arr = file.split("/");
+ fileName = arr.pop();
+ }else{
+ fileName = file;
+ }
+
+ amdjsBuild(file, AMDJS_BUILD_DIR + fileName.replace(/\.js$/, ".min.js"), "$AJB");
+ });
+ }
+
+ grunt.loadNpmTasks('grunt-contrib-clean');
+ grunt.loadNpmTasks('grunt-cmd-transport');
+ grunt.loadNpmTasks('grunt-cmd-combi');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+
+
+ grunt.registerTask('default', '默认任务', function() {
+ console.log("grunt build: 将项目目录js/page/下的js文件分别合并压缩到当前built目录");
+ });
+
+ grunt.registerTask('build', ['clean:before', 'transport','combi', 'uglify', 'clean:after']);
+ //grunt.registerTask('build', ['clean:before', 'transport', 'combi']);
+};
\ No newline at end of file
diff --git a/games/core-ball/tool/js_builder/built/index.min.js b/games/core-ball/tool/js_builder/built/index.min.js
new file mode 100644
index 00000000..57985b07
--- /dev/null
+++ b/games/core-ball/tool/js_builder/built/index.min.js
@@ -0,0 +1,694 @@
+"undefined" == typeof window.define && ((window.define = function () {}), (window.define.amd = 1)),
+ "undefined" == typeof window.$AJB && (window.$AJB = {}),
+ ($AJB.lib = {}),
+ ($AJB.general = {}),
+ ($AJB.page = {}),
+ ($AJB.lib.stopEvent = function () {
+ "use strict";
+ return function (a) {
+ a && (a.preventDefault ? (a.preventDefault(), a.stopPropagation()) : ((a.returnValue = !1), (a.cancelBubble = !0)));
+ };
+ }),
+ ($AJB.lib.Storage = function () {
+ "use strict";
+ var a = {
+ setValue: function (a, b) {
+ window.localStorage && (window.localStorage[a] = b);
+ },
+ getValue: function (a) {
+ return window.localStorage ? window.localStorage[a] : void 0;
+ },
+ };
+ return a;
+ }),
+ ($AJB.general.BeginStage = function () {
+ "use strict";
+ function a(a) {
+ function c() {
+ b(h, "click", function () {
+ e.fire(g, f);
+ }),
+ (j.innerHTML = d.isAndroid ? "GO" : "▶");
+ }
+ var h = a.getElementsByClassName("button")[0],
+ i = a.getElementsByClassName("text")[0],
+ j = document.getElementById("txtAr"),
+ k = {
+ show: function () {
+ a.style.display = "";
+ },
+ hide: function () {
+ a.style.display = "none";
+ },
+ level: function (a) {
+ (f = a), (i.innerHTML = "level " + a);
+ },
+ on: function (a, b) {
+ e.add(a, b);
+ },
+ off: function (a, b) {
+ e.remove(a, b);
+ },
+ };
+ return c(), k;
+ }
+ var b = $AJB.lib.addEvent(),
+ c = $AJB.lib.CustEvent(),
+ d = $AJB.lib.util(),
+ e = c(),
+ f = 0,
+ g = "start";
+ return a;
+ }),
+ ($AJB.general.Switcher = function () {
+ "use strict";
+ function a(a, b, c) {
+ var d,
+ e,
+ f = null,
+ g = !1,
+ h = {
+ point: [0, 0],
+ enabled: !1,
+ color: "#c8c8c8",
+ update: function () {
+ var a = h.point,
+ c = 30;
+ h.enabled &&
+ (0 === e
+ ? ((d = h.color), a[0] < b / 2 ? ((a[0] = Math.min(a[0] + c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0)))
+ : 1 === e && ((d = "#000"), a[0] > b / 2 ? ((a[0] = Math.max(a[0] - c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0))));
+ },
+ render: function () {
+ var e = h.point;
+ h.enabled && ((a.fillStyle = d), a.fillRect(e[0] - b / 2, e[1] - c / 2, b, c), g && ((h.enabled = !1), f && f()));
+ },
+ switchStage: function (d, i) {
+ 0 === d ? (h.point = [-b / 2, c / 2]) : 1 === d && ((a.fillStyle = h.color), a.fillRect(0, 0, b, c), (h.point = [b + b / 2, c / 2])), (h.enabled = !0), (g = !1), (e = d), (f = i);
+ },
+ };
+ return h;
+ }
+ return a;
+ }),
+ ($AJB.lib.addEvent = function () {
+ var a = $AJB.lib.util(),
+ b = { click: "touchstart", mousedown: "touchstart", mouseup: "touchend" };
+ return function (c, d, e, f) {
+ c.addEventListener ? c.addEventListener(a.isMobile ? b[d] || d : d, e, f) : c.attachEvent ? c.attachEvent("on" + d, e) : (c["on" + d] = e);
+ };
+ }),
+ ($AJB.general.Levels = function () {
+ "use strict";
+ function a(a, b) {
+ return function () {
+ var c = 0;
+ return function () {
+ return (c += (a * b) % 360);
+ };
+ };
+ }
+ function b(a, b) {
+ return function () {
+ var c = 0,
+ d = 1,
+ e = +new Date();
+ return function () {
+ var f = +new Date();
+ return f - e > b && ((d = -d), (e = f)), (c += (d * a) % 360);
+ };
+ };
+ }
+ function c(a, b, c, d) {
+ return function () {
+ var e = 0,
+ f = +new Date();
+ return function () {
+ var g = +new Date();
+ return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
+ };
+ };
+ }
+ function d(a) {
+ var b = 1;
+ return (
+ h(document.body, "mousedown", function () {
+ b = -b;
+ }),
+ function () {
+ var c = 0;
+ return function () {
+ return (c += (a * b) % 360);
+ };
+ }
+ );
+ }
+ function e(a, b, c, d) {
+ return (
+ h(document.body, "mousedown", function () {
+ d = -d;
+ }),
+ function () {
+ var e = 0,
+ f = +new Date();
+ return function () {
+ var g = +new Date();
+ return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
+ };
+ }
+ );
+ }
+ function f(a, b, c, d) {
+ i[a] = { childs: k[b], queueCount: c, round: j[d] };
+ }
+ var g,
+ h = $AJB.lib.addEvent(),
+ i = {},
+ j = {
+ A1: a(1.5, 1),
+ A2: a(1.5, -1),
+ B1: a(2.5, 1),
+ B2: a(2.5, -1),
+ C1: b(2.2, 3e3),
+ C2: b(3.5, 2e3),
+ D1: c(2, 2.3, 1200, 1),
+ D2: c(2, 2.3, 1200, -1),
+ D3: c(4, 4.5, 1700, 1),
+ D4: c(4, 4.5, 1700, -1),
+ D5: c(4, 4.5, 1700, 1),
+ D6: c(4, 4.5, 1700, -1),
+ E1: d(2),
+ E2: e(2, 2.3, 1e3, 1),
+ },
+ k = {
+ 0: [],
+ 2: [0, 180],
+ 3: [0, 120, 240],
+ 4: [0, 90, 180, 270],
+ 5: [0, 72, 144, 216, 288],
+ 6: [0, 60, 120, 180, 240, 300],
+ 7: [0, 52, 103, 155, 206, 258, 309],
+ 8: [0, 45, 90, 135, 180, 225, 270, 315],
+ 9: [0, 40, 80, 120, 160, 200, 240, 280, 320],
+ 10: [0, 36, 72, 108, 144, 180, 216, 252, 288, 324],
+ 11: [0, 33, 66, 99, 131, 164, 197, 230, 262, 295, 328],
+ 12: [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],
+ 13: [0, 28, 56, 84, 111, 139, 167, 194, 222, 250, 277, 305, 333],
+ 14: [0, 26, 52, 78, 103, 129, 155, 180, 206, 232, 258, 283, 309, 335],
+ 15: [0, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 312, 336],
+ 16: [0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338],
+ },
+ l = {
+ 1: ["4", 8, "A1"],
+ 2: ["6", 10, "A1"],
+ 3: ["2", 20, "A1"],
+ 4: ["8", 12, "A2"],
+ 5: ["12", 8, "A1"],
+ 6: ["10", 10, "A2"],
+ 7: ["12", 13, "A1"],
+ 8: ["16", 3, "A2"],
+ 9: ["0", 26, "A2"],
+ 10: ["16", 10, "A1"],
+ 11: ["10", 8, "B1"],
+ 12: ["6", 12, "B2"],
+ 13: ["12", 4, "B1"],
+ 14: ["8", 14, "B2"],
+ 15: ["8", 6, "B1"],
+ 16: ["5", 10, "B2"],
+ 17: ["6", 12, "B1"],
+ 18: ["8", 14, "B2"],
+ 19: ["0", 23, "B1"],
+ 20: ["10", 13, "B2"],
+ 21: ["4", 12, "C1"],
+ 22: ["6", 10, "C1"],
+ 23: ["8", 12, "C1"],
+ 24: ["7", 14, "C1"],
+ 25: ["2", 18, "C1"],
+ 26: ["4", 18, "C1"],
+ 27: ["0", 24, "C1"],
+ 28: ["4", 10, "C2"],
+ 29: ["6", 13, "C2"],
+ 30: ["4", 20, "C1"],
+ 31: ["6", 8, "D1"],
+ 32: ["2", 12, "D2"],
+ 33: ["3", 14, "D2"],
+ 34: ["3", 18, "D1"],
+ 35: ["8", 12, "D1"],
+ 36: ["7", 15, "D2"],
+ 37: ["16", 8, "D2"],
+ 38: ["0", 23, "D1"],
+ 39: ["12", 12, "D1"],
+ 40: ["12", 15, "D2"],
+ 41: ["5", 10, "E1"],
+ 42: ["6", 12, "E1"],
+ 43: ["3", 15, "E1"],
+ 44: ["3", 19, "E1"],
+ 45: ["0", 24, "E1"],
+ 46: ["2", 15, "E2"],
+ 47: ["4", 16, "E2"],
+ 48: ["12", 8, "E2"],
+ 49: ["3", 20, "E2"],
+ 50: ["16", 14, "E2"],
+ 51: ["4", 6, "D3"],
+ 52: ["4", 12, "D4"],
+ 53: ["6", 13, "D3"],
+ 54: ["0", 24, "D4"],
+ 55: ["4", 21, "D3"],
+ 56: ["16", 16, "A1"],
+ 57: ["4", 24, "C1"],
+ 58: ["4", 26, "D1"],
+ 59: ["4", 25, "E2"],
+ 60: ["13", 19, "E2"],
+ };
+ for (g in l) f(g, l[g][0], l[g][1], l[g][2]);
+ return i;
+ }),
+ ($AJB.general.Collide = function () {
+ "use strict";
+ var a = $AJB.lib.util(),
+ b = {
+ check: function (b, c, d) {
+ var e = b.childs(),
+ f = e.length,
+ g = Math.ceil(2 * c.rad());
+ for (d = d || 1; f--; ) if (c !== e[f].ball && a.getPointDistance(c.pos(), e[f].ball.pos()) <= g + Math.ceil(2 * d)) return !0;
+ return !1;
+ },
+ };
+ return b;
+ }),
+ ($AJB.general.Tween = function () {
+ "use strict";
+ var a = {
+ simple: function (b, c, d, e) {
+ var f = (c - b) / e,
+ g = +new Date();
+ return e > g - d ? ((a.isEnd = !1), b + (g - d) * f) : ((a.isEnd = !0), c);
+ },
+ isEnd: !0,
+ };
+ return a;
+ }),
+ ($AJB.general.BallQueue = function () {
+ "use strict";
+ function a(a, f, g, h, i) {
+ function j() {
+ var b,
+ d,
+ e = k(a),
+ j = e.length;
+ for (b = 0; j > b; b++) (d = c(h, null, e[b], null, i)), d.pos(f, g + 3 * d.rad() * b), m.push(d);
+ }
+ function k(a) {
+ for (var b = a, c = []; b--; ) c.push(b + 1);
+ return c;
+ }
+ var l,
+ m = [],
+ n = [],
+ o = b();
+ return (
+ (i = i || 1),
+ (l = {
+ ballList: m,
+ add: function () {},
+ remove: function (a) {
+ var b = m[a];
+ return m.splice(a, 1), b;
+ },
+ clear: function () {
+ (n = []), (m = []);
+ },
+ popup: function () {
+ var a = m.shift();
+ (a.st = +new Date()), (a.sv = a.pos().y), n.push(a);
+ },
+ update: function () {
+ var a,
+ b,
+ c,
+ h = n.length,
+ i = m.length;
+ if (h) {
+ for (b = n[0].rad(), a = g - 3 * b; h--; ) n[h].pos(f, d.simple(n[h].sv, a, n[h].st, 50)), (c = n[n.length - 1].pos().y), n[h].pos().y === a && (o.fire(e, n[h]), n.splice(h, 1));
+ for (; i--; ) m[i].pos(f, c + 3 * b * (i + 1));
+ }
+ },
+ render: function () {
+ for (var a = m.length, b = n.length; a--; ) m[a].render();
+ for (; b--; ) n[b].render();
+ },
+ on: function (a, b) {
+ o.add(a, b);
+ },
+ off: function (a, b) {
+ o.remove(a, b);
+ },
+ destroy: function () {
+ for (var a = m.length; a--; ) m[a].destroy();
+ o.destroy();
+ },
+ }),
+ j(),
+ l
+ );
+ }
+ var b = $AJB.lib.CustEvent(),
+ c = $AJB.general.Ball(),
+ d = $AJB.general.Tween(),
+ e = "popup";
+ return a;
+ }),
+ ($AJB.general.Ball = function () {
+ "use strict";
+ function a(a, c, d, e, f) {
+ function g() {
+ var c = b.getTextWidth(a, 0, 0, d, e);
+ b.drawText(a, i - c / 2, j + e / 2, d, e, "black");
+ }
+ var h,
+ i = 0,
+ j = 0;
+ return (
+ (f = f || 1),
+ (c = (c || 12) * f),
+ (e = (e || 15) * f),
+ (h = {
+ pos: function (a, b) {
+ return "undefined" != typeof a && (i = a), "undefined" != typeof b && (j = b), { x: i, y: j };
+ },
+ scale: function (a) {
+ return "undefined" != typeof a && (f = a), f;
+ },
+ rad: function (a) {
+ return "undefined" != typeof a && (c = a), c;
+ },
+ render: function (e) {
+ b.drawCircle(a, i, j, c, "#ffffff"), "undefined" != typeof d ? g(d) : "undefined" != typeof e && g(e);
+ },
+ destroy: function () {
+ h = null;
+ },
+ })
+ );
+ }
+ var b = $AJB.lib.util();
+ return a;
+ }),
+ ($AJB.lib.util = function () {
+ "use strict";
+ return {
+ drawCircle: function (a, b, c, d, e) {
+ a.beginPath(), a.arc(b, c, d, 0, 2 * Math.PI, !1), (a.fillStyle = e || "red"), a.fill();
+ },
+ drawLine: function (a, b, c, d, e, f, g) {
+ (a.strokeStyle = f || "red"), (a.lineWidth = g || 1), a.beginPath(), a.moveTo(b, c), a.lineTo(d, e), a.stroke();
+ },
+ drawText: function (a, b, c, d, e, f) {
+ (a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.fillText(d, b, c);
+ },
+ getTextWidth: function (a, b, c, d, e, f) {
+ return (a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.measureText(d).width;
+ },
+ getPointDistance: function (a, b) {
+ return Math.floor(Math.sqrt(Math.floor(Math.pow(a.x - b.x, 2)) + Math.floor(Math.pow(a.y - b.y, 2))));
+ },
+ isMobile: /(mobile|iphone|ipod|ipad|ios|android|windows phone)/i.test(navigator.userAgent),
+ isAndroid: /android/i.test(navigator.userAgent),
+ isWeixin: /MicroMessenger/i.test(navigator.userAgent),
+ };
+ }),
+ ($AJB.general.Core = function () {
+ "use strict";
+ function a(a, d, e, f, g) {
+ function h() {
+ for (var a, b, c, d, e = l.length; e--; )
+ (a = 3 * Math.cos(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + n), (b = 3 * Math.sin(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + o), (c = a / Math.abs(a)), (d = b / Math.abs(b)), l[e].ball.pos(a, b);
+ }
+ var i,
+ j,
+ k = 0,
+ l = [],
+ m = 50,
+ n = a.width / 2,
+ o = 4 * m * g;
+ return (
+ (g = g || 1),
+ (i = c(d, m, e, f, g)),
+ i.pos(n, o),
+ (j = {
+ pos: i.pos,
+ scale: i.scale,
+ rad: i.rad,
+ angle: function (a) {
+ return "undefined" != typeof a && (k = a), k;
+ },
+ addChild: function (a, b) {
+ l.push({ angle: a, ball: b });
+ },
+ clear: function () {
+ l = [];
+ },
+ childs: function () {
+ return l;
+ },
+ update: function () {
+ h();
+ },
+ render: function () {
+ var c,
+ e = l.length,
+ f = a.width,
+ h = a.height;
+ for (d.clearRect(0, 0, f, h), c = 0; e > c; c++) b.drawLine(d, n, o, l[c].ball.pos().x, l[c].ball.pos().y, "#ffffff", 1.5 * g), l[c].ball.render();
+ i.render();
+ },
+ destroy: function () {
+ j.clear(), (i = null), (j = null);
+ },
+ })
+ );
+ }
+ var b = $AJB.lib.util(),
+ c = $AJB.general.Ball();
+ return a;
+ }),
+ ($AJB.lib.CustEvent = function () {
+ return function (a) {
+ function b(a) {
+ return Object.prototype.toString.call(a).slice(8, -1).toLowerCase();
+ }
+ var c = {};
+ return (
+ !a && (a = {}),
+ {
+ add: function (a, d) {
+ if ("function" === b(d)) {
+ var e = c;
+ (a = a.toLowerCase()), !e[a] && (e[a] = []), e[a].push(d);
+ }
+ },
+ remove: function (a, d) {
+ var e,
+ f = c[a];
+ if (((a = a.toLowerCase()), "function" === b(d) && f && f.length)) for (e = f.length - 1; e >= 0; e--) f[e] === d && f.splice(e, 1);
+ },
+ fire: function (b) {
+ var d, e, f, g;
+ if (((b = b.toLowerCase()), (d = c[b]), d && d.length)) for (e = Array.prototype.slice.call(arguments, 1), g = d.length, f = 0; g > f; f++) d[f].apply(a, e);
+ },
+ destroy: function () {
+ var a,
+ b = c.length - 1;
+ for (a = b; a >= 0; a--) evts.splice(a, 1);
+ },
+ }
+ );
+ };
+ }),
+ ($AJB.general.Scene = function () {
+ "use strict";
+ function a(a, b, l, m) {
+ function n(a) {
+ var g = a.childs,
+ h = g.length;
+ for (y = a.round(), w && w.destroy(), w = c(b, l, B, 50, m); h--; ) w.addChild(g[h], d(l, null, "", null, m));
+ x && x.destroy(),
+ (x = e(a.queueCount, b.width / 2, w.pos().y + 4 * w.rad(), l, m)),
+ x.on("popup", function (a) {
+ w.addChild(90 - w.angle(), a), f.check(w, a, m) ? ((z = a), s()) : !x.ballList.length && r();
+ });
+ }
+ function o() {
+ y && (w.angle(y()), w.update(), x.update());
+ }
+ function p() {
+ var b,
+ c,
+ d,
+ e,
+ f = w.childs(),
+ g = f.length,
+ h = 25;
+ for (a.style.backgroundColor = u.bgColor; g--; ) (b = f[g].angle + w.angle()), (c = Math.cos((b * Math.PI) / 180) * h), (d = Math.sin((b * Math.PI) / 180) * h), (e = f[g].ball.pos()), f[g].ball.pos(e.x + c, e.y + d);
+ }
+ function q(a) {
+ var b,
+ c = [25, 15, 20, 15],
+ d = c.length,
+ e = 200,
+ f = e / d;
+ for (w.update(), b = 1; d >= b; b++) a > f * b && z.rad(c[b - 1] * m);
+ }
+ function r() {
+ "pass" !== A && ((a.style.backgroundColor = "#1CB01A"), (A = "pass"), (v = +new Date()));
+ }
+ function s() {
+ "fail" !== l && ((a.style.backgroundColor = "#B8111C"), (A = "fail"), (v = +new Date()));
+ }
+ function t() {
+ var a = "to be continued...",
+ c = h.getTextWidth(l, 0, 0, a, 30 * m);
+ h.drawText(l, (b.width - c) / 2, 200 * m, a, 30 * m, "yellow");
+ }
+ var u,
+ v,
+ w,
+ x,
+ y,
+ z,
+ A = "run",
+ B = 1;
+ return (u = {
+ enabled: !1,
+ run: function (b) {
+ var c = g[b];
+ (B = b), c ? ((u.enabled = !0), n(c), (a.style.backgroundColor = "#000"), (A = "run")) : t();
+ },
+ shot: function () {
+ x && x.ballList.length && x.popup();
+ },
+ update: function () {
+ var a;
+ u.enabled && ("run" === A ? o() : "pass" === A ? (p(), +new Date() - v > 1e3 && ((A = ""), k.fire(i))) : "fail" === A && ((a = +new Date() - v), q(a), a > 1e3 && ((A = ""), k.fire(j))));
+ },
+ render: function () {
+ u.enabled && (w.render(), x.render());
+ },
+ on: function (a, b) {
+ k.add(a, b);
+ },
+ off: function (a, b) {
+ k.remove(a, b);
+ },
+ });
+ }
+ var b = $AJB.lib.CustEvent(),
+ c = $AJB.general.Core(),
+ d = $AJB.general.Ball(),
+ e = $AJB.general.BallQueue(),
+ f = $AJB.general.Collide(),
+ g = $AJB.general.Levels(),
+ h = $AJB.lib.util(),
+ i = "passed",
+ j = "failed",
+ k = b();
+ return a;
+ }),
+ ($AJB.general.Game = function () {
+ "use strict";
+ function a() {
+ var a = document.body.scrollWidth || document.documentElement.scrollWidth,
+ b = document.body.scrollHeight || document.documentElement.scrollHeight;
+ (r.width = a), (r.height = b), (i = l(x, a, b)), (s.style.backgroundColor = i.color), (s.style.width = a + "px"), (s.style.height = b + "px"), (j = b / 560);
+ }
+ function b() {
+ u.href = B.replace(/#\{level\}/, D);
+ }
+ function c() {
+ p.isWeixin
+ ? n(u, "mousedown", function () {
+ w.style.display = "";
+ })
+ : p.isMobile && b();
+ }
+ function d(a) {
+ (D = +a), o.setValue(z, D), (document.title = A.replace(/\#\{level\}/, D)), C.level(D), !p.isWeixin && p.isMobile && b();
+ }
+ function e() {
+ n(document.body, "mousedown", function (a) {
+ var b;
+ if (a && a.changedTouches) for (b = a.changedTouches.length; b--; ) h.shot();
+ else h.shot();
+ "1" != a.target.getAttribute("data-capture") && q(a);
+ }),
+ n(w, "mousedown", function () {
+ w.style.display = "none";
+ }),
+ n(v, "mousedown", function () {
+ E ||
+ ((E = !0),
+ (t.style.display = ""),
+ d(1),
+ setTimeout(function () {
+ (t.style.display = "none"), (E = !1);
+ }, 1e3));
+ }),
+ h.on("passed", function () {
+ i.switchStage(0, function () {
+ (h.enabled = !1), d(D + 1), (r.style.display = "none"), C.show();
+ });
+ }),
+ h.on("failed", function () {
+ i.switchStage(0, function () {
+ (h.enabled = !1), (r.style.display = "none"), C.level(D), C.show();
+ });
+ }),
+ C.on("start", function () {
+ (r.style.display = ""),
+ C.hide(),
+ i.switchStage(1, function () {
+ h.run(D);
+ });
+ });
+ }
+ function f() {
+ window.clearTimeout(F), h.update(), h.render(), i.update(), i.render(), (F = window.setTimeout(f, 1e3 / y));
+ }
+ function g() {
+ a(), (h = k(document.body, r, x, j)), e(), c(), C.level(D), C.show(), f();
+ }
+ var h,
+ i,
+ j,
+ k = $AJB.general.Scene(),
+ l = $AJB.general.Switcher(),
+ m = $AJB.general.BeginStage(),
+ n = $AJB.lib.addEvent(),
+ o = $AJB.lib.Storage(),
+ p = $AJB.lib.util(),
+ q = $AJB.lib.stopEvent(),
+ r = document.getElementById("stage"),
+ s = document.getElementById("begin"),
+ t = document.getElementById("tip"),
+ u = document.getElementById("btnFW"),
+ v = document.getElementById("btnReset"),
+ w = document.getElementById("wxArrow"),
+ x = r.getContext("2d"),
+ y = 60,
+ z = "core-ball-level",
+ A = "Core Ball(酷啵)-练手活的HTML5游戏,我已玩到第#{level}关了,你也来试试吧!",
+ B = "sinaweibo://share?content=Core Ball(酷啵) - 练手活的HTML5小游戏,我已玩到第#{level}关了,你也来试试吧! http://coreball.sinaapp.com",
+ C = m(s),
+ D = +o.getValue(z) || 1,
+ E = !1,
+ F = 0,
+ G = { start: g };
+ return G;
+ }),
+ ($AJB.page.index = function () {
+ "use strict";
+ var a = $AJB.general.Game();
+ a.start();
+ }),
+ $AJB.page.index();
\ No newline at end of file
diff --git a/games/mario-game/all.js b/games/mario-game/all.js
index 6850c37e..f5505ae9 100644
--- a/games/mario-game/all.js
+++ b/games/mario-game/all.js
@@ -1 +1,6255 @@
-function applyNewJs(){document.body.addEventListener("keydown",(function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||e.target!==document.body||e.preventDefault()}),!1),document.getElementById("paused")&&document.getElementById("paused").remove(),document.getElementById("mobile-controls")&&document.getElementById("mobile-controls").remove();var e=createElement("div",{id:"paused"}),t=createElement("span");t.innerText="CLICK TO UNPAUSE",e.appendChild(t),body.appendChild(e);var n=createElement("div",{id:"mobile-controls"}),x=createElement("div",{id:"move-left",className:"move"}),r=createElement("div",{id:"move-top",className:"move"}),i=createElement("div",{id:"move-right",className:"move"}),a=createElement("div",{id:"move-bottom",className:"move"}),o=createElement("div",{id:"move-fire",className:"move"}),l=createElement("span"),s=createElement("span"),d=createElement("span"),u=createElement("span"),p=createElement("span");x.appendChild(l),r.appendChild(s),i.appendChild(d),a.appendChild(u),o.appendChild(p),n.appendChild(x),n.appendChild(r),n.appendChild(i),n.appendChild(a),n.appendChild(o),body.appendChild(n);var c=document.getElementById("move-right"),m=document.getElementById("move-left"),h=document.getElementById("move-top"),f=document.getElementById("move-bottom"),g=document.getElementById("move-fire");c.addEventListener("touchstart",(function(e){var t=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,keyCode:68});document.body.dispatchEvent(t)})),c.addEventListener("touchend",(function(e){var t=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,keyCode:68});document.body.dispatchEvent(t)})),m.addEventListener("touchstart",(function(e){var t=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,keyCode:65});document.body.dispatchEvent(t)})),m.addEventListener("touchend",(function(e){var t=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,keyCode:65});document.body.dispatchEvent(t)})),h.addEventListener("touchstart",(function(e){var t=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,keyCode:87});document.body.dispatchEvent(t)})),h.addEventListener("touchend",(function(e){var t=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,keyCode:87});document.body.dispatchEvent(t)})),f.addEventListener("touchstart",(function(e){var t=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,keyCode:83});document.body.dispatchEvent(t)})),f.addEventListener("touchend",(function(e){var t=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,keyCode:83});document.body.dispatchEvent(t)})),g.addEventListener("touchstart",(function(e){var t=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,keyCode:17});document.body.dispatchEvent(t)})),g.addEventListener("touchend",(function(e){var t=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,keyCode:17});document.body.dispatchEvent(t)})),document.getElementById("data_display").style="width:100%;font-size:13px"}function resetData(){var e;(e=document.getElementById("data_display"))&&body.removeChild(e),window.data||(window.data=new Data)}function Data(){this.playerpower=1,this.traveled=this.traveledold=0,this.scorelevs=[100,200,400,500,800,1e3,2e3,4e3,5e3,8e3],this.score=new DataObject(0,6,"SCORE"),this.time=new DataObject(350,3,"TIME"),this.world=new DataObject(0,0,"WORLD"),this.coins=new DataObject(0,0,"COINS"),this.lives=new DataObject(3,1,"LIVES"),this.time.dir=-1,this.scoreold=0}function DataObject(e,t,n){this.amount=e,this.length=t,this.name=n,this.element=createElement("td",{className:"indisplay"})}function setDataDisplay(){var e=createElement("table",{id:"data_display",className:"display",style:{width:gamescreen.right+14+"px"}}),t=["score","coins","world","time","lives"];for(var n in body.appendChild(e),data.display=e,t)e.appendChild(data[t[n]].element),updateDataElement(data[t[n]]);body.appendChild(data.display),is_mobile&&applyNewJs()}function clearDataDisplay(){body.removeChild(data_display)}function toggleLuigi(){window.luigi=!window.luigi,localStorage.luigi=window.luigi,window.player.title=window.luigi?"Luigi":"Mario",setThingSprite(window.player)}function startDataTime(){TimeHandler.addEventInterval(updateDataTime,25,1/0,data.time)}function updateDataTime(e){1!=e.dir&&(100==e.amount?playCurrentThemeHurry():e.amount<=0&&killPlayer(player,!0)),notime||(map.time=e.amount+=e.dir,updateDataElement(e))}function updateDataElement(e){var t=e.name+" "+("Infinity"==e.amount?"Inf":e.amount);e.element.innerHTML=t,e.element.style.width=""}function score(e,t,n){if(!(t<=0)){if(1==arguments.length)return score(player,e);if(localStorage.highscore=max(localStorage.highscore,data.score.amount+=t),n){var x=addText(t,e.left,e.top);x.yvel=-unitsized4,TimeHandler.addEvent(killScore,49,x)}for(;data.score>1e4;)gainLife(),data.score.amount=data.score.amount%1e4;updateDataElement(data.score)}}function killScore(e){body.contains(e)&&body.removeChild(e),killNormal(e),deleteThing(e,texts,texts.indexOf(e))}function findScore(e){return e=0;--e)x[e],n=r[x[e]]=createElement("div",settings),t.appendChild(n);proliferate(r.left,{id:"left",className:"scroller flipped off",dx:-7}),proliferate(r.right,{id:"right",style:{right:"21px"},dx:7}),editor.scrollers=r,body.appendChild(t)}function editorFollowerHide(){var e=editor.follower;e.hiddenOld=e.hidden,e.hidden=!0}function editorFollowerShow(){var e=editor.follower;e.hidden=e.hiddenOld}function editorScrollingStart(e){var t=e.target.dx;editorPreventClicks(),editor.scrolling=TimeHandler.addEventInterval(editorScrolling,1,1/0,-t),classRemove(editor.scrollers.left,"off")}function editorScrollingStop(){TimeHandler.addEvent(editorClickOff,3),TimeHandler.clearEvent(editor.scrolling)}function editorScrolling(e){if(scrollEditor(e),editor.xloc>=0)return scrollEditor(-editor.xloc),editorScrollingStop(),classAdd(editor.scrollers.left,"off"),!0}function createEditorGuideLines(){var e,t,n,x={floor:0,ceiling:ceillev,jumplev1:jumplev1,jumplev2:jumplev2},r=16*unitsize+"px",i=map.floor;for(e in window.maplines=t=document.createElement("div"),t.style.marginLeft=r,t.id="maplines",x)n=createElement("div",{innerText:e,className:"mapline",id:e+"_line",style:{marginTop:(i-x[e])*unitsize+"px",marginLeft:"-"+r,paddingLeft:r}}),t.appendChild(n);body.appendChild(t)}function setEditorControls(e){e=e||["load","save","reset","undo"];var t,n,x,r=document.getElementById("controls"),i=createElement("div",{id:"controls"}),a=editor.controls={container:i};for(x in r&&(r.innerHTML=""),e)t=e[x],n=createElement("div",{id:t,alt:t,className:"control",style:{backgroundImage:"url(Theme/"+t+".gif)"},innerHTML:""+t+"
",onclick:editorClickControl}),i.appendChild(n),a[t]=n;sidebar.appendChild(i)}function setEditorTriggers(){var e,t=[maplines,canvas];for(e=t.length-1;e>=0;--e)t[e].onclick=editorMouseClick;document.onmousemove=editorFollowerFollowsCursor}function editorMouseClick(e){if(window.editing&&!editor.clicking){if(editorPreventClicks(),editor.erasing)return editorPlaceEraser(e);if(!editor.in_settings&&editor.canplace){var t=editor.section_name,n=(window[t],editor.current_selected,editor.follower);editor.placed.push(n),editor.follower=!1,editorSetCurrentThingFromName(null,!0),paused&&refillCanvas(),n.was_follower=!0,delete n.onclick,editor.playing&&(thingRetrieveVelocity(n),proliferate(n,n.reference.attributes))}}}function editorSelectSection(){var e=(this||editor.sectionselect).value.toLowerCase();(editor.in_settings="settings"==e)?(editorSetSection(e,!0),editorSetSectionSettings()):editorSetSection(e)}function editorSetSection(e,t){var n,x,r=editor.section=editor[e],i=editor.bottombar,a=0;if(editor.section_name=e,i.innerHTML="",!t)for(e in r)++a,x=editorAddBottomPreview(i,e,r[e]),n||(n=x);a?(i.style.visibility="visible",editorSetCurrentThingFromCanvas(n)):i.style.visibility="hidden"}function editorAddBottomPreview(e,t,n){var x,r=n.width,i=n.height,a=window[t],o=a?ThingCreate(a,n.previewargs):new Thing(Sprite,t),l=createElement("div",{width:r*unitsize+"px",height:i*unitsize+"px",name:t,className:"holder "+t,onclick:editorSetCurrentThing}),s=proliferate(getCanvas(r*unitsizet2,i*unitsizet2),{name:t,reference:n,style:{marginLeft:-roundDigit(r/2,scale)+"px"},onclick:editorSetCurrentThing}),d=(e.things,r*unitsizet2),u=i*unitsizet2,p=s.getContext("2d");return canvasDisableSmoothing(s),editor.bottombar.things[t]=s.thing=o,addClass(o,"editor"),x=o.canvas,o.canvases&&(x=o.canvases[n.sprite_source||"middle"].canvas),n.previewsize?(p.fillStyle=p.createPattern(x,"repeat"),p.fillRect(0,0,d,u)):p.drawImage(x,0,0,d,u),l.appendChild(l.canvas=s),e.appendChild(l),e[t]=l,s}function editorSetSectionSettings(){var e,t=editor.settings,n="";n+="Settings ",n+=addArgumentOption("night",Boolean,t.night),n+=addArgumentOption("setting",["Overworld","Underworld","Underwater","Castle","Sky"],t.setting),n+=addArgumentOption("alt",Boolean,t.alt),n+="
",options.innerHTML=n,ensureOptionsAboveZero(editorUpdateSettingsOption),e=editor.sidebar.getElementsByTagName("table")[0].rows,editor.settings.night_elem=e[0].cells[1].firstChild,editor.settings.setting_elem=e[1].cells[1].firstChild,editor.settings.alt_elem=e[2].cells[1].firstChild,editor.follower&&killNormal(editor.follower),editor.follower=!1}function editorUpdateSettingsOption(e){var t=editor.settings,n=t.night="True"==t.night_elem.value,x=t.alt="True"==t.alt_elem.value,r=(t.setting=t.setting_elem.value)+(n?" Night":"")+(x?" "+x:"");setAreaSetting(area,r,r!=area.setting)}function editorSetCurrentThing(e,t){var n=e.target,x=editor.current_thing_name=n.name,r=editor.current_thing=editor.section[x];t||updateCurrentArguments(x,r),editorUpdateFollower()}function editorSetCurrentThingFromCanvas(e,t){editorSetCurrentThing({target:e},t)}function editorSetCurrentThingFromName(e,t){editorSetCurrentThing({target:{name:e||editor.current_thing_name}},t)}function updateCurrentArguments(e,t){t=t||{};var n,x=editor.options,r="",i=t.mydefaults||{},a=t.arguments||{};for(n in r+=""+e+" ",a.width||(r+=addStaticOption("width",t.width)),a.height||(r+=addStaticOption("height",t.height)),a)r+=addArgumentOption(n.replace("_","-"),a[n],null,i);r+="
",x.innerHTML=r,ensureOptionsAboveZero()}function addStaticOption(e,t){return t==1/0&&(t="Inf."),""+e+": "+t+" "}function addArgumentOption(e,t,n,x){x=x||{};var r=""+e+": ";switch(t){case 1/0:r+="Inf";break;case Boolean:r+="False True ";break;case Number:r+=" ";break;default:switch(typeof t){case"number":r+=""+t+"x ";break;case"string":r+=" ";break;case"object":for(i in r+="",t)r+=""+t[i]+" ";r+=""}}return r+" "}function ensureOptionsAboveZero(e){e=e||editorUpdateFollower;var t,n=editor.options.getElementsByTagName("input");for(i=n.length-1;i>=0;--i)(t=n[i]).onchange=t.onclick=t.onkeypress=editorInputEnsureAboveZero;for(n=options.getElementsByTagName("select"),i=n.length-1;i>=0;--i)(t=n[i]).onchange=t.onclick=t.onkeypress=editorUpdateFollower}function editorInputEnsureAboveZero(e){editorUpdateFollower(e)}function editorUpdateFollower(e){if(editor.in_settings)return editorUpdateSettingsOption(e);var t,n=editor.current_thing;(t=editor.follower)&&(t.id="",killNormal(t)),t=n.createfunc?n.createfunc(editor.current_thing,editorGetArguments()):ThingCreate(window[editor.current_thing_name],n.followerUpdate(editor.current_thing,editorGetArguments())),editor.follower=t,proliferate(t,{id:"follower",libtype:editor.section_name,lookleft:!0,nocollide:!0,reference:n,onclick:editorMouseClick},!0),addThing(t),addClass(t,"editor"),thingRetrieveVelocity(t),thingStoreVelocity(t),editorSetFollowerPosition(t),editor.erasing&&(t.hidden=!0)}function editorGetArguments(){var e=arrayMake(editor.options.getElementsByTagName("input")),t=arrayMake(editor.options.getElementsByTagName("select")),n=e.concat(t);return pairs=generateInputNameValuePairs(n),pairs}function generateInputNameValuePairs(e){var t,n={};for(t in e)n[e[t].name]=e[t].value;return n}function editorFollowerFollowsCursor(e){var t=editor.follower;t&&editorSetFollowerPosition(t,roundFollowerDigit(e.x)+(editor.current_thing.widthoff-editor.offset.x)*unitsize,roundFollowerDigit(e.y)+editor.current_thing.heightoff*unitsize)}function editorSetFollowerPosition(e,t,n){t=t||editor.xloc_old||0,n=n||editor.yloc_old||0,setLeft(e,t),setTop(e,n),editor.xloc_old=t,editor.yloc_old=n}function roundFollowerDigit(e){var t="solids"==editor.section_name?8:4;return unitsize*t*round(e/(unitsize*t))}function roundFollowerPosition(e,t){editorSetFollowerPosition(e,roundFollowerDigit(e.left),roundFollowerDigit(e.top))}function editorFollowerUpdateStandard(e,t){"True"==t.hidden&&TimeHandler.addEvent((function(){editor.follower.hidden=!0}));var n=[];return t.width&&n.push(Number(t.width)),t.height&&n.push(Number(t.height)),n}function editorClickControl(e){editorPreventClicks();var t=e.target;t.id||(t=t.parentNode),window["editorControl"+capitalizeFirst(t.id)](),e.preventDefault()}function editorPreventClicks(){editor.clicking=!0,TimeHandler.addEvent(editorClickOff,3)}function editorClickOff(){window.editor&&(editor.clicking=!1)}function editorControlUndo(){var e=editor.placed.pop();e&&!e.player&&killNormal(e)}function editorControlReset(){var e=editor.placed.length,t=roundDigit(35/e,21);TimeHandler.addEventInterval(editorControlUndo,t,e)}function editorControlSave(){var e=editor.rawfunc=editorGetRawFunc();editorCreateInputWindow("Hit Submit below to start playing! This map will be resumed automatically the next time you use the editor on this computer. Alternately, you may copy this text to work on again later using Load (the button next to Save).
",e,editorSubmitGameFuncPlay);return e}function editorControlCancel(){loadEditor()}function editorGetRawFunc(){var e,t=editor.placed,n=t.length-1,x=new Array(e),r=" var map = arguments[0] || new Map();\n";for(r+="\n map.time = "+data.time.amount+";",r+="\n map.locs = [ new Location(0, true) ];",r+="\n map.areas = [",r+="\n new Area('"+area.setting+"', function() {",r+="\n setLocationGeneration(0);\n\n",e=n;e>=0;--e)x[e]=new editorPreStatement(t[e]);for(x.sort(prethingsorter),e=n;e>=0;--e)x[e]=" "+x[e].statement;return r+=(x=removeDuplicates(x)).join("\n"),r+="\n })",r+="\n ];",r+="\n return map;"}function editorPreStatement(e){this.placer=e,this.xloc=(gamescreen.left+e.left)/unitsize,this.yloc=map.floor-e.top/unitsize,this.statement=editorGetStatement(this,e,e.reference,e.args)}function editorGetStatement(e,t,n,x){if(!n&&!(n=editor[t.libtype][t.title]))return"";var r,i,a=(n.prefunc||pushPreThing).name,o=x.length;if(n.prefunc_custom)a+="("+n.prefunc_custom(e,t,n,x)+");";else{r=[],n.prefunc_solo||r.push(t.title),r.push(String(e.xloc)),r.push(String(e.yloc));for(var l=1;l=0;--n)if(!(t=r[n]).player&&t!=editor.follower&&objectsTouch(e,t)){killNormal(t),x.splice(x.indexOf(t),1);break}killNormal(e)}}function editorControlLoad(){editorCreateInputWindow("Paste your work in progress here, and click Submit to continue it.","",editorSubmitLoad)}function addThingsToPlaced(){var e=editor.placed;for(editor.placed=(editor.placed||[]).concat(characters).concat(solids).concat(scenery),e.sort(prethingsorter),e.splice(e.indexOf(player),1),i=e.length-1;i>=0;--i)placer=e[i],placer.reference=editor[placer.libtype][placer.title]}function editorCreateInputWindow(e,t,n){var x=gamescreen.unitwidth,r=editor.input_window=createElement("div",{id:"input_window",innerHTML:e||"",style:{width:x+"px"}}),i=r.input=editor.window_input=createElement("textarea",{id:"window_input",value:t||"",style:{width:x-49+"px"}}),a=r.submit=createElement("div",{id:"window_submit",className:"window_button",innerText:"Submit",onclick:n}),o=r.cancel=createElement("div",{id:"window_cancel",className:"window_button",innerText:"Cancel",onclick:editorCloseInputWindow});return r.appendChild(i),r.appendChild(a),r.appendChild(o),body.appendChild(r),killNormal(editor.follower=!1),editor.follower=!1,r}function editorCloseInputWindow(e){editorPreventClicks(),removeChildSafe(window.input_window,body),e||(editorSetCurrentThingFromName(),window.editing=!0),editorUpdateFollower()}function editorClose(e){if(window.editor){classRemove(body,"editor"),classRemove(body,"erasing"),killNormal(editor.follower),editor.follower=!1,delete window.editor;var t,n=["maplines","sidebar","bottombar","scrollers"];for(t in n)removeChildSafe(document.getElementById(n[t]),body);document.onmousemove=null,window.editing=!1,e&&window.map&&(map.shifting=!1)}}function scrollEditor(e,t){window.editor&&(editor.follower&&(e=e||0,t=t||0,shiftAll(scenery,e,t),shiftAll(solids,e,t),shiftAll(characters,e,t),editor.xloc+=e,editor.yloc+=t))}function editorStoreLocally(){localStorage.editorLastFunc=editor.rawfunc}function setEditorLocalRetrieval(){localStorage.editorLastFunc&&(editor.rawfunc=round,editorSubmitGameFunc())}function editorSubmitGameFunc(){if(!window.editor||!editor.rawfunc)return loadEditor();editor.rawfunc;var e=window.custommapfunc=new Function(editor.rawfunc);mapfuncs.Custom={Map:e},window.canedit=!0,setMap(["Custom","Map"]),window.canedit=editor.playing=!1,entryBlank(player),addThingsToPlaced(),editorStoreLocally(),editorCloseInputWindow()}function editorSubmitGameFuncPlay(){editorPreventClicks(),editorSubmitGameFunc(),editorStartPlaying()}function editorSubmitLoad(){if(window.editor&&editor.window_input){editorPreventClicks();var e=editor.window_input.value;loadEditor(),editor.rawfunc=e,editorSubmitGameFunc()}}function editorStartPlaying(){editorPreventClicks(),editor.playing=!0,placePlayer(),entryPlain(player),nokeys=!1;var e,t,n,x=editor.placed;for(n in x)thingRetrieveVelocity(e=x[n]),(t=editor[e.libtype][e.title])&&proliferate(e,t.onadds);setEditorControls(["Cancel"])}function setEditorLocalRetrieval(){var e=localStorage.editorLastFunc;if(e){editor.rawfunc=e,editorSubmitGameFunc(),editorStoreLocally();var t,n=editor.placed;for(t in n)thingStoreVelocity(n[t])}}function resetSeed(){window.seeder=1777771/(window.seed=round(1e7*random())),window.seedlast=.007,window.getSeed=function(){return seedlast="0."+String(seeder/seedlast).substring(4).replace(".","")}}function pushRandomSectionOverworld(e){var t=max(randTrue(117),1),n=0;if(++map.num_random_sections,pushPreFuncCollider(e,zoneDisableCheeps),map.had_floor=!1,map.needs_floor||t>=14||t<3||randTrue()?(pushPreFloor(e,0,t),map.had_floor=!0):pushPreThing(Stone,e,n=0,t),window.randcount_powerup=3,t<=3&&map.had_floor){if(randTrue())switch(randTrue(3)){case 0:if(t>3){pushPreScenery("HillSmall",e,0);break}case 1:if(t>2){pushPreScenery("Bush1",e+8*max(0,randTrue(t-2)),n);break}case 2:pushPreScenery("PlantLarge",e+8*max(0,randTrue(t-2)),n);break;case 3:pushPreScenery("PlantSmall",e+8*max(0,randTrue(t-2)),n)}}else for(var x=t-2,r=0,i=0,a=randTrue(2);a=7&&(pushPreScenery("CastleWall",e+8*(x+randTrue()),0,n-randTrue(2)),randTrue()&&pushPreThing(Brick,e+8*(x+randTrue(n)),jumplev1,randTrue()?Mushroom:getRandomBrickItem(!1,randTrue())));for(s=0;s=3?endCastleOutsideRandom(e+8*(r+u+1),!0):pushRandomSectionPreCastle(e+8*(r+u),t+1),spawnMap()}function endCastleOutsideRandom(e){var t,n;switch(randTrue()){case 0:for(n=1+randTrue();n<9;n+=2)pushPreThing(Stone,e+8*n,8*(n-randTrue()),1,1+randTrue());pushPreThing(Stone,e+72,64,2),t=12;break;case 1:for(pushPreFloor(e,0,11),n=1,hadlast=!1;n<9;++n)!hadlast||randTrue(2)||8==n?(pushPreThing(Stone,e+8*n,8*n,1,n),hadlast=!0):(hadlast=!1,pushPrePipe(e+8*n,0,8*max(n-randTrue(2),2),!0),++n);pushPreThing(Stone,e+72,72,2,9),t=7}pushPreFloor(e+88,0,round(gamescreen.width/8)),endCastleOutside(e+8*(9+t)+4,0,!0,round(gamescreen.width/8))}function startRandomSectionCastle(e){e+=32;var t=randTrue(7)+3,n=randTrue(4)+3;randTrue(4);pushPreFloor(e,24,t),pushPreThing(Stone,e,88,t,3),fillPreWater(e+8*t,0,2*n),pushPreThing(Podoboo,e+8*t+max(0,8*randTrue(n-3)),-32),pushRandomSectionCastle(e+8*(t+n),0),spawnMap()}function pushRandomSectionCastle(e,t){var n,x;switch(randTrue(3)){case 0:x=64*(n=1+randTrue(2))-8;for(var r=0;r3||randTrue())if(randTrue(3))pushRandomSmallEnemy(o+8*(randTrue()+1),8*n);else if(randTrue(2))for(a=1;a7&&randTrue()?(x=map.randtype,map.sincechange=0):x=pushRandomSectionTrees,pushPreThing(GenerationStarter,e+8*(t+randSign()),ceilmax+20,x),spawnMap(),map.treelev=n}function pushRandomSmallEnemy(e,t,n){switch(randTrue(7)){case 1:case 2:case 3:pushPreThing(Koopa,e,t+12,!0,n);break;case 7:pushPreThing(Beetle,e,t+8.5);break;default:pushPreThing(Goomba,e,t+8)}}function pushRandomSectionUnderworld(e){var t,n,x=max(randTrue(117),1),r=14,i=x-x%r;floor(x/r);if(pushPreFloor(e,0,x),window.randcount_powerup=3,x3&&o<64&&pushPreThing(Coral,l+8*(a-1),i,3),a>=3&&(n+=a-3)}}map.countCheep>1&&(pushPreThing(CheepCheep,e+8*n,randTrue(80)+8,randTrue()),map.countCheep=0),map.countBlooper>7&&(pushPreThing(Blooper,e+8*n,randTrue(80)+8),map.countBlooper=0),randTrue(7)&&++map.countCheep,randTrue(3)&&++map.countBlooper}if(++map.sincechange<3){var d=prepareNextGeneratorStandard(e,t,pushRandomSectionUnderwater,!1,!0);pushPreScenery("Water",e+8*t,ceilmax-21,8*(d+1)/3,1),pushPreThing(WaterBlock,e+8*t,ceilmax,8*(d+1))}else endRandomSectionUnderwater(e+8*t)}function endRandomSectionUnderwater(e){pushPreFloor(e,0,19),pushPreScenery("Water",e,ceilmax-21,28,1),pushPreThing(WaterBlock,e,ceilmax,157.5),pushPreThing(Stone,e,8,5,1),pushPreThing(Stone,e+8,16,4,1),pushPreThing(Stone,e+16,24,3,1),pushPreThing(Stone,e+24,32,2,1),pushPreThing(Stone,e+24,88,2,4),pushPreThing(PipeSide,e+32,48,["Random",randTrue()?"Overworld":"Underworld","Up"]),pushPreThing(Stone,e+40,88,14,11),map.scrollblockerok=!0,pushPreThing(ScrollBlocker,e+56,80,!0),spawnMap()}function startRandomSectionSky(e){pushPreThing(Stone,e,0,78),pushPreThing(Platform,e+88,24,6,[collideTransport]),pushRandomSectionSky(e+80,1),spawnMap()}function pushRandomSectionSky(e,t){if(t++>7)return fillPreThing(Coin,e+8,8,3,1,8),spawnMap();var n=0;if(t%2)fillPreThing(Coin,e+1,71,3,1,8),n=32;else switch(randTrue(t)){case 3:pushPreThing(Stone,e+8,48,1,2),fillPreThing(Coin,e+25,63,7,1,8),pushPreThing(Stone,e+88,48,1,2),n=104;break;case 4:case 5:case 6:pushPreThing(Stone,e+8,56,2);for(var x=0;x<=7;x+=2)pushPreThing(Stone,e+8*(x+5),56),fillPreThing(Coin,e+8*(x+5)+1,63,2,1,8);n=104;break;default:fillPreThing(Coin,e+1,55+8*randTrue(),16,1,8),n=128}pushPreThing(GenerationStarter,e+n,ceilmax+20,pushRandomSectionSky,t),spawnMap()}function prepareNextGeneratorStandard(e,t,n,x,r){var i=0,a=0;if(r)i=1;else switch(randTrue(7)){case 0:t>7&&map.underwater&&!randTrue(7)?(i=randTrue(3)+7,pushPreThing(Springboard,e+8*(t-1),14.5)):a=!0;break;case 1:var o=max(1,randTrue(7));i=o+randTrue(3),pushPreFloor(e+8*t,0,o);for(var l=1;l<=o;++l)pushPreThing(Stone,e+8*(t+l-1),8*l,1,l);if(randTrue()){pushPreFloor(e+8*(t+i+(o=max(1,randTrue(o)))-1),0,o);for(var s=0;s=3+randTrue(7)&&(n=pushRandomSectionPreCastle),!r&&++map.sincechange>3&&(n=getRandomNextSection(),map.sincechange=0,pushPreFuncCollider(e,zoneDisableCheeps)),pushPreThing(GenerationStarter,e+8*(t+i),ceilmax+20,n),spawnMap(),i}function getRandomNextSection(){switch(randTrue()){case 0:return map.treeheight=0,pushRandomSectionTrees;case 1:return startRandomSectionBridge}}function pushRandomChunkEnemy(e,t,n){pushRandomEnemy(e,0,t,n),randTrue(2)&&(pushRandomSolidRow(e+8*t,jumplev1,randTrue(2)+1),randTrue()&&pushRandomEnemy(e,jumplev1,t+1,!0),randTrue()&&(pushRandomSolidRow(e+8*t,jumplev2,randTrue(2)+1),randTrue()&&pushRandomEnemy(e,jumplev2,t+1,!0)))}function pushRandomEnemy(e,t,n,x){switch(randTrue(14)){case 0:case 1:fillPreThing(Beetle,e+8*n,t+8.5,randTrue(2),1,12);break;case 3:if(!x){switch(randTrue(4)){case 0:pushPreThing(HammerBro,e+8*n,t+12),randTrue()&&pushPreThing(HammerBro,e+8*n+16,t+40);break;case 1:if("Underworld"!=map.randname){pushPreThing(Lakitu,e+8*n,t+80,!0);break}case 2:pushPreThing(Blooper,e+8*n,t+40)}break}break;default:if(!randTrue(3))return;switch(randTrue(3)){case 1:fillPreThing(Koopa,e+8*n,t+12,randTrue(2),1,12,0,randTrue()||map.onlysmartkoopas,randTrue());break;default:fillPreThing(Goomba,e+8*n,t+8,randTrue(2),1,12)}}}function addPipeRandom(e,t,n){var x;x=!(n<=24||randTrue(2))&&getRandomTransport(),pushPrePipe(e,t,n,randTrue(7),x)}function getRandomTransport(){var e,t=[["Overworld","Up"],["Underworld","Down"],["Underwater","Up"]];return t[e=randTrue(t.length-1)][0]==map.randname&&(e=(e+randTrue(t.length-2)+1)%t.length),["Random",t[e][0],t[e][1]]}function getAfterSkyTransport(){switch(randTrue(3)){case 0:return["Random","Underworld","Down"];default:return["Random","Overworld"+(body.className.indexOf(!0)?" Night":""),"Down"]}}function pushRandomObstacle(e,t){var n=randTrue(3);switch(n>1&&(map.hadPipe=!1),n){case 0:case 1:if(t>1){addPipeRandom(e+8*t,0,8*(randTrue(2+(1==map.hadObstacle&&0==map.hadPipe&&t>7))+2)),map.hadObstacle=map.hadPipe=!0;break}case 2:for(var x=0;x<2;++x)randTrue()||t<1||pushPreThing(Stone,e+8*(t+x),8*(r=randTrue(2)+2),1,r);break;default:x=randTrue(2);switch(randTrue(7)){case 0:var r;if(pushPreThing(Cannon,e+8*(t+x),8*(r=randTrue(2)+1),r),1==r&&randTrue(2)&&2!=x){var i=randTrue()+2;pushPreThing(Cannon,e+8*(t+x),8*r+8*i,i)}map.hadObstacle=!0;break;case 1:if(!map.underwater){randTrue()&&(!map.underwater&&randTrue(2)&&pushPreThing(Brick,e+8*t,jumplev1),pushPreThing(Block,e+8*(t+1),jumplev1,[Mushroom,1],!0),!map.underwater&&randTrue(2)&&pushPreThing(Brick,e+8*(t+2),jumplev1),map.hadObstacle=!0);break}case 2:if(!map.underwater){var a=randTrue();a||pushPreThing(Brick,e+8*t,jumplev1,getRandomBrickItem()),pushPreThing(Stone,e+8*(t+a),jumplev1,2),addPipeRandom(e+8*(t+a),jumplev1,24+8*randTrue()),a&&pushPreThing(Brick,e+8*t,jumplev1,getRandomBrickItem());break}}}}function pushRandomSolidRow(e,t,n){for(var x=0;x4){pushPreScenery("Bush3",e,0);break}case 1:if(n-t>2){pushPreScenery("Bush2",e,0);break}case 0:pushPreScenery("Bush1",e,0);break;case 3:if(n-t>4){pushPreScenery("HillLarge",e,0);break}case 4:pushPreScenery("HillSmall",e,0);break;case 5:pushPreScenery("PlantLarge",e,0);break;case 6:pushPreScenery("PlantSmall",e,0);break;case 7:pushPreScenery("Fence",e,0,randTrue(2)+1)}}function pushRandomSkyScenery(e){switch(randTrue(2)){case 0:pushPreScenery("Cloud1",e,8*(randTrue(5)+5));break;case 1:pushPreScenery("Cloud2",e,8*(randTrue(4)+6));break;case 2:pushPreScenery("Cloud3",e,8*(randTrue(3)+7))}}function addDistanceCounter(){counter=createElement("div",{className:"indisplay counter randomdisplay",innerText:data.traveledold+" blocks traveled"}),body.appendChild(counter),TimeHandler.addEventInterval((function(e){data.traveled=max(0,Math.round((player.right+gamescreen.left)/unitsizet8)-3),e.innerText=data.traveledold+data.traveled+" blocks traveled"}),3,1/0,counter)}function addSeedDisplay(){}function createTunnel(e,t,n){for(var x=randTrue(2)+3,r=randTrue(2)+2,i=!1,a=0;a=0;--e)body.removeChild(t[e])}function resetLibrary(){window.palette=[[0,0,0,0],[255,255,255,255],[0,0,0,255],[188,188,188,255],[116,116,116,255],[252,216,168,255],[252,152,56,255],[252,116,180,255],[216,40,0,255],[200,76,12,255],[136,112,0,255],[124,7,0,255],[168,250,188,255],[128,208,16,255],[0,168,0,255],[24,60,92,255],[0,128,136,255],[32,56,236,255],[156,252,240,255],[60,188,252,255],[92,148,252,255],[0,130,0,255]],window.digitsize=getDigitSize(palette),window.filters={Underworld:["palette",{"05":"18","09":"16"}],Castle:["palette",{"02":"04","05":"01","09":"03"}],Alt:["palette",{11:"01"}],Alt2:["palette",{"02":"04","05":"01","09":"03",13:"01",19:"08"}],star:{one:["palette",{}],two:["palette",{"06":"02","08":"05",10:"09"}],three:["palette",{"06":"01","08":"06",10:"08"}],four:["palette",{"06":"01","08":"06",10:"14"}]},smart:["palette",{14:"08"}]},window.library={rawsprites:{characters:{Eraser:"p[7,7,7,7]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",Beetle:{normal:{normal:"p[0,2,5,8]x022,1111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00222331133322200222203333002222",two:"p[0,2,5,8]x07,111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00022331133322x05,22233330222x06,22x05,22000"},Underworld:{normal:"p[0,15,16,18]x022,1111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00333221122233300333302222003333",two:"p[0,15,16,18]x07,111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00033221122233x05,33322220333x06,33x05,33000"},Castle:{normal:"p[0,1,3,4]x022,3333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00111223322211100111102222001111",two:"p[0,1,3,4]x07,333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00011223322211x05,11122220111x06,11x05,11000"}},BeetleShell:{normal:"p[0,2,5,8]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",Underworld:"p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",Castle:"p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"},Blooper:{normal:{normal:"p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,x210,x06,2x18,2x06,1221111221x06,2112112112x06,2112112112x05,212211112212000022332222332200003x210,30000220x26,022000032032002302300002202200220220000320320023023x05,2022002202x06,2032002302x06,2002002002x09,2002x06,",squeeze:"p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,2x18,200003x25,11x25,30x216,32223x26,322232222022002202222032203200230223000222020020222x05,2202002022000"},Underwater:{normal:"p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,x110,x06,1x28,1x06,2112222112x06,1221221221x06,1221221221x05,121122221121000011331111331100003x110,30000110x16,011000031031001301300001101100110110000310310013013x05,1011001101x06,1031001301x06,1001001001x09,1001x06,",squeeze:"p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,1x28,100003x15,22x15,30x116,31113x16,311131111011001101111031103100130113000111010010111x05,1101001011000"}},Bowser:{normal:{normal:"p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",two:"p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"},firing:{normal:"p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",two:"p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"}},BowserFire:"p[0,1,6,8]x010,x36,003x010,x316,x06,x35,22332222332222x315,x25,111133x05,3333x213,13000x313,2223333x05,x39,0x36,x09,3300333033003x06,",BrickShard:{normal:"p[0,2,9]0021200002221200212121202212221222212221022212220021212000022200",Underworld:["filter",["characters","BrickShard","Overworld"],filters.Underworld],Castle:["filter",["characters","BrickShard","Overworld"],filters.Castle]},BulletBill:"p[0,2,5,8]110x17,x06,2201x25,1110000113x16,2111000112x19,2100113x19,22101131133x15,2121113132212111121111313x26,x17,3111x25,x17,31111222x15,0113x111,00113x110,000110x19,0000110x17,x06,",Bubble:"p[0,1]0110100110010110",CastleFireBall:["same",["characters","FireBall"]],CheepCheep:{normal:{normal:"p[0,1,3,6]0003333x013,x35,011x07,x26,11110000121122221111000x16,222111100012121122x15,0001212112211110000x16,221112x05,1211x27,0000333x210,0000233x29,00300233x28,3330023311x26,333033331112222333000x18,20333x05,x15,0000300",two:"p[0,1,3,6]0003333x013,x35,x010,x26,3x07,1211x25,x06,x16,x25,111001212112222x15,0121211222x16,0x16,22x16,0001211222x16,00333x210,0300233x29,33000233x28,3300023311x26,300033331112222330000x18,203x07,x15,x07,"},red:{normal:"p[0,1,6,8]0002222x013,x25,x010,x36,2x07,1311x35,x06,x16,x35,111001313113333x15,0131311333x16,0x16,33x16,0001311333x16,00222x310,0200322x39,22000322x38,2200032211x36,200022221113333220000x18,302x07,x15,x07,",two:"p[0,1,6,8]0002222x013,x25,011x07,x36,11110000131133331111000x16,333111100013131133x15,0001313113311110000x16,331113x05,1311x37,0000222x310,0000322x39,00200322x38,2220032211x36,222022221113333222000x18,30222x05,x15,0000200"}},Coin:{normal:{normal:{normal:"p[0,2,6,8]00222211000x26,11002233221102232212211223221221122322122112232212211223221221122322122112232212211223221221102211221100x26,1100022221100",two:"p[0,2,8]00222211000x26,1100x26,110x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,1221102211221100x26,1100022221100",three:"p[0,2,9,11]00333311000x36,11003322331103323313311332331331133233133113323313311332331331133233133113323313311332331331103311331100x36,1100033331100"},Underworld:{normal:"p[0,6,9,16]00111133000x16,33001122113301121131133112113113311211311331121131133112113113311211311331121131133112113113301133113300x16,3300011113300",two:"p[0,9,16]00111122000x16,2200x16,220x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,2112201122112200x16,2200011112200",three:"p[0,9,11,16]00222233000x26,33002211223302212232233221223223322122322332212232233221223223322122322332212232233221223223302233223300x26,3300022223300"}},anim:{normal:"p[0,1,7]000012x08,12x07,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x07,12x08,120000",anim2:"p[0,1,6,7]000022x07,2222x05,x26,000022132200022122322002212232200221223220022122322002212232200221223220002213220000x26,x05,2222x07,220000",anim3:"p[0,1,6,7]000023x08,23x07,2333x06,2333x06,2333x06,2333x06,1333x06,1333x06,2333x06,2333x06,2333x06,2333x07,23x08,230000",anim4:"p[0,1,6]x05,2x09,2x09,2x09,2x09,2x09,2x09,1x09,1x09,2x09,2x09,2x09,2x09,2x09,20000"}},FireBall:{normal:"p[0,1,6,8]0303330000303330300032330033322303322123032212330332233000333300",two:"p[0,1,6,8]x05,3000333000333233030322230033212x36,2122330332233000333300",three:"p[0,1,6,8]0033330003322330332122303212233032233300332300030333030000333030",four:"p[0,1,6,8]0033330003322330332212x36,2123300322230303323330003330003x05,"},FireFlower:{normal:{normal:"p[0,1,6,8,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",two:"p[0,2,5,9,14]0000x28,x06,x212,000222x38,222022333x16,3332222333x16,333220222x38,222000x212,x06,x28,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",three:"p[0,6,8,10,14]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",four:"p[0,1,6,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"},Underworld:{normal:"p[0,1,6,8,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",two:"p[0,15,16,18]0000x38,x06,x312,000333x28,333033222x16,2223333222x16,222330333x28,333000x312,x06,x38,x011,22x07,222000022000022202220002200022200222200220022220002222022022220000222202202222x05,x210,x09,2222x06,",three:"p[0,6,8,10,16]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",four:"p[0,5,9,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"}},Firework:["same",["solids","Firework"]],Goomba:{normal:"p[0,2,5,9]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",Underworld:"p[0,15,16,18]x06,2222x011,x26,x09,x28,x07,x210,x05,211x26,11200022231222213222002223x16,32220222231322313x28,33322333x220,02222x36,2222x05,x38,x06,11x38,x05,x15,x35,110000x16,333111x05,x15,001110000",Castle:["filter",["characters","Goomba","Overworld"],filters.Castle]},Hammer:{normal:"p[0,2,5,8]x08,2x014,12101x010,111101x09,1122232x09,1211131x08,x16,31x08,10011131x09,x15,01x012,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x07,",two:"p[0,2,5,8]x073,11x013,10111x011,101211x010,11112110x28,11112122x08,1111211x010,3333x011,1111211x065,",three:"p[0,2,5,8]x07,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x012,10x15,x09,13111001x08,13x16,x08,1311121x09,2322211x09,101111x010,10121x014,2x08,",four:"p[0,2,5,8]x065,1121111x011,3333x010,1121111x08,22121111x28,01121111x010,112101x011,11101x013,11x073,"},HammerBro:{normal:{normal:"p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",two:"p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,1211333300002221231x36,x06,10311133313x06,3322113231x06,3222212331x06,3x25,32313x05,33x25,3233x05,33312222322x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"},throwing:{normal:"p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",two:"p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"},thrown:{normal:"p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",two:"p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,113333220022223313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"}},Koopa:{normal:{normal:{flying:{normal:"p[0,1,6,14]x019,1x09,11000111x07,1111001112x05,x15,0231122000x15,0023112200112110002311220012111100211122011211110222122201211110023x25,012111010x26,0012x15,022202203312111002200220331113330220221333232333002022133233323200002212x36,23000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",two:"p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,2211120011100002322122011211000x27,0121111002220022012x15,022000213x17,x05,22133x17,00022133331131110222213332323311002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"},normal:{normal:{normal:"p[0,1,6,14]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",two:"p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"},Underworld:{normal:"p[0,5,9,16]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",two:"p[0,5,9,16]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"}}},smart:["filter",["characters","Koopa","normal","normal"],filters.smart]},Castle:["filter",["characters","Koopa","normal"],filters.Castle]},Lakitu:{normal:"p[0,1,6,14]x05,x25,x010,x27,x08,333233322x06,3111311132x06,3x17,323x05,3113131132330000311313113233x05,3332x37,x05,222333322233000x25,33x25,3003x25,11x25,30031222111122213003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000",hiding:"p[0,1,6,14]x0131,2220000222x05,x25,33x25,0000x25,11x25,00003222111122230003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000"},Mario:{dead:"p[0,6,8,10]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",normal:{normal:{normal:"p[0,6,8,10]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",hopping:["same",["characters","Mario","normal","normal","running","normal","two"]],jumping:"p[0,6,8,10]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",running:{skidding:"p[0,6,8,10]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",normal:{normal:"p[0,6,8,10]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",two:"p[0,6,8,10]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",three:"p[0,6,8,10]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"}},paddling:{normal:{normal:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",paddle1:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",paddle2:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",paddle3:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"},swim2:{normal:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",paddle1:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",paddle2:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",paddle3:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"}},climbing:{normal:"p[0,6,8,10]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",two:"p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"}},large:{normal:"p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",jumping:"p[0,6,8,10]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",hopping:["same",["characters","Mario","normal","large","running","normal","two"]],crouching:"p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",running:{skidding:"p[0,6,8,10]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",normal:{normal:"p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",two:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",three:"p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"}},paddling:{normal:{normal:"p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",paddle1:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",paddle2:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",paddle3:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"},swim2:{normal:"p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",paddle1:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",paddle2:"p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",paddle3:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"}},climbing:{normal:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",two:"p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"}},fiery:{normal:"p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",jumping:"p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",hopping:["same",["characters","Mario","normal","fiery","running","normal","three"]],crouching:"p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",firing:["same",["characters","Mario","normal","fiery","running","normal","two"]],running:{skidding:"p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",normal:{normal:"p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",two:"p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",three:"p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"}},paddling:{normal:{normal:"p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",paddle1:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",paddle2:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",paddle3:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"},swim2:{normal:"p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",paddle1:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",paddle2:"p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",paddle3:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"}},climbing:{normal:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",two:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"}},shrooming:{normal:"p[0,6,8,10]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",shrooming2:"p[0,6,8,10]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",shrooming3:"p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"}},star:{normal:["filter",["characters","Mario","normal"],filters.star.one],star2:["filter",["characters","Mario","normal"],filters.star.two],star3:["filter",["characters","Mario","normal"],filters.star.three],star4:["filter",["characters","Mario","normal"],filters.star.four]}},Luigi:{dead:"p[0,6,1,21]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",normal:{normal:{normal:"p[0,6,1,21]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",hopping:["same",["characters","Luigi","normal","normal","running","normal","two"]],jumping:"p[0,6,1,21]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",running:{skidding:"p[0,6,1,21]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",normal:{normal:"p[0,6,1,21]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",two:"p[0,6,1,21]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",three:"p[0,6,1,21]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"}},paddling:{normal:{normal:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",paddle1:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",paddle2:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",paddle3:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"},swim2:{normal:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",paddle1:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",paddle2:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",paddle3:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"}},climbing:{normal:"p[0,6,1,21]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",two:"p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"}},large:{normal:"p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",jumping:"p[0,6,1,21]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",hopping:["same",["characters","Luigi","normal","large","running","normal","two"]],crouching:"p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",running:{skidding:"p[0,6,1,21]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",normal:{normal:"p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",two:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",three:"p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"}},paddling:{normal:{normal:"p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",paddle1:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",paddle2:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",paddle3:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"},swim2:{normal:"p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",paddle1:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",paddle2:"p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",paddle3:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"}},climbing:{normal:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",two:"p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"}},fiery:{normal:"p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",jumping:"p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",hopping:["same",["characters","Luigi","normal","fiery","running","normal","three"]],crouching:"p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",firing:["same",["characters","Luigi","normal","fiery","running","normal","two"]],running:{skidding:"p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",normal:{normal:"p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",two:"p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",three:"p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"}},paddling:{normal:{normal:"p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",paddle1:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",paddle2:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",paddle3:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"},swim2:{normal:"p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",paddle1:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",paddle2:"p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",paddle3:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"}},climbing:{normal:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",two:"p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"}},shrooming:{normal:"p[0,6,1,21]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",shrooming2:"p[0,6,1,21]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",shrooming3:"p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"}},star:{normal:["filter",["characters","Luigi","normal"],filters.star.one],star2:["filter",["characters","Luigi","normal"],filters.star.two],star3:["filter",["characters","Luigi","normal"],filters.star.three],star4:["filter",["characters","Luigi","normal"],filters.star.four]}},Mushroom:{normal:"p[0,1,6,8]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",gainlife:"p[0,1,6,14]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",deathly:"p[0,5,9,16]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,"},Pirhana:{normal:{normal:"p[0,6,14]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",two:"p[0,1,6,14]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"},Underworld:{normal:"p[0,9,16]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",two:"p[0,5,9,16]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"},Castle:["same",["characters","Pirhana","Underworld"]]},Podoboo:"p[0,1,6,8]0000x36,x07,x38,x05,3332222333000333x26,33300332221122233033322111122x35,22x16,22333322x16,22333322x16,223333222111122233332222112222x35,232222323330x35,22x35,00x35,22x35,0003303333033x05,30033003000",Shell:{normal:{normal:{normal:"p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",peeking:"p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100211x36,11200022211333311222002220x16,02220022000111100022002x012,20"},smart:["filter",["characters","Shell","normal","normal"],filters.smart]},Underworld:{normal:"p[0,5,9,16]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",peeking:"p[0,5,6,9,16]x05,344443x09,44333344x07,4434444344x06,43x46,34x05,43x48,340000343x46,3430003444344443444300x45,3333x45,01114434444344x17,3x46,3111100211x46,11200022211444411222002220x16,02220022000111100022002x012,20"},Castle:["same",["characters","Shell","normal","normal"]]},ShellBeetle:{normal:"p[0,2,5,9]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",Underworld:"p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",Castle:"p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"},Spiny:{normal:"p[0,1,6,8]x024,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,2220002222x06,2222",two:"p[0,1,6,8]x08,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,22x06,222000222x08,22000220000"},SpinyEgg:{normal:"p[0,1,6,8]x06,22x09,22322322x06,2x36,2x05,x310,00022311x35,22002311x37,200331x39,022x310,2222x310,220x39,133002x37,11320022x35,11322000x310,x05,2x36,2x06,22322322x09,22x06,",two:"p[0,1,6,8]0000220022x08,233332x05,22x38,2200233311x35,20003311x36,0022331x37,2222x310,220x312,00x312,022x310,2222x37,1332200x36,11330002x35,1133320022x38,22x05,233332x08,2200220000"},Star:{normal:"p[0,6,8]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110",two:"p[0,2,9]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",three:"p[0,5,8]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",four:"p[0,6,14]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110"},Vine:["multiple","vertical",{top:"p[0,6,14]00222x010,x25,x08,2211122x07,x25,12x09,222022x012,22x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,",middle:"p[0,6,14]x06,22x012,22x012,22x08,220022x07,2222022x07,2111222x06,21x26,x06,x25,022x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,"}]},solids:{Axe:{normal:"p[0,2,4,6,9]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",two:"p[0,2,4,9]003x010,3000323300320033130032333322333313032x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,13032x35,23333130002330032000313000300002200003x09,32x014,22x014,32x014,22x014,32x07,",three:"p[0,2,4,9,11]004x010,4000424400320044140042444422444414042x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,140424444324444140002440032000414000400002200004x09,32x014,22x014,32x014,22x014,32x07,"},Block:{normal:{normal:"p[0,2,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",unused:{normal:"p[0,2,6,9]0x314,03x214,1321x210,12132222x35,x25,132223311133222213222331223312221322233122331222132222112333122213x26,3311122213x26,331x25,13x27,11x25,13x26,33x26,13x26,331x25,1321x25,112221213x214,x117,",two:"p[0,2,9]0x214,0x215,1221x210,121x215,1x26,111x26,1x26,1222212221x26,1222212221x25,11222212221x29,1112221x29,1x25,1x28,11x25,1x215,1x29,1x25,1221x25,11222121x215,x117,",three:"p[0,2,9,11]0x214,02x314,1231x310,13123333x25,x35,123332211122333312333221332213331233322133221333123333113222133312x36,2211133312x36,221x35,12x37,11x35,12x36,22x36,12x36,221x35,1231x35,113331312x314,x117,"}},Underworld:{normal:"p[0,9,16]0x214,02x114,2212x110,2122x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,2212x110,2122x114,20x214,0",unused:{normal:"p[0,6,9,16]0x214,02x114,3213x110,31321111x25,x15,321112233322111132111223112231113211122311223111321111331222311132x16,2233311132x16,223x15,32x17,33x15,32x16,22x16,32x16,223x15,3213x15,331113132x114,x317,",two:"p[0,9,16]0x114,0x115,2112x110,212x115,2x16,222x16,2x16,2111121112x16,2111121112x15,22111121112x19,2221112x19,2x15,2x18,22x15,2x115,2x19,2x15,2112x15,22111212x115,x217,",three:"p[0,9,11,16]0x114,01x214,3123x210,32312222x15,x25,312221133311222231222113221132223122211322113222312222332111322231x26,1133322231x26,113x25,31x27,33x25,31x26,11x26,31x26,113x25,3123x25,332223231x214,x317,"}},Castle:["same",["solids","Block","Underworld"]]},Brick:{normal:{normal:"p[2,5,9]x116,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,x27,0x27,0x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",used:["same",["solids","Block","Overworld","used"]]},Underworld:{normal:"p[2,16]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",used:["same",["solids","Block","Overworld","used"]]},Castle:["filter",["solids","Brick","Overworld"],filters.Castle],Alt2:["filter",["solids","Brick","Overworld"],filters.Alt2]},BridgeBase:"p[0,2,5,8]111000112221012222x35,222x35,222x35,222x35,22221012211100011",Cannon:["multiple","vertical",{top:"p[0,2,5,9]222x010,2222111x210,11222x110,x26,1x213,111x210,112x112,2112x112,2112x112,2112x15,22221112112111121111311211211121122113121121112121131312112111212113131211211121133113221122212x16,3122221102x16,302110002x18,3x06,2x18,3x05,2x110,300002x110,3000211x38,1130021333222233313021133x26,3313021133232232331132113233223323113211323322332311321132332233231132113x28,3113211333233233311321133322223331132111x38,11132x114,3",middle:"p[2,5,9]1x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,2"}],CastleAxe:"p[0,2,4,6,8]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",CastleBlock:"p[0,4,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",CastleBridge:"p[1,2,4,8]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",CastleChain:"p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",CastleStone:{normal:"p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",Underwater:"p[2,12,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"},Cloud:"p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000",Coral:"p[0,7,8]0000100012x05,110001000120000121001000112000120110100012000020001010011211112000101001x26,100021100120000221000221112x06,2x05,22120001x05,1000012001x06,1011012001000100101001120122010001100012120022000021001122000020000211112x011,22212x06,",DeadGoomba:{normal:"p[0,5,9,15]x06,2222x09,x210,000022333222233322022111133331111x218,000x110,x07,x18,x05,x35,0000x35,0",Underworld:"p[0,15,16,18]x06,2222x09,x210,000022111222211122022333311113333x218,000x310,x07,x38,x05,x15,0000x15,0",Castle:["filter",["solids","DeadGoomba","normal"],filters.Castle]},Firework:{normal:"p[0,6,8]x070,2002x010,20222202x09,221122x09,22111122x08,22111122x09,221122x09,20222202x010,2002x070,",n2:"p[0,1,6,8]x020,3x06,3x09,303303x09,x38,x06,303232232303x05,3321221233x06,3221111223x05,3332111123330000333211112333x05,3221111223x06,3321221233x05,303232232303x06,x38,x09,303303x09,3x06,3x020,",n3:"p[0,1,6,8]00030033330030000300x38,003000x35,22x35,00303323233232330300323x26,32300033321211212333033232x16,232x35,22x16,22x36,22x16,22x35,232x16,23233033321211212333000323x26,32300303323233232330300x35,22x35,000300x38,00300003003333003000"},Flag:{normal:"p[0,1,14]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",Alt:"p[0,5,16]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",Alt2:["same",["solids","Flag","Alt"]]},FlagPole:{normal:"p[13]x0288,",Alt:"p[1]x0288,",Alt2:["same",["solids","FlagPole","Alt"]]},FlagTop:{normal:"p[0,2,13,14]001111000123331012x35,112x35,11x36,11x36,10133331000111100",Alt:"p[0,1,3,4]002222000213332021x35,221x35,22x36,22x36,20233332000222200",Alt2:["same",["solids","Flag","Alt"]]},Floor:{normal:"p[2,5,9]2x18,02111121x28,01222201x28,01222201x28,01222201x28,01022201x28,02000021x28,0x15,01x28,01222201x28,01222201x28,012222000x26,01x25,01100222201x25,0121100001x26,0122211101x26,01x26,01x25,002x06,21x06,2",Underworld:"p[2,16,18]1x28,01222212x18,02111102x18,02111102x18,02111102x18,02011102x18,01000012x18,0x25,02x18,02111102x18,02111102x18,021111000x16,02x15,02200111102x15,0212200002x16,0211122202x16,02x16,02x15,001x06,12x06,1",Underwater:"p[2,12,14]22x112,0221111x29,0011122111222211100122x15,2212221202112222011x25,0211222201x26,021x26,0x25,0221x26,0022201201x26,0000101011112222000100101222122220012011x25,02200122011x25,0200012001x25,001111220012220000122220022x06,2x07,2",Castle:["same",["solids","Stone","Castle"]],Alt2:["filter",["solids","Floor","Overworld"],filters.Alt2]},Peach:"p[0,1,2,6,8]x019,303303x010,x36,x09,x48,x07,x410,x07,4443234444x07,433233434x06,x37,434x07,x38,44x05,3444x35,44x05,34433334444x06,x36,4444x06,4413341444x05,44133111144x05,431111331440000x39,144x05,x37,1444x07,44111144x07,x110,x05,x112,0000x112,0001111x46,111100x414,00x45,1111x45,0",Pipe:{normal:["multiple","vertical",{top:"p[0,2,13,14]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",middle:"p[0,2,13,14]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"}],Castle:{normal:["multiple","vertical",{top:"p[0,1,3,4]x333,x130,33x25,x16,x219,3311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,121211x333,00x328,00",middle:"p[0,1,3,4]00311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,1211300"}],Underwater:["multiple","vertical",{top:"p[0,5,9,17]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",middle:"p[5,9,17,20]33011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,1211033"}]},Alt:["same",["solids","Pipe","Castle"]],Alt2:["same",["solids","Pipe","Castle"]]},PipeSide:{normal:"p[0,2,13,14]x115,x024,1x213,x122,0001x213,11x220,1001x213,11x220,1001x213,11x220,1001x313,11x221,101x313,11x321,101x213,11x321,101x213,11x221,101x213,11x221,101x213,11x222,11x213,11x222,11x313,11x222,11x213,11x322,11x213,11x222,11x213,11x222,11x213,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x321,101x313,11x321,101x313,11x321,101x313,11323232323232323232323101323232323232311232323232323232323232101232323232323211323232323232323232321001323232323232311x220,1001x213,11x220,1001x213,x122,000x115,x024,",small:"p[0,2,13,14]x115,01x213,111x213,111x213,111x213,111x313,111x313,111x213,111x213,111x213,111x213,111x213,111x313,111x213,111x213,111x213,111x213,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111323232323232311123232323232321113232323232323111x213,111x213,x117,0"},PipeVertical:{normal:"p[0,2,13,14]012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210",Castle:{normal:"p[0,1,3,4]00211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,1311200",Underwater:"p[0,7,8,17]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"}},Platform:{normal:"p[0,1,6,9]x18,x38,220000222x05,322x05,32223333x210,x38,",Sky:"p[0,1,6]001111000x15,2012x15,212x15,212211112112211220111122000222200"},Scale:{normal:["multiple","horizontal",{left:"p[0,2,5,9]000x27,00x28,0222333000022x35,00223331333022331113302233313330220x35,00220033300022x08,",middle:"p[0,5]x120,x080,",right:"p[0,2,5,9]x27,000x28,x05,333222000x35,22003331333220331113322033313332200x35,0220003330022x08,22"}],Alt:["multiple","horizontal",{left:"p[0,1,2,9]000x17,00x18,0111333000011x35,00113332333011332223301133323330110x35,00110033300011x08,",middle:"p[0,1]x120,x080,",right:"p[0,1,2,9]x17,000x18,x05,333111000x35,11003332333110332223311033323331100x35,0110003330011x08,11"}]},Springboard:{normal:["multiple","vertical",{top:"p[8]x032,",topheight:2,middle:"p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",bottom:"p[2,8,9]x132,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",bottomheight:9}],alt:["multiple","vertical",{top:"p[8]x032,",topheight:2,middle:"p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",bottom:"p[3,4,8]x232,x07,1x07,1x07,1x07,x117,0001x07,1x07,1x07,1x07,1x07,10000x116,",bottomheight:9}]},Stone:{normal:"p[2,5,9]2x114,012x112,00112x110,0001112x18,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,0000111x09,200011x011,2001x013,2x016,2",Underwater:["same",["solids","Floor","Underwater"]],Underworld:["filter",["solids","Stone","Overworld"],filters.Underworld],Castle:{normal:"p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",Underwater:"p[2,3,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"},Sky:"p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000"},Toad:"p[0,1,2,6,8]x06,1111x010,x18,x06,144411114441000114441441444110011441444414411044111144441111x45,1114444111x46,1111441111x46,x110,x45,1133233233114401143323323341100300x38,00303330333223330x37,443333443333003x410,300004444333344440000444x36,4440000444x36,444x05,x110,x05,x112,000444x18,444041444x16,4441x47,1111x412,1111x46,",ShroomTop:["multiple","horizontal",{left:"p[0,2,6,8]000x113,001x36,x27,01x37,x27,01x37,x27,1x38,x27,1x37,x28,1x37,222333221x36,222x35,21x35,222x37,1x28,x37,1x28,x37,1x29,x35,21x210,333221x215,011x213,000x113,",middle:"p[2,6,8]x016,1x28,x18,x28,x19,x26,x132,x25,x110,x27,x19,x27,x18,x29,x17,x29,x17,x29,x17,x29,x18,x27,x19,x27,x110,x25,111x016,",right:"p[0,2,6,8]x113,000x38,x25,100x38,x26,10x38,x26,10x38,222333212x36,222x35,1223333222x36,1x29,x36,1x29,x36,1x210,x35,1x211,33321x215,1x215,1x215,1x214,x117,0"}],TreeTop:{normal:["multiple","horizontal",{left:"p[0,2,13]00x114,011x213,01x214,11x214,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x26,1x27,1012222101x25,10001111000x15,00",middle:"p[2,8,13]x016,x2199,0x27,00x25,010x25,011x05,111x05,11",right:"p[0,2,13]x114,00x213,110x214,10x214,11x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,11x27,1x26,101x25,10122221000x15,000111100"}],Alt:["multiple","horizontal",{left:"p[0,1,4]00x214,022x113,02x114,22x114,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x16,2x17,2021111202x15,20002222000x25,00",middle:"p[1,3,4]x216,x0199,2x07,22x05,212x05,211x25,111x25,11",right:"p[0,1,4]x213,000x113,200x114,20x114,20x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,22x17,2x16,202x15,20211112000x25,000222200"}],Alt2:["same",["solids","TreeTop","Alt"]]},WaterBlock:"20"},scenery:{BrickHalf:{normal:"p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",Alt2:["filter",["scenery","BrickHalf","normal"],filters.Alt2]},BrickPlain:{normal:"p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0",Alt2:["filter",["scenery","BrickPlain","normal"],filters.Alt2]},BridgeBase:"p[0,2,5,9]111000112221012222x35,222x35,222x35,222x35,22221012211100011",Bush1:"p[0,2,13,14]x014,1111x027,122221x024,11x26,1x022,1x28,101x020,1x29,121x019,1x26,3x25,1x017,122233222322221x016,12223x210,1x013,111x216,1001x08,1x219,10121x06,1x221,1221x06,x225,1010011x226,1211x230,11x230,101x228,10",Bush2:"p[0,2,13,14]x014,1111x012,1111x027,122221x010,122221x024,11x26,1x07,11x26,1x022,1x28,10100001x28,101x020,1x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1x017,1222332223222210122233222322221x016,12223x210,112223x210,1x013,111x232,1001x08,1x235,10121x06,1x237,1221x06,x241,1010011x242,1211x246,11x246,101x244,10",Bush3:"p[0,2,13,14]x014,1111x012,1111x012,1111x027,122221x010,122221x010,122221x024,11x26,1x07,11x26,1x07,11x26,1x022,1x28,10100001x28,10100001x28,101x020,1x29,1210001x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1001x26,3x25,1x017,12223322232222101222332223222210122233222322221x016,12223x210,112223x210,112223x210,1x013,111x248,1001x08,1x251,10121x06,1x253,1221x06,x257,1010011x258,1211x262,11x262,101x260,10",CastleBridge:"p[1,2,4,9]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",CastleChain:"p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",CastleDoor:{normal:"p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x15,x06,11110111x010,11011x012,1x017,1x014,11x014,1x0416,",Alt2:["filter",["scenery","CastleDoor","normal"],filters.Alt2]},CastleRailing:{normal:"p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111",Alt2:["filter",["scenery","CastleRailing","normal"],filters.Alt2]},CastleRailingFilled:{normal:"p[2,5,9]11112220222x15,222122202221x27,122202221x27,1x07,1x27,1x27,1x27,1x27,1x27,1x27,12222000x19,0000",Alt2:["filter",["scenery","CastleRailingFilled","normal"],filters.Alt2]},CastleTop:{normal:"p[2,9]x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,x025,1110x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,01111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,",Alt2:["filter",["scenery","CastleTop","normal"],filters.Alt2]},CastleWall:{normal:"p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,",Alt2:["filter",["scenery","CastleRailingFilled","normal"],filters.Alt2]},Cloud1:{normal:"p[0,1,2,19]x014,2222x027,211112x024,22x16,2x022,2x18,202x020,2x19,212x019,2x16,3x15,2x017,211133111311112x016,21113x110,2x013,222x116,2002x08,2x119,20212x06,2x121,2112x06,x125,2020022x126,2122x130,22x130,202x128,20002113x111,3x111,2x05,2113113x16,3x113,2x05,2113333111333311113x18,200002x15,x36,1x35,x19,x06,2221111331111333x18,22x09,2x16,2x18,21122x012,221112022111122022x016,22200002222x010,",Alt2:["filter",["scenery","Cloud1","normal"],filters.Alt2]},Cloud2:{normal:"p[0,1,2,19]x014,2222x012,2222x027,211112x010,211112x024,22x16,2x07,22x16,2x022,2x18,20200002x18,202x020,2x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2x017,2111331113111120211133111311112x016,21113x110,221113x110,2x013,222x132,2002x08,2x135,20212x06,2x137,2112x06,x141,2020022x142,2122x146,22x146,202x144,20002113x111,3x115,3x111,2x05,2113113x16,3x18,3x16,3x113,2x05,21133331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,21122x012,2211120221111220221112022111122022x016,22200002222x05,22200002222x010,",Alt2:["filter",["scenery","Cloud2","normal"],filters.Alt2]},Cloud3:{normal:"p[0,1,2,19]x014,2222x012,2222x012,2222x027,211112x010,211112x010,211112x024,22x16,2x07,22x16,2x07,22x16,2x022,2x18,20200002x18,20200002x18,202x020,2x19,2120002x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2002x16,3x15,2x017,21113311131111202111331113111120211133111311112x016,21113x110,221113x110,221113x110,2x013,222x148,2002x08,2x151,20212x06,2x153,2112x06,x157,2020022x158,2122x162,22x162,202x160,20002113x111,3x115,3x115,3x111,2x05,2113113x16,3x18,3x16,3x18,3x16,3x113,2x05,211333311133331111313331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,2x16,2x18,21122x012,22111202211112202211120221111220221112022111122022x016,22200002222x05,22200002222x05,22200002222x010,",Alt2:["filter",["scenery","Cloud3","normal"],filters.Alt2]},Fence:"p[0,2,5,9]000023222331x08,2322333100003322232233312222333323223331333311112322333x15,000023223331x08,23223331x08,23232331x08,23232331x08,2323233100003322232323312222333323232331333311112322233x15,000023222331x08,23222331x08,232223310000",HillLarge:"p[0,2,14]x037,x16,x071,111x26,111x066,11x212,11x063,1x213,1221x061,1x213,111221x059,1x214,1112221x057,1x215,11122221x055,1x213,112111x25,1x053,1x214,11221x27,1x051,1x215,11x211,1x049,1x216,11x212,1x047,1x232,1x045,1x234,1x043,1x236,1x041,1x238,1x039,1x240,1x037,1x242,1x035,1x244,1x033,1x246,1x031,1x213,1x223,1x210,1x029,1x213,111x221,111x210,1x027,1x214,111x221,111x211,1x025,1x215,111x221,111x212,1x023,1x213,112111x218,112111x213,1x021,1x214,11221x219,11221x215,1x019,1x215,11x222,11x219,1x017,1x216,11x222,11x220,1x015,1x264,1x013,1x266,1x011,1x268,1x09,1x270,1x07,1x272,1x05,1x274,10001x276,101x278,1",HillSmall:"p[0,2,14]x021,x16,x039,111x26,111x034,11x212,11x031,1x213,1221x029,1x213,111221x027,1x214,1112221x025,1x215,11122221x023,1x213,112111x25,1x021,1x214,11221x27,1x019,1x215,11x211,1x017,1x216,11x212,1x015,1x232,1x013,1x234,1x011,1x236,1x09,1x238,1x07,1x240,1x05,1x242,10001x244,101x246,1",Pirhana:["same",["characters","Pirhana"]],pirhana:["same",["characters","Pirhana"]],PlantLarge:{normal:"p[0,2,5,13]x06,1111x010,11333311x07,1x38,1x05,1x310,10001x312,1001x312,101x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,101x312,1001x312,1001x312,10001x310,1000011x38,11x05,1113333111x07,x18,x09,x17,x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,12122121x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,121221210000",Alt:"p[0,1,2,3,5]x06,3333x010,33111133x07,3x18,3x05,3x110,30003x112,3003x112,303x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,303x112,3003x112,3003x112,30003x110,3000033x18,33x05,3331111333x07,x38,x09,x37,x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,24244242x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,242442420000",Alt2:["same",["solids","PlantLarge","Alt"]]},PlantSmall:{normal:"p[0,2,5,13]x05,1111x08,11333311x05,1x38,10001x310,101x312,11x312,11x312,11x312,11x312,101x310,10011x38,110001113333111x05,x18,x07,x17,x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121000",Alt:"p[0,1,2,3,5]x05,3333x08,33111133x05,3x18,30003x110,303x112,33x112,33x112,33x112,33x112,303x110,30033x18,330003331111333x05,x38,x07,x37,x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242000",Alt2:["same",["solids","PlantSmall","Alt"]]},Railing:{normal:"p[0,2,13]2x06,221x05,12010001220100012200111022x06,22x06,22x06,2",Night:"p[0,1,3]1x06,112x05,21020002110200021100222011x06,11x06,11x06,1"},ShroomTrunk:["multiple","vertical",{top:"p[2,5,9]0x114,00x114,00x114,00x114,00x114,00111121111211110021121211212112001221112211122100x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0",middle:"p[2,5]0x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0"}],String:"x056,",TreeTrunk:{normal:"p[2,9]x120,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x140,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x120,",Underworld:["filter",["scenery","TreeTrunk","normal"],filters.Underworld],Alt2:["filter",["scenery","TreeTrunk","normal"],filters.Alt2]},Water:{normal:"p[0,1,17]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",Underwater:"p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,",Night:"p[2,1,19]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",Castle:{normal:"p[0,1,8]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",Underwater:"p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,"}},WaterFill:{normal:{normal:"p[17]x088,",Night:"p[19]x088,"},Castle:"p[8]x088,"}}},cache:{},posts:[]},library.filters=filters,delete window.filters,library.sprites=libraryParse(library.rawsprites),libraryPosts()}function libraryParse(e){var t,n,x={};for(n in e)switch((t=e[n]).constructor){case String:x[n]=spriteGetArray(spriteExpand(spriteUnravel(t)));break;case Array:library.posts.push({caller:x,name:n,command:e[n]});break;case Object:x[n]=libraryParse(t)}return x}function libraryPosts(){var e,t,n,x,r,i=library.posts;for(r in i)t=(e=i[r]).caller,n=e.name,x=e.command,t[n]=evaluatePost(t,x,r)}function evaluatePost(e,t,n){switch(t[0]){case"same":return followPath(library.sprites,t[1],0);case"filter":return applyLibraryFilter(followPath(library.rawsprites,t[1],0),t[2],n);case"multiple":return evaluatePostMultiple(t)}}function applyLibraryFilter(e,t){switch(t[0]){case"palette":return e.constructor==String?spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(e),t[1]))):applyPaletteFilterRecursive(e,t[1])}}function applyPaletteFilterRecursive(e,t){var n,x,r={};for(x in e)switch((n=e[x]).constructor){case String:r[x]=spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(n),t)));break;case Object:r[x]=applyPaletteFilterRecursive(n,t)}return r}function applyPaletteFilter(e,t){var n,x,r,i="";for(x=0,r=e.length;x8||e[1]<=0)){var n="Maps/World"+e[0]+e[1]+".js";t.open("GET",n,!0),mlog("Maps","Requesting:",n),t.send(),t.onreadystatechange=function(){if(4==t.readyState){if(200==t.status)mapfuncs[e[0]][e[1]]=Function(t.responseText),window.parentwindow&&parentwindow.onMapLoad&&(parentwindow.onMapLoad(e[0],e[1]),setTimeout((function(){parentwindow.onMapLoad(e[0],e[1])}),2100)),mlog("Maps"," Loaded: Maps/World"+e[0]+e[1]+".js");else if(404!=t.status)return;setTimeout((function(){passivelyLoadMap(setNextLevelArr(e),t)}),7)}}}}function setNextLevelArr(e){return 4==e[1]++&&(++e[0],e[1]=1),e}function resetMaps(){var e;window.currentmap=[1,1],window.defaultsetting={setting:"Overworld"},window.mapfuncs=new Array(9);for(var t,n=1;n<=9;++n)for(t=(e=mapfuncs[n]=[0,0,0,0,0]).length;t>=0;--t)e[t]=window["World"+n+t];mapfuncs.Random={Overworld:WorldRandomOverworld,Underworld:WorldRandomUnderworld,Underwater:WorldRandomUnderwater,Bridge:WorldRandomBridge,Sky:WorldRandomSky,Castle:WorldRandomCastle},mapfuncs.Special={Blank:BlankMap},startLoadingMaps()}function Map(){this.underwater=this.current_character=this.current_solid=this.current_scenery=this.xloc=0,this.canscroll=!0,this.floor=104,this.time=400,this.curloc=-1,this.gravity=gravity,this.maxyvel=1.75*unitsize,this.maxyvelinv=-2.1*this.maxyvel}function Area(e,t){this.creation=t||function(){},this.precharacters=[],this.presolids=[],this.prescenery=[],this.floor=140,this.width=0,this.underwater=!1,setAreaSetting(this,e||"")}function setAreaSetting(e,t,n){map.shifting=!0,1==arguments.length&&(t=arguments[0]||"Overworld",e=map.area),e.setting=e.background=t,e.theme=t.split(" ")[0],e.fillStyle=getAreaFillStyle(e.setting),-1!=e.fillStyle.indexOf("Underwater")?goUnderWater():goOntoLand(),n&&AudioPlayer.playTheme(),gameon&&clearAllSprites(),map.shifting=!1}function Location(e,t,n){this.area=e,this.xloc=n||0,this.yloc=this.floor=0,this.entry=1==t?entryPlain:t||entryNormal}function PreThing(e,t,n){this.xloc=e,this.yloc=t,this.type=n;var x=arrayMake(arguments),r=new Thing;x[2]=n,x=x.splice(2),Thing.apply(r,x),this.object=r}function setMap(e,t){if(gameon){!window.canedit&&window.editing&&editorClose(!0),removeRandomDisplays(),e instanceof Array&&(t=e[1],e=e[0]);var n=e?[e,t]:window.currentmap,x=new Map,r=mapfuncs[n[0]];r?(n.func=r=r[n[1]],r?(window.map=x,window.currentmap=n,r(x),x.areanum=x.curloc=0,window.area=x.area=x.areas[0],window.player&&player.power&&storePlayerStats(),window.data&&(data.scoreold=data.score.amount),shiftToLocation(0)):log("No such map exists (yet?):",r)):log("No such map section exists (yet?):",r)}}function setMapRandom(e){gameon&&(resetSeed(),"string"==typeof e?e=["Random",e]:e||(e=["Random","Overworld"]),setMap(e[0],e[1]),data.traveledold=data.traveled,map.sincechange=map.num_random_sections=0,map.entrancetype=e[2],map.random=!0,"Sky"==map.randname&&(map.exitloc=["Random","Overworld","Down"]))}function shiftToLocation(e){if(map.random&&"number"!=typeof e)return setMapRandom(e);"number"==typeof e&&(e=map.locs[e]),pause(),resetGameState(),resetGameScreenPosition(),resetQuadrants(),map.areanum=e.area,window.area=map.area=map.areas[map.areanum],setAreaPreCreation(area),area.creation(),setAreaPostCreation(area),spawnMap(),player=placePlayer(),scrollPlayer(e.xloc*unitsize),locMovePreparations(player),unpause(),e.entry(player,e.entrything),TimeHandler.addEvent(AudioPlayer.playTheme,2),TimeHandler.addEventInterval(checkTexts,117,1/0)}function setAreaPreCreation(e){window.events=[],TimeHandler.clearAllEvents(),window.characters=[],window.solids=[],window.scenery=[],clearTexts(),e.precharacters=[],e.presolids=[],e.prescenery=[],map.current_solid=map.current_character=map.current_scenery=map.shifting=0,map.canscroll=!0,data.time.amount=map.time,data.world.amount=currentmap[0]+"-"+currentmap[1],setDataDisplay(),startDataTime(),map.random&&(data.world.amount="Random Map",data.world.element.innerHTML="WORLD Random Map")}function clearTexts(){if(window.texts)for(var e=texts.length-1;e>=0;--e)texts[e]&&removeChildSafe(texts[e],body);window.texts=[]}function setAreaPostCreation(){if(map.current_character=map.current_solid=map.current_scenery=0,area.width=max(area.width,gamescreen.width),map.underwater=map.area.underwater,map.jumpmod=1.056+3.5*map.underwater,map.has_lakitu=!1,TimeHandler.addEvent(setMapGravity,1),area.underwater&&(area.presolids.push(new PreThing(0,0,WaterBlock,area.width)),map.random||area.presolids.push(new PreThing(0,16,Sprite,"Water",[area.width/3,1]))),area.presolids.sort(prethingsorter),area.precharacters.sort(prethingsorter),area.prescenery.sort(prethingsorter),area.sections&&area.sections[0])setBStretch(),area.sections.current=0,area.sections[0](area.sections.start);else if(!map.random&&"Sky"!=area.setting){var e=new PreThing(area.width,0,ScrollBlocker);area.presolids.push(e)}area.fillStyle=getAreaFillStyle(area.setting)}function getAreaFillStyle(e){return stringHas(e,"Underworld")||stringHas(e,"Castle")||stringHas(e,"Night")?stringHas(e,"Underwater")?"#2038ec":"black":stringHas(e,"Underwater")?"#2038ec":"#5c94fc"}function prethingsorter(e,t){return e.xloc==t.xloc?t.yloc-e.yloc:e.xloc-t.xloc}function setLocationGeneration(e){map.curloc=e,map.refx=map.locs[map.curloc].xloc,map.refy=map.locs[map.curloc].yloc+map.floor,map.areanum=map.locs[map.curloc].area}function spawnMap(){var e,t,n,x,r,i=map.area,a=QuadsKeeper.getOutDifference(),o=gamescreen.right+a,l=o+(2*QuadsKeeper.getQuadWidth()+a);for(t=(e=i.precharacters).length,r=map.current_character;t>r&&o>=(n=e[r]).xloc*unitsize;)addThing(x=n.object,n.xloc*unitsize-gamescreen.left,n.yloc*unitsize),x.placenum=r,++r;for(map.current_character=r,t=(e=i.presolids).length,r=map.current_solid;t>r&&l>=(n=e[r]).xloc*unitsize;)addThing(x=n.object,n.xloc*unitsize-gamescreen.left,n.yloc*unitsize),x.placenum=r,++r;for(map.current_solid=r,t=(e=i.prescenery).length,r=map.current_scenery;t>r&&l>=(n=e[r]).xloc*unitsize;)addThing(x=n.object,n.xloc*unitsize-gamescreen.left,n.yloc*unitsize),x.placenum=r,++r;map.current_scenery=r}function goToTransport(e){e instanceof Array?(map.ending=!0,storePlayerStats(),pause(),map.random?setMapRandom(e):setMap(e)):shiftToLocation(map.locs[e]),is_mobile&&applyNewJs()}function entryPlain(e){setLeft(e,unitsizet16),setBottom(e,map.floor*unitsize),e.nocollide=e.piping=!1,e.placed=!0}function entryNormal(e){setLeft(e,unitsizet16),setTop(e,unitsizet16),e.nocollide=e.piping=!1,e.placed=!0}function entryBlank(e){setLeft(e,unitsizet16),setBottom(e,map.floor*unitsize),e.nocollide=e.piping=e.movement=!1,e.placed=e.nofall=e.nocollide=notime=nokeys=!0,thingStoreVelocity(e),clearDataDisplay()}function entryRandom(e){switch(data.time.amount=0,data.time.dir=1,updateDataElement(data.time),map.startwidth?map.nofloor||pushPreFloor(0,0,map.startwidth):map.startwidth=0,map.firstRandomThings(map),map.randtype(8*(map.startwidth+1)),entryPlain(e),addDistanceCounter(),addSeedDisplay(),map.entrancetype){case"Down":entryNormal(player);break;case"Up":locMovePreparations(player),exitPipeVert(player,addThing(new Thing(Pipe,32),unitsizet8,(map.floor-32)*unitsize));break;case"Vine":locMovePreparations(player),TimeHandler.addEvent((function(){enterCloudWorld(player,!0)}),1),player.nofall=!0,spawnMap();break;case"Castle":startCastle(player)}}function enterCloudWorld(e){map.random&&(map.exitloc=getAfterSkyTransport());var t=140*unitsize,n=72*unitsize;e.placed=e.nofall=!0,setTop(e,t),setLeft(e,30*unitsize),removeClass(e,"jumping"),addClasses(e,["climbing","animated"]),e.climbing=TimeHandler.addSpriteCycle(e,["one","two"],"climbing"),e.attached=new Thing(Vine,-1),addThing(e.attached,unitsizet32,t-unitsizet8);var x=setInterval((function(){if(e.attached.top<=n){clearInterval(x),setTop(e.attached,n,!0),e.attached.movement=!1;var t=e.attached.top+unitsizet16;x=setInterval((function(){shiftVert(e,-1*unitsized4,!0),e.top<=t&&(removeClass(e,"animated"),clearInterval(x),setTop(e,t,!0),clearInterval(x),setTimeout((function(){setLeft(e,36*unitsize,!0),addClass(e,"flipped"),setTimeout((function(){playerHopsOff(e,e.attached,!0),TimeHandler.clearClassCycle(e,"climbing"),e.running=TimeHandler.addSpriteCycle(e,["one","two","three","two"],"running",setPlayerRunningCycler)}),28*timer)}),14*timer))}),timer)}}),timer)}function walkToPipe(){player=placePlayer(),startWalking(player),map.canscroll=!1;var e=setInterval((function(){player.piping&&(AudioPlayer.pauseTheme(),clearInterval(e),player.maxspeed=player.maxspeedsave)}),timer);unpause()}function startWalking(e){e.movement=movePlayer,e.maxspeed=e.walkspeed,nokeys=notime=e.keys.run=!0,e.nofall=e.nocollide=!1}function intoPipeVert(e,t,n){if(!(!t.transport||!e.resting||e.right+unitsizet2>t.right||e.left-unitsizet2=t.top&&(clearInterval(x),setTimeout((function(){goToTransport(n)}),700))}),timer)}}function intoPipeHoriz(e,t,n){pipePreparations(e),switchContainers(e,characters,scenery),unpause();var x=setInterval((function(){shiftHoriz(e,unitsized4,!0),e.left>=t.left&&(clearInterval(x),setTimeout((function(){goToTransport(n)}),700))}),timer)}function pipePreparations(e){AudioPlayer.pauseTheme(),AudioPlayer.play("Pipe"),locMovePreparations(e),e.nofall=e.nocollide=nokeys=notime=!0,e.movement=e.xvel=e.yvel=0}function locMovePreparations(e){e.keys=new Keys,e.nocollide=e.piping=1,e.placed=!1,removeCrouch(),removeClass(e,"running"),removeClass(e,"jumping"),removeClass(e,"flipped")}function startCastle(e){(e=e||window.player)&&(setBottom(e,56*unitsize),setLeft(e,unitsizet2),e.nocollide=e.piping=!1,e.placed=!0)}function exitPipeVert(e,t){switchContainers(e,characters,scenery),e.nofall=nokeys=notime=!0,AudioPlayer.play("Pipe"),setTop(e,t.top),setMidXObj(e,t,!0);var n=unitsize/-4,x=setInterval((function(){shiftVert(e,n,!0),e.bottom<=t.top&&(switchContainers(e,scenery,characters),clearInterval(x),e.nocollide=e.piping=e.nofall=nokeys=notime=!1,e.placed=!0)}),timer)}function endLevel(){map.ending||(map.ending=!0,map.random?setMapRandom(["Random","Castle"]):setNextLevelArr(currentmap),storePlayerStats(),pause(),setMap())}function setExitLoc(e){map.exitloc=e}function pushPreThing(e,t,n,x,r){var i=new PreThing(map.refx+t,map.refy-n,e,x,r),a=i.object;return!a.solid&&!a.character||a.nostretch||(map.area.width=max(map.area.width,i.xloc+a.width)),a.solid&&!a.spawn_as_char?map.area.presolids.push(i):map.area.precharacters.push(i),i}function pushPreScenery(e,t,n,x,r){x=round(x||1),r=round(r||1);var i=new PreThing(map.refx+t,map.refy-n,Sprite,e,[x,r]);return i.yloc-=i.object.height,map.area.prescenery.push(i),i}function pushPreScenerySolid(e,t,n,x,r){x=x||1,r=r||1;var i=new PreThing(map.refx+t,map.refy-n,Sprite,e,[x,r]);return i.yloc-=i.object.height,map.area.presolids.push(i),i}function pushPreText(e,t,n){var x=new PreThing(map.refx+t,map.refy-n,FuncSpawner,spawnText,e);return map.area.presolids.push(x),x}function fillPreThing(e,t,n,x,r,i,a,o,l){for(var s,d,u=t,p=0;pTHANK YOU "+window.player.title.toUpperCase()+"!",style:x},e+160,66).object,pushPreText({innerHTML:"YOUR QUEST IS OVER. WE PRESENT YOU A NEW QUEST. ",style:x},e+148,50).object,pushPreText({innerHTML:"PRESS BUTTON B TO SELECT A WORLD. ",style:x},e+148,26).object]):(pushPreThing(Toad,e+194,12).object,n.text=[pushPreText({innerHTML:"THANK YOU "+window.player.title.toUpperCase()+"! ",style:x},e+160,66).object,pushPreText({innerHTML:"BUT OUR PRINCESS IS IN ANOTHER CASTLE! ",style:x},e+148,50).object])}function pushPreSectionPass(e,t,n,x,r){var i=pushPreThing(Collider,e,t,[n,x],[sectionPass,sectionColliderInit]).object,a=(r=map.area.sections.current||0,map.area.sections[r]);a.numpass?++a.numpass:a.numpass=1,a.colliders?a.colliders.push(i):a.colliders=[i]}function pushPreSectionFail(e,t,n,x,r){var i=pushPreThing(Collider,e,t,[n,x],[sectionFail,sectionColliderInit]).object,a=(r=map.area.sections.current||0,map.area.sections[r]);a.colliders?a.colliders.push(i):a.colliders=[i]}function pushCastleDecider(e,t){pushPreThing(castleDecider,e,ceilmax,e,t)}function sectionColliderInit(e){e.sections=map.area.sections,e.parent=e.sections[e.sections.current],e.movement=!1}function sectionPass(e,t){if("player"!=e.type)return!1;t.nocollide=!0,--t.parent.numpass||activateSection(t.parent,!0)}function sectionFail(e,t){if("player"!=e.type)return!1;t.nocollide=!0,activateSection(t.parent,!1)}function activateSection(e,t){for(var n=e.colliders,x=n.length-1;x>=0;--x)killNormal(n[x]);e.activated=!0,e.passed=t}function pushPreTree(e,t,n){pushPreThing(TreeTop,e,t,n);var x=DtB(t);pushPreScenerySolid("TreeTrunk",e+8,t-x-8,n-2,x/8)}function pushPreShroom(e,t,n){pushPreThing(ShroomTop,e,t,n);var x=DtB(t-4);pushPreScenery("ShroomTrunk",e+4*n-4,t-x-8,1,x/8)}function pushPrePipe(e,t,n,x,r,i){isFinite(n)||(n=gamescreen.height,t-=gamescreen.height);var a=pushPreThing(Pipe,e,t+n,n/8,r),o=a.object;return x&&(o.pirhana=pushPreThing(Pirhana,e+4,t+n+12).object),i&&(map.locs[i].entrything=o,map.locs[i].xloc=e),a}function pushPreCastle(e,t,n){e=e||0,t=t||0,n?pushPreCastleBig(e,t):pushPreCastleSmall(e,t)}function pushPreCastleBig(e,t){var n,x;for(pushPreCastleSmall(e+16,t+48),n=0;n<3;++n)for(x=0;x<2;++x)pushPreScenerySolid("BrickPlain",e+16+16*n,t+24+8*x);for(n=0;n<2;++n)pushPreScenerySolid("CastleDoor",e+24+16*n,t+24);for(n=0;n<5;++n){if(2==n)continue;pushPreScenerySolid("BrickHalf",e+16+8*n,t+48)}for(n=0;n<2;++n)pushPreScenerySolid("CastleRailing",e+8*n,t+44);for(n=0;n<5;++n)pushPreScenerySolid("CastleRailingFilled",e+16+8*n,t+44);for(n=5;n<7;++n)pushPreScenerySolid("CastleRailing",e+16+8*n,t+44);for(n=0;n<2;++n)for(x=0;x<3;++x)pushPreScenerySolid("BrickPlain",e+24+16*n,t+8*x);for(n=0;n<3;++n)pushPreScenerySolid("CastleDoor",e+16+16*n,t);for(n=0;n<2;++n){for(x=0;x<5;++x)pushPreScenerySolid("BrickPlain",e+8*n,t+8*x);pushPreScenerySolid("BrickHalf",e+8*n,t+40)}for(n=0;n<2;++n){for(x=0;x<5;++x)pushPreScenerySolid("BrickPlain",e+56+8*n,t+8*x);pushPreScenerySolid("BrickHalf",e+56+8*n,t+40)}for(n=0;n<3;++n)for(x=0;x<2;++x)pushPreScenerySolid("BrickHalf",e+16+16*n,t+20+20*x)}function pushPreCastleSmall(e,t){var n,x;for(n=0;n<3;++n)pushPreScenerySolid("CastleRailing",e+8+8*n,t+36);for(n=0;n<2;++n)pushPreScenerySolid("CastleTop",e+8+12*n,t+24);for(pushPreScenerySolid("CastleRailing",e,t+20),n=1;n<=3;++n)pushPreScenerySolid("CastleRailingFilled",e+8*n,t+20);for(pushPreScenerySolid("CastleRailing",e+32,t+20),n=0;n<2;++n)for(pushPreScenerySolid("BrickHalf",e+8*n,t),x=0;x<2;++x)pushPreScenerySolid("BrickPlain",e+8*n,t+4+8*x);for(n=0;n<2;++n)for(pushPreScenerySolid("BrickHalf",e+24+8*n,t),x=0;x<2;++x)pushPreScenerySolid("BrickPlain",e+24+8*n,t+4+8*x);pushPreScenerySolid("CastleDoor",e+16,t)}function pushPreFuncCollider(e,t){return e instanceof Array?(console.log("position",e),pushPreThing(FuncCollider,e[0],e[1],t,[e[2],e[3]])):pushPreThing(FuncCollider,e,ceilmax+40,t)}function pushPreFuncSpawner(e,t){return pushPreThing(FuncSpawner,e,jumplev1,t)}function zoneEnableLakitu(){map.zone_lakitu=!0,enterLakitu()}function zoneDisableLakitu(){if(map.has_lakitu){var e=map.has_lakitu;map.zone_lakitu=map.has_lakitu=!1,e.lookleft||(e.lookleft=!0,removeClass(e,"flipped")),e.movement=function(e){e.xvel=max(e.xvel-unitsized32,-1*unitsize)}}}function zoneStartCheeps(e){pushPreFuncCollider(e,zoneEnableCheeps)}function zoneStopCheeps(e){pushPreFuncCollider(e,zoneDisableCheeps)}function zoneEnableCheeps(e){!map.zone_cheeps&&e.player&&startCheepSpawn()}function zoneDisableCheeps(e){e.player&&(map.zone_cheeps=!1)}function pushPrePattern(e,t,n,x){var r,i,a,o=t,l=Scenery.patterns[e];for(i=0;i super MARIO BROS.
©1985 NINTENDO
Move: Arrows/WASD Fire/Sprint: Shift/CTRL Pause/Mute: P/M
",20,91),pushPrePattern("backreg",0,0,5),pushPreFloor(0,0,69),pushPreThing(Block,128,jumplev1),pushPreThing(Brick,160,jumplev1),pushPreThing(Block,168,jumplev1,Mushroom),pushPreThing(Goomba,176,8),pushPreThing(Brick,176,jumplev1),pushPreThing(Block,176,jumplev2),pushPreThing(Block,184,jumplev1),pushPreThing(Brick,192,jumplev1),pushPrePipe(224,0,16,!1),pushPrePipe(304,0,24),pushPrePipe(368,0,32),pushPreThing(Goomba,340,8),pushPrePipe(368,0,32),pushPreThing(Goomba,412,8),pushPreThing(Goomba,422,8),pushPrePipe(456,0,32,!1,2),pushPreThing(Block,512,40,[Mushroom,1],!0),pushPreFloor(568,0,15),pushPreThing(Brick,618,jumplev1),pushPreThing(Block,626,jumplev1,Mushroom),pushPreThing(Brick,634,jumplev1),pushPreThing(Brick,640,jumplev2),pushPreThing(Goomba,640,jumplev2+8),pushPreThing(Brick,648,jumplev2),pushPreThing(Brick,656,jumplev2),pushPreThing(Goomba,656,jumplev2+8),pushPreThing(Brick,664,jumplev2),pushPreThing(Brick,672,jumplev2),pushPreThing(Brick,680,jumplev2),pushPreThing(Brick,688,jumplev2),pushPreThing(Brick,696,jumplev2),pushPreFloor(712,0,64),pushPreThing(Brick,728,jumplev2),pushPreThing(Brick,736,jumplev2),pushPreThing(Brick,744,jumplev2),pushPreThing(Brick,752,jumplev1,Coin),pushPreThing(Block,752,jumplev2),pushPreThing(Goomba,776,8),pushPreThing(Goomba,788,8),pushPreThing(Brick,800,jumplev1),pushPreThing(Brick,808,jumplev1,Star),pushPreThing(Block,848,jumplev1),pushPreThing(Koopa,856,12),pushPreThing(Block,872,jumplev1),pushPreThing(Block,872,jumplev2,Mushroom),pushPreThing(Block,896,jumplev1),pushPreThing(Goomba,912,8),pushPreThing(Goomba,924,8),pushPreThing(Brick,944,jumplev1),pushPreThing(Brick,968,jumplev2),pushPreThing(Brick,976,jumplev2),pushPreThing(Brick,984,jumplev2),pushPreThing(Goomba,992,8),pushPreThing(Goomba,1004,8),pushPreThing(Goomba,1024,8),pushPreThing(Goomba,1036,8),pushPreThing(Brick,1024,jumplev2),pushPreThing(Brick,1032,jumplev1),pushPreThing(Block,1032,jumplev2),pushPreThing(Brick,1040,jumplev1),pushPreThing(Block,1040,jumplev2),pushPreThing(Brick,1048,jumplev2),pushPreThing(Stone,1072,8),pushPreThing(Stone,1080,16,1,2),pushPreThing(Stone,1088,24,1,3),pushPreThing(Stone,1096,32,1,4),pushPreThing(Stone,1120,32,1,4),pushPreThing(Stone,1128,24,1,3),pushPreThing(Stone,1136,16,1,2),pushPreThing(Stone,1144,8),pushPreThing(Stone,1184,8),pushPreThing(Stone,1192,16,1,2),pushPreThing(Stone,1200,24,1,3),pushPreThing(Stone,1208,32,1,4),pushPreThing(Stone,1216,32,1,4),pushPreFloor(1240,0,69),pushPreThing(Stone,1240,32,1,4),pushPreThing(Stone,1248,24,1,3),pushPreThing(Stone,1256,16,1,2),pushPreThing(Stone,1264,8,1,1),pushPrePipe(1304,0,16,!1,!1,1),pushPreThing(Brick,1344,jumplev1),pushPreThing(Brick,1352,jumplev1),pushPreThing(Block,1360,jumplev1),pushPreThing(Brick,1368,jumplev1),pushPreThing(Goomba,1392,8),pushPreThing(Goomba,1404,8),pushPrePipe(1432,0,16),pushPreThing(Stone,1448,8),pushPreThing(Stone,1456,16,1,2),pushPreThing(Stone,1464,24,1,3),pushPreThing(Stone,1472,32,1,4),pushPreThing(Stone,1480,40,1,5),pushPreThing(Stone,1488,48,1,6),pushPreThing(Stone,1496,56,1,7),pushPreThing(Stone,1504,64,2,8),endCastleOutside(1580,0,1)})),new Area("Underworld",(function(){setLocationGeneration(2),makeCeiling(32,7),pushPreFloor(0,0,17),fillPreThing(Brick,0,8,1,11,8,8),fillPreThing(Brick,32,8,7,3,8,8),fillPreThing(Coin,33,31,7,2,8,16),fillPreThing(Coin,41,63,5,1,8,8),pushPreThing(PipeSide,104,16,1),pushPreThing(PipeVertical,120,88,88)}))]}function randMapType(e){e.locs=[new Location(0,entryRandom)],e.areas=[new Area(e.areatype,(function(){setLocationGeneration(0),"Underwater"==e.randname&&(goUnderWater(),pushPreScenery("Water",0,ceilmax-21,8*(e.startwidth+1)/3,1),pushPreThing(WaterBlock,0,ceilmax,8*(e.startwidth+1)))}))],e.treefunc=randTrue(3)?pushPreTree:pushPreShroom,e.treeheight=e.treelev=e.sincechange=0}function randDayNight(){return randTrue(3)?"":" Night"}function WorldRandomOverworld(e){e.random=!0,e.randtype=pushRandomSectionOverworld,e.randname="Overworld",e.areatype="Overworld"+randDayNight(),e.firstRandomThings=function(e){for(var t=0;t<10;++t)randTrue()&&pushRandomGroundScenery(8*t)},e.startwidth=14,e.onlysmartkoopas=!1,randMapType(e)}function WorldRandomTrees(e){e.random=!0,e.randtype=pushRandomSectionTrees,e.randname="Overworld",e.areatype="Overworld"+randDayNight(),e.firstRandomThings=function(e){e.treefunc(100,8*(e.treelev=randTrue()+2),randTrue()+4),e.startwidth+=7},e.startwidth=11,e.onlysmartkoopas=randTrue(),randMapType(e)}function WorldRandomUnderworld(e){e.random=!0,e.randtype=pushRandomSectionUnderworld,e.randname=e.areatype="Underworld",e.firstRandomThings=function(e){fillPreThing(Brick,0,8,1,11,8,8)},e.startwidth=randTrue(3)+7,e.onlysmartkoopas=!0,e.respawndist=42,e.entrancetype="Up",randMapType(e)}function WorldRandomUnderwater(e){e.random=!0,e.randtype=pushRandomSectionUnderwater,e.randname="Underwater",e.areatype="Underwater"+randDayNight(),e.firstRandomThings=function(e){},e.startwidth=randTrue(3)+7,e.entrancetype="Up",e.countCheep=e.countBlooper=0,e.respawndist=42,e.onlysmartkoopas=!0,randMapType(e)}function WorldRandomBridge(e){e.random=!0,e.randtype=startRandomSectionBridge,e.randname="Overworld",e.areatype="Overworld"+randDayNight(),e.firstRandomThings=function(e){},e.startwidth=14,randMapType(e)}function WorldRandomSky(e){e.random=!0,e.randtype=startRandomSectionSky,e.randname="Sky",e.areatype="Sky"+randDayNight(),e.entrancetype="Vine",e.firstRandomThings=function(e){pushPreThing(Stone,0,0,4)},e.startwidth=4,e.nofloor=!0,randMapType(e)}function WorldRandomCastle(e){e.random=!0,e.randtype=startRandomSectionCastle,e.randname=e.areatype=e.entrancetype="Castle",e.firstRandomThings=function(e){startCastleInside(),startCastle()},e.respawndist=35,randMapType(e)}function FullScreenMario(){var e=Date.now();ensureLocalStorage(),TonedJS(!0),window.body=document.body,window.bodystyle=body.style,window.verbosity={Maps:!1,Sounds:!1},window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,timer)},window.cancelAnimationFrame=window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout,window.Uint8ClampedArray=window.Uint8ClampedArray||window.Uint8Array||Array,resetMeasurements(),resetLibrary(),resetEvents(),resetCanvas(),resetMaps(),resetScenery(),resetTriggers(),resetSeed(),resetSounds(),window.luigi=localStorage&&"true"==localStorage.luigi,window.gameon=!0,setMap(1,1),log("It took "+(Date.now()-e)+" milliseconds to start.")}function ensureLocalStorage(){var e=!1;try{window.hasOwnProperty("localStorage")||(window.localStorage={crappy:!0}),window.localStorage&&(e=!0)}catch(t){e=!1}if(!e)throw document.body.innerText="It seems your browser does not allow localStorage!"}function resetMeasurements(){resetUnitsize(4),resetTimer(1e3/60),window.jumplev1=32,window.jumplev2=64,window.ceillev=88,window.ceilmax=104,window.castlev=-48,window.paused=!0,resetGameScreen(),window.parentwindow||(window.parentwindow=!1)}function resetUnitsize(e){window.unitsize=e;for(var t=2;t<=64;++t)window["unitsizet"+t]=unitsize*t,window["unitsized"+t]=unitsize/t;window.scale=unitsized2,window.gravity=round(12*unitsize)/100}function resetTimer(e){e=roundDigit(e,.001),window.timer=window.timernorm=e,window.timert2=2*e,window.timerd2=e/2,window.fps=window.fps_target=roundDigit(1e3/e,.001),window.time_prev=Date.now()}function resetGameScreen(){window.gamescreen=new getGameScreen}function getGameScreen(){resetGameScreenPosition(this),this.middlex=(this.left+this.right)/2,window.botmax=this.height-ceilmax,botmax Your screen isn't high enough. Make it taller, then refresh."),this.deathheight=this.bottom+48}function resetGameScreenPosition(e){(e=e||window.gamescreen).left=e.top=0,e.bottom=innerHeight,e.right=innerWidth,e.height=innerHeight/unitsize,e.width=innerWidth/unitsize,e.unitheight=innerHeight,e.unitwidth=innerWidth}function resetEvents(){window.TimeHandler=new TimeHandlr({onSpriteCycleStart:"onadding",doSpriteCycleStart:"placed",cycleCheckValidity:"alive",timingDefault:9})}function resetSounds(){window.sounds={},window.theme=!1,window.muted=localStorage&&"true"==localStorage.muted,window.AudioPlayer=new AudioPlayr({directory:"Sounds",getVolumeLocal:function(){return.49},getThemeDefault:function(){return area.theme},library:{Sounds:["Bowser Falls","Bowser Fires","Break Block","Bump","Coin","Ending","Fireball","Firework","Flagpole","Gain Life","Game Over 2","Game Over","Hurry","Into the Tunnel","Jump Small","Jump Super","Kick","Level Complete","Player Dies","Pause","Pipe","Power Down","Powerup Appears","Powerup","Stage Clear","Vine Emerging","World Clear","You Dead"],Themes:["Castle","Overworld","Underwater","Underworld","Star","Sky","Hurry Castle","Hurry Overworld","Hurry Underwater","Hurry Underworld","Hurry Star","Hurry Sky"]}})}function resetQuadrants(){window.QuadsKeeper=new QuadsKeepr({num_rows:5,num_cols:6,screen_width:window.innerWidth,screen_height:window.innerHeight,tolerance:unitsized2,onUpdate:spawnMap,onCollide:!1})}function resetGameState(e){clearAllTimeouts(),resetData(),window.nokeys=window.spawning=window.spawnon=window.notime=window.editing=window.qcount=window.lastscroll=0,window.paused=window.gameon=window.speed=1,e||(window.gamecount=0),resetQuadrants(),window.gamehistory=[],AudioPlayer.pause()}function scrollWindow(e,t){var n=-(e=e||0),x=-(t=t||0);gamescreen.left+=e,gamescreen.right+=e,gamescreen.top+=t,gamescreen.bottom+=t,shiftAll(characters,n,x),shiftAll(solids,n,x),shiftAll(scenery,n,x),shiftAll(QuadsKeeper.getQuadrants(),n,x),shiftElements(texts,n,x),QuadsKeeper.updateQuadrants(n),window.playediting&&scrollEditor(e,t)}function shiftAll(e,t,n){for(var x=e.length-1;x>=0;--x)shiftBoth(e[x],t,n)}function shiftElements(e,t,n){for(var x,r=e.length-1;r>=0;--r)x=e[r],elementShiftLeft(x,t),elementShiftTop(x,n)}function scrollPlayer(e,t,n){var x=player.left,r=player.top;scrollWindow(e,t=t||0),setLeft(player,x,n),setTop(player,r+t*unitsize,n),QuadsKeeper.updateQuadrants()}function mlog(e){verbosity[e]&&log.apply(console,arguments)}function resetCanvas(){window.canvas=getCanvas(innerWidth,innerHeight,!0),window.context=canvas.getContext("2d"),body.appendChild(canvas)}function spriteUnravel(e){for(var t,n,x,r=getPaletteReferenceStarting(window.palette),i=window.digitsize,a=e.length,o="",l=0;l=0))+String(Number(l.indexOf("flip-vert")>=0))){case"11":x=n.flipboth?n.flipboth:n.flipboth=flipSpriteArrayBoth(x);break;case"10":x=n.fliphoriz?n.fliphoriz:n.fliphoriz=flipSpriteArrayHoriz(x,e);break;case"01":x=n.flipvert?n.flipvert:n.flipvert=flipSpriteArrayVert(x,e);break;default:x=n.raw}return x}function expandObtainedSprite(e,t,n,x,r){var i,a,o=new Uint8ClampedArray(e.length*scale),l=n*unitsizet4,s=x*scale,d=0,u=0;for(i=0;i49&&(alert(e.title),console.log(e.title,n,t)),n)if(r=t[n[i]]){t=r,n.splice(i,1),x=!1;break}if(x)if(r=t.normal)switch(x=!1,r.constructor){case Uint8ClampedArray:case SpriteMultiple:return r;case Object:t=r;break;default:t=t[r]}else x=!0;if(x||!t)return console.log("\nSprite not found! Title: "+e.title),console.log("Classname:",e.className),console.log("Remaining",n),console.log("Current",t),console.log("Prev",a),new Uint8ClampedArray(e.spritewidth*e.spriteheight);switch(t.constructor){case Uint8ClampedArray:case SpriteMultiple:return t;case"Object":continue}}}function refillThingCanvas(e){var t=e.canvas,n=e.context,x=n.getImageData(0,0,t.width,t.height);memcpyU8(e.sprite,x.data),n.putImageData(x,0,0)}function refillThingCanvases(e,t){var n,x,r,i,a,o=e.canvases={},l=e.spritewidthpixels,s=e.spriteheightpixels;for(a in e.num_sprites=1,t)(n=t[a])instanceof Uint8ClampedArray?(++e.num_sprites,o[a]=r={canvas:getCanvas(l,s)},r.context=i=r.canvas.getContext("2d"),memcpyU8(n,(x=i.getImageData(0,0,l,s)).data),i.putImageData(x,0,0)):o[a]=n;r=o.middle,e.canvas=r.canvas,e.context=r.context}function refillCanvas(){var e,t=window.canvas,n=window.context;for(n.fillStyle=area.fillStyle,n.fillRect(0,0,t.width,t.height),e=scenery.length-1;e>=0;--e)drawThingOnCanvas(n,scenery[e]);for(e=solids.length-1;e>=0;--e)drawThingOnCanvas(n,solids[e]);for(e=characters.length-1;e>=0;--e)drawThingOnCanvas(n,characters[e])}function drawThingOnCanvas(e,t){if(!t.hidden){var n=t.left,x=t.top;n>innerWidth||(1==t.num_sprites?drawThingOnCanvasSingle(e,t.canvas,t,n,x):drawThingOnCanvasMultiple(e,t.canvases,t.canvas,t,n,x))}}function drawThingOnCanvasSingle(e,t,n,x,r){n.repeat?drawPatternOnCanvas(e,t,x,r,n.unitwidth,n.unitheight):e.drawImage(t,x,r)}function drawThingOnCanvasMultiple(e,t,n,x,r,i){var a,o,l=i,s=r,d=x.right,u=x.bottom,p=x.unitwidth,c=x.unitheight,m=x.spritewidthpixels,h=x.spriteheightpixels;"v"==x.sprite_type[0]?((o=t.bottom)&&(a=t.bottomheight||x.spriteheightpixels,drawPatternOnCanvas(e,o.canvas,s,u-a,m,min(c,h)),u-=a,c-=a),(o=t.top)&&(a=t.topheight||x.spriteheightpixels,drawPatternOnCanvas(e,o.canvas,s,l,m,min(c,h)),l+=a,c-=a)):"h"==x.sprite_type[0]&&((o=t.left)&&(a=t.leftwidth||x.spritewidthpixels,drawPatternOnCanvas(e,o.canvas,s,l,min(p,m),h),s+=a,p-=a),(o=t.right)&&(a=t.rightwidth||x.spritewidthpixels,drawPatternOnCanvas(e,o.canvas,d-a,l,min(p,m),h),d-=a,p-=a)),l=e.length||x>=t.length)){null==n&&(n=0),null==x&&(x=0),null==r&&(r=max(0,min(e.length,t.length)));for(var i=r+0,a=x+0,o=n+0;i--;)t[a++]=e[o++]}}function canvasDisableSmoothing(e,t){(t=t||e.getContext("2d")).webkitImageSmoothingEnabled=!1,t.mozImageSmoothingEnabled=!1,t.imageSmoothingEnabled=!1}function Thing(e){if(0!=arguments.length&&e){var t=this===window?new Thing:this,n=t.args=arrayMake(arguments);n[0]=t,e.apply(t,n),t.alive=!0,t.placed=this.outerok=0,t.xvel=this.xvel||0,t.yvel=this.yvel||0,null==t.tolx&&(t.tolx=0),null==t.toly&&(t.toly=unitsized8),t.collide=t.collide||function(){},t.death=t.death||killNormal,t.animate=t.animate||emergeUp;var x,r=4;(x=floor(t.width*unitsize/QuadsKeeper.getQuadWidth()))>0&&(r+=(x+1)*r/2),(x=floor(t.height*unitsize/QuadsKeeper.getQuadHeight()))>0&&(r+=(x+1)*r/2),t.maxquads=r,t.quadrants=new Array(t.maxquads),t.overlaps=[],t.title=t.title||e.name,t.spritewidth=t.spritewidth||t.width,t.spriteheight=t.spriteheight||t.height,t.sprite="";try{setContextStuff(t,t.spritewidth,t.spriteheight)}catch(e){log("Thing context fail",e,t.title,t),setTimeout((function(){setContextStuff(t,t.spritewidth,t.spriteheight)}),1)}return t}}function setContextStuff(e,t,n){e.spritewidthpixels=e.spritewidth*unitsize,e.spriteheightpixels=e.spriteheight*unitsize,e.canvas=getCanvas(e.spritewidthpixels,e.spriteheightpixels),e.context=e.canvas.getContext("2d"),e.imageData=e.context.getImageData(0,0,e.spritewidthpixels,e.spriteheightpixels),e.sprite_type=e.sprite_type||"neither",canvasDisableSmoothing(e,e.context)}function ThingCreate(e,t){var n=new Thing;return Thing.apply(n,[e].concat(t)),n}function setCharacter(e,t){e.type=t.split(" ")[0],e.resting=e.under=e.undermid=!1,e.alive=e.character=!0,e.libtype="characters",setClassInitial(e,"character "+t)}function setSolid(e,t){e.type="solid",e.name=t,e.solid=e.alive=!0,e.speed=e.speed||0,e.collide=e.collide||characterTouchedSolid,e.bottomBump=e.bottomBump||function(){},e.action=e.action||function(){},e.jump=e.jump||function(){},e.spritewidth=e.spritewidth||8,e.spriteheight=e.spriteheight||8,e.libtype="solids",setClassInitial(e,"solid "+t)}function setScenery(e,t){setSolid(e,t),e.libtype="scenery"}function addThing(e,t,n){return e instanceof Function&&(e=new Thing(e)),placeThing(e,t,n),window[e.libtype].push(e),e.placed=!0,e.onadding&&e.onadding(),setThingSprite(e),window["last_"+(e.title||e.group||"unknown")]=e,e}function placeThing(e,t,n){return setLeft(e,t),setTop(e,n),updateSize(e),e}function addText(e,t,n){var x=createElement("div",{innerHTML:e,className:"text",left:t,top:n,onclick:body.onclick||canvas.onclick,style:{marginLeft:t+"px",marginTop:n+"px"}});return body.appendChild(x),texts.push(x),x}function spawnText(e,t){var n=e.element=addText("",e.left,e.top);"object"==typeof t?proliferate(n,t):n.innerHTML=t,e.movement=!1}function checkTexts(){var e,t,n,x=QuadsKeeper.getDelX();for(n=texts.length-1;n>=0;--n)t=texts[n],e=texts[n].element||t,t.right=t.left+e.clientWidth,t.right1?t.death(t):void 0;e.solid?AudioPlayer.playLocal("Bump",t.right):(AudioPlayer.playLocal("Kick",t.right),e.death(e,2),scoreEnemyFire(e)),t.death(t)}}function fireDeleted(){--player.numballs}function fireExplodes(e){var t=new Thing(Firework);addThing(t,e.left-t.width/2,e.top-t.height/2),t.animate(),killNormal(e)}function Star(e){e.group="item",e.width=7,e.height=8,e.speed=.56*unitsize,e.jumpheight=1.17*unitsize,e.gravity=gravity/2.8,e.animate=emergeUp,e.movement=moveJumping,e.collide=collideFriendly,e.action=playerStar,e.death=killNormal,e.nofire=!0,setCharacter(e,"star item"),TimeHandler.addSpriteCycle(e,["one","two","three","four"],0,7)}function Shell(e,t){e.width=8,e.height=7,e.group="item",e.speed=unitsizet2,e.collide_primary=!0,e.moveleft=e.xvel=e.move=e.hitcount=e.peeking=e.counting=e.landing=e.enemyhitcount=0,e.smart=t,e.movement=moveShell,e.collide=hitShell,e.death=killFlip,e.spawntype=Koopa,setCharacter(e,"shell"+(t?" smart":" dumb"))}function hitShell(e,t){if("shell"==e.type&&t.type!=e.type)return hitShell(t,e);switch(e.type){case"solid":t.right0&&e.bottom<=t.top+unitsizet2;if(e.star)return scorePlayerShell(e,t),t.death(t,2);if(t.landing)return void(t.shelltoleft==n?(++t.landing,1==t.landing&&scorePlayerShell(e,t),TimeHandler.addEvent((function(e){--e.landing}),2,t)):player.death(player));0==t.xvel||x?(t.counting=0,scorePlayerShell(e,t),t.peeking&&(t.peeking=!1,removeClass(t,"peeking"),t.height-=unitsized8,updateSize(t)),0==t.xvel?(n?(t.moveleft=!0,t.xvel=-t.speed):(t.moveleft=!1,t.xvel=t.speed),++t.hitcount,TimeHandler.addEvent((function(e){--e.hitcount}),2,t)):t.xvel=0,x&&(AudioPlayer.play("Kick"),t.xvel?scorePlayerShell(e,t):(jumpEnemy(e,t),e.yvel*=2,scorePlayerShell(e,t),setBottom(e,t.top-unitsize,!0)),++t.landing,t.shelltoleft=n,TimeHandler.addEvent((function(e){--e.landing}),2,t))):!t.hitcount&&(n&&t.xvel<0||!n&&t.xvel>0)&&e.death(e);break;case"shell":if(0!=e.xvel)if(0!=t.xvel){var r=e.xvel;shiftHoriz(e,e.xvel=t.xvel),shiftHoriz(t,t.xvel=r)}else score(t,500),t.death(t);else 0!=t.xvel&&(score(e,500),e.death(e));break;default:switch(e.group){case"enemy":if(t.xvel){if("koopa"==e.type.split(" ")[0]){var i=new Thing(Shell,e.smart);addThing(i,e.left,e.bottom-i.height*unitsize),killFlip(i),killNormal(e)}else killFlip(e);AudioPlayer.play("Kick"),score(e,findScore(t.enemyhitcount),!0),++t.enemyhitcount}else e.moveleft=objectToLeft(e,t);break;case"item":if("shell"!=e.type)return;t.xvel&&killFlip(e),e.xvel&&killFlip(t)}}}function moveShell(e){if(0==e.xvel)if(350==++e.counting)addClass(e,"peeking"),e.peeking=!0,e.height+=unitsized8,updateSize(e);else if(490==e.counting){var t=new Thing(e.spawntype,e.smart);addThing(t,e.left,e.bottom-t.height*unitsize),killNormal(e)}}function collideFriendly(e,t){"player"==e.type&&(t.action&&t.action(e),t.death(t))}function jumpEnemy(e,t){e.keys.up?e.yvel=-1.4*unitsize:e.yvel=-.7*unitsize,e.xvel*=.91,AudioPlayer.play("Kick"),"item"==t.group&&"shell"!=t.type||score(t,findScore(e.jumpcount+++e.jumpers),!0),++e.jumpers,TimeHandler.addEvent((function(e){--e.jumpers}),1,e)}function Goomba(e){e.width=e.height=8,e.speed=.21*unitsize,e.toly=unitsize,e.moveleft=e.noflip=!0,e.smart=!1,e.group="enemy",e.movement=moveSimple,e.collide=collideEnemy,e.death=killGoomba,setCharacter(e,"goomba"),TimeHandler.addSpriteCycleSynched(e,[unflipHoriz,flipHoriz])}function killGoomba(e,t){if(e.alive)if(t)killFlip(e);else{var n=new Thing(DeadGoomba);addThing(n,e.left,e.bottom-n.height*unitsize),TimeHandler.addEvent(killNormal,21,n),killNormal(e)}}function DeadGoomba(e){e.width=8,e.height=4,e.movement=!1,e.nocollide=e.nocollide=!0,e.death=killNormal,setSolid(e,"deadGoomba")}function Koopa(e,t,n){e.width=8,e.height=12,e.speed=e.xvel=.21*unitsize,e.moveleft=e.skipoverlaps=!0,e.group="enemy",e.smart=t;var x="koopa";x+=e.smart?" smart":" dumb",e.smart&&(x+=" smart"),n?(x+=" flying",e.winged=!0,1==n?(e.movement=moveJumping,e.jumpheight=1.17*unitsize,e.gravity=gravity/2.8):(e.movement=moveFloating,e.ytop=e.begin=n[0]*unitsize,e.ybot=e.end=n[1]*unitsize,e.nofall=e.fly=!0,e.changing=e.xvel=0,e.yvel=e.maxvel=unitsized4)):(x+=" regular",e.smart?e.movement=moveSmart:e.movement=moveSimple),e.collide=collideEnemy,e.death=killKoopa,setCharacter(e,x),TimeHandler.addSpriteCycleSynched(e,["one","two"]),e.toly=unitsizet2}function killKoopa(e,t){if(e.alive){var n;if(n=t&&2!=t||e.winged?new Thing(Koopa,e.smart):new Thing(Shell,e.smart),TimeHandler.addEvent((function(e,t){addThing(e,t.left,t.bottom-e.height*unitsize),e.moveleft=t.moveleft}),0,n,e),killNormal(e),2!=t)return n;killFlip(n)}}function Pirhana(e,t){e.width=8,e.height=12,e.counter=0,e.countermax=e.height*unitsize,e.dir=unitsized8,e.toly=unitsizet8,e.nofall=e.deadly=e.nocollidesolid=e.repeat=!0,e.group="enemy",e.collide=collideEnemy,e.death=killNormal,e.movement=movePirhanaInit,e.death=killPirhana,setCharacter(e,"pirhana")}function movePirhanaInit(e){e.hidden=!0;var t=e.visual_scenery=new Thing(Sprite,"Pirhana");addThing(t,e.left,e.top),TimeHandler.addSpriteCycle(t,["one","two"]),e.movement=movePirhanaNew,movePirhanaNew(e,e.height*unitsize)}function movePirhanaNew(e,t){t=t||e.dir,e.counter+=t,shiftVert(e,t),shiftVert(e.visual_scenery,t),(e.counter<=0||e.counter>=e.countermax)&&(e.movement=!1,e.dir*=-1,TimeHandler.addEvent(movePirhanaRestart,35,e))}function movePirhanaRestart(e){var t=getMidX(player);e.counter>=e.countermax&&t>e.left-unitsizet8&&te.heightfall||(e.nofall=!1,e.movement=movePodobooSwitch)}function movePodobooSwitch(e){e.yvel<=0||(flipVert(e),e.movement=movePodobooDown)}function movePodobooDown(e){e.top0?TimeHandler.addEvent(throwHammer,7,e,--t):(TimeHandler.addEvent(throwHammer,70,e,7),removeClass(e,"thrown"))}),14,e))}function jumpHammerBro(e){if(!characterIsAlive(e))return!0;e.resting&&(map.floor-e.bottom/unitsize>=jumplev1-2&&"floor"!=e.resting.name&&Math.floor(2*Math.random())?(e.yvel=-.7*unitsize,e.falling=!0,TimeHandler.addEvent((function(e){e.falling=!1}),42,e)):e.yvel=-2.1*unitsize,e.resting=!1)}function Hammer(e,t){e.width=e.height=8,e.nocollidesolid=e.nocollidechar=e.deadly=e.nofire=!0,e.collide=collideEnemy,e.yvel=1.4*-unitsize,e.xvel=unitsize/1.4,t&&(e.xvel*=-1),e.gravity=gravity/2.1,setCharacter(e,"hammer"),TimeHandler.addSpriteCycle(e,["one","two","three","four"],3)}function Cannon(e,t,n){e.width=8,e.height=8*(t||1),e.spriteheight=16,n||(e.movement=moveCannonInit),e.timer=117,e.repeat=!0,setSolid(e,"cannon")}function moveCannonInit(e){TimeHandler.addEventInterval((function(e){if(!(player.right>e.left-unitsizet8&&player.leftunitsize)return e.nocollidesolid=!1,!0}),3,1/0,e))}function bowserFires(e){if(!characterIsAlive(e)||!characterIsAlive(player))return!0;e.lookleft&&(addClass(e,"firing"),AudioPlayer.playLocal("Bowser Fires",e.left),TimeHandler.addEvent((function(e){var t=e.top+unitsizet4,n=new Thing(BowserFire,roundDigit(player.bottom,unitsizet8));removeClass(e,"firing"),addThing(n,e.left-unitsizet8,t),AudioPlayer.play("Bowser Fires")}),14,e))}function killBowser(e,t){if(t)return e.nofall=!1,killFlip(e);5==++e.deathcount&&(e.yvel=e.speed=e.movement=0,killFlip(e,350),score(e,5e3))}function freezeBowser(e){e.movement=!1,thingStoreVelocity(e)}function BowserFire(e,t){e.width=12,e.height=4,e.xvel=-.63*unitsize,e.deadly=e.nofall=e.nocollidesolid=e.nofire=!0,e.collide=collideEnemy,t&&(e.ylev=t,e.movement=moveFlying),setCharacter(e,"bowserfire"),TimeHandler.addSpriteCycle(e,[unflipVert,flipVert])}function moveFlying(e){round(e.bottom)!=round(e.ylev)?shiftVert(e,min(max(0,e.ylev-e.bottom),unitsize)):e.movement=!1}function WaterBlock(e,t){e.height=16,e.width=t,e.spritewidth=e.spriteheight=1/scale,e.repeat=!0,setSolid(e,"water-block")}function Blooper(e){e.width=8,e.height=12,e.nocollidesolid=e.nofall=e.moveleft=1,e.squeeze=e.counter=0,e.speed=unitsized2,e.xvel=e.speedinv=-unitsized4,e.movement=moveBlooper,e.collide=collideEnemy,e.death=killFlip,setCharacter(e,"blooper")}function moveBlooper(e){switch(e.counter){case 56:e.squeeze=!0,++e.counter;break;case 63:squeezeBlooper(e);break;default:++e.counter}e.tope.right+unitsizet8?e.xvel=min(e.speed,e.xvel+unitsized32):player.rightplayer.bottom||e.bottom>360)&&unsqueezeBlooper(e)}function unsqueezeBlooper(e){e.squeeze=!1,removeClass(e,"squeeze"),e.counter=0,setHeight(e,12,!0,!0)}function CheepCheep(e,t,n){e.width=e.height=8,e.group="enemy";var x="cheepcheep "+(t?"red":"");e.red=t,setCheepVelocities(e),n?(x+=" jumping",e.jumping=!0,e.movement=moveCheepJumping):e.movement=moveCheepInit,e.nofall=e.nocollidesolid=e.nocollidechar=!0,e.death=killFlip,e.collide=collideEnemy,setCharacter(e,x),TimeHandler.addSpriteCycle(e,["one","two"])}function setCheepVelocities(e){e.red?(e.xvel=-unitsized4,e.yvel=unitsize/-24):(e.xvel=unitsize/-6,e.yvel=-unitsized32)}function moveCheepInit(e){setCheepVelocities(e),e.topunitsized8&&player.left>gamescreen.width*unitsized2?e.left=100&&(data.coins.amount=0,gainLife()),updateDataElement(data.coins)}function coinEmerge(e,t){AudioPlayer.play("Coin"),removeClass(e,"still"),switchContainers(e,characters,scenery),score(e,200,!1),gainCoin(),e.nocollide=e.alive=e.nofall=e.emerging=!0,e.blockparent?e.movement=coinEmergeMoveParent:e.movement=coinEmergeMove,e.yvel=-unitsize,TimeHandler.addEvent((function(e){e.yvel*=-1}),25,e),TimeHandler.addEvent((function(e){killNormal(e),deleteThing(e,scenery,scenery.indexOf(e))}),49,e),TimeHandler.addEventInterval(coinEmergeMovement,1,1/0,e,t),TimeHandler.clearClassCycle(e,0),addClass(e,"anim"),TimeHandler.addSpriteCycle(e,["anim1","anim2","anim3","anim4","anim3","anim2"],0,5)}function coinEmergeMovement(e,t){if(!e.alive)return!0;shiftVert(e,e.yvel)}function coinEmergeMove(e){shiftVert(e,e.yvel,!0)}function coinEmergeMoveParent(e){e.bottom>=e.blockparent.bottom?killNormal(e):shiftVert(e,e.yvel,!0)}function Player(e){setPlayerSizeSmall(e),e.walkspeed=unitsized2,e.canjump=e.nofiredeath=e.nofire=e.player=e.nokillend=1,e.numballs=e.moveleft=e.skidding=e.star=e.dying=e.nofall=e.maxvel=e.paddling=e.jumpers=e.landing=0,e.running="",e.power=data.playerpower,e.maxspeed=e.maxspeedsave=1.35*unitsize,e.scrollspeed=1.75*unitsize,e.keys=new Keys,e.fire=playerFires,e.movement=movePlayer,e.death=killPlayer,setCharacter(e,"player normal small still"),e.tolx=unitsizet2,e.toly=0,e.gravity=map.gravity,map.underwater&&(e.swimming=!0,TimeHandler.addSpriteCycle(e,["swim1","swim2"],"swimming",5))}function placePlayer(e,t){clearOldPlayer(),window.player=new Thing(Player),window.luigi?window.player.title="Luigi":window.player.title="Mario";var n=addThing(player,e||unitsizet16,t||(map.floor-player.height)*unitsize);return data.playerpower>=2&&(playerGetsBig(player,!0),3==data.playerpower&&playerGetsFire(player,!0)),n}function clearOldPlayer(){window.player&&(player.alive=!1,player.dead=!0)}function Keys(){this.run=this.crouch=this.jump=this.jumplev=this.sprint=0}function thingStoreVelocity(e,t){e.xvelOld=e.xvel||0,e.yvelOld=e.yvel||0,e.nofallOld=e.nofall||!1,e.nocollideOld=e.nocollide||!1,e.movementOld=e.movement||e.movementOld,e.nofall=e.nocollide=!0,e.xvel=e.yvel=!1,t||(e.movement=!1)}function thingRetrieveVelocity(e,t){t||(e.xvel=e.xvelOld||0,e.yvel=e.yvelOld||0),e.movement=e.movementOld||e.movement,e.nofall=e.nofallOld||!1,e.nocollide=e.nocollideOld||!1}function removeCrouch(){player.crouching=!1,player.toly=player.tolyold||0,1!=player.power&&(removeClass(player,"crouching"),player.height=16,updateBottom(player,0),updateSize(player))}function playerShroom(e){e.shrooming||(AudioPlayer.play("Powerup"),score(e,1e3,!0),3!=e.power&&(e.shrooming=!0,(2==++e.power?playerGetsBig:playerGetsFire)(e),storePlayerStats()))}function playerGetsBig(e,t){if(setPlayerSizeLarge(e),e.keys.down=0,removeClasses(player,"crouching small"),updateBottom(e,0),updateSize(e),t)addClass(e,"large");else{addClass(player,"shrooming");for(var n=[1,2,1,2,3,2,3],x=n.length-1;x>=0;--x)n[x]="shrooming"+n[x];thingStoreVelocity(player),n.push((function(e,t){return e.shrooming=t.length=0,addClass(e,"large"),removeClasses(e,"shrooming shrooming3"),thingRetrieveVelocity(player),!0})),TimeHandler.addSpriteCycle(e,n,"shrooming",6)}}function playerGetsSmall(e){var t=player.bottom;e.keys.down=0,thingStoreVelocity(e),addClass(e,"small"),flicker(e),removeClasses(player,"running skidding jumping fiery"),addClass(player,"paddling"),TimeHandler.addEvent((function(e){removeClass(e,"large"),setPlayerSizeSmall(e),setBottom(e,t-unitsize)}),21,player),TimeHandler.addEvent((function(e){thingRetrieveVelocity(e,!1),e.nocollidechar=!0,removeClass(e,"paddling"),(e.running||e.xvel)&&addClass(e,"running"),TimeHandler.addEvent(setThingSprite,1,e)}),42,player),TimeHandler.addEvent((function(e){e.nocollidechar=!1}),70,player)}function playerGetsFire(e){removeClass(e,"intofiery"),addClass(e,"fiery"),player.shrooming=!1}function setPlayerSizeSmall(e){setSize(e,8,8,!0),updateSize(e)}function setPlayerSizeLarge(e){setSize(e,8,16,!0),updateSize(e)}function movePlayer(e){if(e.keys.up){if(e.keys.jump>0&&(e.yvel<=0||map.underwater)&&(map.underwater&&playerPaddles(e),e.resting?(e.resting.xvel&&(e.xvel+=e.resting.xvel),e.resting=!1):(e.jumping||map.underwater||switchClass(e,"running skidding","jumping"),e.jumping=!0),!map.underwater)){var t=unitsize/pow(++e.keys.jumplev,map.jumpmod-.0014*e.xvel);e.yvel=max(e.yvel-t,map.maxyvelinv)}}else e.keys.jump=0;e.keys.crouch&&!e.crouching&&e.resting&&(1!=e.power&&(e.crouching=!0,addClass(e,"crouching"),e.height=11,e.tolyold=e.toly,e.toly=unitsizet4,updateBottom(e,0),updateSize(e)),e.resting.actionTop&&e.resting.actionTop(e,e.resting,e.resting.transport));var n=0;if(0==e.keys.run||e.crouching)e.xvel*=.98,n=.035;else{var x=e.keys.run*(.098*((e.keys.sprint&&!map.underwater||0)+1));e.xvel+=x||0,e.xvel*=.98,n=7e-4,signBool(e.keys.run)==e.moveleft?e.skidding||(addClass(e,"skidding"),e.skidding=!0):e.skidding&&(removeClass(e,"skidding"),e.skidding=!1)}e.xvel>n?e.xvel-=n:e.xvel<-n?e.xvel+=n:0!=e.xvel&&(e.xvel=0,window.nokeys||0!=e.keys.run||(e.keys.left_down?e.keys.run=-1:e.keys.right_down&&(e.keys.run=1))),Math.abs(e.xvel)<.14?e.running&&(e.running=!1,1==player.power&&setPlayerSizeSmall(e),removeClasses(e,"running skidding one two three"),addClass(e,"still"),TimeHandler.clearClassCycle(e,"running")):e.running||(e.running=!0,switchClass(e,"still","running"),playerStartRunningCycle(e),1==e.power&&setPlayerSizeSmall(e)),e.xvel>0?(e.xvel=min(e.xvel,e.maxspeed),e.moveleft&&(e.resting||map.underwater)&&(unflipHoriz(e),e.moveleft=!1)):e.xvel<0&&(e.xvel=max(e.xvel,-1*e.maxspeed),e.moveleft||!e.resting&&!map.underwater||(flipHoriz(e),e.moveleft=!0)),e.resting&&(e.hopping&&(removeClass(e,"hopping"),e.xvel&&addClass(e,"running"),e.hopping=!1),e.keys.jumplev=e.yvel=e.jumpcount=0,e.jumping&&(e.jumping=!1,removeClass(e,"jumping"),1==e.power&&setPlayerSizeSmall(e),addClass(e,abs(e.xvel)<.14?"still":"running")),e.paddling&&(e.paddling=e.swimming=!1,removeClasses(e,"paddling swim1 swim2"),TimeHandler.clearClassCycle(e,"paddling"),addClass(e,"running"))),isNaN(e.xvel)}function playerStartRunningCycle(e){e.running=TimeHandler.addSpriteCycle(e,["one","two","three","two"],"running",setPlayerRunningCycler)}function setPlayerRunningCycler(e){e.timeout=5+ceil(player.maxspeedsave-abs(player.xvel))}function playerPaddles(e){e.paddling||(removeClasses(e,"skidding paddle1 paddle2 paddle3 paddle4 paddle5"),addClass(e,"paddling"),TimeHandler.clearClassCycle(e,"paddling_cycle"),TimeHandler.addSpriteCycle(e,["paddle1","paddle2","paddle3","paddle3","paddle2","paddle1",function(){return e.paddling=!1}],"paddling_cycle",5)),e.paddling=e.swimming=!0,e.yvel=-.84*unitsize}function playerBubbles(){addThing(new Thing(Bubble),player.right,player.top)}function movePlayerVine(e){var t=e.attached;if(e.bottomt.bottom-unitsizet4)return unattachPlayer(e)}else e.animatednow=!1;e.animatednow&&!e.animated?addClass(e,"animated"):!e.animatednow&&e.animated&&removeClass(e,"animated"),e.animated=e.animatednow,e.bottom<-16&&(locMovePreparations(e),!t.locnum&&map.random?goToTransport(["Random","Sky","Vine"]):shiftToLocation(t.locnum))}function unattachPlayer(e){e.movement=movePlayer,removeClasses(e,"climbing","animated"),TimeHandler.clearClassCycle(e,"climbing"),e.yvel=e.skipoverlaps=e.attachoff=e.nofall=e.climbing=e.attached=e.attached.attached=!1,e.xvel=e.keys.run}function playerHopsOff(e,t,n){removeClasses(e,"climbing running"),addClass(e,"jumping"),e.piping=e.nocollide=e.nofall=e.climbing=!1,e.gravity=gravity/4,e.xvel=3.5,e.yvel=-3.5,TimeHandler.addEvent((function(e){unflipHoriz(e),e.gravity=gravity,e.movement=movePlayer,e.attached=!1,n&&(addClass(e,"running"),playerStartRunningCycle(e))}),21,e)}function playerFires(){if(!(player.numballs>=2)){++player.numballs,addClass(player,"firing");var e=new Thing(FireBall,player.moveleft,!0);e.yvel=unitsize,addThing(e,player.right+unitsized4,player.top+unitsizet8),player.moveleft&&setRight(e,player.left-unitsized4,!0),e.animate(e),e.ondelete=fireDeleted,TimeHandler.addEvent((function(e){removeClass(e,"firing")}),7,player)}}function emergeFire(e){AudioPlayer.play("Fireball")}function playerStar(e){e.star||(++e.star,AudioPlayer.play("Powerup"),AudioPlayer.playTheme("Star",!0),TimeHandler.addEvent(playerRemoveStar,560,e),switchClass(e,"normal","star"),TimeHandler.addSpriteCycle(e,["star1","star2","star3","star4"],"star",5))}function playerRemoveStar(e){e.star&&(--e.star,removeClasses(e,"star star1 star2 star3 star4"),TimeHandler.clearClassCycle(e,"star"),addClass(e,"normal"),AudioPlayer.playTheme())}function killPlayer(e,t){if(e.alive&&!e.flickering&&!e.dying){if(2==t)notime=!0,e.dead=e.dying=!0;else{if(!t&&e.power>1)return AudioPlayer.play("Power Down"),e.power=1,storePlayerStats(),playerGetsSmall(e);2!=t&&(TimeHandler.clearAllCycles(e),setSize(e,7.5,7,!0),updateSize(e),setClass(e,"character player dead"),nokeys=notime=e.dying=!0,thingStoreVelocity(e),containerForefront(e,characters),TimeHandler.addEvent((function(e){thingRetrieveVelocity(e,!0),e.nocollide=!0,e.movement=e.resting=!1,e.gravity=gravity/2.1,e.yvel=-1.4*unitsize}),7,e))}AudioPlayer.pause(),window.editing||AudioPlayer.play("Player Dies"),e.nocollide=e.nomove=nokeys=1,--data.lives.amount,map.random||(data.score.amount=data.scoreold),window.editing?setTimeout((function(){editorSubmitGameFuncPlay(),editor.playing=editor.playediting=!0}),35*timer):!map.random||data.lives.amount<=0?window.reset=setTimeout(data.lives.amount?setMap:gameOver,280*timer):(nokeys=notime=!1,updateDataElement(data.score),updateDataElement(data.lives),TimeHandler.addEvent((function(){playerDropsIn(),AudioPlayer.playTheme()}),117))}}function playerDropsIn(){clearOldPlayer(),placePlayer(unitsizet16,-1*unitsizet8+map.underwater*unitsize*24),flicker(player),map.underwater?player.gravity=gravity/2.8:(player.nocollide=!0,TimeHandler.addEvent((function(){player.nocollide=!1,addThing(new Thing(RestingStone),player.left,player.bottom+player.yvel)}),map.respawndist||17))}function gameOver(){gameon=!1,pause(),AudioPlayer.pauseTheme(),AudioPlayer.play("Game Over");var e="GAME OVER
";e+="
",body.className="Night",body.innerHTML=e,window.gamecount=1/0,clearPlayerStats(),setTimeout(gameRestart,7e3)}function gameRestart(){seedlast=.007,body.style.visibility="hidden",body.innerHTML=body.style.paddingTop=body.style.fontSize="",body.appendChild(canvas),gameon=!0,map.random?setMapRandom():setMap(1,1),TimeHandler.addEvent((function(){body.style.visibility=""})),setLives(3)}function Floor(e,t,n){e.width=8*(t||1),e.height=8*n||unitsizet32,e.spritewidth=8,e.spriteheight=8,e.repeat=!0,setSolid(e,"floor")}function Clouds(e,t){e.width=8*t,e.height=8,setSolid(e,"clouds")}function Brick(e,t){if(e.width=e.height=8,e.used=!1,e.bottomBump=brickBump,t)if(t instanceof Array)for(e.contents=t;e.contents.length<3;)e.contents.push(!1);else e.contents=[t,!1,!1];else e.contents=!1;e.death=killNormal,setSolid(e,"brick unused"),e.tolx=1}function brickBump(e,t){if(!e.up&&"player"==t.type&&(AudioPlayer.play("Bump"),!e.used)){if(e.up=t,t.power>1&&!e.contents)return TimeHandler.addEvent(brickBreak,2,e,t);blockBumpMovement(e),e.contents&&(player.power>1&&e.contents[0]==Mushroom&&!e.contents[1]&&(e.contents[0]=FireFlower),TimeHandler.addEvent((function(e){var t=e.contents,n=new Thing(t[0],t[1],t[2]);addThing(n,e.left,e.top),setMidXObj(n,e,!0),n.blockparent=e,n.animate(n,e),e.contents[0]==Coin?(e.lastcoin&&makeUsedBlock(e),TimeHandler.addEvent((function(e){e.lastcoin=!0}),245,e)):makeUsedBlock(e)}),7,e))}}function makeUsedBlock(e){e.used=!0,switchClass(e,"unused","used")}function brickBreak(e,t){AudioPlayer.play("Break Block"),score(e,50),e.up=t,TimeHandler.addEvent(placeShards,1,e),killNormal(e)}function placeShards(e){for(var t,n=0;n<4;++n)addThing(t=new Thing(BrickShard),e.left+(n<2)*e.width*unitsize-unitsizet2,e.top+n%2*e.height*unitsize-unitsizet2),t.xvel=unitsized2-unitsize*(n>1),t.yvel=-1.4*unitsize+n%2,TimeHandler.addEvent(killNormal,350,t)}function BrickShard(e){e.width=e.height=4,e.nocollide=!0,e.death=killNormal,setCharacter(e,"brickshard"),TimeHandler.addSpriteCycle(e,[unflipHoriz,flipHoriz])}function attachEmerge(e,t){e.animate=setInterval((function(){setBottom(e,t.top,!0),t.up||(clearInterval(e.animate),e.animate=!1)}),timer)}function Block(e,t,n){if(e.width=e.height=8,e.used=!1,e.bottomBump=blockBump,t)if(t instanceof Array)for(e.contents=t;e.contents.length<3;)e.contents.push(!1);else e.contents=[t,!1,!1];else e.contents=[Coin];e.death=killNormal,setSolid(e,"Block unused"),e.hidden=!!n&&(e.hidden=e.skipoverlaps=!0),e.tolx=1,TimeHandler.addSpriteCycleSynched(e,["one","two","three","two","one"])}function blockBump(e,t){"player"==t.type&&(e.used?AudioPlayer.play("Bump"):(e.used=1,e.hidden=e.hidden=e.skipoverlaps=!1,e.up=t,blockBumpMovement(e),removeClass(e,"hidden"),switchClass(e,"unused","used"),player.power>1&&e.contents[0]==Mushroom&&!e.contents[1]&&(e.contents[0]=FireFlower),TimeHandler.addEvent(blockContentsEmerge,7,e)))}function blockContentsEmerge(e){var t=new Thing(e.contents[0],e.contents[1],e.contents[2]);addThing(t,e.left,e.top),setMidXObj(t,e,!0),t.blockparent=e,t.animate(t,e)}function Pipe(e,t,n){e.width=e.spritewidth=16,e.height=8*(t||1),!1!==n&&(e.actionTop=intoPipeVert,e.transport=n),setSolid(e,"pipe")}function PipeSide(e,t,n){e.width=e.spritewidth=n?8:19.5,e.height=e.spriteheight=16,t&&(e.actionLeft=intoPipeHoriz,e.transport=t),setSolid(e,"pipe side "+(n?"small":""))}function PipeVertical(e,t){e.spritewidth=e.width=16,e.spriteheight=e.repeat=1,e.height=t,setSolid(e,"pipe vertical")}function Vine(e,t){e.width=e.spriteheight=7,e.height=0,e.locnum=t,e.nocollide=e.nofall=e.repeat=!0,e.animate=vineEmerge,e.movement=vineMovement,setCharacter(e,"vine")}function vineEmerge(e,t){AudioPlayer.play("Vine Emerging"),setHeight(e,0),e.movement=vineMovement,TimeHandler.addEvent(vineEnable,14,e),TimeHandler.addEventInterval(vineStay,1,14,e,t)}function vineStay(e,t){setBottom(e,t.top)}function vineEnable(e){e.nocollide=!1,e.collide=touchVine}function vineMovement(e){increaseHeightTop(e,unitsized4),e.attached&&shiftVert(e.attached,-unitsized4,!0)}function touchVine(e,t){!e.player||e.attached||e.climbing||e.bottom>t.bottom+unitsizet2||(t.attached=e,e.attached=t,e.nofall=e.skipoverlaps=!0,e.xvel=e.yvel=e.resting=e.jumping=e.jumpcount=e.running=0,e.attachleft=!objectToLeft(e,t),e.attachoff=2*e.attachleft-1,e.movementsave=e.movement,e.movement=movePlayerVine,e.keys=new Keys,TimeHandler.clearClassCycle(e,"running"),removeClass(e,"running skidding"),unflipHoriz(e),e.attachleft&&flipHoriz(e),addClass(e,"climbing"),e.climbing=TimeHandler.addSpriteCycle(e,["one","two"],"climbing"),lookTowardThing(e,t),e.attachleft?setLeft(e,t.right-unitsizet4):setRight(e,t.left+unitsizet4))}function Springboard(e){e.width=8,e.height=e.heightnorm=14.5,e.tension=e.tensionsave=0,e.dir=1,e.collide=collideSpring,setSolid(e,"springboard")}function collideSpring(e,t){return e.yvel>=0&&e.player&&!t.tension&&characterOnSolid(e,t)?springPlayerInit(t,e):characterTouchedSolid(e,t)}function springPlayerInit(e,t){e.tension=e.tensionsave=max(.77*t.yvel,unitsize),t.movement=movePlayerSpringDown,t.spring=e,t.xvel/=2.8}function movePlayerSpringDown(e){return objectsTouch(e,e.spring)?e.spring.height<2.5*unitsize||e.spring.tensione.spring.right-unitsizet2)&&(e.xvel/=1.4),reduceSpringHeight(e.spring,e.spring.tension),setBottom(e,e.spring.top,!0),e.spring.tension/=2,void updateSize(e.spring)):(e.movement=movePlayer,e.spring.movement=moveSpringUp,void(e.spring=!1))}function movePlayerSpringUp(e){if(!e.spring||!objectsTouch(e,e.spring))return e.spring=!1,void(e.movement=movePlayer)}function moveSpringUp(e){reduceSpringHeight(e,-e.tension),e.tension*=2,e==player.spring&&setBottom(player,e.top,!0),e.height>e.heightnorm&&(e==player.spring&&(player.yvel=max(-unitsizet2,-.98*e.tensionsave),player.resting=player.spring=!1),reduceSpringHeight(e,(e.height-e.heightnorm)*unitsize),e.tension=e.tensionsave=e.movement=!1)}function reduceSpringHeight(e,t){reduceHeight(e,t,!0)}function Stone(e,t,n){e.width=8*t||8,e.height=8*n||8,e.repeat=!0,setSolid(e,"Stone")}function GenericStone(e,t,n){return Stone(e,t,n)}function RestingStone(e){e.width=e.height=8,e.used=!1,e.movement=RestingStoneUnused,setSolid(e,"Stone hidden"),e.title="Stone"}function RestingStoneUnused(e){if(player.resting){if(player.resting!=e)return killNormal(e);e.movement=RestingStoneUsed,removeClass(e,"hidden"),setThingSprite(player)}}function RestingStoneUsed(e){if(!player.resting)return killNormal(e)}function CastleBlock(e,t,n){e.width=e.height=8;var x,r,i=!1;t instanceof Array?(x=t[0],r=t[1],i=n):(x=t,r=n),setSolid(e,i?"castleblockinvis":"castleblock"),x&&(e.balls=new Array(x),e.dt=.07*(r?1:-1),e.timeout=round(7/(abs(r)||1)),e.movement=castleBlockSpawn,e.timer=e.counter=0,e.angle=.25,e.spawn_as_char=!0)}function castleBlockSpawn(e){for(var t=0;tn.bottom-unitsize||(killNormal(n),killNormal(t),notime=nokeys=!0,thingStoreVelocity(e),killOtherCharacters(),TimeHandler.addEvent(killNormal,7,n.chain),TimeHandler.addEvent(CastleAxeKillsBridge,14,n.bridge,n),AudioPlayer.pauseTheme(),AudioPlayer.playTheme("World Clear",!1,!1))}function CastleAxeKillsBridge(e,t){e.width-=2,e.right-=unitsizet2,e.width>0?TimeHandler.addEvent(CastleAxeKillsBridge,1,e,t):(e.width=0,TimeHandler.addEvent(CastleAxeKillsBowser,1,t.bowser)),setWidth(e,e.width)}function CastleAxeKillsBowser(e){e.nofall=!1,e.nothrow=!0,++player.star,TimeHandler.addEvent(CastleAxeContinues,35,player)}function CastleAxeContinues(e){map.canscroll=!0,startWalking(e)}function Toad(e){e.width=16,e.height=e.spriteheight=12,e.group="toad",setSolid(e,"toad npc")}function Peach(e){e.width=16,e.height=e.spriteheight=12,e.group="peach",setSolid(e,"peach npc")}function collideCastleNPC(e,t){killNormal(t),e.keys.run=0,TimeHandler.addEvent((function(e){var t;for(t=0;te.parent.bottom?(setTop(e,e.parent.top),detachPlayer(e)):movePlatformNorm(e)}function movePlatformNorm(e){shiftHoriz(e,e.xvel),shiftVert(e,e.yvel),e==player.resting&&e.alive&&(setBottom(player,e.top),shiftHoriz(player,e.xvel),player.right>innerWidth&&setRight(player,innerWidth))}function detachPlayer(e){player.resting==e&&(player.resting=!1)}function Scale(e,t,n){e.height=5,e.width=4*t,e.spritewidth=e.spriteheight=5,e.repeat=e.nocollide=!0,setSolid(e,"scale")}function Flag(e){e.width=e.height=8,e.nocollide=!0,setSolid(e,"flag")}function FlagPole(e){e.width=1,e.height=72,e.nocollide=e.repeat=!0,setSolid(e,"flagpole")}function FlagTop(e){e.spritewidth=e.spriteheight=e.width=e.height=4,e.nocollide=!0,setSolid(e,"flagtop")}function FlagDetector(e){e.width=2,e.height=100,e.collide=FlagCollision,setSolid(e,"flagdetector"),e.hidden=!0}function CastleDoorDetector(e){e.width=e.height=4,e.collide=endLevelPoints,setSolid(e,"castledoor"),e.hidden=!0}function FlagCollision(e,t){if(!e||!e.player)return killNormal(e);window.detector=t,AudioPlayer.pause(),AudioPlayer.play("Flagpole"),killOtherCharacters(),nokeys=notime=player.nofall=1,player.xvel=player.yvel=player.keys.up=player.keys.jump=map.canscroll=map.ending=player.movement=0,player.nocollidechar=!0,setRight(e,t.pole.left,!0),removeClasses(e,"running jumping skidding"),addClass(e,"climbing animated"),updateSize(e),TimeHandler.addSpriteCycle(e,["one","two"],"climbing"),playerRemoveStar(player);var n=!1,x=!1,r=(t.stone.top-e.bottom)/unitsize,i=setInterval((function(){n||(e.bottom>=t.stone.top?(scorePlayerFlag(r,t.stone),n=!0,setBottom(e,t.stone.top,!0),removeClass(player,"animated"),TimeHandler.clearClassCycle(player,"climbing")):shiftVert(e,unitsize,!0)),x||(t.flag.bottom>=t.stone.top?(x=!0,setBottom(t.flag,t.stone.top,!0)):shiftVert(t.flag,unitsize,!0)),n&&x&&(setBottom(e,t.stone.top,!0),clearInterval(i),setTimeout((function(){FlagOff(e,t.pole)}),21*timer)),refillCanvas()}),timer)}function scorePlayerFlag(e,t){var n;n=e<28?e<8?100:400:e<40?800:e<62?2e3:5e3,score(player,n,!0)}function FlagOff(e,t){player.keys.run=notime=nokeys=1,player.maxspeed=player.walkspeed,flipHoriz(e),TimeHandler.clearClassCycle(e,"climbing"),setLeft(e,t.right,!0),setTimeout((function(){AudioPlayer.play("Stage Clear"),playerHopsOff(e,t,!0)}),14*timer)}function endLevelPoints(e,t){if(e&&e.player){notime=nokeys=!0,killNormal(t),killNormal(e);var n=parseInt(getLast(String(data.time.amount)));1!=n&&3!=n&&6!=n&&(n=0);var x=setInterval((function(){--data.time.amount,data.score.amount+=50,updateDataElement(data.score),updateDataElement(data.time),AudioPlayer.play("Coin"),data.time.amount<=0&&(clearInterval(x),setTimeout((function(){endLevelFireworks(e,n,t)}),49*timer))}),timer)}}function endLevelFireworks(e,t,n){var x,r,i=0;if(t){for(var a=n.left+32*unitsized2;igamescreen.right-gamescreen.left)&&e.section.activated){var t=e.section;t.numpass=t.colliders.length=0,t.passed?(++map.area.sections.current,e.next(e.xloc)):t(e.xloc),t.activated=t.passed=!1,spawnMap(),killNormal(e)}},setSolid(e,"decider blue "+n),e.hidden=!0}function FuncCollider(e,t,n){n?(e.width=n[0],e.height=n[1]):(e.width=8,e.height=ceilmax+40),e.collide=t,e.hidden=!0,setSolid(e,"funccollider blue "+t.name)}function FuncSpawner(e,t,n){e.width=8,e.height=8,e.movement=function(){t(e,n)},e.argument=n,e.nocollide=e.hidden=!0,setSolid(e,"funccollider blue "+t.name)}function Collider(e,t,n){e.width=t[0],e.height=t[1],n instanceof Array?(e.func=n[0]||function(){},e.movement=n[1]||function(){}):(e.func=n||function(){},e.movement=!1),e.collide=function(e,t){if(!e.player)return!1;t.func(e,t)},setSolid(e,"collider blue "+e.func.name),e.hidden=!0}function TonedJS(e){var t={giveSup:function(e,t){for(var n in t=t||{},e)t[n]=e[n];return t},giveSub:function(e,t){for(var n in t=t||{},e)t.hasOwnProperty(n)||(t[n]=e[n]);return t},proliferate:function(e,t,n){var x,r;for(r in t)n&&e.hasOwnProperty(r)||("object"==typeof(x=t[r])&&null!=x?(e.hasOwnProperty(r)||(e[r]=x instanceof Array?[]:{}),proliferate(e[r],x,n)):e[r]=x);return e},getFirst:function(e,t){for(var n in e)return t?n:e[n]},getLast:function(e,t){for(var n in e);return t?n:e[n]},followPath:function(e,t,n){return null!=t[n]&&null!=e[t[n]]?followPath(e[t[n]],t,++n):e},createElement:function(e){for(var t=document.createElement(e||"div"),n=arguments.length;--n>0;)proliferate(t,arguments[n]);return t},classAdd:function(e,t){e.className+=" "+t},classRemove:function(e,t){e.className=e.className.replace(new RegExp(" "+t,"gm"),"")},elementSetPosition:function(e,t,n){null==t&&(t=e.left),null==n&&(n=e.top),proliferate(e,{left:t,top:n,style:{marginLeft:t+"px",marginTop:n+"px"}})},elementShiftLeft:function(e,t){e.left||(e.left=Number(e.style.marginLeft.replace("px",""))),e.style.marginLeft=round(e.left+=t)+"px"},elementShiftTop:function(e,t){e.top||(e.top=Number(e.style.marginLeft.replace("px",""))),e.style.marginTop=round(e.top+=t)+"px"},removeChildSafe:function(e,t){e&&(t=t||document.body).contains(e)&&t.removeChild(e)},findParentOfType:function(e,t){var n=e.parentElement;return n&&n.nodeName!=t?findParentType(n,t):n},clearAllTimeouts:function(){for(var e=setTimeout((function(){}));e--;)clearTimeout(e)},stringTrim:function(e){return e.replace(/^\s+|\s+$/g,"")},stringOf:function(e,t){return 0==t?"":new Array(1+(t||1)).join(e)},stringHas:function(e,t){return-1!=e.indexOf(t)},stringHasI:function(e,t){return-1!=e.toLowerCase().indexOf(t.toLowerCase())},capitalizeFirst:function(e,t){return t=t||1,e.substr(0,t).toUpperCase()+e.substr(t).toLowerCase()},ArrayD:function(e){if(1==arguments.length)return new Array(e);var t,n=arrayMake(arguments),x=new Array(e);for(n.shift(),t=e-1;t>=0;--t)x[t]=ArrayD.apply(this,n);return x},arrayOf:function(e,t){t=t||1;for(var n=new Array(t);t--;)n[t]=e;return n},arrayMake:function(e){return Array.prototype.slice.call(e)},arrayRange:function(e,t){for(var n=1+t-e,x=new Array(n),r=e,i=0;i0},log:console.log.bind(console),now:Date.now};return e&&t.giveSub(t,window),t}function resetTriggers(){window.controls=new Controls({left:[37,65,"AXIS_LEFT","DPAD_LEFT"],right:[39,68,"AXIS_RIGHT","DPAD_RIGHT"],up:[38,87,32,"FACE_1","DPAD_UP","LEFT_BOTTOM_SHOULDER"],down:[40,83,"AXIS_DOWN","DPAD_DOWN"],sprint:[16,17,"FACE_1"],pause:[80,"START_FORWARD"],mute:[77],q:[81],l:[76]}),window.gamepad=new Gamepad,gamepad.bind(Gamepad.Event.BUTTON_DOWN,ControlsPipe("keydown",!0)),gamepad.bind(Gamepad.Event.BUTTON_UP,ControlsPipe("keyup",!1)),gamepad.bind(Gamepad.Event.AXIS_CHANGED,(function(e){var t=e.value,n=abs(t);if(!(n<.1))switch(e.axis){case"LEFT_STICK_Y":case"RIGHT_STICK_Y":n>.5?keydown(t>0?"DPAD_DOWN":"DPAD_UP"):(keyup("DPAD_UP"),keyup("DPAD_DOWN"));break;case"LEFT_STICK_X":case"RIGHT_STICK_X":n>.5?keydown(t<0?"DPAD_LEFT":"DPAD_RIGHT"):(keyup("DPAD_UP"),keyup("DPAD_DOWN"))}})),gamepad.init(),proliferate(body,{onkeydown:ControlsPipe("keydown",!0),onkeyup:ControlsPipe("keyup",!1),oncontextmenu:contextmenu,onmousedown:mousedown}),setMessageTriggers()}function Controls(e,t){this.pipes=e;var n,x,r,i,a=this.keydown={left:function(e){e.run=-1,e.left_down=!0},right:function(e){e.run=1,e.right_down=!0},up:function(e){e.up=!0,player.canjump&&(player.resting||map.underwater)&&(e.jump=1,player.canjump=e.jumplev=0,AudioPlayer.play(player.power>1?"Jump Super":"Jump Small"),map.underwater&&setTimeout((function(){player.jumping=e.jump=!1}),14*timer))},down:function(e){e.crouch=!0},sprint:function(e){3!=player.power||0!=e.sprint||e.crouch||player.fire(),e.sprint=1},pause:function(e){paused||window.editing&&!editor.playing||setTimeout((function(){pause(!0)}),140)},mute:function(e){AudioPlayer.toggleMute()},q:function(e){switch(++qcount>28&&maxlulz(),qcount){case 7:lulz();break;case 14:superlulz();break;case 21:hyperlulz()}},l:function(e){toggleLuigi()}},o=this.keyup={left:function(e){e.run=0,e.left_down=!1},right:function(e){e.run=0,e.right_down=!1},up:function(e){map.underwater||(e.jump=e.up=0),player.canjump=!0},down:function(e){e.crouch=0,removeCrouch()},sprint:function(e){e.sprint=0},pause:function(e){unpause(!0)}};for(n in e)for(i in x=e[n])a[r=x[i]]=a[n],o[r]=o[n]}function ControlsPipe(e,t){var n=controls[e];return function(x){t&&(player&&player.dead||window.paused)||window.nokeys||(("number"!=typeof x||x.which||x.control)&&(x=x.which||x.control),n[x]?n[x](player.keys):mlog(e,"Could not",e,x),window.gamehistory[gamecount]=[keydown,x])}}function keydown(e){if(!(player&&player.dead||window.paused||window.nokeys)){var t=controls.keydown;("object"==typeof e||e.which)&&(e=e.which),t[e]&&t[e](player.keys),window.gamehistory[gamecount]=[keydown,e]}}function keyup(e){if(!window.nokeys){var t=controls.keyup;("object"==typeof e||e.which)&&(e=e.which),t[e]&&t[e](player.keys),window.gamehistory[gamecount]=[keyup,e]}}function contextmenu(e){e.preventDefault&&e.preventDefault()}function mousedown(e){3==e.which&&(paused?unpause():window.editor&&(editing||editor.playing)||pause(!0),e.preventDefault&&e.preventDefault())}function scriptKeys(e){var t,n;for(t in e)n=e[t],TimeHandler.addEvent(n[0],t,n[1]),TimeHandler.addEvent((function(){alert(n[0].name+", "+n[1])}),t)}function lulz(e,t){player.star=!0,e=e||[Goomba],t=t||7,TimeHandler.addEventInterval((function(){if(!(characters.length>210)){var t=new Thing(e[randInt(e.length)],randBoolJS(),randBoolJS());t.yvel=random()*-unitsizet4,t.xvel=t.speed=random()*unitsizet2*randSign(),addThing(t,(32*random()+128)*unitsize,88*random()*unitsize)}}),t,1/0)}function superlulz(){lulz([Goomba,Koopa,Beetle,HammerBro,Lakitu,Podoboo,Blooper])}function hyperlulz(){lulz([Bowser],21)}function maxlulz(){TimeHandler.addEventInterval((function(e){setAreaSetting(e[randInt(e.length)])}),7,1/0,["Overworld","Underworld","Underwater","Sky","Castle"])}function mapKeyToControl(e,t){if(-1==window.controls.pipes[e].indexOf(t)){window.controls.pipes[e].push(t);var n=window.controls.pipes;window.controls=new Controls(n),proliferate(body,{onkeydown:ControlsPipe("keydown",!0),onkeyup:ControlsPipe("keyup",!1),oncontextmenu:contextmenu,onmousedown:mousedown})}}function setMessageTriggers(){var e={setMap:triggerSetMap,startEditor:function(){loadEditor()},toggleOption:function(e){var t="toggle"+e.option;console.log(t,window[t]),window[t]?window[t]():log("Could not toggle",t)},setKey:function(e){mapKeyToControl(e.action,e.keyCode)}};window.addEventListener("message",(function(t){var n=t.data,x=n.type;e[x]?e[x](n):console.log("Unknown event type received:",x,".\n",n)}))}function triggerSetMap(e){clearPlayerStats(),setMap.apply(this,e.map||[]),setLives(3)}function upkeep(){if(!window.paused){window.nextupk=setTimeout(upkeep,timer);for(var e=window.speed;e>0;--e)adjustFPS(),QuadsKeeper.determineAllQuadrants(solids),maintainSolids(),maintainCharacters(),maintainPlayer(),texts.length&&maintainTexts(),TimeHandler.handleEvents(),refillCanvas()}}function adjustFPS(){window.time_now=now();var e=time_now-time_prev,t=roundDigit(1e3/e,.001);window.fps=roundDigit(.7*fps+.3*t,.01),window.realtime=fps_target/fps,window.time_prev=time_now}function pause(e){paused&&!window.nextupk||(cancelAnimationFrame(nextupk),AudioPlayer.pause(),paused=!0,e&&AudioPlayer.play("Pause"))}function unpause(){paused&&(window.nextupk=requestAnimationFrame(upkeep),paused=!1,AudioPlayer.resume())}function maintainSolids(e){for(var t,n=0;nx)||t.outerok?!t.nomove&&t.movement&&t.movement(t):deleteThing(t,characters,n):map.shifting||deleteThing(t,characters,n)}function maintainPlayer(e){if(player.alive){if(player.yvel>0&&(map.underwater||(player.keys.jump=0),player.jumping||(map.underwater?player.paddling||(switchClass(player,"paddling","paddling"),player.padding=!0):(addClass(player,"jumping"),player.jumping=!0)),!player.piping&&!player.dying&&player.top>gamescreen.deathheight)){if(map.exitloc)return map.random?(goToTransport(["Random","Overworld","Down"]),void playerDropsIn()):shiftToLocation(map.exitloc);clearPlayerStats(),killPlayer(player,2)}player.xvel>0?player.right>gamescreen.middlex&&player.right>gamescreen.right-gamescreen.left&&(player.xvel=min(0,player.xvel)):player.left<0&&(player.xvel=max(0,player.xvel)),player.under&&(player.jumpcount=0),window.scrolloffset=map.canscroll*(player.right-gamescreen.middlex),scrolloffset>0&&!map.shifting?scrollWindow(lastscroll=round(min(player.scrollspeed,scrolloffset))):lastscroll=0}}function maintainTexts(){var e,t,n;for(n=texts.length-1;n>=0;--n)e=(t=texts[n]).element||t,t.xvel&&elementShiftLeft(e,t.xvel),t.yvel&&elementShiftTop(e,t.yvel)}function followPath(e,t,n){return null!=t[n]&&null!=e[t[n]]?followPath(e[t[n]],t,++n):e}function clearAllTimeouts(){for(var e=setTimeout((function(){}));e--;)clearTimeout(e)}function getCanvas(e,t,n){var x=createElement("canvas",{width:e,height:t});return n&&(n=n||unitsize,proliferate(x.style,{width:e*n+"px",height:t*n+"px"})),x.getContext("2d").webkitImageSmoothingEnabled=!1,x}function step(e){unpause(),upkeep(),pause(),e>0&&step(e-1)}function fastforward(e){window.speed=max(0,parseInt(e||0))+1}function toggleFastFWD(e){window.fastforwarding?(fastforward(0),window.fastforwarding=!1):(fastforward(2),window.fastforwarding=!0)}function specifyTimer(e){timer=e,requestAnimationFrame=function(e){window.setTimeout(e,timer)}}function changeUnitsize(e){function t(e){for(i in e)updateSize(e[i]),updatePosition(e[i])}e&&(resetUnitsize(e),t(solids),t(characters))}function randTrue(e){return floor(getSeed()*((e||1)+1))}function randSign(e){return 2*randTrue(e)-1}function randBoolJS(e){return floor(2*random())}function updatePosition(e){e.nomove||shiftHoriz(e,e.xvel),e.nofall||shiftVert(e,e.yvel)}function updateSize(e){var t;e.unitwidth=e.width*unitsize,e.unitheight=e.height*unitsize,e.spritewidthpixels=e.spritewidth*unitsize,e.spriteheightpixels=e.spriteheight*unitsize,(t=e.canvas)&&(t.width=e.spritewidthpixels,t.height=e.spriteheightpixels,refillThingCanvas(e))}function reduceHeight(e,t,n){e.top+=t,e.height-=t/unitsize,n&&updateSize(e)}function shiftBoth(e,t,n){e.noshiftx||shiftHoriz(e,t),e.noshifty||shiftVert(e,n)}function shiftHoriz(e,t){e.left+=t,e.right+=t}function shiftVert(e,t){e.top+=t,e.bottom+=t}function setLeft(e,t){e.left=t,e.right=e.left+e.width*unitsize}function setRight(e,t){e.right=t,e.left=e.right-e.width*unitsize}function setTop(e,t){e.top=t,e.bottom=e.top+e.height*unitsize}function setBottom(e,t){e.bottom=t,e.top=e.bottom-e.height*unitsize}function setWidth(e,t,n,x){e.width=t,e.unitwidth=t*unitsize,n&&(e.spritewidth=t,e.spritewidthpixels=t*unitsize),x&&(updateSize(e),setThingSprite(e))}function setHeight(e,t,n,x){e.height=t,e.unitheight=t*unitsize,n&&(e.spriteheight=t,e.spriteheightpixels=t*unitsize),x&&(updateSize(e),setThingSprite(e))}function setSize(e,t,n,x,r){t&&setWidth(e,t,x),n&&setHeight(e,n,x),r&&(updateSize(e),setThingSprite(e))}function setMidX(e,t,n){setLeft(e,t+e.width*unitsized2,n)}function getMidX(e){return e.left+e.width*unitsized2}function setMidY(e,t,n){setTop(e,t+e.height*unitsized2,n)}function setMidXObj(e,t,n){setLeft(e,t.left+t.width*unitsized2-e.width*unitsized2,n)}function slideToXLoc(e,t,n,x){n=n||1/0;var r=getMidX(e);shiftHoriz(e,r=e.ocheck.right-unitsizet2?(e.overlapdir=0,e.overlaps=[]):shiftHoriz(e,e.overlapdir,!0);else if(e.overlaps.length>0){var t,n,x=e.overlaps,r={right:-1/0},i={left:1/0},a=0;for(n in e.overlapfix=!0,x)a+=getMidX(t=x[n]),t.right>r.right&&(r=t),t.left=a-unitsized16?(e.overlapdir=unitsize,e.ocheck=r):(e.overlapdir=-unitsize,e.ocheck=i)}}function characterOverlapsSolid(e,t){return e.top<=t.top&&e.bottom>t.bottom}function objectsTouch(e,t){return e.right-unitsize>t.left&&e.left+unitsize=t.top&&e.top<=t.bottom}function charactersTouch(e,t){return!(e.bottom<=t.top+unitsizet2||e.top+unitsizet2>=t.bottom)}function objectInQuadrant(e,t){return e.right+unitsize>=t.left&&e.left-unitsize<=t.right&&e.bottom+unitsize>=t.top&&e.top-unitsize<=t.bottom}function objectsCollided(e,t){return e.solid&&!t.solid?objectsCollided(t,e):t.up&&e!=t.up?characterTouchesUp(e,t):void(t.solid||e.player?t.collide(e,t):e.collide(t,e))}function objectToLeft(e,t){return(e.left+e.right)/2<(t.left+t.right)/2}function objectOnTop(e,t){return!("solid"==e.type&&t.yvel>0)&&(!(e.yvelt.left&&(e.bottom-t.yvel<=t.top+t.toly||e.bottom<=t.top+t.toly+abs(e.yvel-t.yvel))))}function objectOnSolid(e,t){return e.left+unitsizet.left&&(e.bottom-e.yvel<=t.top+t.toly||e.bottom<=t.top+t.toly+abs(e.yvel-t.yvel))}function solidOnCharacter(e,t){return!(t.yvel>=0)&&(t.midx=getMidX(t),t.midx>e.left&&t.midx=0&&e.left+e.xvel+unitsize!=t.right&&e.right-e.xvel-unitsize!=t.left}function characterOnResting(e,t){return objectOnSolid(e,t)&&e.left+e.xvel+unitsize!=t.right&&e.right-e.xvel-unitsize!=t.left}function characterTouchedSolid(e,t){if(t.up!=e){if(characterOnSolid(e,t)){if(t.hidden)return;e.resting=t,e.player&&map.underwater&&removeClass(e,"paddling")}else if(solidOnCharacter(t,e)){var n=e.left+e.width*unitsize/2;if(n>t.left&&n=t.left&&(e.xvel=max(e.xvel,0),shiftHoriz(e,min(t.right-unitsize-e.left,unitsized2),!0)),e.player?t.actionLeft&&t.actionLeft(e,t,t.transport):(e.moveleft=!e.moveleft,"item"==e.group&&e.collide(t,e)))}}function characterNotBumping(e,t){return e.top+e.toly+abs(e.yvel)>t.bottom}function characterTouchesUp(e,t){switch(e.group){case"item":e.moveleft=getMidX(e)<=getMidX(t)+unitsized2,characterHops(e);break;case"coin":e.animate(e);break;default:e.death(e,2),scoreEnemyBelow(e)}}function characterHops(e){e.yvel=-1.4*unitsize,e.resting=!1}function characterIsAlive(e){return!(!e||e.dead||!e.alive)}function scorePlayerShell(e,t){return e.star?score(t,200,!0):t.resting?t.peeking?score(t,1e3,!0):score(t,100,!0):score(t,8e3,!0)}function scoreEnemyStomp(e){switch(e.type.split(" ")[0]){case"koopa":e.fly?400:100;break;case"bulletbill":case"cheepcheep":200;break;case"hammerbro":1e3;break;case"lakitu":800;break;default:100}}function scoreEnemyFire(e){var t=200;switch(e.type.split(" ")[0]){case"goomba":t=100;break;case"hammerbro":t=1e3;break;case"bowser":t=5e3;break;default:t=200}scoreEnemyFin(e,t)}function scoreEnemyStar(e){var t=200;switch(e.type.split(" ")[0]){case"goomba":t=100;break;case"hammerbro":t=1e3;break;default:t=200}scoreEnemyFin(e,t),AudioPlayer.play("Kick")}function scoreEnemyBelow(e){var t=100;switch(e.type.split(" ")[0]){case"hammerbro":t=1e3;break;default:t=100}scoreEnemyFin(e,t)}function scoreEnemyFin(e,t){score(e,t,!0)}function moveSimple(e){e.direction!=e.moveleft&&(e.moveleft?(e.xvel=-e.speed,e.noflip||unflipHoriz(e)):(e.noflip||flipHoriz(e),e.xvel=e.speed),e.direction=e.moveleft)}function moveSmart(e){moveSimple(e),0!=e.yvel||e.resting&&!offResting(e)||(e.moveleft?shiftHoriz(e,unitsize,!0):shiftHoriz(e,-unitsize,!0),e.moveleft=!e.moveleft)}function offResting(e){return e.moveleft?e.right-unitsizee.resting.right}function moveJumping(e){moveSimple(e),e.resting&&(e.yvel=-abs(e.jumpheight),e.resting=!1)}function moveFloating(e){setPlatformEndpoints(e),e.begin=map.floor*unitsize-e.begin,e.end=map.floor*unitsize-e.end,(e.movement=moveFloatingReal)(e)}function moveFloatingReal(e){e.tope.begin&&(e.yvel=max(e.yvel-unitsized32,-e.maxvel)),movePlatformNorm(e)}function moveSliding(e){setPlatformEndpoints(e),(e.movement=moveSlidingReal)(e)}function moveSlidingReal(e){gamescreen.left+e.lefte.end&&(e.xvel=max(e.xvel-unitsized32,-e.maxvel)),movePlatformNorm(e)}function setPlatformEndpoints(e){if(e.begin>e.end){var t=e.begin;e.begin=e.end,e.end=t}}function collideTransport(e,t){characterTouchedSolid(e,t),t==e.resting&&(t.movement=movePlatformNorm,t.collide=characterTouchedSolid,t.xvel=unitsized2)}function moveFalling(e){if(e!=player.resting)return e.yvel=0;shiftVert(e,e.yvel+=unitsized8),setBottom(player,e.top),e.yvel>=2.8*unitsize&&(e.freefall=!0,e.movement=moveFreeFalling)}function moveFallingScale(e){player.resting==e?(shiftScaleStringVert(e,e.string,e.yvel+=unitsized16),shiftScaleStringVert(e.partner,e.partner.string,-e.yvel),e.tension+=e.yvel,e.partner.tension-=e.yvel):e.yvel>0&&(shiftScaleStringVert(e,e.string,e.yvel-=unitsized32),shiftScaleStringVert(e.partner,e.partner.string,-e.yvel),e.tension-=e.yvel,e.partner.tension+=e.yvel),e.partner.tension<=0&&(e.collide=e.partner.collide=characterTouchedSolid,e.movement=e.partner.movement=moveFreeFalling)}function moveFreeFalling(e){shiftVert(e,e.yvel+=unitsized16),e.yvel>unitsizet2&&(e.movement=function(e){shiftVert(e,e.yvel)})}function shiftScaleStringVert(e,t,n){shiftVert(e,n),t.bottom=e.top,t.height=(t.bottom-t.top)/unitsize,updateSize(t)}function setClass(e,t){e.className=t,setThingSprite(e)}function setClassInitial(e,t){e.className=t}function addClass(e,t){e.className+=" "+t,setThingSprite(e)}function removeClass(e,t){e.className=e.className.replace(new RegExp(" "+t,"gm"),""),setThingSprite(e)}function switchClass(e,t,n){removeClass(e,t),addClass(e,n)}function removeClasses(e){var t,n,x;for(n=1;n=0;--x)removeClass(e,t[x])}function addClasses(e,t){for(var n=t instanceof Array?t:t.split(" "),x=n.length-1;x>=0;--x)addClass(e,n[x])}function addElementClass(e,t){e.className+=" "+t}function removeElementClass(e,t){e.className=e.className.replace(new RegExp(" "+t,"gm"),"")}function flipHoriz(e){addClass(e,"flipped")}function flipVert(e){addClass(e,"flip-vert")}function unflipHoriz(e){removeClass(e,"flipped")}function unflipVert(e){removeClass(e,"flip-vert")}function deleteThing(e,t,n){t.splice(n,1),e.ondelete&&e.ondelete()}function switchContainers(e,t,n){t.splice(t.indexOf(e),1),n.push(e)}function containerForefront(e,t){t.splice(t.indexOf(e),1),t.unshift(e)}function killNormal(e){e&&(e.hidden=e.dead=!0,e.alive=e.resting=e.movement=!1,TimeHandler.clearAllCycles(e))}function killFlip(e,t){flipVert(e),e.bottomBump=function(){},e.nocollide=e.dead=!0,e.resting=e.movement=e.speed=e.xvel=e.nofall=!1,e.yvel=-unitsize,TimeHandler.addEvent((function(e){killNormal(e)}),70+(t||0))}function generalMovement(e,t,n,x){var r=setInterval((function(){shiftVert(e,n),shiftHoriz(e,t)}),timer);setTimeout((function(){clearInterval(r)}),x)}function blockBumpMovement(e){var t=-3,n=setInterval((function(){shiftVert(e,t),3.5==(t+=.5)&&(clearInterval(n),e.up=!1),determineThingCollisions(e)}),timer)}function emergeUp(e,t){AudioPlayer.play("Powerup Appears"),flipHoriz(e),e.nomove=e.nocollide=e.alive=e.nofall=e.emerging=!0,switchContainers(e,characters,scenery);var n=setInterval((function(){shiftVert(e,-unitsized8),e.bottom<=t.top&&(clearInterval(n),switchContainers(e,scenery,characters),e.nocollide=e.nomove=e.moveleft=e.nofall=e.emerging=!1,e.emergeOut&&e.emergeOut(e,t),e.movement&&(e.movementsave=e.movement,e.movement=moveSimple,e.moving=TimeHandler.addEventInterval((function(e,t){if(e.resting!=t)return TimeHandler.addEvent((function(e){e.movement=e.movementsave}),1,e),!0}),1,1/0,e,t)))}),timer)}function flicker(e,t,n){t=round(t)||49,n=round(n)||3;e.flickering=!0,TimeHandler.addEventInterval((function(e){e.hidden=!e.hidden}),n,t,e),TimeHandler.addEvent((function(e){e.flickering=e.hidden=!1}),t*n+1,e)}function killOtherCharacters(){var e,t;if(window.characters)for(t=characters.length-1;t>=0;--t)(e=characters[t]).nokillend?e.killonend&&e.killonend(e):deleteThing(e,characters,t);if(window.solids)for(t=solids.length-1;t>=0;--t)solids[t].killonend&&deleteThing(solids[t],solids,t)}function lookTowardPlayer(e,t){player.right<=e.left?e.lookleft&&!t||(e.lookleft=!0,e.moveleft=!1,unflipHoriz(e)):player.left>=e.right&&(e.lookleft||t)&&(e.lookleft=!1,e.moveleft=!0,flipHoriz(e))}function lookTowardThing(e,t){t.right<=e.left?(e.lookleft=!0,e.moveleft=!1,unflipHoriz(e)):t.left>=e.right&&(e.lookleft=!1,e.moveleft=!0,flipHoriz(e))}function playCurrentThemeHurry(e){AudioPlayer.playTheme("Hurry "+(e||area.theme))}!function(e){"use strict";var t=function(){},n={getType:function(){return"null"},isSupported:function(){return!1},update:t},x=function(e){var n=this,x=window;this.update=t,this.requestAnimationFrame=e||x.requestAnimationFrame||x.webkitRequestAnimationFrame||x.mozRequestAnimationFrame,this.tickFunction=function(){n.update(),n.startTicker()},this.startTicker=function(){n.requestAnimationFrame.apply(x,[n.tickFunction])}};x.prototype.start=function(e){this.update=e||t,this.startTicker()};var r=function(){};r.prototype.update=t,r.prototype.start=function(e){this.update=e||t};var i=function(e,t){this.listener=e,this.gamepadGetter=t,this.knownGamepads=[]};i.factory=function(e){var t=n,x=window&&window.navigator;return x&&(void 0!==x.webkitGamepads?t=new i(e,(function(){return x.webkitGamepads})):void 0!==x.webkitGetGamepads&&(t=new i(e,(function(){return x.webkitGetGamepads()})))),t},i.getType=function(){return"WebKit"},i.prototype.getType=function(){return i.getType()},i.prototype.isSupported=function(){return!0},i.prototype.update=function(){var e,t,n=this,x=Array.prototype.slice.call(this.gamepadGetter(),0);for(t=this.knownGamepads.length-1;t>=0;t--)e=this.knownGamepads[t],x.indexOf(e)<0&&(this.knownGamepads.splice(t,1),this.listener._disconnect(e));for(t=0;t.5,s=n>.5;e.state[r]=t,x&&!s?a._fire(o.Event.BUTTON_DOWN,Object.create(l)):!x&&s&&a._fire(o.Event.BUTTON_UP,Object.create(l)),0!==t&&1!==t&&t!==n&&a._fireAxisChangedEvent(e,r,t),e.lastState[r]=t},e.updater.push(x)},o.prototype._addAxisUpdater=function(e,t,n){var x,r=s(o.StandardAxes,n,"EXTRA_AXIS_"),i=this._createAxisGetter(e,t.axes,n),a=this;e.state[r]=0,e.lastState[r]=0,x=function(){var t=i(),n=e.lastState[r];e.state[r]=t,t!==n&&a._fireAxisChangedEvent(e,r,t),e.lastState[r]=t},e.updater.push(x)},o.prototype._fireAxisChangedEvent=function(e,t,n){var x={gamepad:e,axis:t,value:n};this._fire(o.Event.AXIS_CHANGED,x)},o.prototype._createButtonGetter=(l=function(){return 0},function(e,t,n){var x,r,i=l,a=this;return-1!==(x=t.byButton[n])?"number"==typeof x&&x1?0:1-r}),x}(i=function(){var t=e.axes[x[0]];return a._applyDeadzoneMaximize(t)},x[1],x[2]))),i}),o.prototype._createAxisGetter=function(){var e=function(){return 0};return function(t,n,x){var r,i=e,a=this;return-1!==(r=n.byAxis[x])&&"number"==typeof r&&r0&&this._fire(o.Event.TICK,this.gamepads)},o.prototype._applyDeadzoneMaximize=function(e,t,n){return t=void 0!==t?t:this.deadzone,n=void 0!==n?n:this.maximizeThreshold,e>=0?en&&(e=1):e>-t?e=0:e<-n&&(e=-1),e},e.Gamepad=o}("undefined"!=typeof module&&module.exports||window);var customMute=!0;function AudioPlayr(e){"use strict";var t,n,x,r,i,a,o,l,s,d,u=this.play=function(e){var n=x[e];if(!n){if(!(n=t[e]))return console.log("Unknown sound: '"+e+"'"),n;x[e]=n}return n.name_raw=e,c(n),n.volume=!i,customMute||n.play(),n.used++||n.addEventListener("ended",(function(){!function(e,t){x[t]&&delete x[t]}(0,e)})),n};function p(e){customMute||e.play()}function c(e){e&&e.pause&&(e.pause(),e.readyState&&(e.currentTime=0))}function m(e,t){var x,r,i=document.createElement("Audio");for(r in h(i,d),n)x=n[r],i.appendChild(h(document.createElement("Source"),{type:"audio/"+x,src:a+"/"+t+"/"+x+"/"+e+"."+x}));return customMute||i.play(),i}function h(e,t){var n,x;for(x in t)"object"==typeof(n=t[x])?(e[x]||(e[x]={}),h(e[x],n)):e[x]=n;return e}this.playLocal=function(e,t){var n,x=u(e);if(!x)return x;switch(l.constructor){case Function:n=l(t);break;case Number:n=l;break;default:n=Number(n)||1}return x.volume=x.volume_real=n=0,x},this.playTheme=function(e,t,n){if(n=void 0===n||n,!e)switch(s.constructor){case Function:e=s();break;case String:e=s}(i=r)&&(c(i),r=void 0,delete x[i.name_raw]);var i=r=u(e);return i.loop=n,t||(i.used=!1),1==i.used&&i.addEventListener("ended",this.playTheme),i},this.addEventListener=function(e,t,n){var r=x[e];r&&r.addEventListenever(t,n)},this.addEventImmediate=function(e,t,n){var r=x[e];r&&!r.paused?r.addEventListener(t,n):n()},this.toggleMute=function(){for(var e in i=!i,x)x[e].volume=i?0:x[e].volume_real||1;o&&(localStorage[o]=i)},this.pause=function(){for(var e in x)x[e]&&x[e].pause()},this.resume=function(){for(var e in x)x[e]&&!customMute&&p(x[e])},this.pauseTheme=function(){r&&r.pause()},this.resumeTheme=function(){r&&r.play()},this.clear=function(){this.pause(),x={},this.theme=void 0},this.getLibrary=function(){return t},this.getSounds=function(){return x},function(e){t=e.library||{},n=e.filetypes||["mp3","ogg"],i=e.muted||!1,a=e.directory||"",o=e.localStorageMuted||"",l=e.getVolumeLocal||1,s=e.getThemeDefault||"Theme";var r=e.soundSettings||{};d=e.soundSettings||{preload:r.preload||"auto",used:0,volume:0},x={},o&&(i=localStorage[o]),function(){var e,n,x,r;for(x in t)for(r in e=t[x])n=e[r],t[n]=m(n,x)}()}(e||{})}function TimeHandlr(e){"use strict";var t,n,x,r,i,a,o,l,s;this.getTime=function(){return t},this.getEvents=function(){return n};var d=this.addEvent=function(e,n){if(!(e instanceof Function))return console.warn("Attempting to add an event that isn't a function."),console.log(arguments),!1;n=n||1;var x=g(arguments);x.splice(0,2);var r={func:e,time_exec:t+n,time_repeat:n,args:x,repeat:1};return c(r,r.time_exec),r},u=this.addEventInterval=function(e,n,x){if(!(e instanceof Function))return console.warn("Attempting to add an event that isn't a function."),console.log(arguments),!1;n=n||1,x=x||1;var r=g(arguments);r.splice(0,3);var i={func:e,time_exec:t+n,time_repeat:n,args:r,repeat:x};return e.event=i,c(i,i.time_exec),i},p=this.addEventIntervalSynched=function(e,n,x,r,i){var a=n*i.length,o=w(t/a)*a,l=this,s=function(e,n,x){return x.startcount=t,u.apply(e,n)};if(n=n||1,x=x||1,o==t)return s(l,arguments,r);var p=o-t;d(s,p,l,arguments,r)};function c(e,t){return n[t]?(n[t].push(e),n[t]):n[t]=[e]}this.clearEvent=function(e){e&&(e.repeat=0)},this.clearAllEvents=function(){n={}};var m=this.clearClassCycle=function(e,t){if(e[x]&&e[x][t]){var n=e[x][t];n[0]=!1,n.length=!1,delete e[x][t]}};this.clearAllCycles=function(e){var t,n,x=e[x];for(t in x)(n=x[t])[0]=!1,n.length=1,delete x[t]},this.addSpriteCycle=function(e,t,n,r){e[x]||(e[x]={}),m(e,n);var i="function"==typeof r;n=n||0;var a=e[x][n]=h(e,t,i?0:r);return a.event&&i&&(a.event.count_changer=r),f(e,t),a},this.addSpriteCycleSynched=function(e,t,n,r){e[x]||(e[x]={}),m(e,n),n=n||0;var i=e[x][n]=h(e,t,r,!0);return f(e,t),i};function h(e,t,n,x){t.loc=t.oldclass=-1;var a=x?p:u;return e[r]=function(){a(f,n||o,1/0,e,t)},e[i]&&e[r](),t}function f(e,t){if(!e||!t||!t.length)return!0;if(null!=a&&!e[a])return!0;-1!=t.oldclass&&""!==t.oldclass&&s(e,t.oldclass),t.loc=++t.loc%t.length;var n=t[t.loc];if(n){var x=n instanceof Function?n(e,t):n;return"string"==typeof x?(t.oldclass=x,l(e,x),!1):!1===x}return!1===n}function g(e){return Array.prototype.slice.call(e)}function v(e,t){e.className+=" "+t}function y(e,t){e.className=e.className.replace(new RegExp(" "+t,"gm"),"")}this.handleEvents=function(){++t;var e=n[t];if(e){var x,r,i;for(i=0,r=e.length;i0&&!x.func.apply(this,x.args)&&(x.count_changer&&x.count_changer(x),x.repeat instanceof Function?x.repeat.bind(x)()&&(x.count+=x.time_repeat,c(x,x.time_exec)):--x.repeat>0&&(x.time_exec+=x.time_repeat,c(x,x.time_exec)));delete n[t]}};var w=Math.ceil;!function(e){t=e.time||0,n=e.events||{},x=e.cycles||"cycles",e.className||"className",r=e.onSpriteCycleStart||"onSpriteCycleStart",i=e.doSpriteCycleStart||"doSpriteCycleStart",a=e.cycleCheckValidity,o=e.timingDefault||7,l=e.addClass||window.addClass||v,s=e.removeClass||window.removeClass||y}(e||{})}function QuadsKeepr(e){"use strict";var t,n,x,r,i,a,o,l,s,d,u,p,c,m,h,f,g,v,y,w,T,S;this.getQuadrants=function(){return t},this.getNumQuads=function(){return x},this.getNumRows=function(){return r},this.getNumCols=function(){return i},this.getQuadWidth=function(){return l},this.getQuadHeight=function(){return s},this.getDelX=function(){return u},this.getOutDifference=function(){return p};var P=this.resetQuadrants=function(){t.length=0,n.length=0;for(var e=0;ee[w]))return};function B(e,t,n){e[T][e[y]]=t,++e[y],t.things[t.numthings]=e,++t.numthings}function A(e,t){return e[g]+d>=t.left&&e[h]-d<=t.right&&e[v]+d>=t.top&&e[f]-d<=t.bottom}!function(e){t=[],n=[],x=e.num_quads,r=e.num_rows,i=e.num_cols,x?(r&&(i=x/r),i&&(r=x/i)):(r||(r=2),i||(i=2),x=r*i),a=e.screen_width||640,o=e.screen_height||480,l=a/(i-3),s=o/(r-2),d=e.tolerance||0,u=e.delx||-2*l,p=l,h=e.thing_left||"left",g=e.thing_right||"right",f=e.thing_top||"top",v=e.thing_bottom||"bottom",y=e.thing_num_quads||"numquads",w=e.thing_max_quads||"maxquads",T=e.thing_quadrants||"quadrants",S=e.onUpdate,e.onCollide,P()}(e||{})}
\ No newline at end of file
+function applyNewJs() {
+ document.body.addEventListener("keydown", (function(e) {
+ 32 !== e.keyCode && 38 !== e.keyCode && 40 !== e.keyCode || e.target !== document.body || e.preventDefault()
+ }), !1), document.getElementById("paused") && document.getElementById("paused").remove(), document.getElementById("mobile-controls") && document.getElementById("mobile-controls").remove();
+ var e = createElement("div", {
+ id: "paused"
+ }),
+ t = createElement("span");
+ t.innerText = "CLICK TO UNPAUSE", e.appendChild(t), body.appendChild(e);
+ var n = createElement("div", {
+ id: "mobile-controls"
+ }),
+ x = createElement("div", {
+ id: "move-left",
+ className: "move"
+ }),
+ r = createElement("div", {
+ id: "move-top",
+ className: "move"
+ }),
+ i = createElement("div", {
+ id: "move-right",
+ className: "move"
+ }),
+ a = createElement("div", {
+ id: "move-bottom",
+ className: "move"
+ }),
+ o = createElement("div", {
+ id: "move-fire",
+ className: "move"
+ }),
+ l = createElement("span"),
+ s = createElement("span"),
+ d = createElement("span"),
+ u = createElement("span"),
+ p = createElement("span");
+ x.appendChild(l), r.appendChild(s), i.appendChild(d), a.appendChild(u), o.appendChild(p), n.appendChild(x), n.appendChild(r), n.appendChild(i), n.appendChild(a), n.appendChild(o), body.appendChild(n);
+ var c = document.getElementById("move-right"),
+ m = document.getElementById("move-left"),
+ h = document.getElementById("move-top"),
+ f = document.getElementById("move-bottom"),
+ g = document.getElementById("move-fire");
+ c.addEventListener("touchstart", (function(e) {
+ var t = new KeyboardEvent("keydown", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 68
+ });
+ document.body.dispatchEvent(t)
+ })), c.addEventListener("touchend", (function(e) {
+ var t = new KeyboardEvent("keyup", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 68
+ });
+ document.body.dispatchEvent(t)
+ })), m.addEventListener("touchstart", (function(e) {
+ var t = new KeyboardEvent("keydown", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 65
+ });
+ document.body.dispatchEvent(t)
+ })), m.addEventListener("touchend", (function(e) {
+ var t = new KeyboardEvent("keyup", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 65
+ });
+ document.body.dispatchEvent(t)
+ })), h.addEventListener("touchstart", (function(e) {
+ var t = new KeyboardEvent("keydown", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 87
+ });
+ document.body.dispatchEvent(t)
+ })), h.addEventListener("touchend", (function(e) {
+ var t = new KeyboardEvent("keyup", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 87
+ });
+ document.body.dispatchEvent(t)
+ })), f.addEventListener("touchstart", (function(e) {
+ var t = new KeyboardEvent("keydown", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 83
+ });
+ document.body.dispatchEvent(t)
+ })), f.addEventListener("touchend", (function(e) {
+ var t = new KeyboardEvent("keyup", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 83
+ });
+ document.body.dispatchEvent(t)
+ })), g.addEventListener("touchstart", (function(e) {
+ var t = new KeyboardEvent("keydown", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 17
+ });
+ document.body.dispatchEvent(t)
+ })), g.addEventListener("touchend", (function(e) {
+ var t = new KeyboardEvent("keyup", {
+ bubbles: !0,
+ cancelable: !0,
+ keyCode: 17
+ });
+ document.body.dispatchEvent(t)
+ })), document.getElementById("data_display").style = "width:100%;font-size:13px"
+}
+
+function resetData() {
+ var e;
+ (e = document.getElementById("data_display")) && body.removeChild(e), window.data || (window.data = new Data)
+}
+
+function Data() {
+ this.playerpower = 1, this.traveled = this.traveledold = 0, this.scorelevs = [100, 200, 400, 500, 800, 1e3, 2e3, 4e3, 5e3, 8e3], this.score = new DataObject(0, 6, "SCORE"), this.time = new DataObject(350, 3, "TIME"), this.world = new DataObject(0, 0, "WORLD"), this.coins = new DataObject(0, 0, "COINS"), this.lives = new DataObject(3, 1, "LIVES"), this.time.dir = -1, this.scoreold = 0
+}
+
+function DataObject(e, t, n) {
+ this.amount = e, this.length = t, this.name = n, this.element = createElement("td", {
+ className: "indisplay"
+ })
+}
+
+function setDataDisplay() {
+ var e = createElement("table", {
+ id: "data_display",
+ className: "display",
+ style: {
+ width: gamescreen.right + 14 + "px"
+ }
+ }),
+ t = ["score", "coins", "world", "time", "lives"];
+ for (var n in body.appendChild(e), data.display = e, t) e.appendChild(data[t[n]].element), updateDataElement(data[t[n]]);
+ body.appendChild(data.display), is_mobile && applyNewJs()
+}
+
+function clearDataDisplay() {
+ body.removeChild(data_display)
+}
+
+function toggleLuigi() {
+ window.luigi = !window.luigi, localStorage.luigi = window.luigi, window.player.title = window.luigi ? "Luigi" : "Mario", setThingSprite(window.player)
+}
+
+function startDataTime() {
+ TimeHandler.addEventInterval(updateDataTime, 25, 1 / 0, data.time)
+}
+
+function updateDataTime(e) {
+ 1 != e.dir && (100 == e.amount ? playCurrentThemeHurry() : e.amount <= 0 && killPlayer(player, !0)), notime || (map.time = e.amount += e.dir, updateDataElement(e))
+}
+
+function updateDataElement(e) {
+ var t = e.name + " " + ("Infinity" == e.amount ? "Inf" : e.amount);
+ e.element.innerHTML = t, e.element.style.width = ""
+}
+
+function score(e, t, n) {
+ if (!(t <= 0)) {
+ if (1 == arguments.length) return score(player, e);
+ if (localStorage.highscore = max(localStorage.highscore, data.score.amount += t), n) {
+ var x = addText(t, e.left, e.top);
+ x.yvel = -unitsized4, TimeHandler.addEvent(killScore, 49, x)
+ }
+ for (; data.score > 1e4;) gainLife(), data.score.amount = data.score.amount % 1e4;
+ updateDataElement(data.score)
+ }
+}
+
+function killScore(e) {
+ body.contains(e) && body.removeChild(e), killNormal(e), deleteThing(e, texts, texts.indexOf(e))
+}
+
+function findScore(e) {
+ return e < data.scorelevs.length ? data.scorelevs[e] : (gainLife(), -1)
+}
+
+function gainLife(e, t) {
+ data.lives.amount += "number" == typeof e ? e : 1, t || AudioPlayer.play("Gain Life"), updateDataElement(data.lives)
+}
+
+function setLives(e) {
+ data.lives.amount = Number(e), updateDataElement(data.lives)
+}
+
+function storePlayerStats() {
+ data.playerpower = player.power
+}
+
+function clearPlayerStats() {
+ data.playerpower = player.power = 1
+}
+
+function loadEditor(e) {
+ editorClose(), e || (window.canedit = !0, setMap(["Special", "Blank"]), window.canedit = !1), setEditorLibrary(), setEditorHTML(), setEditorControls(), setEditorTriggers(), setEditorLocalRetrieval(), classAdd(body, "editor"), classAdd(editor.sidebar, "expanded"), TimeHandler.addEvent(classRemove, 35, editor.sidebar, "expanded"), map.shifting = !1, window.editing = !0
+}
+
+function setEditorLibrary() {
+ window.editor = {
+ xloc: 0,
+ yloc: 0,
+ playing: !1,
+ canplace: !0,
+ offset: {
+ x: unitsizet2
+ },
+ settings: {
+ night: !1,
+ setting: "Overworld",
+ alt: !1
+ },
+ defaults: {
+ width: 8,
+ height: 8,
+ widthoff: 0,
+ heightoff: 0,
+ minimum: 1,
+ followerUpdate: editorFollowerUpdateStandard,
+ prefunc: pushPreThing,
+ outerok: !0
+ },
+ placed: [],
+ characters: {
+ Goomba: {},
+ Koopa: {
+ height: 12,
+ arguments: {
+ smart: Boolean,
+ movement: ["moveSimple", "moveJumping", "moveFloating"]
+ },
+ followerUpdate: function(e, t) {
+ var n = "True" == t.smart,
+ x = t.movement,
+ r = "moveJumping" == x;
+ return "moveFloating" == x && (r = [8, 72]), [n, r]
+ },
+ onadds: {
+ nocollide: !1
+ }
+ },
+ Beetle: {
+ width: 8.5,
+ height: 8.5
+ },
+ HammerBro: {
+ height: 12
+ },
+ CheepCheep: {
+ arguments: {
+ smart: Boolean
+ },
+ attributes: {
+ nofall: !0
+ }
+ },
+ Lakitu: {
+ height: 12
+ },
+ Podoboo: {
+ width: 7
+ },
+ Blooper: {
+ height: 12,
+ onadds: {
+ nofall: !0
+ }
+ },
+ Bowser: {
+ width: 16,
+ height: 16
+ }
+ },
+ solids: {
+ Floor: {
+ arguments: {
+ width: 8
+ },
+ mydefaults: {
+ width: 8
+ },
+ prefunc_custom: function(e, t, n, x) {
+ var r = "Floor, " + e.xloc + ", " + e.yloc;
+ return x[1] && (r += ", " + x[1]), r
+ }
+ },
+ Brick: {
+ arguments: {
+ contents: ["false", "Coins", "Star"]
+ },
+ followerUpdate: function(e, t) {
+ var n = [];
+ t.contents;
+ return n.push(window[t.contents]), n
+ },
+ prefunc_custom: function(e, t, n, x) {
+ var r = "Brick, ";
+ return r += e.xloc + ", " + e.yloc, t.contents && (r += ", " + t.contents[0].name), r
+ }
+ },
+ Block: {
+ arguments: {
+ contents: ["Coin", "Mushroom", "Star", "1Up Mushroom"],
+ hidden: Boolean
+ },
+ followerUpdate: function(e, t) {
+ var n = [];
+ return "1Up Mushroom" == t.contents ? n.push([Mushroom, 1]) : n.push(window[t.contents]), "True" == t.hidden && (TimeHandler.addEvent((function() {
+ editor.follower.hidden = !0
+ })), n.push(1)), n
+ },
+ prefunc_custom: function(e, t, n, x) {
+ var r = "Block, ",
+ i = t.contents,
+ a = i[0].name;
+ return r += e.xloc + ", " + e.yloc, "Coin" != a ? ("Mushroom" == a && i[1] ? r += ", [Mushroom, " + String(i[1]) + "]" : r += ", " + a, t.hidden && (r += ", true")) : t.hidden && (r += ", false, true"), r
+ }
+ },
+ Cannon: {
+ arguments: {
+ height: 8
+ },
+ sprite_source: "top"
+ },
+ Pipe: {
+ width: 16,
+ prefunc: pushPrePipe,
+ prefunc_solo: !0,
+ arguments: {
+ height: 8,
+ Pirhana: Boolean
+ },
+ followerUpdate: function(e, t) {
+ var n = [];
+ return n.push(Number(t.height)), n.push(Boolean(t.Pirhana)), n
+ },
+ sprite_source: "top"
+ },
+ Stone: {
+ arguments: {
+ width: 8,
+ height: 8
+ },
+ prefunc_custom: function(e, t, n, x) {
+ var r = "Stone, " + e.xloc + ", " + e.yloc;
+ return r += ", " + x[1] + ", " + x[2]
+ }
+ },
+ Coral: {
+ arguments: {
+ height: 8
+ }
+ },
+ CastleBlock: {
+ arguments: {
+ fireballs: 2,
+ direction: ["CW", "CCW"],
+ hidden: Boolean
+ },
+ followerUpdate: function(e, t) {
+ return [
+ [Number(t.fireballs), "CW" == t.direction], "True" == t.hidden
+ ]
+ }
+ },
+ Springboard: {
+ height: 14.5,
+ heightoff: 1.5
+ }
+ },
+ scenery: {
+ Bush1: {
+ width: 16
+ },
+ Bush2: {
+ width: 24
+ },
+ Bush3: {
+ width: 32
+ },
+ Cloud1: {
+ width: 16,
+ height: 12
+ },
+ Cloud2: {
+ width: 24,
+ height: 12
+ },
+ Cloud3: {
+ width: 32,
+ height: 12
+ },
+ HillSmall: {
+ width: 24,
+ height: 9.5,
+ heightoff: -1.5
+ },
+ HillLarge: {
+ width: 40,
+ height: 17.5,
+ heightoff: -1.5
+ },
+ PlantSmall: {
+ width: 7,
+ height: 15,
+ heightoff: 1
+ },
+ PlantLarge: {
+ height: 23,
+ heightoff: 1
+ },
+ Fence: {},
+ Water: {
+ width: 4,
+ height: 4,
+ prefunc: fillPreWater,
+ prefunc_solo: !0,
+ prefunc_custom: function(e, t, n, x) {
+ return e.xloc + ", " + e.yloc
+ }
+ }
+ }
+ };
+ var e, t, n, x;
+ editor.defaults;
+ for (n in editor)
+ for (x in e = editor[n], editor[n]) t = e[x], proliferate(t, editor.defaults, !0);
+ for (n in e = editor.scenery) t = e[n], proliferate(t, {
+ createfunc: function(e) {
+ return ThingCreate(Sprite, e.spritename)
+ },
+ spritename: n,
+ prefunc_custom: function(e, t, n, x) {
+ return "'" + n.spritename + "', " + e.xloc + ", " + (e.yloc - n.height)
+ }
+ }, !0), t.prefunc == pushPreThing && (t.prefunc = pushPreScenery)
+}
+
+function setEditorHTML() {
+ createEditorGuideLines(), createEditorSidebar(), createEditorBottomBar(), createEditorScrollers(), editor.sectionselect.onchange()
+}
+
+function createEditorSidebar() {
+ var e, t = ["Solids", "Characters", "Scenery", "Settings"],
+ n = editor.sidebar = createElement("div", {
+ id: "sidebar"
+ }),
+ x = editor.category = createElement("div", {
+ id: "category",
+ className: "group first"
+ }),
+ r = editor.sectionselect = createElement("select", {
+ id: "sectionselect",
+ className: "options big",
+ onchange: editorSelectSection
+ }),
+ i = editor.options = createElement("div", {
+ id: "options",
+ className: "options big"
+ });
+ for (e in n.appendChild(x), x.appendChild(r), t) r.appendChild(createElement("option", {
+ innerText: t[e]
+ }));
+ n.appendChild(i), body.appendChild(window.sidebar = n)
+}
+
+function createEditorBottomBar() {
+ var e = editor.bottombar = createElement("div", {
+ id: "bottombar",
+ things: {}
+ });
+ sidebar.appendChild(e)
+}
+
+function createEditorScrollers() {
+ var e, t, n, x = ["right", "left"],
+ r = {};
+ for (t = createElement("div", {
+ id: "scrollers",
+ style: {
+ zIndex: 7,
+ width: innerWidth - 32 + "px"
+ }
+ }), settings = {
+ className: "scroller",
+ style: {
+ zIndex: 7,
+ marginTop: innerHeight / 2 + "px"
+ },
+ onmouseover: editorFollowerHide,
+ onmouseout: editorFollowerShow,
+ onmousedown: editorScrollingStart,
+ onmouseup: editorScrollingStop
+ }, e = x.length - 1; e >= 0; --e) x[e], n = r[x[e]] = createElement("div", settings), t.appendChild(n);
+ proliferate(r.left, {
+ id: "left",
+ className: "scroller flipped off",
+ dx: -7
+ }), proliferate(r.right, {
+ id: "right",
+ style: {
+ right: "21px"
+ },
+ dx: 7
+ }), editor.scrollers = r, body.appendChild(t)
+}
+
+function editorFollowerHide() {
+ var e = editor.follower;
+ e.hiddenOld = e.hidden, e.hidden = !0
+}
+
+function editorFollowerShow() {
+ var e = editor.follower;
+ e.hidden = e.hiddenOld
+}
+
+function editorScrollingStart(e) {
+ var t = e.target.dx;
+ editorPreventClicks(), editor.scrolling = TimeHandler.addEventInterval(editorScrolling, 1, 1 / 0, -t), classRemove(editor.scrollers.left, "off")
+}
+
+function editorScrollingStop() {
+ TimeHandler.addEvent(editorClickOff, 3), TimeHandler.clearEvent(editor.scrolling)
+}
+
+function editorScrolling(e) {
+ if (scrollEditor(e), editor.xloc >= 0) return scrollEditor(-editor.xloc), editorScrollingStop(), classAdd(editor.scrollers.left, "off"), !0
+}
+
+function createEditorGuideLines() {
+ var e, t, n, x = {
+ floor: 0,
+ ceiling: ceillev,
+ jumplev1: jumplev1,
+ jumplev2: jumplev2
+ },
+ r = 16 * unitsize + "px",
+ i = map.floor;
+ for (e in window.maplines = t = document.createElement("div"), t.style.marginLeft = r, t.id = "maplines", x) n = createElement("div", {
+ innerText: e,
+ className: "mapline",
+ id: e + "_line",
+ style: {
+ marginTop: (i - x[e]) * unitsize + "px",
+ marginLeft: "-" + r,
+ paddingLeft: r
+ }
+ }), t.appendChild(n);
+ body.appendChild(t)
+}
+
+function setEditorControls(e) {
+ e = e || ["load", "save", "reset", "undo"];
+ var t, n, x, r = document.getElementById("controls"),
+ i = createElement("div", {
+ id: "controls"
+ }),
+ a = editor.controls = {
+ container: i
+ };
+ for (x in r && (r.innerHTML = ""), e) t = e[x], n = createElement("div", {
+ id: t,
+ alt: t,
+ className: "control",
+ style: {
+ backgroundImage: "url(Theme/" + t + ".gif)"
+ },
+ innerHTML: " " + t + "
",
+ onclick: editorClickControl
+ }), i.appendChild(n), a[t] = n;
+ sidebar.appendChild(i)
+}
+
+function setEditorTriggers() {
+ var e, t = [maplines, canvas];
+ for (e = t.length - 1; e >= 0; --e) t[e].onclick = editorMouseClick;
+ document.onmousemove = editorFollowerFollowsCursor
+}
+
+function editorMouseClick(e) {
+ if (window.editing && !editor.clicking) {
+ if (editorPreventClicks(), editor.erasing) return editorPlaceEraser(e);
+ if (!editor.in_settings && editor.canplace) {
+ var t = editor.section_name,
+ n = (window[t], editor.current_selected, editor.follower);
+ editor.placed.push(n), editor.follower = !1, editorSetCurrentThingFromName(null, !0), paused && refillCanvas(), n.was_follower = !0, delete n.onclick, editor.playing && (thingRetrieveVelocity(n), proliferate(n, n.reference.attributes))
+ }
+ }
+}
+
+function editorSelectSection() {
+ var e = (this || editor.sectionselect).value.toLowerCase();
+ (editor.in_settings = "settings" == e) ? (editorSetSection(e, !0), editorSetSectionSettings()) : editorSetSection(e)
+}
+
+function editorSetSection(e, t) {
+ var n, x, r = editor.section = editor[e],
+ i = editor.bottombar,
+ a = 0;
+ if (editor.section_name = e, i.innerHTML = "", !t)
+ for (e in r) ++a, x = editorAddBottomPreview(i, e, r[e]), n || (n = x);
+ a ? (i.style.visibility = "visible", editorSetCurrentThingFromCanvas(n)) : i.style.visibility = "hidden"
+}
+
+function editorAddBottomPreview(e, t, n) {
+ var x, r = n.width,
+ i = n.height,
+ a = window[t],
+ o = a ? ThingCreate(a, n.previewargs) : new Thing(Sprite, t),
+ l = createElement("div", {
+ width: r * unitsize + "px",
+ height: i * unitsize + "px",
+ name: t,
+ className: "holder " + t,
+ onclick: editorSetCurrentThing
+ }),
+ s = proliferate(getCanvas(r * unitsizet2, i * unitsizet2), {
+ name: t,
+ reference: n,
+ style: {
+ marginLeft: -roundDigit(r / 2, scale) + "px"
+ },
+ onclick: editorSetCurrentThing
+ }),
+ d = (e.things, r * unitsizet2),
+ u = i * unitsizet2,
+ p = s.getContext("2d");
+ return canvasDisableSmoothing(s), editor.bottombar.things[t] = s.thing = o, addClass(o, "editor"), x = o.canvas, o.canvases && (x = o.canvases[n.sprite_source || "middle"].canvas), n.previewsize ? (p.fillStyle = p.createPattern(x, "repeat"), p.fillRect(0, 0, d, u)) : p.drawImage(x, 0, 0, d, u), l.appendChild(l.canvas = s), e.appendChild(l), e[t] = l, s
+}
+
+function editorSetSectionSettings() {
+ var e, t = editor.settings,
+ n = "";
+ n += "Settings ", n += addArgumentOption("night", Boolean, t.night), n += addArgumentOption("setting", ["Overworld", "Underworld", "Underwater", "Castle", "Sky"], t.setting), n += addArgumentOption("alt", Boolean, t.alt), n += "
", options.innerHTML = n, ensureOptionsAboveZero(editorUpdateSettingsOption), e = editor.sidebar.getElementsByTagName("table")[0].rows, editor.settings.night_elem = e[0].cells[1].firstChild, editor.settings.setting_elem = e[1].cells[1].firstChild, editor.settings.alt_elem = e[2].cells[1].firstChild, editor.follower && killNormal(editor.follower), editor.follower = !1
+}
+
+function editorUpdateSettingsOption(e) {
+ var t = editor.settings,
+ n = t.night = "True" == t.night_elem.value,
+ x = t.alt = "True" == t.alt_elem.value,
+ r = (t.setting = t.setting_elem.value) + (n ? " Night" : "") + (x ? " " + x : "");
+ setAreaSetting(area, r, r != area.setting)
+}
+
+function editorSetCurrentThing(e, t) {
+ var n = e.target,
+ x = editor.current_thing_name = n.name,
+ r = editor.current_thing = editor.section[x];
+ t || updateCurrentArguments(x, r), editorUpdateFollower()
+}
+
+function editorSetCurrentThingFromCanvas(e, t) {
+ editorSetCurrentThing({
+ target: e
+ }, t)
+}
+
+function editorSetCurrentThingFromName(e, t) {
+ editorSetCurrentThing({
+ target: {
+ name: e || editor.current_thing_name
+ }
+ }, t)
+}
+
+function updateCurrentArguments(e, t) {
+ t = t || {};
+ var n, x = editor.options,
+ r = "",
+ i = t.mydefaults || {},
+ a = t.arguments || {};
+ for (n in r += "" + e + " ", a.width || (r += addStaticOption("width", t.width)), a.height || (r += addStaticOption("height", t.height)), a) r += addArgumentOption(n.replace("_", "-"), a[n], null, i);
+ r += "
", x.innerHTML = r, ensureOptionsAboveZero()
+}
+
+function addStaticOption(e, t) {
+ return t == 1 / 0 && (t = "Inf."), "" + e + ": " + t + " "
+}
+
+function addArgumentOption(e, t, n, x) {
+ x = x || {};
+ var r = "" + e + ": ";
+ switch (t) {
+ case 1 / 0:
+ r += "Inf";
+ break;
+ case Boolean:
+ r += "False True ";
+ break;
+ case Number:
+ r += " ";
+ break;
+ default:
+ switch (typeof t) {
+ case "number":
+ r += "" + t + "x ";
+ break;
+ case "string":
+ r += " ";
+ break;
+ case "object":
+ for (i in r += "", t) r += "" + t[i] + " ";
+ r += ""
+ }
+ }
+ return r + " "
+}
+
+function ensureOptionsAboveZero(e) {
+ e = e || editorUpdateFollower;
+ var t, n = editor.options.getElementsByTagName("input");
+ for (i = n.length - 1; i >= 0; --i)(t = n[i]).onchange = t.onclick = t.onkeypress = editorInputEnsureAboveZero;
+ for (n = options.getElementsByTagName("select"), i = n.length - 1; i >= 0; --i)(t = n[i]).onchange = t.onclick = t.onkeypress = editorUpdateFollower
+}
+
+function editorInputEnsureAboveZero(e) {
+ editorUpdateFollower(e)
+}
+
+function editorUpdateFollower(e) {
+ if (editor.in_settings) return editorUpdateSettingsOption(e);
+ var t, n = editor.current_thing;
+ (t = editor.follower) && (t.id = "", killNormal(t)), t = n.createfunc ? n.createfunc(editor.current_thing, editorGetArguments()) : ThingCreate(window[editor.current_thing_name], n.followerUpdate(editor.current_thing, editorGetArguments())), editor.follower = t, proliferate(t, {
+ id: "follower",
+ libtype: editor.section_name,
+ lookleft: !0,
+ nocollide: !0,
+ reference: n,
+ onclick: editorMouseClick
+ }, !0), addThing(t), addClass(t, "editor"), thingRetrieveVelocity(t), thingStoreVelocity(t), editorSetFollowerPosition(t), editor.erasing && (t.hidden = !0)
+}
+
+function editorGetArguments() {
+ var e = arrayMake(editor.options.getElementsByTagName("input")),
+ t = arrayMake(editor.options.getElementsByTagName("select")),
+ n = e.concat(t);
+ return pairs = generateInputNameValuePairs(n), pairs
+}
+
+function generateInputNameValuePairs(e) {
+ var t, n = {};
+ for (t in e) n[e[t].name] = e[t].value;
+ return n
+}
+
+function editorFollowerFollowsCursor(e) {
+ var t = editor.follower;
+ t && editorSetFollowerPosition(t, roundFollowerDigit(e.x) + (editor.current_thing.widthoff - editor.offset.x) * unitsize, roundFollowerDigit(e.y) + editor.current_thing.heightoff * unitsize)
+}
+
+function editorSetFollowerPosition(e, t, n) {
+ t = t || editor.xloc_old || 0, n = n || editor.yloc_old || 0, setLeft(e, t), setTop(e, n), editor.xloc_old = t, editor.yloc_old = n
+}
+
+function roundFollowerDigit(e) {
+ var t = "solids" == editor.section_name ? 8 : 4;
+ return unitsize * t * round(e / (unitsize * t))
+}
+
+function roundFollowerPosition(e, t) {
+ editorSetFollowerPosition(e, roundFollowerDigit(e.left), roundFollowerDigit(e.top))
+}
+
+function editorFollowerUpdateStandard(e, t) {
+ "True" == t.hidden && TimeHandler.addEvent((function() {
+ editor.follower.hidden = !0
+ }));
+ var n = [];
+ return t.width && n.push(Number(t.width)), t.height && n.push(Number(t.height)), n
+}
+
+function editorClickControl(e) {
+ editorPreventClicks();
+ var t = e.target;
+ t.id || (t = t.parentNode), window["editorControl" + capitalizeFirst(t.id)](), e.preventDefault()
+}
+
+function editorPreventClicks() {
+ editor.clicking = !0, TimeHandler.addEvent(editorClickOff, 3)
+}
+
+function editorClickOff() {
+ window.editor && (editor.clicking = !1)
+}
+
+function editorControlUndo() {
+ var e = editor.placed.pop();
+ e && !e.player && killNormal(e)
+}
+
+function editorControlReset() {
+ var e = editor.placed.length,
+ t = roundDigit(35 / e, 21);
+ TimeHandler.addEventInterval(editorControlUndo, t, e)
+}
+
+function editorControlSave() {
+ var e = editor.rawfunc = editorGetRawFunc();
+ editorCreateInputWindow("Hit Submit below to start playing! This map will be resumed automatically the next time you use the editor on this computer. Alternately, you may copy this text to work on again later using Load (the button next to Save).
", e, editorSubmitGameFuncPlay);
+ return e
+}
+
+function editorControlCancel() {
+ loadEditor()
+}
+
+function editorGetRawFunc() {
+ var e, t = editor.placed,
+ n = t.length - 1,
+ x = new Array(e),
+ r = " var map = arguments[0] || new Map();\n";
+ for (r += "\n map.time = " + data.time.amount + ";", r += "\n map.locs = [ new Location(0, true) ];", r += "\n map.areas = [", r += "\n new Area('" + area.setting + "', function() {", r += "\n setLocationGeneration(0);\n\n", e = n; e >= 0; --e) x[e] = new editorPreStatement(t[e]);
+ for (x.sort(prethingsorter), e = n; e >= 0; --e) x[e] = " " + x[e].statement;
+ return r += (x = removeDuplicates(x)).join("\n"), r += "\n })", r += "\n ];", r += "\n return map;"
+}
+
+function editorPreStatement(e) {
+ this.placer = e, this.xloc = (gamescreen.left + e.left) / unitsize, this.yloc = map.floor - e.top / unitsize, this.statement = editorGetStatement(this, e, e.reference, e.args)
+}
+
+function editorGetStatement(e, t, n, x) {
+ if (!n && !(n = editor[t.libtype][t.title])) return "";
+ var r, i, a = (n.prefunc || pushPreThing).name,
+ o = x.length;
+ if (n.prefunc_custom) a += "(" + n.prefunc_custom(e, t, n, x) + ");";
+ else {
+ r = [], n.prefunc_solo || r.push(t.title), r.push(String(e.xloc)), r.push(String(e.yloc));
+ for (var l = 1; l < o; ++l) {
+ switch (typeof(i = x[l])) {
+ case "undefined":
+ break;
+ case "number":
+ i = String(round(i));
+ break;
+ default:
+ i = String(i)
+ }
+ void 0 !== i && r.push(i)
+ }
+ a += "(" + r.join(", ") + ");"
+ }
+ return a
+}
+
+function editorControlErase() {
+ editor.erasing ? editorControlEraseOff() : editorControlEraseOn()
+}
+
+function editorControlEraseOn() {
+ editor.erasing = editor.follower.hidden = !0, classAdd(body, "erasing"), classAdd(editor.controls.erase, "enabled")
+}
+
+function editorControlEraseOff() {
+ editor.erasing = editor.follower.hidden = !1, classRemove(body, "erasing"), classRemove(editor.controls.erase, "enabled")
+}
+
+function editorPlaceEraser(e) {
+ addThing(Eraser, e.x, e.y)
+}
+
+function Eraser(e) {
+ e.width = e.height = 2, e.nocollide = e.nofall = !0, e.movement = eraserErases, setCharacter(e, "eraser")
+}
+
+function eraserErases(e) {
+ if (window.editor) {
+ var t, n, x = editor.placed,
+ r = x.concat(solids).concat(characters).concat(scenery);
+ for (n = r.length - 1; n >= 0; --n)
+ if (!(t = r[n]).player && t != editor.follower && objectsTouch(e, t)) {
+ killNormal(t), x.splice(x.indexOf(t), 1);
+ break
+ }
+ killNormal(e)
+ }
+}
+
+function editorControlLoad() {
+ editorCreateInputWindow("Paste your work in progress here, and click Submit to continue it.", "", editorSubmitLoad)
+}
+
+function addThingsToPlaced() {
+ var e = editor.placed;
+ for (editor.placed = (editor.placed || []).concat(characters).concat(solids).concat(scenery), e.sort(prethingsorter), e.splice(e.indexOf(player), 1), i = e.length - 1; i >= 0; --i) placer = e[i], placer.reference = editor[placer.libtype][placer.title]
+}
+
+function editorCreateInputWindow(e, t, n) {
+ var x = gamescreen.unitwidth,
+ r = editor.input_window = createElement("div", {
+ id: "input_window",
+ innerHTML: e || "",
+ style: {
+ width: x + "px"
+ }
+ }),
+ i = r.input = editor.window_input = createElement("textarea", {
+ id: "window_input",
+ value: t || "",
+ style: {
+ width: x - 49 + "px"
+ }
+ }),
+ a = r.submit = createElement("div", {
+ id: "window_submit",
+ className: "window_button",
+ innerText: "Submit",
+ onclick: n
+ }),
+ o = r.cancel = createElement("div", {
+ id: "window_cancel",
+ className: "window_button",
+ innerText: "Cancel",
+ onclick: editorCloseInputWindow
+ });
+ return r.appendChild(i), r.appendChild(a), r.appendChild(o), body.appendChild(r), killNormal(editor.follower = !1), editor.follower = !1, r
+}
+
+function editorCloseInputWindow(e) {
+ editorPreventClicks(), removeChildSafe(window.input_window, body), e || (editorSetCurrentThingFromName(), window.editing = !0), editorUpdateFollower()
+}
+
+function editorClose(e) {
+ if (window.editor) {
+ classRemove(body, "editor"), classRemove(body, "erasing"), killNormal(editor.follower), editor.follower = !1, delete window.editor;
+ var t, n = ["maplines", "sidebar", "bottombar", "scrollers"];
+ for (t in n) removeChildSafe(document.getElementById(n[t]), body);
+ document.onmousemove = null, window.editing = !1, e && window.map && (map.shifting = !1)
+ }
+}
+
+function scrollEditor(e, t) {
+ window.editor && (editor.follower && (e = e || 0, t = t || 0, shiftAll(scenery, e, t), shiftAll(solids, e, t), shiftAll(characters, e, t), editor.xloc += e, editor.yloc += t))
+}
+
+function editorStoreLocally() {
+ localStorage.editorLastFunc = editor.rawfunc
+}
+
+function setEditorLocalRetrieval() {
+ localStorage.editorLastFunc && (editor.rawfunc = round, editorSubmitGameFunc())
+}
+
+function editorSubmitGameFunc() {
+ if (!window.editor || !editor.rawfunc) return loadEditor();
+ editor.rawfunc;
+ var e = window.custommapfunc = new Function(editor.rawfunc);
+ mapfuncs.Custom = {
+ Map: e
+ }, window.canedit = !0, setMap(["Custom", "Map"]), window.canedit = editor.playing = !1, entryBlank(player), addThingsToPlaced(), editorStoreLocally(), editorCloseInputWindow()
+}
+
+function editorSubmitGameFuncPlay() {
+ editorPreventClicks(), editorSubmitGameFunc(), editorStartPlaying()
+}
+
+function editorSubmitLoad() {
+ if (window.editor && editor.window_input) {
+ editorPreventClicks();
+ var e = editor.window_input.value;
+ loadEditor(), editor.rawfunc = e, editorSubmitGameFunc()
+ }
+}
+
+function editorStartPlaying() {
+ editorPreventClicks(), editor.playing = !0, placePlayer(), entryPlain(player), nokeys = !1;
+ var e, t, n, x = editor.placed;
+ for (n in x) thingRetrieveVelocity(e = x[n]), (t = editor[e.libtype][e.title]) && proliferate(e, t.onadds);
+ setEditorControls(["Cancel"])
+}
+
+function setEditorLocalRetrieval() {
+ var e = localStorage.editorLastFunc;
+ if (e) {
+ editor.rawfunc = e, editorSubmitGameFunc(), editorStoreLocally();
+ var t, n = editor.placed;
+ for (t in n) thingStoreVelocity(n[t])
+ }
+}
+
+function resetSeed() {
+ window.seeder = 1777771 / (window.seed = round(1e7 * random())), window.seedlast = .007, window.getSeed = function() {
+ return seedlast = "0." + String(seeder / seedlast).substring(4).replace(".", "")
+ }
+}
+
+function pushRandomSectionOverworld(e) {
+ var t = max(randTrue(117), 1),
+ n = 0;
+ if (++map.num_random_sections, pushPreFuncCollider(e, zoneDisableCheeps), map.had_floor = !1, map.needs_floor || t >= 14 || t < 3 || randTrue() ? (pushPreFloor(e, 0, t), map.had_floor = !0) : pushPreThing(Stone, e, n = 0, t), window.randcount_powerup = 3, t <= 3 && map.had_floor) {
+ if (randTrue()) switch (randTrue(3)) {
+ case 0:
+ if (t > 3) {
+ pushPreScenery("HillSmall", e, 0);
+ break
+ }
+ case 1:
+ if (t > 2) {
+ pushPreScenery("Bush1", e + 8 * max(0, randTrue(t - 2)), n);
+ break
+ }
+ case 2:
+ pushPreScenery("PlantLarge", e + 8 * max(0, randTrue(t - 2)), n);
+ break;
+ case 3:
+ pushPreScenery("PlantSmall", e + 8 * max(0, randTrue(t - 2)), n)
+ }
+ } else
+ for (var x = t - 2, r = 0, i = 0, a = randTrue(2); a < x; a += 3) randTrue(7) && (randTrue(2) ? (map.hadObstacle = !1, (i % 3 == 0 || randTrue()) && (pushRandomChunkEnemy(e, a), ++i), map.had_floor && pushRandomGroundScenery(e + 8 * a, a, t)) : pushRandomObstacle(e, a), !r && randTrue() ? (pushRandomSkyScenery(e + 8 * a), r = !0) : r = !1);
+ prepareNextGeneratorStandard(e, t, pushRandomSectionOverworld)
+}
+
+function startRandomSectionBridge(e) {
+ pushPreFuncCollider(e - 24, zoneDisableCheeps), pushPreFuncCollider(e, zoneEnableCheeps);
+ var t = 5 + randTrue(4),
+ n = t - 4;
+ map.needs_bridge = !0, map.treelev = map.treeheight = 0, pushPreTree(e, 0, t + 1), pushPreThing(Stone, e + 16, 8, 1, 1), pushPreThing(Stone, e + 24, 16, 1, 2), pushPreThing(Stone, e + 32, 24, n, 3), pushRandomSectionBridge(e + 8 * (t - 1), 24, !0), spawnMap(), map.had_floor = !1
+}
+
+function pushRandomSectionBridge(e, t, n) {
+ var x = !1;
+ if (t = t || 24 + 16 * randTrue() - 8, randTrue() || map.needs_bridge) switch (randTrue(3)) {
+ case 0:
+ switch (randTrue()) {
+ case 0:
+ var r = randTrue(3) + 1,
+ i = 4 * r;
+ x = !0;
+ for (var a = 1; a <= 2 * r; a += 2) pushPreBridge(e + 16 * a, t, 3);
+ break;
+ case 1:
+ i = randTrue(7) + 7;
+ var o = DtB(t, 8);
+ n || pushPreThing(Stone, e, t, 1, o), pushPreBridge(e + 8, t, i - 1), pushPreThing(Stone, e + 8 * i, t, 1, o)
+ }
+ break;
+ default:
+ map.needs_bridge = map.treeheight = 0;
+ o = DtB(t, 8);
+ i = 17 * (randTrue(3) + 3);
+ for (a = 0; a < i; a += 17)
+ if (!a && n || pushPreThing(Stone, e + 8 * a, t, 1, o), pushPreBridge(e + 8 * (a + 1), t, 16), randTrue() && pushRandomSmallEnemy(e + 8 * (a + 8), t), randTrue(2)) {
+ randTrue();
+ var l = 3 + randTrue(2);
+ pushRandomCoinRow(e + 8 * (a + 8), t + 32, l), pushRandomCoinRow(e + 8 * (a + 8), t + 40, getNextCoinRowSize(l))
+ } else pushPreThing(Block, e + 8 * (a + 8), t + jumplev1, Mushroom);
+ pushPreThing(Stone, e + 8 * i, t, 1, o)
+ } else i = 10, pushPreTree(e + 16, 8 * randTrue(), i);
+ prepareNextGeneratorStandard(e, i + 2, randTrue() ? pushRandomSectionBridge : pushRandomSectionOverworld, !1, x)
+}
+
+function pushRandomSectionPreCastle(e, t) {
+ var n, x, r = randTrue(35) + 35,
+ i = r - 3,
+ a = !1;
+ for (t = t || 0, pushPreFloor(e, 0, r), hadcloud = !1, x = randTrue(3); x < i; x += n || 3) {
+ switch (randTrue(3)) {
+ case 0:
+ switch (n = 3, randTrue(2)) {
+ case 0:
+ var o = randTrue(2) + 1;
+ pushPreThing(Cannon, e + 8 * (x + randTrue(2)), 8 * o, o);
+ break;
+ case 1:
+ for (var l = 0; l < n; ++l) randTrue() || pushPreThing(Stone, e + 8 * (x + l), 8 * (o = randTrue(3) + 1), 1, o);
+ break;
+ case 2:
+ pushPrePipe(e + 8 * (x + randTrue()), 0, 8 * (2 + randTrue(2)), !0)
+ }
+ break;
+ case 1:
+ switch (n = 7, a = !0, randTrue(2)) {
+ case 0:
+ pushPreThing(Koopa, e + 8 * (x + randTrue(7)), 12 + 8 * randTrue(3), randTrue(), !0);
+ break;
+ case 1:
+ randTrue() && pushPreThing(HammerBro, e + 8 * (x + randTrue(7)), 12 + 2 * randTrue(3));
+ break;
+ case 2:
+ n = 10, a = !1;
+ for (l = 1; l < 8; ++l)
+ for (var s = jumplev1; s <= jumplev2; s += 32) pushPreThing(Brick, e + 8 * (x + l), s, getRandomBrickItem(!1, randTrue()));
+ var d = randTrue() ? jumplev1 : jumplev2;
+ height2 = o == jumplev1 ? jumplev2 : jumplev1, randTrue(2) && pushPreThing(HammerBro, e + 8 * (x + randTrue(3)), d + 12), randTrue(2) && pushPreThing(HammerBro, e + 8 * (x + 4 + randTrue(3)), height2 + 12)
+ }
+ }
+ a && n >= 7 && (pushPreScenery("CastleWall", e + 8 * (x + randTrue()), 0, n - randTrue(2)), randTrue() && pushPreThing(Brick, e + 8 * (x + randTrue(n)), jumplev1, randTrue() ? Mushroom : getRandomBrickItem(!1, randTrue())));
+ for (s = 0; s < n; s += 3) randTrue(2) && pushRandomGroundScenery(e + 8 * (x + s), 0), !hadcloud && randTrue() ? (pushRandomSkyScenery(e + 8 * (x + s)), hadcloud = !0) : hadcloud = !1
+ }
+ pushPreFloor(e + 8 * r, 0, x + 3 - r);
+ var u = 4 + randTrue(3);
+ t >= 3 ? endCastleOutsideRandom(e + 8 * (r + u + 1), !0) : pushRandomSectionPreCastle(e + 8 * (r + u), t + 1), spawnMap()
+}
+
+function endCastleOutsideRandom(e) {
+ var t, n;
+ switch (randTrue()) {
+ case 0:
+ for (n = 1 + randTrue(); n < 9; n += 2) pushPreThing(Stone, e + 8 * n, 8 * (n - randTrue()), 1, 1 + randTrue());
+ pushPreThing(Stone, e + 72, 64, 2), t = 12;
+ break;
+ case 1:
+ for (pushPreFloor(e, 0, 11), n = 1, hadlast = !1; n < 9; ++n) !hadlast || randTrue(2) || 8 == n ? (pushPreThing(Stone, e + 8 * n, 8 * n, 1, n), hadlast = !0) : (hadlast = !1, pushPrePipe(e + 8 * n, 0, 8 * max(n - randTrue(2), 2), !0), ++n);
+ pushPreThing(Stone, e + 72, 72, 2, 9), t = 7
+ }
+ pushPreFloor(e + 88, 0, round(gamescreen.width / 8)), endCastleOutside(e + 8 * (9 + t) + 4, 0, !0, round(gamescreen.width / 8))
+}
+
+function startRandomSectionCastle(e) {
+ e += 32;
+ var t = randTrue(7) + 3,
+ n = randTrue(4) + 3;
+ randTrue(4);
+ pushPreFloor(e, 24, t), pushPreThing(Stone, e, 88, t, 3), fillPreWater(e + 8 * t, 0, 2 * n), pushPreThing(Podoboo, e + 8 * t + max(0, 8 * randTrue(n - 3)), -32), pushRandomSectionCastle(e + 8 * (t + n), 0), spawnMap()
+}
+
+function pushRandomSectionCastle(e, t) {
+ var n, x;
+ switch (randTrue(3)) {
+ case 0:
+ x = 64 * (n = 1 + randTrue(2)) - 8;
+ for (var r = 0; r < n; ++r) randTrue() ? (makeCeilingCastle(e + 64 * r, 8), fillPreWater(e + 64 * r, 0, 16), pushPreThing(Platform, e + 64 * r + 8 + 8 * randTrue(2), 8 + 8 * randTrue(max(r + 2, 4)), 4, moveFalling)) : (pushPreFloor(e + 64 * r - 8, 8, 1), pushPrePlatformGenerator(e + 64 * r + 24, 4, 1.75), pushPreFloor(e + 64 * r + 64, 8, 1));
+ break;
+ case 1:
+ var i, a, o;
+ x = 64 * (n = 2 * (1 + randTrue())) - 8, makeCeilingCastle(e, 8 * n), fillPreWater(e, 0, 16 * n);
+ for (r = 0; r < n; ++r) {
+ switch (i = e + 64 * r, a = 8 * randTrue(max(r + 1, 2 + randTrue(2))), o = 2 + randTrue(3), randTrue(2)) {
+ case 0:
+ pushPreFloor(i + 8 * randTrue(3), a, o);
+ break;
+ case 1:
+ pushPreThing(Stone, i + 8 * randTrue(3), a, o);
+ break;
+ case 2:
+ pushPreThing(Platform, i += 8 + 8 * randTrue(), 8 * randTrue(3), 4, [moveSliding, i, i + 56 + 8 * randTrue(2), 2])
+ }
+ randTrue(2) || o % 2 != 1 || pushPreThing(Block, i + 4 * o - 8, a + 40, Mushroom), o <= 4 && pushPreThing(Podoboo, i + 8 * (o + 1), -32)
+ }
+ break;
+ case 2:
+ var l;
+ switch (x = 8 * (n = 14 + randTrue(21)) - 8, p = 1, pushPreFloor(e, 0, n), randTrue()) {
+ case 0:
+ makeCeilingCastle(e, n, p = 3);
+ for (r = 1 + randTrue(); r < n - 6; ++r) l = min(7, n - r), pushPreThing(Stone, e + 8 * r, jumplev1, l), randTrue() && pushPreThing(CastleBlock, e + 8 * (r + l - 4), 0, [6, randTrue()], !0), pushPreThing(CastleBlock, e + 8 * (r + l), jumplev1, 6, randTrue()), randTrue() && pushPreThing(CastleBlock, e + 8 * (r + l + 4), jumplev2 + 8, [6, randTrue()], !0), r += l;
+ break;
+ case 1:
+ makeCeilingCastle(e, n, p);
+ var s = randTrue(),
+ d = randTrue();
+ pushPreThing(Stone, e, 8 * s, n, s);
+ for (r = randTrue(2); r < n - 3; r += 4) pushPreThing(Stone, e + 8 * (r + d), 16 + 8 * s, 3, 2), pushPreThing(CastleBlock, e + 8 * (r + d + 1), 24 + 8 * s, randTrue(2) ? 6 : 0, randSign()), pushPreThing(Stone, e + 8 * (r + d), 80, 3, 2), r < n - 5 && pushPreThing(CastleBlock, e + 8 * (r + d + 1), 64, randTrue(2) ? 6 : 0, randSign()), r += 1 + randTrue(3)
+ }
+ break;
+ case 3:
+ x = 8 * (n = 21 + randTrue(21)) - 8;
+ var u = 1 + randTrue(3),
+ p = 11 - u - 4;
+ pushPreFloor(e, 8 * u, n), makeCeilingCastle(e, n, p);
+ for (r = 0; r < n; r += 8) randTrue() && (pushRandomEnemy(e + 8 * r, 8 * u, 0), randTrue() && (pushRandomEnemy(e + 8 * r + 12, 8 * u, 0), randTrue() && pushRandomEnemy(e + 8 * r + 24, 8 * u, 0)))
+ }
+ pushPreThing(GenerationStarter, e + x, ceilmax + 20, t <= 280 ? pushRandomSectionCastle : endCastleInsideRandom, t + x / 8), spawnMap()
+}
+
+function endCastleInsideRandom(e) {
+ var t = 2 + randTrue(2),
+ n = 8 * randTrue(),
+ x = n + 24 + 8 * randTrue();
+ pushPreFloor(e, n, 5 * t);
+ for (var r = 0; r < t; ++r) pushPreFloor(e + 5 * (r + 1) * 8, x, max(2, randTrue(3)));
+ var i = e + 5 * t * 8,
+ a = 8 * randTrue(7);
+ fillPreWater(i, 0, a), endCastleInsideRandomFinal(i + a), spawnMap()
+}
+
+function endCastleInsideRandomFinal(e) {
+ fillPreWater(e, 0, 16), pushPreFloor(e + 24, 24, 3), endCastleInside(e + 48, 2), randTrue() && pushPreThing(Podoboo, e + 72 + 8 * randTrue(3), -32), randTrue() && fillPreThing(Brick, e + 56 + 8 * randTrue(3), 64, 3 + randTrue(3), 1, 8), randTrue() && pushPreThing(CastleBlock, e + 56 + 8 * randTrue(2), 24, [6, randSign()], !0), spawnMap()
+}
+
+function placeRandomCastleNPC(e) {
+ pushPreThing(Toad, e + 194, 12).object.text = [pushPreText({
+ innerHTML: "THANK YOU " + window.player.title.toUpperCase() + "!"
+ }, e + 160, 66).object, pushPreText({
+ innerHTML: "LOL YOU THOUGHT THERE WOULD BE SOMETHING HERE DIDN'T YOU!"
+ }, e + 148, 50).object]
+}
+
+function pushRandomCoinRow(e, t, n) {
+ if (n) {
+ var x;
+ if (3 == n && (e += 8), randTrue(2)) switch (n) {
+ case 3:
+ x = [1, 0, 1];
+ break;
+ case 4:
+ switch (randTrue()) {
+ case 0:
+ x = [1, 0, 0, 1];
+ break;
+ case 1:
+ x = [0, 1, 1, 0]
+ }
+ break;
+ case 5:
+ switch (randTrue()) {
+ case 0:
+ x = [1, 0, 1, 0, 1];
+ break;
+ case 1:
+ x = [0, 1, 0, 1, 0]
+ }
+ } else x = arrayOf(!0, n);
+ for (var r = 0; r < n; ++r) x[r] && pushPreThing(Coin, e + 8 * r, t)
+ }
+}
+
+function getNextCoinRowSize(e) {
+ switch (e) {
+ case 3:
+ return 5;
+ case 5:
+ return 3;
+ default:
+ return e
+ }
+}
+
+function pushRandomSectionTrees(e) {
+ var t, n, x;
+ switch (randTrue(7)) {
+ case 0:
+ var r, i;
+ t = randTrue(14) + 7, n = randTrue(3), map.treefunc(e, 8 * n, t);
+ for (var a = randTrue(2); a < t - 2; a += r - 1) randTrue(2) && pushRandomSmallEnemy(e + 8 * a, 8 * n), randTrue(2) && (r = 3 + (randTrue(3) ? 0 : randTrue(4)), i = 8 * min(9, n + randTrue(7) + 3), map.treefunc(e + 8 * a, i, r), randTrue() && pushRandomSmallEnemy(e + 8 * a, 8 * i), pushRandomSmallEnemy(e + 8 * (a += r - 1), 8 * n));
+ break;
+ case 1:
+ t = 14, n = 7, randTrue(), t = 4 + randTrue(2), pushPrePlatformGenerator(e + 8 * (randTrue() + 1), t, -1), t += randTrue(3) + 3;
+ break;
+ default:
+ t = 4 + randSign() + randTrue(), n = min(randTrue(2) + 4 + randSign(2), map.treelev + 4);
+ var o = e - 8 * randTrue();
+ if (n == map.treelev && (n += randSign()), map.treefunc(o, 8 * n, t), t > 3 || randTrue())
+ if (randTrue(3)) pushRandomSmallEnemy(o + 8 * (randTrue() + 1), 8 * n);
+ else if (randTrue(2))
+ for (a = 1; a < t - 1; ++a) pushPreThing(Coin, o + 1 + 8 * a, 8 * (n + 1) - 1)
+ }++map.sincechange > 7 && randTrue() ? (x = map.randtype, map.sincechange = 0) : x = pushRandomSectionTrees, pushPreThing(GenerationStarter, e + 8 * (t + randSign()), ceilmax + 20, x), spawnMap(), map.treelev = n
+}
+
+function pushRandomSmallEnemy(e, t, n) {
+ switch (randTrue(7)) {
+ case 1:
+ case 2:
+ case 3:
+ pushPreThing(Koopa, e, t + 12, !0, n);
+ break;
+ case 7:
+ pushPreThing(Beetle, e, t + 8.5);
+ break;
+ default:
+ pushPreThing(Goomba, e, t + 8)
+ }
+}
+
+function pushRandomSectionUnderworld(e) {
+ var t, n, x = max(randTrue(117), 1),
+ r = 14,
+ i = x - x % r;
+ floor(x / r);
+ if (pushPreFloor(e, 0, x), window.randcount_powerup = 3, x < r) switch (randTrue()) {
+ case 0:
+ for (t = 0; t < x - 2; t += 3) pushRandomChunkEnemy(e + 8 * t, 0, t);
+ break;
+ case 1:
+ for (t = 0; t < x - 2; t += 3) randTrue(2) ? t % 3 == 0 && pushRandomChunkEnemy(e, t) : pushRandomObstacle(e, t)
+ } else
+ for (t = 1; t < i; t += r) switch (randTrue(5)) {
+ case 0:
+ pushRandomUnderworldSquigglies(e + 8 * t, r), makeCeiling(e + 8 * t, r);
+ break;
+ case 1:
+ var a = 1 + randTrue(),
+ o = 4 + randTrue(7);
+ for (t += a, n = 0; n < r; n += 1 + randTrue() / 2) randTrue() && pushRandomSmallEnemy(e + 8 * (t + n), 0);
+ fillPreThing(Brick, e + 8 * t, 8 * o, 13, 12 - o, 8, 8), t -= a;
+ break;
+ case 2:
+ createTunnel(e + 8 * (t + 2), 10, Brick);
+ break;
+ case 3:
+ pushUnderworldPipes(e + 8 * (t + 2), 12), makeCeiling(e + 8 * (t + 1), r);
+ break;
+ case 4:
+ pushUnderworldStones(e + 8 * (t + 2), 12), makeCeiling(e + 8 * (t + 1), r);
+ break;
+ case 5:
+ for (n = 0; n < 10; n += 3) pushRandomChunkEnemy(e + 8 * (t + n), n);
+ break;
+ case 6:
+ for (n = 0; n < x - 2; n += 3) randTrue(2) ? (t % 3 == 0 || randTrue()) && (pushRandomChunkEnemy(e + 8 * (t + n), n), ++numenemychunks) : pushRandomObstacle(e + 8 * (t + n), n)
+ }
+ prepareNextGeneratorStandard(e, x, pushRandomSectionUnderworld, !0), spawnMap()
+}
+
+function pushRandomUnderworldSquigglies(e, t, n, x) {
+ n = n || 1 / 0;
+ for (var r = 3 + randTrue(2), i = min(n, r + 1 + randTrue(4)), a = 1 == r ? i : randTrue(2) ? r : i, o = 1 + i - r, l = !1, s = i + 16, d = 0; d < t; ++d) {
+ if (randTrue()) {
+ for (var u = 0; u < 3; ++u) pushPreThing(Brick, e + 8 * (d + u), 8 * a, randTrue() ? null : getRandomBrickItem());
+ !x && randTrue(2) && fillPreThing(Coin, e + 1 + 8 * d, 8 * min(s, a + randTrue(4) + 1) - 1, 3 + randTrue(), 1, 8), l || (randTrue() ? pushPreThing(Block, e + 8 * (d + 3), 8 * a, getRandomBlockItem()) : pushPreThing(Brick, e + 8 * (d + 3), 8 * a), l = !0), d += 3
+ } else fillPreThing(Brick, e + 8 * d, 8 * r, 1, o, 8, 8), a = a == i ? r : i, l = !1;
+ (d % 3 == 1 || randTrue() && d < t - 3) && pushRandomSmallEnemy(e + 8 * d, 0, !1)
+ }
+}
+
+function pushUnderworldPipes(e, t) {
+ var n, x, r, i = t - 4,
+ a = !1;
+ for (r = 0; r < i; r += 4) switch (randTrue()) {
+ case 0:
+ addPipeRandom(e + 8 * (r + (n = randTrue())), 0, 8 * (2 + randTrue(2))), r += 1 - n, a = !0;
+ break;
+ case 1:
+ n = randTrue() || !a, x = 4 + randTrue(4), n && pushPreThing(Brick, e + 8 * r, 8 * max(x - 4, 3 + randTrue()), getRandomBrickItem(!1)), addPipeRandom(e + 8 * (r + n), 0, 8 * x), a = !1
+ }
+ for (; r < t - 1; ++r) randTrue() && pushRandomChunkEnemy(e + 8 * r, 0)
+}
+
+function pushUnderworldStones(e, t) {
+ var n, x, r, i = t - 4,
+ a = !1;
+ for (r = 0; r < i; r += 2) switch (randTrue()) {
+ case 0:
+ pushPreThing(Stone, e + 8 * (r + (n = randTrue())), 8 * (x = 2 + randTrue(2)), 1, x), r += 1 - n, a = !0;
+ break;
+ case 1:
+ n = randTrue() || !a, x = 4 + randTrue(4), n && pushPreThing(Brick, e + 8 * r, 8 * max(x - 4, 3 + randTrue()), getRandomBrickItem(!1)), pushPreThing(Stone, e + 8 * (r + n), 8 * x, 1, x), a = !1
+ }
+ for (; r < t - 1; r += 3) randTrue() && pushRandomChunkEnemy(e + 8 * r, 0)
+}
+
+function pushRandomSectionUnderwater(e) {
+ var t = max(randTrue(117), 7);
+ pushPreFloor(e, 0, t -= t % 3), pushPreScenery("Water", e, ceilmax - 21, 8 * t / 3, 1), pushPreThing(WaterBlock, e, ceilmax, 8 * t), window.randcount_powerup = 3;
+ for (var n = 0; n < t; n += 4) {
+ switch (randTrue(21)) {
+ case 0:
+ if (n < t - 2) {
+ pushRandomObstacle(e, n);
+ break
+ }
+ case 1:
+ pushRandomEnemy(e, 0, n, !0);
+ break;
+ default:
+ switch (randTrue(7)) {
+ case 0:
+ var x = randTrue() + 2,
+ r = randTrue() + 2;
+ pushPreThing(Stone, e + 8 * n, 8 * r, randTrue(3) + 1, r), pushPreThing(Stone, e + 8 * n, ceillev, randTrue(3) + 1, x);
+ break;
+ case 1:
+ randTrue() && pushPreThing(Stone, e + 8 * n, jumplev1, 4), randTrue() && pushPreThing(Stone, e + 8 * n, jumplev2, 4);
+ break;
+ case 2:
+ fillPreThing(Coin, e + 8 * (n + randTrue()) + 1, 8 * (randTrue(8) + 1) - 1, 3, 1, 8);
+ break;
+ default:
+ if (map.had_coral) {
+ map.had_coral = !1;
+ break
+ }
+ map.had_coral = !0;
+ var i, a = randTrue(3) + 2,
+ o = jumplev1 * (1 + randTrue(2)),
+ l = e + 8 * n;
+ if (o == 3 * jumplev1) {
+ var s = !0;
+ o -= 8
+ }
+ pushPreThing(Stone, e + 8 * n, o, a), i = !s && (randTrue(3) || a <= 3) ? o + 24 : o - 8, randTrue() && pushPreThing(Coral, l, i, 3), randTrue() && a > 3 && o < 64 && pushPreThing(Coral, l + 8 * (a - 1), i, 3), a >= 3 && (n += a - 3)
+ }
+ }
+ map.countCheep > 1 && (pushPreThing(CheepCheep, e + 8 * n, randTrue(80) + 8, randTrue()), map.countCheep = 0), map.countBlooper > 7 && (pushPreThing(Blooper, e + 8 * n, randTrue(80) + 8), map.countBlooper = 0), randTrue(7) && ++map.countCheep, randTrue(3) && ++map.countBlooper
+ }
+ if (++map.sincechange < 3) {
+ var d = prepareNextGeneratorStandard(e, t, pushRandomSectionUnderwater, !1, !0);
+ pushPreScenery("Water", e + 8 * t, ceilmax - 21, 8 * (d + 1) / 3, 1), pushPreThing(WaterBlock, e + 8 * t, ceilmax, 8 * (d + 1))
+ } else endRandomSectionUnderwater(e + 8 * t)
+}
+
+function endRandomSectionUnderwater(e) {
+ pushPreFloor(e, 0, 19), pushPreScenery("Water", e, ceilmax - 21, 28, 1), pushPreThing(WaterBlock, e, ceilmax, 157.5), pushPreThing(Stone, e, 8, 5, 1), pushPreThing(Stone, e + 8, 16, 4, 1), pushPreThing(Stone, e + 16, 24, 3, 1), pushPreThing(Stone, e + 24, 32, 2, 1), pushPreThing(Stone, e + 24, 88, 2, 4), pushPreThing(PipeSide, e + 32, 48, ["Random", randTrue() ? "Overworld" : "Underworld", "Up"]), pushPreThing(Stone, e + 40, 88, 14, 11), map.scrollblockerok = !0, pushPreThing(ScrollBlocker, e + 56, 80, !0), spawnMap()
+}
+
+function startRandomSectionSky(e) {
+ pushPreThing(Stone, e, 0, 78), pushPreThing(Platform, e + 88, 24, 6, [collideTransport]), pushRandomSectionSky(e + 80, 1), spawnMap()
+}
+
+function pushRandomSectionSky(e, t) {
+ if (t++ > 7) return fillPreThing(Coin, e + 8, 8, 3, 1, 8), spawnMap();
+ var n = 0;
+ if (t % 2) fillPreThing(Coin, e + 1, 71, 3, 1, 8), n = 32;
+ else switch (randTrue(t)) {
+ case 3:
+ pushPreThing(Stone, e + 8, 48, 1, 2), fillPreThing(Coin, e + 25, 63, 7, 1, 8), pushPreThing(Stone, e + 88, 48, 1, 2), n = 104;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ pushPreThing(Stone, e + 8, 56, 2);
+ for (var x = 0; x <= 7; x += 2) pushPreThing(Stone, e + 8 * (x + 5), 56), fillPreThing(Coin, e + 8 * (x + 5) + 1, 63, 2, 1, 8);
+ n = 104;
+ break;
+ default:
+ fillPreThing(Coin, e + 1, 55 + 8 * randTrue(), 16, 1, 8), n = 128
+ }
+ pushPreThing(GenerationStarter, e + n, ceilmax + 20, pushRandomSectionSky, t), spawnMap()
+}
+
+function prepareNextGeneratorStandard(e, t, n, x, r) {
+ var i = 0,
+ a = 0;
+ if (r) i = 1;
+ else switch (randTrue(7)) {
+ case 0:
+ t > 7 && map.underwater && !randTrue(7) ? (i = randTrue(3) + 7, pushPreThing(Springboard, e + 8 * (t - 1), 14.5)) : a = !0;
+ break;
+ case 1:
+ var o = max(1, randTrue(7));
+ i = o + randTrue(3), pushPreFloor(e + 8 * t, 0, o);
+ for (var l = 1; l <= o; ++l) pushPreThing(Stone, e + 8 * (t + l - 1), 8 * l, 1, l);
+ if (randTrue()) {
+ pushPreFloor(e + 8 * (t + i + (o = max(1, randTrue(o))) - 1), 0, o);
+ for (var s = 0; s < o; ++s) pushPreThing(Stone, e + 8 * (t + i + o + s - 1), 8 * (o - s), 1, o - s);
+ i += o + o - 2
+ }
+ break;
+ default:
+ x && randTrue() ? pushPrePlatformGenerator(e + 8 * (t + 1.5), 2 * ((i = randTrue(1) + 4) - 2), randSign()) : a = !0
+ }
+ return (a || !i || i < 1) && (i = randTrue(3) + 1), n == pushRandomSectionOverworld && map.num_random_sections >= 3 + randTrue(7) && (n = pushRandomSectionPreCastle), !r && ++map.sincechange > 3 && (n = getRandomNextSection(), map.sincechange = 0, pushPreFuncCollider(e, zoneDisableCheeps)), pushPreThing(GenerationStarter, e + 8 * (t + i), ceilmax + 20, n), spawnMap(), i
+}
+
+function getRandomNextSection() {
+ switch (randTrue()) {
+ case 0:
+ return map.treeheight = 0, pushRandomSectionTrees;
+ case 1:
+ return startRandomSectionBridge
+ }
+}
+
+function pushRandomChunkEnemy(e, t, n) {
+ pushRandomEnemy(e, 0, t, n), randTrue(2) && (pushRandomSolidRow(e + 8 * t, jumplev1, randTrue(2) + 1), randTrue() && pushRandomEnemy(e, jumplev1, t + 1, !0), randTrue() && (pushRandomSolidRow(e + 8 * t, jumplev2, randTrue(2) + 1), randTrue() && pushRandomEnemy(e, jumplev2, t + 1, !0)))
+}
+
+function pushRandomEnemy(e, t, n, x) {
+ switch (randTrue(14)) {
+ case 0:
+ case 1:
+ fillPreThing(Beetle, e + 8 * n, t + 8.5, randTrue(2), 1, 12);
+ break;
+ case 3:
+ if (!x) {
+ switch (randTrue(4)) {
+ case 0:
+ pushPreThing(HammerBro, e + 8 * n, t + 12), randTrue() && pushPreThing(HammerBro, e + 8 * n + 16, t + 40);
+ break;
+ case 1:
+ if ("Underworld" != map.randname) {
+ pushPreThing(Lakitu, e + 8 * n, t + 80, !0);
+ break
+ }
+ case 2:
+ pushPreThing(Blooper, e + 8 * n, t + 40)
+ }
+ break
+ }
+ break;
+ default:
+ if (!randTrue(3)) return;
+ switch (randTrue(3)) {
+ case 1:
+ fillPreThing(Koopa, e + 8 * n, t + 12, randTrue(2), 1, 12, 0, randTrue() || map.onlysmartkoopas, randTrue());
+ break;
+ default:
+ fillPreThing(Goomba, e + 8 * n, t + 8, randTrue(2), 1, 12)
+ }
+ }
+}
+
+function addPipeRandom(e, t, n) {
+ var x;
+ x = !(n <= 24 || randTrue(2)) && getRandomTransport(), pushPrePipe(e, t, n, randTrue(7), x)
+}
+
+function getRandomTransport() {
+ var e, t = [
+ ["Overworld", "Up"],
+ ["Underworld", "Down"],
+ ["Underwater", "Up"]
+ ];
+ return t[e = randTrue(t.length - 1)][0] == map.randname && (e = (e + randTrue(t.length - 2) + 1) % t.length), ["Random", t[e][0], t[e][1]]
+}
+
+function getAfterSkyTransport() {
+ switch (randTrue(3)) {
+ case 0:
+ return ["Random", "Underworld", "Down"];
+ default:
+ return ["Random", "Overworld" + (body.className.indexOf(!0) ? " Night" : ""), "Down"]
+ }
+}
+
+function pushRandomObstacle(e, t) {
+ var n = randTrue(3);
+ switch (n > 1 && (map.hadPipe = !1), n) {
+ case 0:
+ case 1:
+ if (t > 1) {
+ addPipeRandom(e + 8 * t, 0, 8 * (randTrue(2 + (1 == map.hadObstacle && 0 == map.hadPipe && t > 7)) + 2)), map.hadObstacle = map.hadPipe = !0;
+ break
+ }
+ case 2:
+ for (var x = 0; x < 2; ++x) randTrue() || t < 1 || pushPreThing(Stone, e + 8 * (t + x), 8 * (r = randTrue(2) + 2), 1, r);
+ break;
+ default:
+ x = randTrue(2);
+ switch (randTrue(7)) {
+ case 0:
+ var r;
+ if (pushPreThing(Cannon, e + 8 * (t + x), 8 * (r = randTrue(2) + 1), r), 1 == r && randTrue(2) && 2 != x) {
+ var i = randTrue() + 2;
+ pushPreThing(Cannon, e + 8 * (t + x), 8 * r + 8 * i, i)
+ }
+ map.hadObstacle = !0;
+ break;
+ case 1:
+ if (!map.underwater) {
+ randTrue() && (!map.underwater && randTrue(2) && pushPreThing(Brick, e + 8 * t, jumplev1), pushPreThing(Block, e + 8 * (t + 1), jumplev1, [Mushroom, 1], !0), !map.underwater && randTrue(2) && pushPreThing(Brick, e + 8 * (t + 2), jumplev1), map.hadObstacle = !0);
+ break
+ }
+ case 2:
+ if (!map.underwater) {
+ var a = randTrue();
+ a || pushPreThing(Brick, e + 8 * t, jumplev1, getRandomBrickItem()), pushPreThing(Stone, e + 8 * (t + a), jumplev1, 2), addPipeRandom(e + 8 * (t + a), jumplev1, 24 + 8 * randTrue()), a && pushPreThing(Brick, e + 8 * t, jumplev1, getRandomBrickItem());
+ break
+ }
+ }
+ }
+}
+
+function pushRandomSolidRow(e, t, n) {
+ for (var x = 0; x < n; ++x) randTrue(2) ? pushPreThing(Brick, e + 8 * x, t, getRandomBrickItem("Overworld" == map.randname && t == jumplev2)) : pushPreThing(Block, e + 8 * x, t, getRandomBlockItem())
+}
+
+function getRandomBrickItem(e, t) {
+ return e && !randTrue(14) ? [Vine, ["Random", "Sky", "Vine"]] : !(!t && randTrue(7)) && (randTrue(3) ? Coin : Star)
+}
+
+function getRandomBlockItem() {
+ return ++randcount_powerup, !(randcount_powerup <= 7) && (!randTrue(7) && Mushroom)
+}
+
+function pushRandomGroundScenery(e, t, n) {
+ switch (randTrue(7)) {
+ case 2:
+ if (n - t > 4) {
+ pushPreScenery("Bush3", e, 0);
+ break
+ }
+ case 1:
+ if (n - t > 2) {
+ pushPreScenery("Bush2", e, 0);
+ break
+ }
+ case 0:
+ pushPreScenery("Bush1", e, 0);
+ break;
+ case 3:
+ if (n - t > 4) {
+ pushPreScenery("HillLarge", e, 0);
+ break
+ }
+ case 4:
+ pushPreScenery("HillSmall", e, 0);
+ break;
+ case 5:
+ pushPreScenery("PlantLarge", e, 0);
+ break;
+ case 6:
+ pushPreScenery("PlantSmall", e, 0);
+ break;
+ case 7:
+ pushPreScenery("Fence", e, 0, randTrue(2) + 1)
+ }
+}
+
+function pushRandomSkyScenery(e) {
+ switch (randTrue(2)) {
+ case 0:
+ pushPreScenery("Cloud1", e, 8 * (randTrue(5) + 5));
+ break;
+ case 1:
+ pushPreScenery("Cloud2", e, 8 * (randTrue(4) + 6));
+ break;
+ case 2:
+ pushPreScenery("Cloud3", e, 8 * (randTrue(3) + 7))
+ }
+}
+
+function addDistanceCounter() {
+ counter = createElement("div", {
+ className: "indisplay counter randomdisplay",
+ innerText: data.traveledold + " blocks traveled"
+ }), body.appendChild(counter), TimeHandler.addEventInterval((function(e) {
+ data.traveled = max(0, Math.round((player.right + gamescreen.left) / unitsizet8) - 3), e.innerText = data.traveledold + data.traveled + " blocks traveled"
+ }), 3, 1 / 0, counter)
+}
+
+function addSeedDisplay() {}
+
+function createTunnel(e, t, n) {
+ for (var x = randTrue(2) + 3, r = randTrue(2) + 2, i = !1, a = 0; a < t; ++a) fillPreThing(n, e + 8 * a, 8, 1, r, 8, 8), randTrue(3) || i ? i = !1 : pushRandomSmallEnemy(e + 8 * a, 8 * r), fillPreThing(n, e + 8 * a, 96 - 8 * x, 1, x, 8, 8)
+}
+
+function removeRandomDisplays() {
+ var e, t = body.getElementsByClassName("randomdisplay");
+ for (e = t.length - 1; e >= 0; --e) body.removeChild(t[e])
+}
+
+function resetLibrary() {
+ window.palette = [
+ [0, 0, 0, 0],
+ [255, 255, 255, 255],
+ [0, 0, 0, 255],
+ [188, 188, 188, 255],
+ [116, 116, 116, 255],
+ [252, 216, 168, 255],
+ [252, 152, 56, 255],
+ [252, 116, 180, 255],
+ [216, 40, 0, 255],
+ [200, 76, 12, 255],
+ [136, 112, 0, 255],
+ [124, 7, 0, 255],
+ [168, 250, 188, 255],
+ [128, 208, 16, 255],
+ [0, 168, 0, 255],
+ [24, 60, 92, 255],
+ [0, 128, 136, 255],
+ [32, 56, 236, 255],
+ [156, 252, 240, 255],
+ [60, 188, 252, 255],
+ [92, 148, 252, 255],
+ [0, 130, 0, 255]
+ ], window.digitsize = getDigitSize(palette), window.filters = {
+ Underworld: ["palette", {
+ "05": "18",
+ "09": "16"
+ }],
+ Castle: ["palette", {
+ "02": "04",
+ "05": "01",
+ "09": "03"
+ }],
+ Alt: ["palette", {
+ 11: "01"
+ }],
+ Alt2: ["palette", {
+ "02": "04",
+ "05": "01",
+ "09": "03",
+ 13: "01",
+ 19: "08"
+ }],
+ star: {
+ one: ["palette", {}],
+ two: ["palette", {
+ "06": "02",
+ "08": "05",
+ 10: "09"
+ }],
+ three: ["palette", {
+ "06": "01",
+ "08": "06",
+ 10: "08"
+ }],
+ four: ["palette", {
+ "06": "01",
+ "08": "06",
+ 10: "14"
+ }]
+ },
+ smart: ["palette", {
+ 14: "08"
+ }]
+ }, window.library = {
+ rawsprites: {
+ characters: {
+ Eraser: "p[7,7,7,7]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",
+ Beetle: {
+ normal: {
+ normal: "p[0,2,5,8]x022,1111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00222331133322200222203333002222",
+ two: "p[0,2,5,8]x07,111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00022331133322x05,22233330222x06,22x05,22000"
+ },
+ Underworld: {
+ normal: "p[0,15,16,18]x022,1111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00333221122233300333302222003333",
+ two: "p[0,15,16,18]x07,111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00033221122233x05,33322220333x06,33x05,33000"
+ },
+ Castle: {
+ normal: "p[0,1,3,4]x022,3333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00111223322211100111102222001111",
+ two: "p[0,1,3,4]x07,333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00011223322211x05,11122220111x06,11x05,11000"
+ }
+ },
+ BeetleShell: {
+ normal: "p[0,2,5,8]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",
+ Underworld: "p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",
+ Castle: "p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"
+ },
+ Blooper: {
+ normal: {
+ normal: "p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,x210,x06,2x18,2x06,1221111221x06,2112112112x06,2112112112x05,212211112212000022332222332200003x210,30000220x26,022000032032002302300002202200220220000320320023023x05,2022002202x06,2032002302x06,2002002002x09,2002x06,",
+ squeeze: "p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,2x18,200003x25,11x25,30x216,32223x26,322232222022002202222032203200230223000222020020222x05,2202002022000"
+ },
+ Underwater: {
+ normal: "p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,x110,x06,1x28,1x06,2112222112x06,1221221221x06,1221221221x05,121122221121000011331111331100003x110,30000110x16,011000031031001301300001101100110110000310310013013x05,1011001101x06,1031001301x06,1001001001x09,1001x06,",
+ squeeze: "p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,1x28,100003x15,22x15,30x116,31113x16,311131111011001101111031103100130113000111010010111x05,1101001011000"
+ }
+ },
+ Bowser: {
+ normal: {
+ normal: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",
+ two: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"
+ },
+ firing: {
+ normal: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",
+ two: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"
+ }
+ },
+ BowserFire: "p[0,1,6,8]x010,x36,003x010,x316,x06,x35,22332222332222x315,x25,111133x05,3333x213,13000x313,2223333x05,x39,0x36,x09,3300333033003x06,",
+ BrickShard: {
+ normal: "p[0,2,9]0021200002221200212121202212221222212221022212220021212000022200",
+ Underworld: ["filter", ["characters", "BrickShard", "Overworld"], filters.Underworld],
+ Castle: ["filter", ["characters", "BrickShard", "Overworld"], filters.Castle]
+ },
+ BulletBill: "p[0,2,5,8]110x17,x06,2201x25,1110000113x16,2111000112x19,2100113x19,22101131133x15,2121113132212111121111313x26,x17,3111x25,x17,31111222x15,0113x111,00113x110,000110x19,0000110x17,x06,",
+ Bubble: "p[0,1]0110100110010110",
+ CastleFireBall: ["same", ["characters", "FireBall"]],
+ CheepCheep: {
+ normal: {
+ normal: "p[0,1,3,6]0003333x013,x35,011x07,x26,11110000121122221111000x16,222111100012121122x15,0001212112211110000x16,221112x05,1211x27,0000333x210,0000233x29,00300233x28,3330023311x26,333033331112222333000x18,20333x05,x15,0000300",
+ two: "p[0,1,3,6]0003333x013,x35,x010,x26,3x07,1211x25,x06,x16,x25,111001212112222x15,0121211222x16,0x16,22x16,0001211222x16,00333x210,0300233x29,33000233x28,3300023311x26,300033331112222330000x18,203x07,x15,x07,"
+ },
+ red: {
+ normal: "p[0,1,6,8]0002222x013,x25,x010,x36,2x07,1311x35,x06,x16,x35,111001313113333x15,0131311333x16,0x16,33x16,0001311333x16,00222x310,0200322x39,22000322x38,2200032211x36,200022221113333220000x18,302x07,x15,x07,",
+ two: "p[0,1,6,8]0002222x013,x25,011x07,x36,11110000131133331111000x16,333111100013131133x15,0001313113311110000x16,331113x05,1311x37,0000222x310,0000322x39,00200322x38,2220032211x36,222022221113333222000x18,30222x05,x15,0000200"
+ }
+ },
+ Coin: {
+ normal: {
+ normal: {
+ normal: "p[0,2,6,8]00222211000x26,11002233221102232212211223221221122322122112232212211223221221122322122112232212211223221221102211221100x26,1100022221100",
+ two: "p[0,2,8]00222211000x26,1100x26,110x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,1221102211221100x26,1100022221100",
+ three: "p[0,2,9,11]00333311000x36,11003322331103323313311332331331133233133113323313311332331331133233133113323313311332331331103311331100x36,1100033331100"
+ },
+ Underworld: {
+ normal: "p[0,6,9,16]00111133000x16,33001122113301121131133112113113311211311331121131133112113113311211311331121131133112113113301133113300x16,3300011113300",
+ two: "p[0,9,16]00111122000x16,2200x16,220x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,2112201122112200x16,2200011112200",
+ three: "p[0,9,11,16]00222233000x26,33002211223302212232233221223223322122322332212232233221223223322122322332212232233221223223302233223300x26,3300022223300"
+ }
+ },
+ anim: {
+ normal: "p[0,1,7]000012x08,12x07,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x07,12x08,120000",
+ anim2: "p[0,1,6,7]000022x07,2222x05,x26,000022132200022122322002212232200221223220022122322002212232200221223220002213220000x26,x05,2222x07,220000",
+ anim3: "p[0,1,6,7]000023x08,23x07,2333x06,2333x06,2333x06,2333x06,1333x06,1333x06,2333x06,2333x06,2333x06,2333x07,23x08,230000",
+ anim4: "p[0,1,6]x05,2x09,2x09,2x09,2x09,2x09,2x09,1x09,1x09,2x09,2x09,2x09,2x09,2x09,20000"
+ }
+ },
+ FireBall: {
+ normal: "p[0,1,6,8]0303330000303330300032330033322303322123032212330332233000333300",
+ two: "p[0,1,6,8]x05,3000333000333233030322230033212x36,2122330332233000333300",
+ three: "p[0,1,6,8]0033330003322330332122303212233032233300332300030333030000333030",
+ four: "p[0,1,6,8]0033330003322330332212x36,2123300322230303323330003330003x05,"
+ },
+ FireFlower: {
+ normal: {
+ normal: "p[0,1,6,8,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
+ two: "p[0,2,5,9,14]0000x28,x06,x212,000222x38,222022333x16,3332222333x16,333220222x38,222000x212,x06,x28,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
+ three: "p[0,6,8,10,14]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
+ four: "p[0,1,6,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"
+ },
+ Underworld: {
+ normal: "p[0,1,6,8,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
+ two: "p[0,15,16,18]0000x38,x06,x312,000333x28,333033222x16,2223333222x16,222330333x28,333000x312,x06,x38,x011,22x07,222000022000022202220002200022200222200220022220002222022022220000222202202222x05,x210,x09,2222x06,",
+ three: "p[0,6,8,10,16]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
+ four: "p[0,5,9,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"
+ }
+ },
+ Firework: ["same", ["solids", "Firework"]],
+ Goomba: {
+ normal: "p[0,2,5,9]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",
+ Underworld: "p[0,15,16,18]x06,2222x011,x26,x09,x28,x07,x210,x05,211x26,11200022231222213222002223x16,32220222231322313x28,33322333x220,02222x36,2222x05,x38,x06,11x38,x05,x15,x35,110000x16,333111x05,x15,001110000",
+ Castle: ["filter", ["characters", "Goomba", "Overworld"], filters.Castle]
+ },
+ Hammer: {
+ normal: "p[0,2,5,8]x08,2x014,12101x010,111101x09,1122232x09,1211131x08,x16,31x08,10011131x09,x15,01x012,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x07,",
+ two: "p[0,2,5,8]x073,11x013,10111x011,101211x010,11112110x28,11112122x08,1111211x010,3333x011,1111211x065,",
+ three: "p[0,2,5,8]x07,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x012,10x15,x09,13111001x08,13x16,x08,1311121x09,2322211x09,101111x010,10121x014,2x08,",
+ four: "p[0,2,5,8]x065,1121111x011,3333x010,1121111x08,22121111x28,01121111x010,112101x011,11101x013,11x073,"
+ },
+ HammerBro: {
+ normal: {
+ normal: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
+ two: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,1211333300002221231x36,x06,10311133313x06,3322113231x06,3222212331x06,3x25,32313x05,33x25,3233x05,33312222322x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
+ },
+ throwing: {
+ normal: "p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
+ two: "p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
+ },
+ thrown: {
+ normal: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
+ two: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,113333220022223313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
+ }
+ },
+ Koopa: {
+ normal: {
+ normal: {
+ flying: {
+ normal: "p[0,1,6,14]x019,1x09,11000111x07,1111001112x05,x15,0231122000x15,0023112200112110002311220012111100211122011211110222122201211110023x25,012111010x26,0012x15,022202203312111002200220331113330220221333232333002022133233323200002212x36,23000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
+ two: "p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,2211120011100002322122011211000x27,0121111002220022012x15,022000213x17,x05,22133x17,00022133331131110222213332323311002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
+ },
+ normal: {
+ normal: {
+ normal: "p[0,1,6,14]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
+ two: "p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
+ },
+ Underworld: {
+ normal: "p[0,5,9,16]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
+ two: "p[0,5,9,16]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
+ }
+ }
+ },
+ smart: ["filter", ["characters", "Koopa", "normal", "normal"], filters.smart]
+ },
+ Castle: ["filter", ["characters", "Koopa", "normal"], filters.Castle]
+ },
+ Lakitu: {
+ normal: "p[0,1,6,14]x05,x25,x010,x27,x08,333233322x06,3111311132x06,3x17,323x05,3113131132330000311313113233x05,3332x37,x05,222333322233000x25,33x25,3003x25,11x25,30031222111122213003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000",
+ hiding: "p[0,1,6,14]x0131,2220000222x05,x25,33x25,0000x25,11x25,00003222111122230003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000"
+ },
+ Mario: {
+ dead: "p[0,6,8,10]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",
+ normal: {
+ normal: {
+ normal: "p[0,6,8,10]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",
+ hopping: ["same", ["characters", "Mario", "normal", "normal", "running", "normal", "two"]],
+ jumping: "p[0,6,8,10]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",
+ running: {
+ skidding: "p[0,6,8,10]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",
+ normal: {
+ normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",
+ two: "p[0,6,8,10]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",
+ three: "p[0,6,8,10]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",
+ paddle1: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",
+ paddle2: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",
+ paddle3: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"
+ },
+ swim2: {
+ normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",
+ paddle1: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",
+ paddle2: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",
+ paddle3: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,6,8,10]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",
+ two: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"
+ }
+ },
+ large: {
+ normal: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",
+ jumping: "p[0,6,8,10]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",
+ hopping: ["same", ["characters", "Mario", "normal", "large", "running", "normal", "two"]],
+ crouching: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",
+ running: {
+ skidding: "p[0,6,8,10]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",
+ normal: {
+ normal: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",
+ two: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",
+ three: "p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
+ paddle1: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
+ paddle2: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
+ paddle3: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"
+ },
+ swim2: {
+ normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
+ paddle1: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",
+ paddle2: "p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",
+ paddle3: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",
+ two: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"
+ }
+ },
+ fiery: {
+ normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",
+ jumping: "p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",
+ hopping: ["same", ["characters", "Mario", "normal", "fiery", "running", "normal", "three"]],
+ crouching: "p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",
+ firing: ["same", ["characters", "Mario", "normal", "fiery", "running", "normal", "two"]],
+ running: {
+ skidding: "p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",
+ normal: {
+ normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",
+ two: "p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",
+ three: "p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
+ paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
+ paddle2: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
+ paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"
+ },
+ swim2: {
+ normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
+ paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",
+ paddle2: "p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",
+ paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",
+ two: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"
+ }
+ },
+ shrooming: {
+ normal: "p[0,6,8,10]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",
+ shrooming2: "p[0,6,8,10]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",
+ shrooming3: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"
+ }
+ },
+ star: {
+ normal: ["filter", ["characters", "Mario", "normal"], filters.star.one],
+ star2: ["filter", ["characters", "Mario", "normal"], filters.star.two],
+ star3: ["filter", ["characters", "Mario", "normal"], filters.star.three],
+ star4: ["filter", ["characters", "Mario", "normal"], filters.star.four]
+ }
+ },
+ Luigi: {
+ dead: "p[0,6,1,21]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",
+ normal: {
+ normal: {
+ normal: "p[0,6,1,21]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",
+ hopping: ["same", ["characters", "Luigi", "normal", "normal", "running", "normal", "two"]],
+ jumping: "p[0,6,1,21]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",
+ running: {
+ skidding: "p[0,6,1,21]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",
+ normal: {
+ normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",
+ two: "p[0,6,1,21]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",
+ three: "p[0,6,1,21]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",
+ paddle1: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",
+ paddle2: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",
+ paddle3: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"
+ },
+ swim2: {
+ normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",
+ paddle1: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",
+ paddle2: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",
+ paddle3: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,6,1,21]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",
+ two: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"
+ }
+ },
+ large: {
+ normal: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",
+ jumping: "p[0,6,1,21]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",
+ hopping: ["same", ["characters", "Luigi", "normal", "large", "running", "normal", "two"]],
+ crouching: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",
+ running: {
+ skidding: "p[0,6,1,21]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",
+ normal: {
+ normal: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",
+ two: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",
+ three: "p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
+ paddle1: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
+ paddle2: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
+ paddle3: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"
+ },
+ swim2: {
+ normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
+ paddle1: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",
+ paddle2: "p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",
+ paddle3: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",
+ two: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"
+ }
+ },
+ fiery: {
+ normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",
+ jumping: "p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",
+ hopping: ["same", ["characters", "Luigi", "normal", "fiery", "running", "normal", "three"]],
+ crouching: "p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",
+ firing: ["same", ["characters", "Luigi", "normal", "fiery", "running", "normal", "two"]],
+ running: {
+ skidding: "p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",
+ normal: {
+ normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",
+ two: "p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",
+ three: "p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
+ }
+ },
+ paddling: {
+ normal: {
+ normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
+ paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
+ paddle2: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
+ paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"
+ },
+ swim2: {
+ normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
+ paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",
+ paddle2: "p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",
+ paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"
+ }
+ },
+ climbing: {
+ normal: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",
+ two: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"
+ }
+ },
+ shrooming: {
+ normal: "p[0,6,1,21]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",
+ shrooming2: "p[0,6,1,21]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",
+ shrooming3: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"
+ }
+ },
+ star: {
+ normal: ["filter", ["characters", "Luigi", "normal"], filters.star.one],
+ star2: ["filter", ["characters", "Luigi", "normal"], filters.star.two],
+ star3: ["filter", ["characters", "Luigi", "normal"], filters.star.three],
+ star4: ["filter", ["characters", "Luigi", "normal"], filters.star.four]
+ }
+ },
+ Mushroom: {
+ normal: "p[0,1,6,8]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",
+ gainlife: "p[0,1,6,14]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",
+ deathly: "p[0,5,9,16]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,"
+ },
+ Pirhana: {
+ normal: {
+ normal: "p[0,6,14]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",
+ two: "p[0,1,6,14]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"
+ },
+ Underworld: {
+ normal: "p[0,9,16]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",
+ two: "p[0,5,9,16]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"
+ },
+ Castle: ["same", ["characters", "Pirhana", "Underworld"]]
+ },
+ Podoboo: "p[0,1,6,8]0000x36,x07,x38,x05,3332222333000333x26,33300332221122233033322111122x35,22x16,22333322x16,22333322x16,223333222111122233332222112222x35,232222323330x35,22x35,00x35,22x35,0003303333033x05,30033003000",
+ Shell: {
+ normal: {
+ normal: {
+ normal: "p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",
+ peeking: "p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100211x36,11200022211333311222002220x16,02220022000111100022002x012,20"
+ },
+ smart: ["filter", ["characters", "Shell", "normal", "normal"], filters.smart]
+ },
+ Underworld: {
+ normal: "p[0,5,9,16]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",
+ peeking: "p[0,5,6,9,16]x05,344443x09,44333344x07,4434444344x06,43x46,34x05,43x48,340000343x46,3430003444344443444300x45,3333x45,01114434444344x17,3x46,3111100211x46,11200022211444411222002220x16,02220022000111100022002x012,20"
+ },
+ Castle: ["same", ["characters", "Shell", "normal", "normal"]]
+ },
+ ShellBeetle: {
+ normal: "p[0,2,5,9]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",
+ Underworld: "p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",
+ Castle: "p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"
+ },
+ Spiny: {
+ normal: "p[0,1,6,8]x024,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,2220002222x06,2222",
+ two: "p[0,1,6,8]x08,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,22x06,222000222x08,22000220000"
+ },
+ SpinyEgg: {
+ normal: "p[0,1,6,8]x06,22x09,22322322x06,2x36,2x05,x310,00022311x35,22002311x37,200331x39,022x310,2222x310,220x39,133002x37,11320022x35,11322000x310,x05,2x36,2x06,22322322x09,22x06,",
+ two: "p[0,1,6,8]0000220022x08,233332x05,22x38,2200233311x35,20003311x36,0022331x37,2222x310,220x312,00x312,022x310,2222x37,1332200x36,11330002x35,1133320022x38,22x05,233332x08,2200220000"
+ },
+ Star: {
+ normal: "p[0,6,8]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110",
+ two: "p[0,2,9]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",
+ three: "p[0,5,8]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",
+ four: "p[0,6,14]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110"
+ },
+ Vine: ["multiple", "vertical", {
+ top: "p[0,6,14]00222x010,x25,x08,2211122x07,x25,12x09,222022x012,22x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,",
+ middle: "p[0,6,14]x06,22x012,22x012,22x08,220022x07,2222022x07,2111222x06,21x26,x06,x25,022x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,"
+ }]
+ },
+ solids: {
+ Axe: {
+ normal: "p[0,2,4,6,9]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",
+ two: "p[0,2,4,9]003x010,3000323300320033130032333322333313032x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,13032x35,23333130002330032000313000300002200003x09,32x014,22x014,32x014,22x014,32x07,",
+ three: "p[0,2,4,9,11]004x010,4000424400320044140042444422444414042x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,140424444324444140002440032000414000400002200004x09,32x014,22x014,32x014,22x014,32x07,"
+ },
+ Block: {
+ normal: {
+ normal: "p[0,2,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",
+ unused: {
+ normal: "p[0,2,6,9]0x314,03x214,1321x210,12132222x35,x25,132223311133222213222331223312221322233122331222132222112333122213x26,3311122213x26,331x25,13x27,11x25,13x26,33x26,13x26,331x25,1321x25,112221213x214,x117,",
+ two: "p[0,2,9]0x214,0x215,1221x210,121x215,1x26,111x26,1x26,1222212221x26,1222212221x25,11222212221x29,1112221x29,1x25,1x28,11x25,1x215,1x29,1x25,1221x25,11222121x215,x117,",
+ three: "p[0,2,9,11]0x214,02x314,1231x310,13123333x25,x35,123332211122333312333221332213331233322133221333123333113222133312x36,2211133312x36,221x35,12x37,11x35,12x36,22x36,12x36,221x35,1231x35,113331312x314,x117,"
+ }
+ },
+ Underworld: {
+ normal: "p[0,9,16]0x214,02x114,2212x110,2122x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,2212x110,2122x114,20x214,0",
+ unused: {
+ normal: "p[0,6,9,16]0x214,02x114,3213x110,31321111x25,x15,321112233322111132111223112231113211122311223111321111331222311132x16,2233311132x16,223x15,32x17,33x15,32x16,22x16,32x16,223x15,3213x15,331113132x114,x317,",
+ two: "p[0,9,16]0x114,0x115,2112x110,212x115,2x16,222x16,2x16,2111121112x16,2111121112x15,22111121112x19,2221112x19,2x15,2x18,22x15,2x115,2x19,2x15,2112x15,22111212x115,x217,",
+ three: "p[0,9,11,16]0x114,01x214,3123x210,32312222x15,x25,312221133311222231222113221132223122211322113222312222332111322231x26,1133322231x26,113x25,31x27,33x25,31x26,11x26,31x26,113x25,3123x25,332223231x214,x317,"
+ }
+ },
+ Castle: ["same", ["solids", "Block", "Underworld"]]
+ },
+ Brick: {
+ normal: {
+ normal: "p[2,5,9]x116,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,x27,0x27,0x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",
+ used: ["same", ["solids", "Block", "Overworld", "used"]]
+ },
+ Underworld: {
+ normal: "p[2,16]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",
+ used: ["same", ["solids", "Block", "Overworld", "used"]]
+ },
+ Castle: ["filter", ["solids", "Brick", "Overworld"], filters.Castle],
+ Alt2: ["filter", ["solids", "Brick", "Overworld"], filters.Alt2]
+ },
+ BridgeBase: "p[0,2,5,8]111000112221012222x35,222x35,222x35,222x35,22221012211100011",
+ Cannon: ["multiple", "vertical", {
+ top: "p[0,2,5,9]222x010,2222111x210,11222x110,x26,1x213,111x210,112x112,2112x112,2112x112,2112x15,22221112112111121111311211211121122113121121112121131312112111212113131211211121133113221122212x16,3122221102x16,302110002x18,3x06,2x18,3x05,2x110,300002x110,3000211x38,1130021333222233313021133x26,3313021133232232331132113233223323113211323322332311321132332233231132113x28,3113211333233233311321133322223331132111x38,11132x114,3",
+ middle: "p[2,5,9]1x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,2"
+ }],
+ CastleAxe: "p[0,2,4,6,8]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",
+ CastleBlock: "p[0,4,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",
+ CastleBridge: "p[1,2,4,8]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",
+ CastleChain: "p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",
+ CastleStone: {
+ normal: "p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",
+ Underwater: "p[2,12,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"
+ },
+ Cloud: "p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000",
+ Coral: "p[0,7,8]0000100012x05,110001000120000121001000112000120110100012000020001010011211112000101001x26,100021100120000221000221112x06,2x05,22120001x05,1000012001x06,1011012001000100101001120122010001100012120022000021001122000020000211112x011,22212x06,",
+ DeadGoomba: {
+ normal: "p[0,5,9,15]x06,2222x09,x210,000022333222233322022111133331111x218,000x110,x07,x18,x05,x35,0000x35,0",
+ Underworld: "p[0,15,16,18]x06,2222x09,x210,000022111222211122022333311113333x218,000x310,x07,x38,x05,x15,0000x15,0",
+ Castle: ["filter", ["solids", "DeadGoomba", "normal"], filters.Castle]
+ },
+ Firework: {
+ normal: "p[0,6,8]x070,2002x010,20222202x09,221122x09,22111122x08,22111122x09,221122x09,20222202x010,2002x070,",
+ n2: "p[0,1,6,8]x020,3x06,3x09,303303x09,x38,x06,303232232303x05,3321221233x06,3221111223x05,3332111123330000333211112333x05,3221111223x06,3321221233x05,303232232303x06,x38,x09,303303x09,3x06,3x020,",
+ n3: "p[0,1,6,8]00030033330030000300x38,003000x35,22x35,00303323233232330300323x26,32300033321211212333033232x16,232x35,22x16,22x36,22x16,22x35,232x16,23233033321211212333000323x26,32300303323233232330300x35,22x35,000300x38,00300003003333003000"
+ },
+ Flag: {
+ normal: "p[0,1,14]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",
+ Alt: "p[0,5,16]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",
+ Alt2: ["same", ["solids", "Flag", "Alt"]]
+ },
+ FlagPole: {
+ normal: "p[13]x0288,",
+ Alt: "p[1]x0288,",
+ Alt2: ["same", ["solids", "FlagPole", "Alt"]]
+ },
+ FlagTop: {
+ normal: "p[0,2,13,14]001111000123331012x35,112x35,11x36,11x36,10133331000111100",
+ Alt: "p[0,1,3,4]002222000213332021x35,221x35,22x36,22x36,20233332000222200",
+ Alt2: ["same", ["solids", "Flag", "Alt"]]
+ },
+ Floor: {
+ normal: "p[2,5,9]2x18,02111121x28,01222201x28,01222201x28,01222201x28,01022201x28,02000021x28,0x15,01x28,01222201x28,01222201x28,012222000x26,01x25,01100222201x25,0121100001x26,0122211101x26,01x26,01x25,002x06,21x06,2",
+ Underworld: "p[2,16,18]1x28,01222212x18,02111102x18,02111102x18,02111102x18,02011102x18,01000012x18,0x25,02x18,02111102x18,02111102x18,021111000x16,02x15,02200111102x15,0212200002x16,0211122202x16,02x16,02x15,001x06,12x06,1",
+ Underwater: "p[2,12,14]22x112,0221111x29,0011122111222211100122x15,2212221202112222011x25,0211222201x26,021x26,0x25,0221x26,0022201201x26,0000101011112222000100101222122220012011x25,02200122011x25,0200012001x25,001111220012220000122220022x06,2x07,2",
+ Castle: ["same", ["solids", "Stone", "Castle"]],
+ Alt2: ["filter", ["solids", "Floor", "Overworld"], filters.Alt2]
+ },
+ Peach: "p[0,1,2,6,8]x019,303303x010,x36,x09,x48,x07,x410,x07,4443234444x07,433233434x06,x37,434x07,x38,44x05,3444x35,44x05,34433334444x06,x36,4444x06,4413341444x05,44133111144x05,431111331440000x39,144x05,x37,1444x07,44111144x07,x110,x05,x112,0000x112,0001111x46,111100x414,00x45,1111x45,0",
+ Pipe: {
+ normal: ["multiple", "vertical", {
+ top: "p[0,2,13,14]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",
+ middle: "p[0,2,13,14]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"
+ }],
+ Castle: {
+ normal: ["multiple", "vertical", {
+ top: "p[0,1,3,4]x333,x130,33x25,x16,x219,3311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,121211x333,00x328,00",
+ middle: "p[0,1,3,4]00311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,1211300"
+ }],
+ Underwater: ["multiple", "vertical", {
+ top: "p[0,5,9,17]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",
+ middle: "p[5,9,17,20]33011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,1211033"
+ }]
+ },
+ Alt: ["same", ["solids", "Pipe", "Castle"]],
+ Alt2: ["same", ["solids", "Pipe", "Castle"]]
+ },
+ PipeSide: {
+ normal: "p[0,2,13,14]x115,x024,1x213,x122,0001x213,11x220,1001x213,11x220,1001x213,11x220,1001x313,11x221,101x313,11x321,101x213,11x321,101x213,11x221,101x213,11x221,101x213,11x222,11x213,11x222,11x313,11x222,11x213,11x322,11x213,11x222,11x213,11x222,11x213,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x321,101x313,11x321,101x313,11x321,101x313,11323232323232323232323101323232323232311232323232323232323232101232323232323211323232323232323232321001323232323232311x220,1001x213,11x220,1001x213,x122,000x115,x024,",
+ small: "p[0,2,13,14]x115,01x213,111x213,111x213,111x213,111x313,111x313,111x213,111x213,111x213,111x213,111x213,111x313,111x213,111x213,111x213,111x213,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111323232323232311123232323232321113232323232323111x213,111x213,x117,0"
+ },
+ PipeVertical: {
+ normal: "p[0,2,13,14]012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210",
+ Castle: {
+ normal: "p[0,1,3,4]00211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,1311200",
+ Underwater: "p[0,7,8,17]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"
+ }
+ },
+ Platform: {
+ normal: "p[0,1,6,9]x18,x38,220000222x05,322x05,32223333x210,x38,",
+ Sky: "p[0,1,6]001111000x15,2012x15,212x15,212211112112211220111122000222200"
+ },
+ Scale: {
+ normal: ["multiple", "horizontal", {
+ left: "p[0,2,5,9]000x27,00x28,0222333000022x35,00223331333022331113302233313330220x35,00220033300022x08,",
+ middle: "p[0,5]x120,x080,",
+ right: "p[0,2,5,9]x27,000x28,x05,333222000x35,22003331333220331113322033313332200x35,0220003330022x08,22"
+ }],
+ Alt: ["multiple", "horizontal", {
+ left: "p[0,1,2,9]000x17,00x18,0111333000011x35,00113332333011332223301133323330110x35,00110033300011x08,",
+ middle: "p[0,1]x120,x080,",
+ right: "p[0,1,2,9]x17,000x18,x05,333111000x35,11003332333110332223311033323331100x35,0110003330011x08,11"
+ }]
+ },
+ Springboard: {
+ normal: ["multiple", "vertical", {
+ top: "p[8]x032,",
+ topheight: 2,
+ middle: "p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",
+ bottom: "p[2,8,9]x132,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",
+ bottomheight: 9
+ }],
+ alt: ["multiple", "vertical", {
+ top: "p[8]x032,",
+ topheight: 2,
+ middle: "p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",
+ bottom: "p[3,4,8]x232,x07,1x07,1x07,1x07,x117,0001x07,1x07,1x07,1x07,1x07,10000x116,",
+ bottomheight: 9
+ }]
+ },
+ Stone: {
+ normal: "p[2,5,9]2x114,012x112,00112x110,0001112x18,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,0000111x09,200011x011,2001x013,2x016,2",
+ Underwater: ["same", ["solids", "Floor", "Underwater"]],
+ Underworld: ["filter", ["solids", "Stone", "Overworld"], filters.Underworld],
+ Castle: {
+ normal: "p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",
+ Underwater: "p[2,3,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"
+ },
+ Sky: "p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000"
+ },
+ Toad: "p[0,1,2,6,8]x06,1111x010,x18,x06,144411114441000114441441444110011441444414411044111144441111x45,1114444111x46,1111441111x46,x110,x45,1133233233114401143323323341100300x38,00303330333223330x37,443333443333003x410,300004444333344440000444x36,4440000444x36,444x05,x110,x05,x112,000444x18,444041444x16,4441x47,1111x412,1111x46,",
+ ShroomTop: ["multiple", "horizontal", {
+ left: "p[0,2,6,8]000x113,001x36,x27,01x37,x27,01x37,x27,1x38,x27,1x37,x28,1x37,222333221x36,222x35,21x35,222x37,1x28,x37,1x28,x37,1x29,x35,21x210,333221x215,011x213,000x113,",
+ middle: "p[2,6,8]x016,1x28,x18,x28,x19,x26,x132,x25,x110,x27,x19,x27,x18,x29,x17,x29,x17,x29,x17,x29,x18,x27,x19,x27,x110,x25,111x016,",
+ right: "p[0,2,6,8]x113,000x38,x25,100x38,x26,10x38,x26,10x38,222333212x36,222x35,1223333222x36,1x29,x36,1x29,x36,1x210,x35,1x211,33321x215,1x215,1x215,1x214,x117,0"
+ }],
+ TreeTop: {
+ normal: ["multiple", "horizontal", {
+ left: "p[0,2,13]00x114,011x213,01x214,11x214,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x26,1x27,1012222101x25,10001111000x15,00",
+ middle: "p[2,8,13]x016,x2199,0x27,00x25,010x25,011x05,111x05,11",
+ right: "p[0,2,13]x114,00x213,110x214,10x214,11x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,11x27,1x26,101x25,10122221000x15,000111100"
+ }],
+ Alt: ["multiple", "horizontal", {
+ left: "p[0,1,4]00x214,022x113,02x114,22x114,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x16,2x17,2021111202x15,20002222000x25,00",
+ middle: "p[1,3,4]x216,x0199,2x07,22x05,212x05,211x25,111x25,11",
+ right: "p[0,1,4]x213,000x113,200x114,20x114,20x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,22x17,2x16,202x15,20211112000x25,000222200"
+ }],
+ Alt2: ["same", ["solids", "TreeTop", "Alt"]]
+ },
+ WaterBlock: "20"
+ },
+ scenery: {
+ BrickHalf: {
+ normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",
+ Alt2: ["filter", ["scenery", "BrickHalf", "normal"], filters.Alt2]
+ },
+ BrickPlain: {
+ normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0",
+ Alt2: ["filter", ["scenery", "BrickPlain", "normal"], filters.Alt2]
+ },
+ BridgeBase: "p[0,2,5,9]111000112221012222x35,222x35,222x35,222x35,22221012211100011",
+ Bush1: "p[0,2,13,14]x014,1111x027,122221x024,11x26,1x022,1x28,101x020,1x29,121x019,1x26,3x25,1x017,122233222322221x016,12223x210,1x013,111x216,1001x08,1x219,10121x06,1x221,1221x06,x225,1010011x226,1211x230,11x230,101x228,10",
+ Bush2: "p[0,2,13,14]x014,1111x012,1111x027,122221x010,122221x024,11x26,1x07,11x26,1x022,1x28,10100001x28,101x020,1x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1x017,1222332223222210122233222322221x016,12223x210,112223x210,1x013,111x232,1001x08,1x235,10121x06,1x237,1221x06,x241,1010011x242,1211x246,11x246,101x244,10",
+ Bush3: "p[0,2,13,14]x014,1111x012,1111x012,1111x027,122221x010,122221x010,122221x024,11x26,1x07,11x26,1x07,11x26,1x022,1x28,10100001x28,10100001x28,101x020,1x29,1210001x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1001x26,3x25,1x017,12223322232222101222332223222210122233222322221x016,12223x210,112223x210,112223x210,1x013,111x248,1001x08,1x251,10121x06,1x253,1221x06,x257,1010011x258,1211x262,11x262,101x260,10",
+ CastleBridge: "p[1,2,4,9]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",
+ CastleChain: "p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",
+ CastleDoor: {
+ normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x15,x06,11110111x010,11011x012,1x017,1x014,11x014,1x0416,",
+ Alt2: ["filter", ["scenery", "CastleDoor", "normal"], filters.Alt2]
+ },
+ CastleRailing: {
+ normal: "p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111",
+ Alt2: ["filter", ["scenery", "CastleRailing", "normal"], filters.Alt2]
+ },
+ CastleRailingFilled: {
+ normal: "p[2,5,9]11112220222x15,222122202221x27,122202221x27,1x07,1x27,1x27,1x27,1x27,1x27,1x27,12222000x19,0000",
+ Alt2: ["filter", ["scenery", "CastleRailingFilled", "normal"], filters.Alt2]
+ },
+ CastleTop: {
+ normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,x025,1110x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,01111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,",
+ Alt2: ["filter", ["scenery", "CastleTop", "normal"], filters.Alt2]
+ },
+ CastleWall: {
+ normal: "p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,",
+ Alt2: ["filter", ["scenery", "CastleRailingFilled", "normal"], filters.Alt2]
+ },
+ Cloud1: {
+ normal: "p[0,1,2,19]x014,2222x027,211112x024,22x16,2x022,2x18,202x020,2x19,212x019,2x16,3x15,2x017,211133111311112x016,21113x110,2x013,222x116,2002x08,2x119,20212x06,2x121,2112x06,x125,2020022x126,2122x130,22x130,202x128,20002113x111,3x111,2x05,2113113x16,3x113,2x05,2113333111333311113x18,200002x15,x36,1x35,x19,x06,2221111331111333x18,22x09,2x16,2x18,21122x012,221112022111122022x016,22200002222x010,",
+ Alt2: ["filter", ["scenery", "Cloud1", "normal"], filters.Alt2]
+ },
+ Cloud2: {
+ normal: "p[0,1,2,19]x014,2222x012,2222x027,211112x010,211112x024,22x16,2x07,22x16,2x022,2x18,20200002x18,202x020,2x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2x017,2111331113111120211133111311112x016,21113x110,221113x110,2x013,222x132,2002x08,2x135,20212x06,2x137,2112x06,x141,2020022x142,2122x146,22x146,202x144,20002113x111,3x115,3x111,2x05,2113113x16,3x18,3x16,3x113,2x05,21133331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,21122x012,2211120221111220221112022111122022x016,22200002222x05,22200002222x010,",
+ Alt2: ["filter", ["scenery", "Cloud2", "normal"], filters.Alt2]
+ },
+ Cloud3: {
+ normal: "p[0,1,2,19]x014,2222x012,2222x012,2222x027,211112x010,211112x010,211112x024,22x16,2x07,22x16,2x07,22x16,2x022,2x18,20200002x18,20200002x18,202x020,2x19,2120002x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2002x16,3x15,2x017,21113311131111202111331113111120211133111311112x016,21113x110,221113x110,221113x110,2x013,222x148,2002x08,2x151,20212x06,2x153,2112x06,x157,2020022x158,2122x162,22x162,202x160,20002113x111,3x115,3x115,3x111,2x05,2113113x16,3x18,3x16,3x18,3x16,3x113,2x05,211333311133331111313331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,2x16,2x18,21122x012,22111202211112202211120221111220221112022111122022x016,22200002222x05,22200002222x05,22200002222x010,",
+ Alt2: ["filter", ["scenery", "Cloud3", "normal"], filters.Alt2]
+ },
+ Fence: "p[0,2,5,9]000023222331x08,2322333100003322232233312222333323223331333311112322333x15,000023223331x08,23223331x08,23232331x08,23232331x08,2323233100003322232323312222333323232331333311112322233x15,000023222331x08,23222331x08,232223310000",
+ HillLarge: "p[0,2,14]x037,x16,x071,111x26,111x066,11x212,11x063,1x213,1221x061,1x213,111221x059,1x214,1112221x057,1x215,11122221x055,1x213,112111x25,1x053,1x214,11221x27,1x051,1x215,11x211,1x049,1x216,11x212,1x047,1x232,1x045,1x234,1x043,1x236,1x041,1x238,1x039,1x240,1x037,1x242,1x035,1x244,1x033,1x246,1x031,1x213,1x223,1x210,1x029,1x213,111x221,111x210,1x027,1x214,111x221,111x211,1x025,1x215,111x221,111x212,1x023,1x213,112111x218,112111x213,1x021,1x214,11221x219,11221x215,1x019,1x215,11x222,11x219,1x017,1x216,11x222,11x220,1x015,1x264,1x013,1x266,1x011,1x268,1x09,1x270,1x07,1x272,1x05,1x274,10001x276,101x278,1",
+ HillSmall: "p[0,2,14]x021,x16,x039,111x26,111x034,11x212,11x031,1x213,1221x029,1x213,111221x027,1x214,1112221x025,1x215,11122221x023,1x213,112111x25,1x021,1x214,11221x27,1x019,1x215,11x211,1x017,1x216,11x212,1x015,1x232,1x013,1x234,1x011,1x236,1x09,1x238,1x07,1x240,1x05,1x242,10001x244,101x246,1",
+ Pirhana: ["same", ["characters", "Pirhana"]],
+ pirhana: ["same", ["characters", "Pirhana"]],
+ PlantLarge: {
+ normal: "p[0,2,5,13]x06,1111x010,11333311x07,1x38,1x05,1x310,10001x312,1001x312,101x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,101x312,1001x312,1001x312,10001x310,1000011x38,11x05,1113333111x07,x18,x09,x17,x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,12122121x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,121221210000",
+ Alt: "p[0,1,2,3,5]x06,3333x010,33111133x07,3x18,3x05,3x110,30003x112,3003x112,303x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,303x112,3003x112,3003x112,30003x110,3000033x18,33x05,3331111333x07,x38,x09,x37,x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,24244242x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,242442420000",
+ Alt2: ["same", ["solids", "PlantLarge", "Alt"]]
+ },
+ PlantSmall: {
+ normal: "p[0,2,5,13]x05,1111x08,11333311x05,1x38,10001x310,101x312,11x312,11x312,11x312,11x312,101x310,10011x38,110001113333111x05,x18,x07,x17,x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121000",
+ Alt: "p[0,1,2,3,5]x05,3333x08,33111133x05,3x18,30003x110,303x112,33x112,33x112,33x112,33x112,303x110,30033x18,330003331111333x05,x38,x07,x37,x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242000",
+ Alt2: ["same", ["solids", "PlantSmall", "Alt"]]
+ },
+ Railing: {
+ normal: "p[0,2,13]2x06,221x05,12010001220100012200111022x06,22x06,22x06,2",
+ Night: "p[0,1,3]1x06,112x05,21020002110200021100222011x06,11x06,11x06,1"
+ },
+ ShroomTrunk: ["multiple", "vertical", {
+ top: "p[2,5,9]0x114,00x114,00x114,00x114,00x114,00111121111211110021121211212112001221112211122100x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0",
+ middle: "p[2,5]0x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0"
+ }],
+ String: "x056,",
+ TreeTrunk: {
+ normal: "p[2,9]x120,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x140,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x120,",
+ Underworld: ["filter", ["scenery", "TreeTrunk", "normal"], filters.Underworld],
+ Alt2: ["filter", ["scenery", "TreeTrunk", "normal"], filters.Alt2]
+ },
+ Water: {
+ normal: "p[0,1,17]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
+ Underwater: "p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,",
+ Night: "p[2,1,19]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
+ Castle: {
+ normal: "p[0,1,8]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
+ Underwater: "p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,"
+ }
+ },
+ WaterFill: {
+ normal: {
+ normal: "p[17]x088,",
+ Night: "p[19]x088,"
+ },
+ Castle: "p[8]x088,"
+ }
+ }
+ },
+ cache: {},
+ posts: []
+ }, library.filters = filters, delete window.filters, library.sprites = libraryParse(library.rawsprites), libraryPosts()
+}
+
+function libraryParse(e) {
+ var t, n, x = {};
+ for (n in e) switch ((t = e[n]).constructor) {
+ case String:
+ x[n] = spriteGetArray(spriteExpand(spriteUnravel(t)));
+ break;
+ case Array:
+ library.posts.push({
+ caller: x,
+ name: n,
+ command: e[n]
+ });
+ break;
+ case Object:
+ x[n] = libraryParse(t)
+ }
+ return x
+}
+
+function libraryPosts() {
+ var e, t, n, x, r, i = library.posts;
+ for (r in i) t = (e = i[r]).caller, n = e.name, x = e.command, t[n] = evaluatePost(t, x, r)
+}
+
+function evaluatePost(e, t, n) {
+ switch (t[0]) {
+ case "same":
+ return followPath(library.sprites, t[1], 0);
+ case "filter":
+ return applyLibraryFilter(followPath(library.rawsprites, t[1], 0), t[2], n);
+ case "multiple":
+ return evaluatePostMultiple(t)
+ }
+}
+
+function applyLibraryFilter(e, t) {
+ switch (t[0]) {
+ case "palette":
+ return e.constructor == String ? spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(e), t[1]))) : applyPaletteFilterRecursive(e, t[1])
+ }
+}
+
+function applyPaletteFilterRecursive(e, t) {
+ var n, x, r = {};
+ for (x in e) switch ((n = e[x]).constructor) {
+ case String:
+ r[x] = spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(n), t)));
+ break;
+ case Object:
+ r[x] = applyPaletteFilterRecursive(n, t)
+ }
+ return r
+}
+
+function applyPaletteFilter(e, t) {
+ var n, x, r, i = "";
+ for (x = 0, r = e.length; x < r; x += digitsize) i += t[n = e.substr(x, digitsize)] || n;
+ return i
+}
+
+function evaluatePostMultiple(e) {
+ var t, n, x = e[1],
+ r = e[2],
+ i = new SpriteMultiple(x);
+ for (n in r) t = r[n], i[n] = "string" == typeof t ? spriteGetArray(spriteExpand(spriteUnravel(t))) : t;
+ return i
+}
+
+function SpriteMultiple(e) {
+ this.type = e, this.multiple = !0
+}
+
+function getDigitSize(e) {
+ return Number(String(e.length).length)
+}
+
+function startLoadingMaps() {
+ "file:" != window.location.protocol && passivelyLoadMap([1, 2], new XMLHttpRequest)
+}
+
+function passivelyLoadMap(e, t) {
+ if (!(!e || e[0] > 8 || e[1] <= 0)) {
+ var n = "Maps/World" + e[0] + e[1] + ".js";
+ t.open("GET", n, !0), mlog("Maps", "Requesting:", n), t.send(), t.onreadystatechange = function() {
+ if (4 == t.readyState) {
+ if (200 == t.status) mapfuncs[e[0]][e[1]] = Function(t.responseText), window.parentwindow && parentwindow.onMapLoad && (parentwindow.onMapLoad(e[0], e[1]), setTimeout((function() {
+ parentwindow.onMapLoad(e[0], e[1])
+ }), 2100)), mlog("Maps", " Loaded: Maps/World" + e[0] + e[1] + ".js");
+ else if (404 != t.status) return;
+ setTimeout((function() {
+ passivelyLoadMap(setNextLevelArr(e), t)
+ }), 7)
+ }
+ }
+ }
+}
+
+function setNextLevelArr(e) {
+ return 4 == e[1]++ && (++e[0], e[1] = 1), e
+}
+
+function resetMaps() {
+ var e;
+ window.currentmap = [1, 1], window.defaultsetting = {
+ setting: "Overworld"
+ }, window.mapfuncs = new Array(9);
+ for (var t, n = 1; n <= 9; ++n)
+ for (t = (e = mapfuncs[n] = [0, 0, 0, 0, 0]).length; t >= 0; --t) e[t] = window["World" + n + t];
+ mapfuncs.Random = {
+ Overworld: WorldRandomOverworld,
+ Underworld: WorldRandomUnderworld,
+ Underwater: WorldRandomUnderwater,
+ Bridge: WorldRandomBridge,
+ Sky: WorldRandomSky,
+ Castle: WorldRandomCastle
+ }, mapfuncs.Special = {
+ Blank: BlankMap
+ }, startLoadingMaps()
+}
+
+function Map() {
+ this.underwater = this.current_character = this.current_solid = this.current_scenery = this.xloc = 0, this.canscroll = !0, this.floor = 104, this.time = 400, this.curloc = -1, this.gravity = gravity, this.maxyvel = 1.75 * unitsize, this.maxyvelinv = -2.1 * this.maxyvel
+}
+
+function Area(e, t) {
+ this.creation = t || function() {}, this.precharacters = [], this.presolids = [], this.prescenery = [], this.floor = 140, this.width = 0, this.underwater = !1, setAreaSetting(this, e || "")
+}
+
+function setAreaSetting(e, t, n) {
+ map.shifting = !0, 1 == arguments.length && (t = arguments[0] || "Overworld", e = map.area), e.setting = e.background = t, e.theme = t.split(" ")[0], e.fillStyle = getAreaFillStyle(e.setting), -1 != e.fillStyle.indexOf("Underwater") ? goUnderWater() : goOntoLand(), n && AudioPlayer.playTheme(), gameon && clearAllSprites(), map.shifting = !1
+}
+
+function Location(e, t, n) {
+ this.area = e, this.xloc = n || 0, this.yloc = this.floor = 0, this.entry = 1 == t ? entryPlain : t || entryNormal
+}
+
+function PreThing(e, t, n) {
+ this.xloc = e, this.yloc = t, this.type = n;
+ var x = arrayMake(arguments),
+ r = new Thing;
+ x[2] = n, x = x.splice(2), Thing.apply(r, x), this.object = r
+}
+
+function setMap(e, t) {
+ if (gameon) {
+ !window.canedit && window.editing && editorClose(!0), removeRandomDisplays(), e instanceof Array && (t = e[1], e = e[0]);
+ var n = e ? [e, t] : window.currentmap,
+ x = new Map,
+ r = mapfuncs[n[0]];
+ r ? (n.func = r = r[n[1]], r ? (window.map = x, window.currentmap = n, r(x), x.areanum = x.curloc = 0, window.area = x.area = x.areas[0], window.player && player.power && storePlayerStats(), window.data && (data.scoreold = data.score.amount), shiftToLocation(0)) : log("No such map exists (yet?):", r)) : log("No such map section exists (yet?):", r)
+ }
+}
+
+function setMapRandom(e) {
+ gameon && (resetSeed(), "string" == typeof e ? e = ["Random", e] : e || (e = ["Random", "Overworld"]), setMap(e[0], e[1]), data.traveledold = data.traveled, map.sincechange = map.num_random_sections = 0, map.entrancetype = e[2], map.random = !0, "Sky" == map.randname && (map.exitloc = ["Random", "Overworld", "Down"]))
+}
+
+function shiftToLocation(e) {
+ if (map.random && "number" != typeof e) return setMapRandom(e);
+ "number" == typeof e && (e = map.locs[e]), pause(), resetGameState(), resetGameScreenPosition(), resetQuadrants(), map.areanum = e.area, window.area = map.area = map.areas[map.areanum], setAreaPreCreation(area), area.creation(), setAreaPostCreation(area), spawnMap(), player = placePlayer(), scrollPlayer(e.xloc * unitsize), locMovePreparations(player), unpause(), e.entry(player, e.entrything), TimeHandler.addEvent(AudioPlayer.playTheme, 2), TimeHandler.addEventInterval(checkTexts, 117, 1 / 0)
+}
+
+function setAreaPreCreation(e) {
+ window.events = [], TimeHandler.clearAllEvents(), window.characters = [], window.solids = [], window.scenery = [], clearTexts(), e.precharacters = [], e.presolids = [], e.prescenery = [], map.current_solid = map.current_character = map.current_scenery = map.shifting = 0, map.canscroll = !0, data.time.amount = map.time, data.world.amount = currentmap[0] + "-" + currentmap[1], setDataDisplay(), startDataTime(), map.random && (data.world.amount = "Random Map", data.world.element.innerHTML = "WORLD Random Map")
+}
+
+function clearTexts() {
+ if (window.texts)
+ for (var e = texts.length - 1; e >= 0; --e) texts[e] && removeChildSafe(texts[e], body);
+ window.texts = []
+}
+
+function setAreaPostCreation() {
+ if (map.current_character = map.current_solid = map.current_scenery = 0, area.width = max(area.width, gamescreen.width), map.underwater = map.area.underwater, map.jumpmod = 1.056 + 3.5 * map.underwater, map.has_lakitu = !1, TimeHandler.addEvent(setMapGravity, 1), area.underwater && (area.presolids.push(new PreThing(0, 0, WaterBlock, area.width)), map.random || area.presolids.push(new PreThing(0, 16, Sprite, "Water", [area.width / 3, 1]))), area.presolids.sort(prethingsorter), area.precharacters.sort(prethingsorter), area.prescenery.sort(prethingsorter), area.sections && area.sections[0]) setBStretch(), area.sections.current = 0, area.sections[0](area.sections.start);
+ else if (!map.random && "Sky" != area.setting) {
+ var e = new PreThing(area.width, 0, ScrollBlocker);
+ area.presolids.push(e)
+ }
+ area.fillStyle = getAreaFillStyle(area.setting)
+}
+
+function getAreaFillStyle(e) {
+ return stringHas(e, "Underworld") || stringHas(e, "Castle") || stringHas(e, "Night") ? stringHas(e, "Underwater") ? "#2038ec" : "black" : stringHas(e, "Underwater") ? "#2038ec" : "#5c94fc"
+}
+
+function prethingsorter(e, t) {
+ return e.xloc == t.xloc ? t.yloc - e.yloc : e.xloc - t.xloc
+}
+
+function setLocationGeneration(e) {
+ map.curloc = e, map.refx = map.locs[map.curloc].xloc, map.refy = map.locs[map.curloc].yloc + map.floor, map.areanum = map.locs[map.curloc].area
+}
+
+function spawnMap() {
+ var e, t, n, x, r, i = map.area,
+ a = QuadsKeeper.getOutDifference(),
+ o = gamescreen.right + a,
+ l = o + (2 * QuadsKeeper.getQuadWidth() + a);
+ for (t = (e = i.precharacters).length, r = map.current_character; t > r && o >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
+ for (map.current_character = r, t = (e = i.presolids).length, r = map.current_solid; t > r && l >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
+ for (map.current_solid = r, t = (e = i.prescenery).length, r = map.current_scenery; t > r && l >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
+ map.current_scenery = r
+}
+
+function goToTransport(e) {
+ e instanceof Array ? (map.ending = !0, storePlayerStats(), pause(), map.random ? setMapRandom(e) : setMap(e)) : shiftToLocation(map.locs[e]), is_mobile && applyNewJs()
+}
+
+function entryPlain(e) {
+ setLeft(e, unitsizet16), setBottom(e, map.floor * unitsize), e.nocollide = e.piping = !1, e.placed = !0
+}
+
+function entryNormal(e) {
+ setLeft(e, unitsizet16), setTop(e, unitsizet16), e.nocollide = e.piping = !1, e.placed = !0
+}
+
+function entryBlank(e) {
+ setLeft(e, unitsizet16), setBottom(e, map.floor * unitsize), e.nocollide = e.piping = e.movement = !1, e.placed = e.nofall = e.nocollide = notime = nokeys = !0, thingStoreVelocity(e), clearDataDisplay()
+}
+
+function entryRandom(e) {
+ switch (data.time.amount = 0, data.time.dir = 1, updateDataElement(data.time), map.startwidth ? map.nofloor || pushPreFloor(0, 0, map.startwidth) : map.startwidth = 0, map.firstRandomThings(map), map.randtype(8 * (map.startwidth + 1)), entryPlain(e), addDistanceCounter(), addSeedDisplay(), map.entrancetype) {
+ case "Down":
+ entryNormal(player);
+ break;
+ case "Up":
+ locMovePreparations(player), exitPipeVert(player, addThing(new Thing(Pipe, 32), unitsizet8, (map.floor - 32) * unitsize));
+ break;
+ case "Vine":
+ locMovePreparations(player), TimeHandler.addEvent((function() {
+ enterCloudWorld(player, !0)
+ }), 1), player.nofall = !0, spawnMap();
+ break;
+ case "Castle":
+ startCastle(player)
+ }
+}
+
+function enterCloudWorld(e) {
+ map.random && (map.exitloc = getAfterSkyTransport());
+ var t = 140 * unitsize,
+ n = 72 * unitsize;
+ e.placed = e.nofall = !0, setTop(e, t), setLeft(e, 30 * unitsize), removeClass(e, "jumping"), addClasses(e, ["climbing", "animated"]), e.climbing = TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), e.attached = new Thing(Vine, -1), addThing(e.attached, unitsizet32, t - unitsizet8);
+ var x = setInterval((function() {
+ if (e.attached.top <= n) {
+ clearInterval(x), setTop(e.attached, n, !0), e.attached.movement = !1;
+ var t = e.attached.top + unitsizet16;
+ x = setInterval((function() {
+ shiftVert(e, -1 * unitsized4, !0), e.top <= t && (removeClass(e, "animated"), clearInterval(x), setTop(e, t, !0), clearInterval(x), setTimeout((function() {
+ setLeft(e, 36 * unitsize, !0), addClass(e, "flipped"), setTimeout((function() {
+ playerHopsOff(e, e.attached, !0), TimeHandler.clearClassCycle(e, "climbing"), e.running = TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"], "running", setPlayerRunningCycler)
+ }), 28 * timer)
+ }), 14 * timer))
+ }), timer)
+ }
+ }), timer)
+}
+
+function walkToPipe() {
+ player = placePlayer(), startWalking(player), map.canscroll = !1;
+ var e = setInterval((function() {
+ player.piping && (AudioPlayer.pauseTheme(), clearInterval(e), player.maxspeed = player.maxspeedsave)
+ }), timer);
+ unpause()
+}
+
+function startWalking(e) {
+ e.movement = movePlayer, e.maxspeed = e.walkspeed, nokeys = notime = e.keys.run = !0, e.nofall = e.nocollide = !1
+}
+
+function intoPipeVert(e, t, n) {
+ if (!(!t.transport || !e.resting || e.right + unitsizet2 > t.right || e.left - unitsizet2 < t.left)) {
+ pipePreparations(e), switchContainers(e, characters, scenery), unpause();
+ var x = setInterval((function() {
+ shiftVert(e, unitsized4, !0), e.top >= t.top && (clearInterval(x), setTimeout((function() {
+ goToTransport(n)
+ }), 700))
+ }), timer)
+ }
+}
+
+function intoPipeHoriz(e, t, n) {
+ pipePreparations(e), switchContainers(e, characters, scenery), unpause();
+ var x = setInterval((function() {
+ shiftHoriz(e, unitsized4, !0), e.left >= t.left && (clearInterval(x), setTimeout((function() {
+ goToTransport(n)
+ }), 700))
+ }), timer)
+}
+
+function pipePreparations(e) {
+ AudioPlayer.pauseTheme(), AudioPlayer.play("Pipe"), locMovePreparations(e), e.nofall = e.nocollide = nokeys = notime = !0, e.movement = e.xvel = e.yvel = 0
+}
+
+function locMovePreparations(e) {
+ e.keys = new Keys, e.nocollide = e.piping = 1, e.placed = !1, removeCrouch(), removeClass(e, "running"), removeClass(e, "jumping"), removeClass(e, "flipped")
+}
+
+function startCastle(e) {
+ (e = e || window.player) && (setBottom(e, 56 * unitsize), setLeft(e, unitsizet2), e.nocollide = e.piping = !1, e.placed = !0)
+}
+
+function exitPipeVert(e, t) {
+ switchContainers(e, characters, scenery), e.nofall = nokeys = notime = !0, AudioPlayer.play("Pipe"), setTop(e, t.top), setMidXObj(e, t, !0);
+ var n = unitsize / -4,
+ x = setInterval((function() {
+ shiftVert(e, n, !0), e.bottom <= t.top && (switchContainers(e, scenery, characters), clearInterval(x), e.nocollide = e.piping = e.nofall = nokeys = notime = !1, e.placed = !0)
+ }), timer)
+}
+
+function endLevel() {
+ map.ending || (map.ending = !0, map.random ? setMapRandom(["Random", "Castle"]) : setNextLevelArr(currentmap), storePlayerStats(), pause(), setMap())
+}
+
+function setExitLoc(e) {
+ map.exitloc = e
+}
+
+function pushPreThing(e, t, n, x, r) {
+ var i = new PreThing(map.refx + t, map.refy - n, e, x, r),
+ a = i.object;
+ return !a.solid && !a.character || a.nostretch || (map.area.width = max(map.area.width, i.xloc + a.width)), a.solid && !a.spawn_as_char ? map.area.presolids.push(i) : map.area.precharacters.push(i), i
+}
+
+function pushPreScenery(e, t, n, x, r) {
+ x = round(x || 1), r = round(r || 1);
+ var i = new PreThing(map.refx + t, map.refy - n, Sprite, e, [x, r]);
+ return i.yloc -= i.object.height, map.area.prescenery.push(i), i
+}
+
+function pushPreScenerySolid(e, t, n, x, r) {
+ x = x || 1, r = r || 1;
+ var i = new PreThing(map.refx + t, map.refy - n, Sprite, e, [x, r]);
+ return i.yloc -= i.object.height, map.area.presolids.push(i), i
+}
+
+function pushPreText(e, t, n) {
+ var x = new PreThing(map.refx + t, map.refy - n, FuncSpawner, spawnText, e);
+ return map.area.presolids.push(x), x
+}
+
+function fillPreThing(e, t, n, x, r, i, a, o, l) {
+ for (var s, d, u = t, p = 0; p < x; ++p) {
+ for (s = n, d = 0; d < r; ++d) pushPreThing(e, u, s, o, l), s += a;
+ u += i
+ }
+}
+
+function pushPreFloor(e, t, n) {
+ pushPreThing(Floor, e, t || 0, n || 1, DtB(t, 8))
+}
+
+function makeCeiling(e, t) {
+ t = t || 1;
+ for (var n = 0; n < t; ++n) pushPreThing(Brick, e + 8 * n, ceillev)
+}
+
+function makeCeilingCastle(e, t, n) {
+ pushPreThing(Stone, e, ceillev, t || 1, n || 1)
+}
+
+function pushPreBridge(e, t, n, x) {
+ pushPreScenery("Railing", e, t, 2 * n), pushPreThing(BridgeBase, e, t, n), x instanceof Array && (x[0] && pushPreThing(Stone, e - 8, t, 1, 64), x[1] && pushPreThing(Stone, e + 8 * n, t, 1, 64))
+}
+
+function fillPreWater(e, t, n) {
+ var x = DtB(t),
+ r = ceil(x / 5.5),
+ i = 5 * r;
+ pushPreScenery("Water", e, t - 5.5, 4 * n / 3), pushPreScenery("WaterFill", e, t - i - 15.5, 4 * n / 3, r + 2)
+}
+
+function pushPrePlatformGenerator(e, t, n) {
+ pushPreThing(PlatformGenerator, e, ceilmax + 16, t, n)
+}
+
+function pushPreScale(e, t, n, x) {
+ var r = x[0],
+ i = 2 * r,
+ a = x[1] + 1.5,
+ o = x[2] + 1.5,
+ l = pushPreThing(Scale, e, t, n).object;
+ platleft = pushPreThing(Platform, e - i, t - 4 * a, r, moveFallingScale).object, platright = pushPreThing(Platform, e + 4 * n - r - 6, t - 4 * o, r, moveFallingScale).object, platleft.parent = l, platright.parent = l, platleft.partner = platright, platright.partner = platleft, platleft.tension = a * unitsizet4 - 10 * unitsize, platright.tension = o * unitsizet4 - 10 * unitsize, l.tensionleft = a * unitsize, l.tensionright = o * unitsize, platleft.string = pushPreScenery("String", e, t - 4 * a, 1, 4 * (a - .5)).object, platright.string = pushPreScenery("String", e + 4 * n - 1, t - 4 * o, 1, 4 * (o - .5)).object
+}
+
+function pushPreWarpWorld(e, t, n, x, r) {
+ 1 == n.length && (n = [-1, n[0], -1]);
+ var i, a, o = (x || 0) + e + 10,
+ l = n.length;
+ warp = pushPreThing(WarpWorld, e, t + ceilmax).object;
+ var s = pushPreText({
+ innerText: "WELCOME TO WARP ZONE!",
+ style: {
+ visibility: "hidden"
+ }
+ }, o, 58);
+ for (warp.texts.push(s.object), a = 0; a < l; ++a) - 1 != n[a] && (warp.pipes.push(i = pushPrePipe(o, t, 24, !0, n[a]).object), warp.pirhanas.push(i.pirhana), n[a] instanceof Array && warp.texts.push(pushPreText({
+ innerText: n[a][0],
+ style: {
+ visibility: "hidden"
+ }
+ }, o + 4, 38).object)), o += 32;
+ r && (window.block = pushPreThing(ScrollBlocker, e, ceilmax), pushPreThing(ScrollBlocker, o + 16, ceilmax))
+}
+
+function goUnderWater() {
+ window.map && (map.area && (window.player && !map.shifting && setAreaSetting(String(map.area.setting || "") + " Underwater"), map.area.underwater = !0), setMapGravity(), TimeHandler.clearEvent(map.bubbling), map.bubbling = TimeHandler.addEventInterval(playerBubbles, 96, 1 / 0), map.underwater = !0)
+}
+
+function goOntoLand() {
+ map && (map.area && (window.player && !map.shifting && setAreaSetting(map.area.setting.replace("Underwater", "") || "Overworld"), map.area.underwater = !1), setMapGravity(), TimeHandler.clearEvent(map.bubbling), map.underwater = !1)
+}
+
+function setMapGravity() {
+ window.player && (map.underwater ? player.gravity = gravity / 2.8 : player.gravity = gravity)
+}
+
+function setBStretch() {
+ window.bstretch = gamescreen.width / 8 - 2
+}
+
+function endCastleOutside(e, t, n, x, r) {
+ e = e || 0, t = t || 0, n && (n = castlev), r = r || 20;
+ var i = pushPreThing(FlagDetector, e + 7, t + 108).object,
+ a = pushPreThing(CastleDoorDetector, e + 60 + 8 * (0 == castlev), 8).object;
+ i.flag = pushPreThing(Flag, e + .5, t + 79.5).object, i.stone = pushPreThing(Stone, e + 4, t + 8).object, i.top = pushPreThing(FlagTop, e + 6.5, 84).object, i.pole = pushPreThing(FlagPole, e + 8, 80).object, x && pushPreScenery("CastleWall", e + r + 72, t, x), 0 == n && shiftHoriz(a, unitsizet8), pushPreCastle(e + r + 16, t, n)
+}
+
+function startCastleInside() {
+ pushPreThing(Stone, 0, 88, 5, 3), pushPreThing(Stone, 0, 48, 3, DtB(48, 8)), pushPreThing(Stone, 24, 40, 1, DtB(40, 8)), pushPreThing(Stone, 32, 32, 1, DtB(32, 8))
+}
+
+function endCastleInside(e, t, n) {
+ var x = pushPreThing(FuncCollider, e + 104, 48, CastleAxeFalls, [16, 24]).object.axe = pushPreThing(CastleAxe, e + 104, 40).object;
+ x.bridge = pushPreThing(CastleBridge, e, 24, 13).object, x.chain = pushPreThing(CastleChain, e + 96.5, 32).object, x.bowser = pushPreThing(Bowser, e + 69, 42, n).object, pushPreThing(ScrollBlocker, e + 112, ceilmax), pushPreThing(Stone, e, 88, 32), fillPreWater(e, 0, 26), pushPreFloor(e + 104, 32, 3), pushPreFloor(e + 104, 0, 19), pushPreThing(Stone, e + 112, 80, 2, 3), pushPreThing(ScrollBlocker, e + 256, ceilmax), endCastleInsideFinal(e, t)
+}
+
+function endCastleInsideFinal(e, t) {
+ var n = pushPreFuncCollider(e + 180, collideCastleNPC).object,
+ x = {
+ visibility: "hidden"
+ };
+ t ? (pushPreThing(Peach, e + 194, 13).object, n.text = [pushPreText({
+ innerHTML: "THANK YOU " + window.player.title.toUpperCase() + "! ",
+ style: x
+ }, e + 160, 66).object, pushPreText({
+ innerHTML: "YOUR QUEST IS OVER. WE PRESENT YOU A NEW QUEST. ",
+ style: x
+ }, e + 148, 50).object, pushPreText({
+ innerHTML: "PRESS BUTTON B TO SELECT A WORLD. ",
+ style: x
+ }, e + 148, 26).object]) : (pushPreThing(Toad, e + 194, 12).object, n.text = [pushPreText({
+ innerHTML: "THANK YOU " + window.player.title.toUpperCase() + "! ",
+ style: x
+ }, e + 160, 66).object, pushPreText({
+ innerHTML: "BUT OUR PRINCESS IS IN ANOTHER CASTLE! ",
+ style: x
+ }, e + 148, 50).object])
+}
+
+function pushPreSectionPass(e, t, n, x, r) {
+ var i = pushPreThing(Collider, e, t, [n, x], [sectionPass, sectionColliderInit]).object,
+ a = (r = map.area.sections.current || 0, map.area.sections[r]);
+ a.numpass ? ++a.numpass : a.numpass = 1, a.colliders ? a.colliders.push(i) : a.colliders = [i]
+}
+
+function pushPreSectionFail(e, t, n, x, r) {
+ var i = pushPreThing(Collider, e, t, [n, x], [sectionFail, sectionColliderInit]).object,
+ a = (r = map.area.sections.current || 0, map.area.sections[r]);
+ a.colliders ? a.colliders.push(i) : a.colliders = [i]
+}
+
+function pushCastleDecider(e, t) {
+ pushPreThing(castleDecider, e, ceilmax, e, t)
+}
+
+function sectionColliderInit(e) {
+ e.sections = map.area.sections, e.parent = e.sections[e.sections.current], e.movement = !1
+}
+
+function sectionPass(e, t) {
+ if ("player" != e.type) return !1;
+ t.nocollide = !0, --t.parent.numpass || activateSection(t.parent, !0)
+}
+
+function sectionFail(e, t) {
+ if ("player" != e.type) return !1;
+ t.nocollide = !0, activateSection(t.parent, !1)
+}
+
+function activateSection(e, t) {
+ for (var n = e.colliders, x = n.length - 1; x >= 0; --x) killNormal(n[x]);
+ e.activated = !0, e.passed = t
+}
+
+function pushPreTree(e, t, n) {
+ pushPreThing(TreeTop, e, t, n);
+ var x = DtB(t);
+ pushPreScenerySolid("TreeTrunk", e + 8, t - x - 8, n - 2, x / 8)
+}
+
+function pushPreShroom(e, t, n) {
+ pushPreThing(ShroomTop, e, t, n);
+ var x = DtB(t - 4);
+ pushPreScenery("ShroomTrunk", e + 4 * n - 4, t - x - 8, 1, x / 8)
+}
+
+function pushPrePipe(e, t, n, x, r, i) {
+ isFinite(n) || (n = gamescreen.height, t -= gamescreen.height);
+ var a = pushPreThing(Pipe, e, t + n, n / 8, r),
+ o = a.object;
+ return x && (o.pirhana = pushPreThing(Pirhana, e + 4, t + n + 12).object), i && (map.locs[i].entrything = o, map.locs[i].xloc = e), a
+}
+
+function pushPreCastle(e, t, n) {
+ e = e || 0, t = t || 0, n ? pushPreCastleBig(e, t) : pushPreCastleSmall(e, t)
+}
+
+function pushPreCastleBig(e, t) {
+ var n, x;
+ for (pushPreCastleSmall(e + 16, t + 48), n = 0; n < 3; ++n)
+ for (x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 16 + 16 * n, t + 24 + 8 * x);
+ for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleDoor", e + 24 + 16 * n, t + 24);
+ for (n = 0; n < 5; ++n) {
+ if (2 == n) continue;
+ pushPreScenerySolid("BrickHalf", e + 16 + 8 * n, t + 48)
+ }
+ for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleRailing", e + 8 * n, t + 44);
+ for (n = 0; n < 5; ++n) pushPreScenerySolid("CastleRailingFilled", e + 16 + 8 * n, t + 44);
+ for (n = 5; n < 7; ++n) pushPreScenerySolid("CastleRailing", e + 16 + 8 * n, t + 44);
+ for (n = 0; n < 2; ++n)
+ for (x = 0; x < 3; ++x) pushPreScenerySolid("BrickPlain", e + 24 + 16 * n, t + 8 * x);
+ for (n = 0; n < 3; ++n) pushPreScenerySolid("CastleDoor", e + 16 + 16 * n, t);
+ for (n = 0; n < 2; ++n) {
+ for (x = 0; x < 5; ++x) pushPreScenerySolid("BrickPlain", e + 8 * n, t + 8 * x);
+ pushPreScenerySolid("BrickHalf", e + 8 * n, t + 40)
+ }
+ for (n = 0; n < 2; ++n) {
+ for (x = 0; x < 5; ++x) pushPreScenerySolid("BrickPlain", e + 56 + 8 * n, t + 8 * x);
+ pushPreScenerySolid("BrickHalf", e + 56 + 8 * n, t + 40)
+ }
+ for (n = 0; n < 3; ++n)
+ for (x = 0; x < 2; ++x) pushPreScenerySolid("BrickHalf", e + 16 + 16 * n, t + 20 + 20 * x)
+}
+
+function pushPreCastleSmall(e, t) {
+ var n, x;
+ for (n = 0; n < 3; ++n) pushPreScenerySolid("CastleRailing", e + 8 + 8 * n, t + 36);
+ for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleTop", e + 8 + 12 * n, t + 24);
+ for (pushPreScenerySolid("CastleRailing", e, t + 20), n = 1; n <= 3; ++n) pushPreScenerySolid("CastleRailingFilled", e + 8 * n, t + 20);
+ for (pushPreScenerySolid("CastleRailing", e + 32, t + 20), n = 0; n < 2; ++n)
+ for (pushPreScenerySolid("BrickHalf", e + 8 * n, t), x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 8 * n, t + 4 + 8 * x);
+ for (n = 0; n < 2; ++n)
+ for (pushPreScenerySolid("BrickHalf", e + 24 + 8 * n, t), x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 24 + 8 * n, t + 4 + 8 * x);
+ pushPreScenerySolid("CastleDoor", e + 16, t)
+}
+
+function pushPreFuncCollider(e, t) {
+ return e instanceof Array ? (console.log("position", e), pushPreThing(FuncCollider, e[0], e[1], t, [e[2], e[3]])) : pushPreThing(FuncCollider, e, ceilmax + 40, t)
+}
+
+function pushPreFuncSpawner(e, t) {
+ return pushPreThing(FuncSpawner, e, jumplev1, t)
+}
+
+function zoneEnableLakitu() {
+ map.zone_lakitu = !0, enterLakitu()
+}
+
+function zoneDisableLakitu() {
+ if (map.has_lakitu) {
+ var e = map.has_lakitu;
+ map.zone_lakitu = map.has_lakitu = !1, e.lookleft || (e.lookleft = !0, removeClass(e, "flipped")), e.movement = function(e) {
+ e.xvel = max(e.xvel - unitsized32, -1 * unitsize)
+ }
+ }
+}
+
+function zoneStartCheeps(e) {
+ pushPreFuncCollider(e, zoneEnableCheeps)
+}
+
+function zoneStopCheeps(e) {
+ pushPreFuncCollider(e, zoneDisableCheeps)
+}
+
+function zoneEnableCheeps(e) {
+ !map.zone_cheeps && e.player && startCheepSpawn()
+}
+
+function zoneDisableCheeps(e) {
+ e.player && (map.zone_cheeps = !1)
+}
+
+function pushPrePattern(e, t, n, x) {
+ var r, i, a, o = t,
+ l = Scenery.patterns[e];
+ for (i = 0; i < x; ++i) {
+ for (a in l)(r = l[a]) instanceof Array && pushPreScenery(r[0], o + r[1], n + r[2], r[3], r[4]);
+ o += l.width
+ }
+}
+
+function DtB(e, t) {
+ return (e + botmax) / (t || 1)
+}
+
+function BlankMap(e) {
+ e.locs = [new Location(0, entryBlank)], e.areas = [new Area("Overworld", (function() {
+ setTimeout(refillCanvas, timer + 2)
+ }))]
+}
+
+function World11(e) {
+ e.locs = [new Location(0, !0), new Location(0, exitPipeVert), new Location(1)], e.areas = [new Area("Overworld", (function() {
+ setLocationGeneration(0);
+ pushPreText("©1985 NINTENDO
Move: Arrows/WASD Fire/Sprint: Shift/CTRL Pause/Mute: P/M
", 20, 91), pushPrePattern("backreg", 0, 0, 5), pushPreFloor(0, 0, 69), pushPreThing(Block, 128, jumplev1), pushPreThing(Brick, 160, jumplev1), pushPreThing(Block, 168, jumplev1, Mushroom), pushPreThing(Goomba, 176, 8), pushPreThing(Brick, 176, jumplev1), pushPreThing(Block, 176, jumplev2), pushPreThing(Block, 184, jumplev1), pushPreThing(Brick, 192, jumplev1), pushPrePipe(224, 0, 16, !1), pushPrePipe(304, 0, 24), pushPrePipe(368, 0, 32), pushPreThing(Goomba, 340, 8), pushPrePipe(368, 0, 32), pushPreThing(Goomba, 412, 8), pushPreThing(Goomba, 422, 8), pushPrePipe(456, 0, 32, !1, 2), pushPreThing(Block, 512, 40, [Mushroom, 1], !0), pushPreFloor(568, 0, 15), pushPreThing(Brick, 618, jumplev1), pushPreThing(Block, 626, jumplev1, Mushroom), pushPreThing(Brick, 634, jumplev1), pushPreThing(Brick, 640, jumplev2), pushPreThing(Goomba, 640, jumplev2 + 8), pushPreThing(Brick, 648, jumplev2), pushPreThing(Brick, 656, jumplev2), pushPreThing(Goomba, 656, jumplev2 + 8), pushPreThing(Brick, 664, jumplev2), pushPreThing(Brick, 672, jumplev2), pushPreThing(Brick, 680, jumplev2), pushPreThing(Brick, 688, jumplev2), pushPreThing(Brick, 696, jumplev2), pushPreFloor(712, 0, 64), pushPreThing(Brick, 728, jumplev2), pushPreThing(Brick, 736, jumplev2), pushPreThing(Brick, 744, jumplev2), pushPreThing(Brick, 752, jumplev1, Coin), pushPreThing(Block, 752, jumplev2), pushPreThing(Goomba, 776, 8), pushPreThing(Goomba, 788, 8), pushPreThing(Brick, 800, jumplev1), pushPreThing(Brick, 808, jumplev1, Star), pushPreThing(Block, 848, jumplev1), pushPreThing(Koopa, 856, 12), pushPreThing(Block, 872, jumplev1), pushPreThing(Block, 872, jumplev2, Mushroom), pushPreThing(Block, 896, jumplev1), pushPreThing(Goomba, 912, 8), pushPreThing(Goomba, 924, 8), pushPreThing(Brick, 944, jumplev1), pushPreThing(Brick, 968, jumplev2), pushPreThing(Brick, 976, jumplev2), pushPreThing(Brick, 984, jumplev2), pushPreThing(Goomba, 992, 8), pushPreThing(Goomba, 1004, 8), pushPreThing(Goomba, 1024, 8), pushPreThing(Goomba, 1036, 8), pushPreThing(Brick, 1024, jumplev2), pushPreThing(Brick, 1032, jumplev1), pushPreThing(Block, 1032, jumplev2), pushPreThing(Brick, 1040, jumplev1), pushPreThing(Block, 1040, jumplev2), pushPreThing(Brick, 1048, jumplev2), pushPreThing(Stone, 1072, 8), pushPreThing(Stone, 1080, 16, 1, 2), pushPreThing(Stone, 1088, 24, 1, 3), pushPreThing(Stone, 1096, 32, 1, 4), pushPreThing(Stone, 1120, 32, 1, 4), pushPreThing(Stone, 1128, 24, 1, 3), pushPreThing(Stone, 1136, 16, 1, 2), pushPreThing(Stone, 1144, 8), pushPreThing(Stone, 1184, 8), pushPreThing(Stone, 1192, 16, 1, 2), pushPreThing(Stone, 1200, 24, 1, 3), pushPreThing(Stone, 1208, 32, 1, 4), pushPreThing(Stone, 1216, 32, 1, 4), pushPreFloor(1240, 0, 69), pushPreThing(Stone, 1240, 32, 1, 4), pushPreThing(Stone, 1248, 24, 1, 3), pushPreThing(Stone, 1256, 16, 1, 2), pushPreThing(Stone, 1264, 8, 1, 1), pushPrePipe(1304, 0, 16, !1, !1, 1), pushPreThing(Brick, 1344, jumplev1), pushPreThing(Brick, 1352, jumplev1), pushPreThing(Block, 1360, jumplev1), pushPreThing(Brick, 1368, jumplev1), pushPreThing(Goomba, 1392, 8), pushPreThing(Goomba, 1404, 8), pushPrePipe(1432, 0, 16), pushPreThing(Stone, 1448, 8), pushPreThing(Stone, 1456, 16, 1, 2), pushPreThing(Stone, 1464, 24, 1, 3), pushPreThing(Stone, 1472, 32, 1, 4), pushPreThing(Stone, 1480, 40, 1, 5), pushPreThing(Stone, 1488, 48, 1, 6), pushPreThing(Stone, 1496, 56, 1, 7), pushPreThing(Stone, 1504, 64, 2, 8), endCastleOutside(1580, 0, 1)
+ })), new Area("Underworld", (function() {
+ setLocationGeneration(2), makeCeiling(32, 7), pushPreFloor(0, 0, 17), fillPreThing(Brick, 0, 8, 1, 11, 8, 8), fillPreThing(Brick, 32, 8, 7, 3, 8, 8), fillPreThing(Coin, 33, 31, 7, 2, 8, 16), fillPreThing(Coin, 41, 63, 5, 1, 8, 8), pushPreThing(PipeSide, 104, 16, 1), pushPreThing(PipeVertical, 120, 88, 88)
+ }))]
+}
+
+function randMapType(e) {
+ e.locs = [new Location(0, entryRandom)], e.areas = [new Area(e.areatype, (function() {
+ setLocationGeneration(0), "Underwater" == e.randname && (goUnderWater(), pushPreScenery("Water", 0, ceilmax - 21, 8 * (e.startwidth + 1) / 3, 1), pushPreThing(WaterBlock, 0, ceilmax, 8 * (e.startwidth + 1)))
+ }))], e.treefunc = randTrue(3) ? pushPreTree : pushPreShroom, e.treeheight = e.treelev = e.sincechange = 0
+}
+
+function randDayNight() {
+ return randTrue(3) ? "" : " Night"
+}
+
+function WorldRandomOverworld(e) {
+ e.random = !0, e.randtype = pushRandomSectionOverworld, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {
+ for (var t = 0; t < 10; ++t) randTrue() && pushRandomGroundScenery(8 * t)
+ }, e.startwidth = 14, e.onlysmartkoopas = !1, randMapType(e)
+}
+
+function WorldRandomTrees(e) {
+ e.random = !0, e.randtype = pushRandomSectionTrees, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {
+ e.treefunc(100, 8 * (e.treelev = randTrue() + 2), randTrue() + 4), e.startwidth += 7
+ }, e.startwidth = 11, e.onlysmartkoopas = randTrue(), randMapType(e)
+}
+
+function WorldRandomUnderworld(e) {
+ e.random = !0, e.randtype = pushRandomSectionUnderworld, e.randname = e.areatype = "Underworld", e.firstRandomThings = function(e) {
+ fillPreThing(Brick, 0, 8, 1, 11, 8, 8)
+ }, e.startwidth = randTrue(3) + 7, e.onlysmartkoopas = !0, e.respawndist = 42, e.entrancetype = "Up", randMapType(e)
+}
+
+function WorldRandomUnderwater(e) {
+ e.random = !0, e.randtype = pushRandomSectionUnderwater, e.randname = "Underwater", e.areatype = "Underwater" + randDayNight(), e.firstRandomThings = function(e) {}, e.startwidth = randTrue(3) + 7, e.entrancetype = "Up", e.countCheep = e.countBlooper = 0, e.respawndist = 42, e.onlysmartkoopas = !0, randMapType(e)
+}
+
+function WorldRandomBridge(e) {
+ e.random = !0, e.randtype = startRandomSectionBridge, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {}, e.startwidth = 14, randMapType(e)
+}
+
+function WorldRandomSky(e) {
+ e.random = !0, e.randtype = startRandomSectionSky, e.randname = "Sky", e.areatype = "Sky" + randDayNight(), e.entrancetype = "Vine", e.firstRandomThings = function(e) {
+ pushPreThing(Stone, 0, 0, 4)
+ }, e.startwidth = 4, e.nofloor = !0, randMapType(e)
+}
+
+function WorldRandomCastle(e) {
+ e.random = !0, e.randtype = startRandomSectionCastle, e.randname = e.areatype = e.entrancetype = "Castle", e.firstRandomThings = function(e) {
+ startCastleInside(), startCastle()
+ }, e.respawndist = 35, randMapType(e)
+}
+
+function FullScreenMario() {
+ var e = Date.now();
+ ensureLocalStorage(), TonedJS(!0), window.body = document.body, window.bodystyle = body.style, window.verbosity = {
+ Maps: !1,
+ Sounds: !1
+ }, window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function(e) {
+ setTimeout(e, timer)
+ }, window.cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout, window.Uint8ClampedArray = window.Uint8ClampedArray || window.Uint8Array || Array, resetMeasurements(), resetLibrary(), resetEvents(), resetCanvas(), resetMaps(), resetScenery(), resetTriggers(), resetSeed(), resetSounds(), window.luigi = localStorage && "true" == localStorage.luigi, window.gameon = !0, setMap(1, 1), log("It took " + (Date.now() - e) + " milliseconds to start.")
+}
+
+function ensureLocalStorage() {
+ var e = !1;
+ try {
+ window.hasOwnProperty("localStorage") || (window.localStorage = {
+ crappy: !0
+ }), window.localStorage && (e = !0)
+ } catch (t) {
+ e = !1
+ }
+ if (!e) throw document.body.innerText = "It seems your browser does not allow localStorage!"
+}
+
+function resetMeasurements() {
+ resetUnitsize(4), resetTimer(1e3 / 60), window.jumplev1 = 32, window.jumplev2 = 64, window.ceillev = 88, window.ceilmax = 104, window.castlev = -48, window.paused = !0, resetGameScreen(), window.parentwindow || (window.parentwindow = !1)
+}
+
+function resetUnitsize(e) {
+ window.unitsize = e;
+ for (var t = 2; t <= 64; ++t) window["unitsizet" + t] = unitsize * t, window["unitsized" + t] = unitsize / t;
+ window.scale = unitsized2, window.gravity = round(12 * unitsize) / 100
+}
+
+function resetTimer(e) {
+ e = roundDigit(e, .001), window.timer = window.timernorm = e, window.timert2 = 2 * e, window.timerd2 = e / 2, window.fps = window.fps_target = roundDigit(1e3 / e, .001), window.time_prev = Date.now()
+}
+
+function resetGameScreen() {
+ window.gamescreen = new getGameScreen
+}
+
+function getGameScreen() {
+ resetGameScreenPosition(this), this.middlex = (this.left + this.right) / 2, window.botmax = this.height - ceilmax, botmax < unitsize && (body.innerHTML = " Your screen isn't high enough. Make it taller, then refresh.
"), this.deathheight = this.bottom + 48
+}
+
+function resetGameScreenPosition(e) {
+ (e = e || window.gamescreen).left = e.top = 0, e.bottom = innerHeight, e.right = innerWidth, e.height = innerHeight / unitsize, e.width = innerWidth / unitsize, e.unitheight = innerHeight, e.unitwidth = innerWidth
+}
+
+function resetEvents() {
+ window.TimeHandler = new TimeHandlr({
+ onSpriteCycleStart: "onadding",
+ doSpriteCycleStart: "placed",
+ cycleCheckValidity: "alive",
+ timingDefault: 9
+ })
+}
+
+function resetSounds() {
+ window.sounds = {}, window.theme = !1, window.muted = localStorage && "true" == localStorage.muted, window.AudioPlayer = new AudioPlayr({
+ directory: "Sounds",
+ getVolumeLocal: function() {
+ return .49
+ },
+ getThemeDefault: function() {
+ return area.theme
+ },
+ library: {
+ Sounds: ["Bowser Falls", "Bowser Fires", "Break Block", "Bump", "Coin", "Ending", "Fireball", "Firework", "Flagpole", "Gain Life", "Game Over 2", "Game Over", "Hurry", "Into the Tunnel", "Jump Small", "Jump Super", "Kick", "Level Complete", "Player Dies", "Pause", "Pipe", "Power Down", "Powerup Appears", "Powerup", "Stage Clear", "Vine Emerging", "World Clear", "You Dead"],
+ Themes: ["Castle", "Overworld", "Underwater", "Underworld", "Star", "Sky", "Hurry Castle", "Hurry Overworld", "Hurry Underwater", "Hurry Underworld", "Hurry Star", "Hurry Sky"]
+ }
+ })
+}
+
+function resetQuadrants() {
+ window.QuadsKeeper = new QuadsKeepr({
+ num_rows: 5,
+ num_cols: 6,
+ screen_width: window.innerWidth,
+ screen_height: window.innerHeight,
+ tolerance: unitsized2,
+ onUpdate: spawnMap,
+ onCollide: !1
+ })
+}
+
+function resetGameState(e) {
+ clearAllTimeouts(), resetData(), window.nokeys = window.spawning = window.spawnon = window.notime = window.editing = window.qcount = window.lastscroll = 0, window.paused = window.gameon = window.speed = 1, e || (window.gamecount = 0), resetQuadrants(), window.gamehistory = [], AudioPlayer.pause()
+}
+
+function scrollWindow(e, t) {
+ var n = -(e = e || 0),
+ x = -(t = t || 0);
+ gamescreen.left += e, gamescreen.right += e, gamescreen.top += t, gamescreen.bottom += t, shiftAll(characters, n, x), shiftAll(solids, n, x), shiftAll(scenery, n, x), shiftAll(QuadsKeeper.getQuadrants(), n, x), shiftElements(texts, n, x), QuadsKeeper.updateQuadrants(n), window.playediting && scrollEditor(e, t)
+}
+
+function shiftAll(e, t, n) {
+ for (var x = e.length - 1; x >= 0; --x) shiftBoth(e[x], t, n)
+}
+
+function shiftElements(e, t, n) {
+ for (var x, r = e.length - 1; r >= 0; --r) x = e[r], elementShiftLeft(x, t), elementShiftTop(x, n)
+}
+
+function scrollPlayer(e, t, n) {
+ var x = player.left,
+ r = player.top;
+ scrollWindow(e, t = t || 0), setLeft(player, x, n), setTop(player, r + t * unitsize, n), QuadsKeeper.updateQuadrants()
+}
+
+function mlog(e) {
+ verbosity[e] && log.apply(console, arguments)
+}
+
+function resetCanvas() {
+ window.canvas = getCanvas(innerWidth, innerHeight, !0), window.context = canvas.getContext("2d"), body.appendChild(canvas)
+}
+
+function spriteUnravel(e) {
+ for (var t, n, x, r = getPaletteReferenceStarting(window.palette), i = window.digitsize, a = e.length, o = "", l = 0; l < a;) switch (e[l]) {
+ case "x":
+ for (x = e.indexOf(",", ++l), t = makeDigit(r[e.slice(l, l += i)], window.digitsize), n = Number(e.slice(l, x)); n--;) o += t;
+ l = x + 1;
+ break;
+ case "p":
+ "[" == e[++l] ? (x = e.indexOf("]"), r = getPaletteReference(e.slice(l + 1, x).split(",")), l = x + 1, i = 1) : (r = getPaletteReference(window.palette), i = window.digitsize);
+ break;
+ default:
+ o += makeDigit(r[e.slice(l, l += i)], window.digitsize)
+ }
+ return o
+}
+
+function spriteExpand(e) {
+ for (var t, n, x = "", r = e.length, i = 0; i < r;)
+ for (t = e.slice(i, i += digitsize), n = 0; n < scale; ++n) x += t;
+ return x
+}
+
+function spriteGetArray(e) {
+ var t, n, x, r, i = e.length / digitsize,
+ a = e.match(new RegExp(".{1," + digitsize + "}", "g")),
+ o = new Uint8ClampedArray(4 * i);
+ for (n = 0, x = 0; n < i; ++n) {
+ for (t = palette[Number(a[n])], r = 0; r < 4; ++r) o[x + r] = t[r];
+ x += 4
+ }
+ return o
+}
+
+function setThingSprite(e) {
+ if (!e.hidden && e.title) {
+ var t, n = library.cache,
+ x = e.spritewidth,
+ r = e.spriteheight;
+ n[e.title + " " + e.className.split(/\s+/g).slice(1).sort()];
+ (t = getSpriteFromLibrary(e)) ? t.multiple ? (expandObtainedSpriteMultiple(t, e, x, r), e.sprite_type = t.type) : (expandObtainedSprite(t, e, x, r), e.sprite_type = "normal"): log("Could not get sprite from library on " + e.title)
+ }
+}
+
+function getSpriteFromLibrary(e) {
+ var t, n, x, r, i = library.cache,
+ a = e.title,
+ o = e.libtype,
+ l = e.className.split(/\s+/g).slice(1).sort(),
+ s = (map.area || window.defaultsetting).setting.split(" ");
+ for (r in s) l.unshift(s[r]);
+ if (n = i[t = a + " " + l]) x = n.raw;
+ else {
+ if (!(x = library.sprites[o][a]) || !x.constructor) return console.log("Error in checking for sprite of " + a + "."), void console.log("Title " + a, "\nLibtype " + o, "\n", e, "\n");
+ x.constructor != Uint8ClampedArray && (x = findSpriteInLibrary(e, x, l)), n = i[t] = {
+ raw: x
+ }
+ }
+ switch (String(Number(l.indexOf("flipped") >= 0)) + String(Number(l.indexOf("flip-vert") >= 0))) {
+ case "11":
+ x = n.flipboth ? n.flipboth : n.flipboth = flipSpriteArrayBoth(x);
+ break;
+ case "10":
+ x = n.fliphoriz ? n.fliphoriz : n.fliphoriz = flipSpriteArrayHoriz(x, e);
+ break;
+ case "01":
+ x = n.flipvert ? n.flipvert : n.flipvert = flipSpriteArrayVert(x, e);
+ break;
+ default:
+ x = n.raw
+ }
+ return x
+}
+
+function expandObtainedSprite(e, t, n, x, r) {
+ var i, a, o = new Uint8ClampedArray(e.length * scale),
+ l = n * unitsizet4,
+ s = x * scale,
+ d = 0,
+ u = 0;
+ for (i = 0; i < s; ++i) {
+ for (a = 0; a < scale; ++a) memcpyU8(e, o, d, u, l), u += l;
+ d += l
+ }
+ return r || (t.num_sprites = 1, t.sprite = o, refillThingCanvas(t)), o
+}
+
+function expandObtainedSpriteMultiple(e, t, n, x) {
+ var r, i, a = {};
+ for (i in t.num_sprites = 0, e)(r = e[i]).constructor == Uint8ClampedArray ? (++t.num_sprites, a[i] = expandObtainedSprite(r, t, n, x, !0)) : a[i] = "number" == typeof r ? r * scale : r;
+ t.sprite = a.middle, t.sprites = a, refillThingCanvases(t, a)
+}
+
+function findSpriteInLibrary(e, t, n) {
+ var x, r, i, a = t;
+ if (t.multiple) return t;
+ for (var o = 0; x = !0;) {
+ for (i in ++o > 49 && (alert(e.title), console.log(e.title, n, t)), n)
+ if (r = t[n[i]]) {
+ t = r, n.splice(i, 1), x = !1;
+ break
+ }
+ if (x)
+ if (r = t.normal) switch (x = !1, r.constructor) {
+ case Uint8ClampedArray:
+ case SpriteMultiple:
+ return r;
+ case Object:
+ t = r;
+ break;
+ default:
+ t = t[r]
+ } else x = !0;
+ if (x || !t) return console.log("\nSprite not found! Title: " + e.title), console.log("Classname:", e.className), console.log("Remaining", n), console.log("Current", t), console.log("Prev", a), new Uint8ClampedArray(e.spritewidth * e.spriteheight);
+ switch (t.constructor) {
+ case Uint8ClampedArray:
+ case SpriteMultiple:
+ return t;
+ case "Object":
+ continue
+ }
+ }
+}
+
+function refillThingCanvas(e) {
+ var t = e.canvas,
+ n = e.context,
+ x = n.getImageData(0, 0, t.width, t.height);
+ memcpyU8(e.sprite, x.data), n.putImageData(x, 0, 0)
+}
+
+function refillThingCanvases(e, t) {
+ var n, x, r, i, a, o = e.canvases = {},
+ l = e.spritewidthpixels,
+ s = e.spriteheightpixels;
+ for (a in e.num_sprites = 1, t)(n = t[a]) instanceof Uint8ClampedArray ? (++e.num_sprites, o[a] = r = {
+ canvas: getCanvas(l, s)
+ }, r.context = i = r.canvas.getContext("2d"), memcpyU8(n, (x = i.getImageData(0, 0, l, s)).data), i.putImageData(x, 0, 0)) : o[a] = n;
+ r = o.middle, e.canvas = r.canvas, e.context = r.context
+}
+
+function refillCanvas() {
+ var e, t = window.canvas,
+ n = window.context;
+ for (n.fillStyle = area.fillStyle, n.fillRect(0, 0, t.width, t.height), e = scenery.length - 1; e >= 0; --e) drawThingOnCanvas(n, scenery[e]);
+ for (e = solids.length - 1; e >= 0; --e) drawThingOnCanvas(n, solids[e]);
+ for (e = characters.length - 1; e >= 0; --e) drawThingOnCanvas(n, characters[e])
+}
+
+function drawThingOnCanvas(e, t) {
+ if (!t.hidden) {
+ var n = t.left,
+ x = t.top;
+ n > innerWidth || (1 == t.num_sprites ? drawThingOnCanvasSingle(e, t.canvas, t, n, x) : drawThingOnCanvasMultiple(e, t.canvases, t.canvas, t, n, x))
+ }
+}
+
+function drawThingOnCanvasSingle(e, t, n, x, r) {
+ n.repeat ? drawPatternOnCanvas(e, t, x, r, n.unitwidth, n.unitheight) : e.drawImage(t, x, r)
+}
+
+function drawThingOnCanvasMultiple(e, t, n, x, r, i) {
+ var a, o, l = i,
+ s = r,
+ d = x.right,
+ u = x.bottom,
+ p = x.unitwidth,
+ c = x.unitheight,
+ m = x.spritewidthpixels,
+ h = x.spriteheightpixels;
+ "v" == x.sprite_type[0] ? ((o = t.bottom) && (a = t.bottomheight || x.spriteheightpixels, drawPatternOnCanvas(e, o.canvas, s, u - a, m, min(c, h)), u -= a, c -= a), (o = t.top) && (a = t.topheight || x.spriteheightpixels, drawPatternOnCanvas(e, o.canvas, s, l, m, min(c, h)), l += a, c -= a)) : "h" == x.sprite_type[0] && ((o = t.left) && (a = t.leftwidth || x.spritewidthpixels, drawPatternOnCanvas(e, o.canvas, s, l, min(p, m), h), s += a, p -= a), (o = t.right) && (a = t.rightwidth || x.spritewidthpixels, drawPatternOnCanvas(e, o.canvas, d - a, l, min(p, m), h), d -= a, p -= a)), l < u && s < d && drawPatternOnCanvas(e, n, s, l, p, c)
+}
+
+function getPaletteReferenceStarting(e) {
+ for (var t = {}, n = 0; n < e.length; ++n) t[makeDigit(n, digitsize)] = makeDigit(n, digitsize);
+ return t
+}
+
+function getPaletteReference(e) {
+ for (var t = {}, n = getDigitSize(e), x = 0; x < e.length; ++x) t[makeDigit(x, n)] = makeDigit(e[x], n);
+ return t
+}
+
+function flipSpriteArrayHoriz(e, t) {
+ var n, x, r, i, a, o = e.length,
+ l = t.spritewidth,
+ s = (t.spriteheight, new Uint8ClampedArray(o)),
+ d = l * unitsizet4;
+ for (r = 0; r < o; r += d)
+ for (n = r, x = r + d - 4, i = 0; i < d; i += 4) {
+ for (a = 0; a < 4; ++a) s[n + a] = e[x + a];
+ n += 4, x -= 4
+ }
+ return s
+}
+
+function flipSpriteArrayVert(e, t) {
+ for (var n, x, r = e.length, i = t.spritewidth, a = (t.spriteheight, new Uint8ClampedArray(r)), o = i * unitsizet4, l = 0, s = r - o; l < r;) {
+ for (n = 0; n < o; n += 4)
+ for (x = 0; x < 4; ++x) a[l + n + x] = e[s + n + x];
+ l += o, s -= o
+ }
+ return a
+}
+
+function flipSpriteArrayBoth(e) {
+ for (var t, n = e.length, x = new Uint8ClampedArray(n), r = e.length - 4, i = 0; i < n;) {
+ for (t = 0; t < 4; ++t) x[i + t] = e[r + t];
+ i += 4, r -= 4
+ }
+ return x
+}
+
+function drawPatternOnCanvas(e, t, n, x, r, i) {
+ e.translate(n, x), e.fillStyle = e.createPattern(t, "repeat"), e.fillRect(0, 0, r, i), e.translate(-n, -x)
+}
+
+function clearAllSprites(e) {
+ var t, n, x = [window.solids, window.characters, window.scenery];
+ for (t in x)
+ for (n in t = x[t]) setThingSprite(t[n]);
+ e && (library.cache = {})
+}
+
+function memcpyU8(e, t, n, x, r) {
+ if (!(!e || !t || n < 0 || x < 0 || r <= 0 || n >= e.length || x >= t.length)) {
+ null == n && (n = 0), null == x && (x = 0), null == r && (r = max(0, min(e.length, t.length)));
+ for (var i = r + 0, a = x + 0, o = n + 0; i--;) t[a++] = e[o++]
+ }
+}
+
+function canvasDisableSmoothing(e, t) {
+ (t = t || e.getContext("2d")).webkitImageSmoothingEnabled = !1, t.mozImageSmoothingEnabled = !1, t.imageSmoothingEnabled = !1
+}
+
+function Thing(e) {
+ if (0 != arguments.length && e) {
+ var t = this === window ? new Thing : this,
+ n = t.args = arrayMake(arguments);
+ n[0] = t, e.apply(t, n), t.alive = !0, t.placed = this.outerok = 0, t.xvel = this.xvel || 0, t.yvel = this.yvel || 0, null == t.tolx && (t.tolx = 0), null == t.toly && (t.toly = unitsized8), t.collide = t.collide || function() {}, t.death = t.death || killNormal, t.animate = t.animate || emergeUp;
+ var x, r = 4;
+ (x = floor(t.width * unitsize / QuadsKeeper.getQuadWidth())) > 0 && (r += (x + 1) * r / 2), (x = floor(t.height * unitsize / QuadsKeeper.getQuadHeight())) > 0 && (r += (x + 1) * r / 2), t.maxquads = r, t.quadrants = new Array(t.maxquads), t.overlaps = [], t.title = t.title || e.name, t.spritewidth = t.spritewidth || t.width, t.spriteheight = t.spriteheight || t.height, t.sprite = "";
+ try {
+ setContextStuff(t, t.spritewidth, t.spriteheight)
+ } catch (e) {
+ log("Thing context fail", e, t.title, t), setTimeout((function() {
+ setContextStuff(t, t.spritewidth, t.spriteheight)
+ }), 1)
+ }
+ return t
+ }
+}
+
+function setContextStuff(e, t, n) {
+ e.spritewidthpixels = e.spritewidth * unitsize, e.spriteheightpixels = e.spriteheight * unitsize, e.canvas = getCanvas(e.spritewidthpixels, e.spriteheightpixels), e.context = e.canvas.getContext("2d"), e.imageData = e.context.getImageData(0, 0, e.spritewidthpixels, e.spriteheightpixels), e.sprite_type = e.sprite_type || "neither", canvasDisableSmoothing(e, e.context)
+}
+
+function ThingCreate(e, t) {
+ var n = new Thing;
+ return Thing.apply(n, [e].concat(t)), n
+}
+
+function setCharacter(e, t) {
+ e.type = t.split(" ")[0], e.resting = e.under = e.undermid = !1, e.alive = e.character = !0, e.libtype = "characters", setClassInitial(e, "character " + t)
+}
+
+function setSolid(e, t) {
+ e.type = "solid", e.name = t, e.solid = e.alive = !0, e.speed = e.speed || 0, e.collide = e.collide || characterTouchedSolid, e.bottomBump = e.bottomBump || function() {}, e.action = e.action || function() {}, e.jump = e.jump || function() {}, e.spritewidth = e.spritewidth || 8, e.spriteheight = e.spriteheight || 8, e.libtype = "solids", setClassInitial(e, "solid " + t)
+}
+
+function setScenery(e, t) {
+ setSolid(e, t), e.libtype = "scenery"
+}
+
+function addThing(e, t, n) {
+ return e instanceof Function && (e = new Thing(e)), placeThing(e, t, n), window[e.libtype].push(e), e.placed = !0, e.onadding && e.onadding(), setThingSprite(e), window["last_" + (e.title || e.group || "unknown")] = e, e
+}
+
+function placeThing(e, t, n) {
+ return setLeft(e, t), setTop(e, n), updateSize(e), e
+}
+
+function addText(e, t, n) {
+ var x = createElement("div", {
+ innerHTML: e,
+ className: "text",
+ left: t,
+ top: n,
+ onclick: body.onclick || canvas.onclick,
+ style: {
+ marginLeft: t + "px",
+ marginTop: n + "px"
+ }
+ });
+ return body.appendChild(x), texts.push(x), x
+}
+
+function spawnText(e, t) {
+ var n = e.element = addText("", e.left, e.top);
+ "object" == typeof t ? proliferate(n, t) : n.innerHTML = t, e.movement = !1
+}
+
+function checkTexts() {
+ var e, t, n, x = QuadsKeeper.getDelX();
+ for (n = texts.length - 1; n >= 0; --n) t = texts[n], e = texts[n].element || t, t.right = t.left + e.clientWidth, t.right < x && (body.removeChild(e), killNormal(t), deleteThing(e, texts, n))
+}
+
+function Mushroom(e, t) {
+ e.group = "item", e.width = e.height = 8, e.speed = .42 * unitsize, e.animate = emergeUp, e.movement = moveSimple, e.collide = collideFriendly, e.jump = mushroomJump, e.death = killNormal, e.nofire = !0;
+ var n = "mushroom";
+ switch (t) {
+ case 1:
+ e.action = gainLife, n += " gainlife";
+ break;
+ case -1:
+ e.action = killPlayer, n += " death";
+ break;
+ default:
+ e.action = playerShroom, n += " regular"
+ }
+ setCharacter(e, n)
+}
+
+function mushroomJump(e) {
+ e.yvel -= 1.4 * unitsize, e.top -= unitsize, e.bottom -= unitsize, updatePosition(e)
+}
+
+function FireFlower(e) {
+ e.group = "item", e.width = e.height = 8, e.animate = emergeUp, e.collide = collideFriendly, e.action = playerShroom, e.nofall = e.nofire = !0, e.movement = !1, setCharacter(e, "fireflower"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"])
+}
+
+function FireBall(e, t) {
+ e.group = "item", e.width = e.height = 4, e.speed = 1.75 * unitsize, e.gravity = 1.56 * gravity, e.jumpheight = 1.56 * unitsize, e.nofire = e.nostar = e.collide_primary = !0, e.moveleft = t, e.animate = emergeFire, e.movement = moveJumping, e.collide = fireEnemy, e.death = fireExplodes, setCharacter(e, "fireball"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 4)
+}
+
+function fireEnemy(e, t) {
+ if (!(!t.alive || t.emerging || e.height <= unitsize)) {
+ if (e.nofire) return e.nofire > 1 ? t.death(t) : void 0;
+ e.solid ? AudioPlayer.playLocal("Bump", t.right) : (AudioPlayer.playLocal("Kick", t.right), e.death(e, 2), scoreEnemyFire(e)), t.death(t)
+ }
+}
+
+function fireDeleted() {
+ --player.numballs
+}
+
+function fireExplodes(e) {
+ var t = new Thing(Firework);
+ addThing(t, e.left - t.width / 2, e.top - t.height / 2), t.animate(), killNormal(e)
+}
+
+function Star(e) {
+ e.group = "item", e.width = 7, e.height = 8, e.speed = .56 * unitsize, e.jumpheight = 1.17 * unitsize, e.gravity = gravity / 2.8, e.animate = emergeUp, e.movement = moveJumping, e.collide = collideFriendly, e.action = playerStar, e.death = killNormal, e.nofire = !0, setCharacter(e, "star item"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 0, 7)
+}
+
+function Shell(e, t) {
+ e.width = 8, e.height = 7, e.group = "item", e.speed = unitsizet2, e.collide_primary = !0, e.moveleft = e.xvel = e.move = e.hitcount = e.peeking = e.counting = e.landing = e.enemyhitcount = 0, e.smart = t, e.movement = moveShell, e.collide = hitShell, e.death = killFlip, e.spawntype = Koopa, setCharacter(e, "shell" + (t ? " smart" : " dumb"))
+}
+
+function hitShell(e, t) {
+ if ("shell" == e.type && t.type != e.type) return hitShell(t, e);
+ switch (e.type) {
+ case "solid":
+ t.right < e.right ? (AudioPlayer.playLocal("Bump", e.left), setRight(t, e.left), t.xvel = -t.speed, t.moveleft = !0) : (AudioPlayer.playLocal("Bump", e.right), setLeft(t, e.right), t.xvel = t.speed, t.moveleft = !1);
+ break;
+ case "player":
+ var n = objectToLeft(t, e),
+ x = e.yvel > 0 && e.bottom <= t.top + unitsizet2;
+ if (e.star) return scorePlayerShell(e, t), t.death(t, 2);
+ if (t.landing) return void(t.shelltoleft == n ? (++t.landing, 1 == t.landing && scorePlayerShell(e, t), TimeHandler.addEvent((function(e) {
+ --e.landing
+ }), 2, t)) : player.death(player));
+ 0 == t.xvel || x ? (t.counting = 0, scorePlayerShell(e, t), t.peeking && (t.peeking = !1, removeClass(t, "peeking"), t.height -= unitsized8, updateSize(t)), 0 == t.xvel ? (n ? (t.moveleft = !0, t.xvel = -t.speed) : (t.moveleft = !1, t.xvel = t.speed), ++t.hitcount, TimeHandler.addEvent((function(e) {
+ --e.hitcount
+ }), 2, t)) : t.xvel = 0, x && (AudioPlayer.play("Kick"), t.xvel ? scorePlayerShell(e, t) : (jumpEnemy(e, t), e.yvel *= 2, scorePlayerShell(e, t), setBottom(e, t.top - unitsize, !0)), ++t.landing, t.shelltoleft = n, TimeHandler.addEvent((function(e) {
+ --e.landing
+ }), 2, t))) : !t.hitcount && (n && t.xvel < 0 || !n && t.xvel > 0) && e.death(e);
+ break;
+ case "shell":
+ if (0 != e.xvel)
+ if (0 != t.xvel) {
+ var r = e.xvel;
+ shiftHoriz(e, e.xvel = t.xvel), shiftHoriz(t, t.xvel = r)
+ } else score(t, 500), t.death(t);
+ else 0 != t.xvel && (score(e, 500), e.death(e));
+ break;
+ default:
+ switch (e.group) {
+ case "enemy":
+ if (t.xvel) {
+ if ("koopa" == e.type.split(" ")[0]) {
+ var i = new Thing(Shell, e.smart);
+ addThing(i, e.left, e.bottom - i.height * unitsize), killFlip(i), killNormal(e)
+ } else killFlip(e);
+ AudioPlayer.play("Kick"), score(e, findScore(t.enemyhitcount), !0), ++t.enemyhitcount
+ } else e.moveleft = objectToLeft(e, t);
+ break;
+ case "item":
+ if ("shell" != e.type) return;
+ t.xvel && killFlip(e), e.xvel && killFlip(t)
+ }
+ }
+}
+
+function moveShell(e) {
+ if (0 == e.xvel)
+ if (350 == ++e.counting) addClass(e, "peeking"), e.peeking = !0, e.height += unitsized8, updateSize(e);
+ else if (490 == e.counting) {
+ var t = new Thing(e.spawntype, e.smart);
+ addThing(t, e.left, e.bottom - t.height * unitsize), killNormal(e)
+ }
+}
+
+function collideFriendly(e, t) {
+ "player" == e.type && (t.action && t.action(e), t.death(t))
+}
+
+function jumpEnemy(e, t) {
+ e.keys.up ? e.yvel = -1.4 * unitsize : e.yvel = -.7 * unitsize, e.xvel *= .91, AudioPlayer.play("Kick"), "item" == t.group && "shell" != t.type || score(t, findScore(e.jumpcount++ + e.jumpers), !0), ++e.jumpers, TimeHandler.addEvent((function(e) {
+ --e.jumpers
+ }), 1, e)
+}
+
+function Goomba(e) {
+ e.width = e.height = 8, e.speed = .21 * unitsize, e.toly = unitsize, e.moveleft = e.noflip = !0, e.smart = !1, e.group = "enemy", e.movement = moveSimple, e.collide = collideEnemy, e.death = killGoomba, setCharacter(e, "goomba"), TimeHandler.addSpriteCycleSynched(e, [unflipHoriz, flipHoriz])
+}
+
+function killGoomba(e, t) {
+ if (e.alive)
+ if (t) killFlip(e);
+ else {
+ var n = new Thing(DeadGoomba);
+ addThing(n, e.left, e.bottom - n.height * unitsize), TimeHandler.addEvent(killNormal, 21, n), killNormal(e)
+ }
+}
+
+function DeadGoomba(e) {
+ e.width = 8, e.height = 4, e.movement = !1, e.nocollide = e.nocollide = !0, e.death = killNormal, setSolid(e, "deadGoomba")
+}
+
+function Koopa(e, t, n) {
+ e.width = 8, e.height = 12, e.speed = e.xvel = .21 * unitsize, e.moveleft = e.skipoverlaps = !0, e.group = "enemy", e.smart = t;
+ var x = "koopa";
+ x += e.smart ? " smart" : " dumb", e.smart && (x += " smart"), n ? (x += " flying", e.winged = !0, 1 == n ? (e.movement = moveJumping, e.jumpheight = 1.17 * unitsize, e.gravity = gravity / 2.8) : (e.movement = moveFloating, e.ytop = e.begin = n[0] * unitsize, e.ybot = e.end = n[1] * unitsize, e.nofall = e.fly = !0, e.changing = e.xvel = 0, e.yvel = e.maxvel = unitsized4)) : (x += " regular", e.smart ? e.movement = moveSmart : e.movement = moveSimple), e.collide = collideEnemy, e.death = killKoopa, setCharacter(e, x), TimeHandler.addSpriteCycleSynched(e, ["one", "two"]), e.toly = unitsizet2
+}
+
+function killKoopa(e, t) {
+ if (e.alive) {
+ var n;
+ if (n = t && 2 != t || e.winged ? new Thing(Koopa, e.smart) : new Thing(Shell, e.smart), TimeHandler.addEvent((function(e, t) {
+ addThing(e, t.left, t.bottom - e.height * unitsize), e.moveleft = t.moveleft
+ }), 0, n, e), killNormal(e), 2 != t) return n;
+ killFlip(n)
+ }
+}
+
+function Pirhana(e, t) {
+ e.width = 8, e.height = 12, e.counter = 0, e.countermax = e.height * unitsize, e.dir = unitsized8, e.toly = unitsizet8, e.nofall = e.deadly = e.nocollidesolid = e.repeat = !0, e.group = "enemy", e.collide = collideEnemy, e.death = killNormal, e.movement = movePirhanaInit, e.death = killPirhana, setCharacter(e, "pirhana")
+}
+
+function movePirhanaInit(e) {
+ e.hidden = !0;
+ var t = e.visual_scenery = new Thing(Sprite, "Pirhana");
+ addThing(t, e.left, e.top), TimeHandler.addSpriteCycle(t, ["one", "two"]), e.movement = movePirhanaNew, movePirhanaNew(e, e.height * unitsize)
+}
+
+function movePirhanaNew(e, t) {
+ t = t || e.dir, e.counter += t, shiftVert(e, t), shiftVert(e.visual_scenery, t), (e.counter <= 0 || e.counter >= e.countermax) && (e.movement = !1, e.dir *= -1, TimeHandler.addEvent(movePirhanaRestart, 35, e))
+}
+
+function movePirhanaRestart(e) {
+ var t = getMidX(player);
+ e.counter >= e.countermax && t > e.left - unitsizet8 && t < e.right + unitsizet8 ? setTimeout(movePirhanaRestart, 7, e) : e.movement = movePirhanaNew
+}
+
+function killPirhana(e) {
+ (e || (e = this)) && (killNormal(e), killNormal(e.visual_scenery))
+}
+
+function playerAboveEnemy(e, t) {
+ return e.bottom < t.top + t.toly
+}
+
+function collideEnemy(e, t) {
+ if (characterIsAlive(e) && characterIsAlive(t) && !(e.nocollidechar && !t.player || t.nocollidechar && !e.player)) {
+ if ("item" == e.group) return e.collide_primary ? e.collide(t, e) : void 0;
+ if (!map.underwater && e.player && (e.star && !t.nostar || !t.deadly && objectOnTop(e, t))) {
+ if (playerAboveEnemy(e, t)) return;
+ e.player && !e.star ? TimeHandler.addEvent((function(e, t) {
+ jumpEnemy(e, t)
+ }), 0, e, t) : t.nocollide = !0;
+ t.death(t, 2 * e.star);
+ e.star ? scoreEnemyStar(t) : (scoreEnemyStomp(t), setBottom(e, min(e.bottom, t.top + unitsize))), addClass(e, "hopping"), removeClasses(e, "running skidding jumping one two three"), e.hopping = !0, 1 == player.power && setPlayerSizeSmall(e)
+ } else e.player ? playerAboveEnemy(e, t) || e.death(e) : t.moveleft = !(e.moveleft = objectToLeft(e, t))
+ }
+}
+
+function Podoboo(e, t) {
+ e.width = 7, e.height = 8, e.deadly = e.nofall = e.nocollidesolid = e.nofire = !0, e.gravity = map.gravity / 2.1, e.jumpheight = (t || 64) * unitsize, e.speed = -map.maxyvel, e.movement = movePodobooInit, e.collide = collideEnemy, e.betweentime = 70, setCharacter(e, "podoboo")
+}
+
+function movePodobooInit(e) {
+ characterIsAlive(e) && (e.hidden = !0, e.heightnorm = e.top, e.heightfall = e.top - e.jumpheight, TimeHandler.addEvent(podobooJump, e.betweentime, e), e.movement = !1)
+}
+
+function podobooJump(e) {
+ characterIsAlive(e) && (unflipVert(e), e.yvel = e.speed + e.gravity, e.movement = movePodobooUp, e.hidden = !1, setThingSprite(e))
+}
+
+function movePodobooUp(e) {
+ shiftVert(e, e.speed, !0), e.top - gamescreen.top > e.heightfall || (e.nofall = !1, e.movement = movePodobooSwitch)
+}
+
+function movePodobooSwitch(e) {
+ e.yvel <= 0 || (flipVert(e), e.movement = movePodobooDown)
+}
+
+function movePodobooDown(e) {
+ e.top < e.heightnorm || (setTop(e, e.heightnorm, !0), e.movement = !1, e.nofall = e.hidden = !0, e.heightfall = e.top - e.jumpheight, TimeHandler.addEvent(podobooJump, e.betweentime, e))
+}
+
+function HammerBro(e) {
+ e.width = 8, e.height = 12, e.group = "enemy", e.collide = collideEnemy, e.statex = e.counter = e.statey = e.counterx = e.countery = e.level = e.throwcount = 0, e.death = killFlip, e.movement = moveHammerBro, setCharacter(e, "hammerbro"), e.gravity = gravity / 2, TimeHandler.addSpriteCycle(e, ["one", "two"]), TimeHandler.addEvent(throwHammer, 35, e, 7), TimeHandler.addEventInterval(jumpHammerBro, 140, 1 / 0, e)
+}
+
+function moveHammerBro(e) {
+ e.xvel = Math.sin(Math.PI * (e.counter += .007)) / 2.1, lookTowardPlayer(e), e.nocollidesolid = e.yvel < 0 || e.falling
+}
+
+function throwHammer(e, t) {
+ !characterIsAlive(e) || e.nothrow || e.right < -unitsizet32 || (3 != t && switchClass(e, "thrown", "throwing"), TimeHandler.addEvent((function(e) {
+ if (3 != t) {
+ if (!characterIsAlive(e)) return;
+ switchClass(e, "throwing", "thrown"), addThing(new Thing(Hammer, e.lookleft), e.left - unitsizet2, e.top - unitsizet2)
+ }
+ t > 0 ? TimeHandler.addEvent(throwHammer, 7, e, --t) : (TimeHandler.addEvent(throwHammer, 70, e, 7), removeClass(e, "thrown"))
+ }), 14, e))
+}
+
+function jumpHammerBro(e) {
+ if (!characterIsAlive(e)) return !0;
+ e.resting && (map.floor - e.bottom / unitsize >= jumplev1 - 2 && "floor" != e.resting.name && Math.floor(2 * Math.random()) ? (e.yvel = -.7 * unitsize, e.falling = !0, TimeHandler.addEvent((function(e) {
+ e.falling = !1
+ }), 42, e)) : e.yvel = -2.1 * unitsize, e.resting = !1)
+}
+
+function Hammer(e, t) {
+ e.width = e.height = 8, e.nocollidesolid = e.nocollidechar = e.deadly = e.nofire = !0, e.collide = collideEnemy, e.yvel = 1.4 * -unitsize, e.xvel = unitsize / 1.4, t && (e.xvel *= -1), e.gravity = gravity / 2.1, setCharacter(e, "hammer"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 3)
+}
+
+function Cannon(e, t, n) {
+ e.width = 8, e.height = 8 * (t || 1), e.spriteheight = 16, n || (e.movement = moveCannonInit), e.timer = 117, e.repeat = !0, setSolid(e, "cannon")
+}
+
+function moveCannonInit(e) {
+ TimeHandler.addEventInterval((function(e) {
+ if (!(player.right > e.left - unitsizet8 && player.left < e.right + unitsizet8)) {
+ var t = new Thing(BulletBill);
+ objectToLeft(player, e) ? (addThing(t, e.left, e.top), t.direction = t.moveleft = !0, t.xvel *= -1, flipHoriz(t)) : addThing(t, e.left + e.width, e.top), AudioPlayer.playLocal("Bump", e.right)
+ }
+ }), 270, 1 / 0, e), e.movement = !1
+}
+
+function BulletBill(e) {
+ e.width = 8, e.height = 7, e.group = "enemy", e.nofall = e.nofire = e.nocollidesolid = e.nocollidechar = !0, e.speed = e.xvel = unitsized2, e.movement = moveSimple, e.collide = collideEnemy, e.death = killFlip, setCharacter(e, "bulletbill")
+}
+
+function Bowser(e, t) {
+ e.width = e.height = 16, e.speed = .28 * unitsize, e.gravity = gravity / 2.8, e.deadly = e.dx = e.lookleft = e.nokillend = e.skipoverlaps = !0, e.moveleft = e.smart = e.movecount = e.jumpcount = e.firecount = e.deathcount = 0, e.killonend = freezeBowser, e.counter = -.7, e.group = "enemy", e.movement = moveBowserInit, e.collide = collideEnemy, e.death = killBowser, setCharacter(e, "bowser"), TimeHandler.addSpriteCycle(e, ["one", "two"]), t && TimeHandler.addEvent(throwHammer, 35, e, 7)
+}
+
+function moveBowserInit(e) {
+ TimeHandler.addEventInterval(bowserJumps, 117, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 280, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 350, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 490, 1 / 0, e), e.movement = moveBowser
+}
+
+function moveBowser(e) {
+ characterIsAlive(player) && (lookTowardPlayer(e), e.lookleft ? e.xvel = Math.sin(Math.PI * (e.counter += .007)) / 1.4 : e.xvel = min(e.xvel + .07, .84))
+}
+
+function bowserJumps(e) {
+ if (!characterIsAlive(e)) return !0;
+ e.resting && e.lookleft && (e.yvel = -1.4 * unitsize, e.resting = !1, e.nocollidesolid = !0, TimeHandler.addEventInterval((function(e) {
+ if (e.yvel > unitsize) return e.nocollidesolid = !1, !0
+ }), 3, 1 / 0, e))
+}
+
+function bowserFires(e) {
+ if (!characterIsAlive(e) || !characterIsAlive(player)) return !0;
+ e.lookleft && (addClass(e, "firing"), AudioPlayer.playLocal("Bowser Fires", e.left), TimeHandler.addEvent((function(e) {
+ var t = e.top + unitsizet4,
+ n = new Thing(BowserFire, roundDigit(player.bottom, unitsizet8));
+ removeClass(e, "firing"), addThing(n, e.left - unitsizet8, t), AudioPlayer.play("Bowser Fires")
+ }), 14, e))
+}
+
+function killBowser(e, t) {
+ if (t) return e.nofall = !1, killFlip(e);
+ 5 == ++e.deathcount && (e.yvel = e.speed = e.movement = 0, killFlip(e, 350), score(e, 5e3))
+}
+
+function freezeBowser(e) {
+ e.movement = !1, thingStoreVelocity(e)
+}
+
+function BowserFire(e, t) {
+ e.width = 12, e.height = 4, e.xvel = -.63 * unitsize, e.deadly = e.nofall = e.nocollidesolid = e.nofire = !0, e.collide = collideEnemy, t && (e.ylev = t, e.movement = moveFlying), setCharacter(e, "bowserfire"), TimeHandler.addSpriteCycle(e, [unflipVert, flipVert])
+}
+
+function moveFlying(e) {
+ round(e.bottom) != round(e.ylev) ? shiftVert(e, min(max(0, e.ylev - e.bottom), unitsize)) : e.movement = !1
+}
+
+function WaterBlock(e, t) {
+ e.height = 16, e.width = t, e.spritewidth = e.spriteheight = 1 / scale, e.repeat = !0, setSolid(e, "water-block")
+}
+
+function Blooper(e) {
+ e.width = 8, e.height = 12, e.nocollidesolid = e.nofall = e.moveleft = 1, e.squeeze = e.counter = 0, e.speed = unitsized2, e.xvel = e.speedinv = -unitsized4, e.movement = moveBlooper, e.collide = collideEnemy, e.death = killFlip, setCharacter(e, "blooper")
+}
+
+function moveBlooper(e) {
+ switch (e.counter) {
+ case 56:
+ e.squeeze = !0, ++e.counter;
+ break;
+ case 63:
+ squeezeBlooper(e);
+ break;
+ default:
+ ++e.counter
+ }
+ e.top < unitsizet16 + 10 && squeezeBlooper(e), e.squeeze ? e.yvel = max(e.yvel + .021, .7) : e.yvel = min(e.yvel - .035, -.7), shiftVert(e, e.yvel, !0), e.squeeze || (player.left > e.right + unitsizet8 ? e.xvel = min(e.speed, e.xvel + unitsized32) : player.right < e.left - unitsizet8 && (e.xvel = max(e.speedinv, e.xvel - unitsized32)))
+}
+
+function squeezeBlooper(e) {
+ 2 != e.squeeze && addClass(e, "squeeze"), e.squeeze = 2, e.xvel /= 1.17, setHeight(e, 10, !0, !0), (e.top > player.bottom || e.bottom > 360) && unsqueezeBlooper(e)
+}
+
+function unsqueezeBlooper(e) {
+ e.squeeze = !1, removeClass(e, "squeeze"), e.counter = 0, setHeight(e, 12, !0, !0)
+}
+
+function CheepCheep(e, t, n) {
+ e.width = e.height = 8, e.group = "enemy";
+ var x = "cheepcheep " + (t ? "red" : "");
+ e.red = t, setCheepVelocities(e), n ? (x += " jumping", e.jumping = !0, e.movement = moveCheepJumping) : e.movement = moveCheepInit, e.nofall = e.nocollidesolid = e.nocollidechar = !0, e.death = killFlip, e.collide = collideEnemy, setCharacter(e, x), TimeHandler.addSpriteCycle(e, ["one", "two"])
+}
+
+function setCheepVelocities(e) {
+ e.red ? (e.xvel = -unitsized4, e.yvel = unitsize / -24) : (e.xvel = unitsize / -6, e.yvel = -unitsized32)
+}
+
+function moveCheepInit(e) {
+ setCheepVelocities(e), e.top < player.top && (e.yvel *= -1), moveCheep(e), e.movement = moveCheep
+}
+
+function moveCheep(e) {
+ shiftVert(e, e.yvel)
+}
+
+function moveCheepJumping(e) {
+ shiftVert(e, e.yvel += unitsize / 14)
+}
+
+function startCheepSpawn() {
+ return map.zone_cheeps = TimeHandler.addEventInterval((function() {
+ if (!map.zone_cheeps) return !0;
+ var e = new Thing(CheepCheep, !0, !0);
+ addThing(e, Math.random() * player.left * player.maxspeed / unitsized2, gamescreen.height * unitsize), e.xvel = Math.random() * player.maxspeed, e.yvel = -2.33 * unitsize, flipHoriz(e), e.movement = function(e) {
+ e.top < ceilmax ? e.movement = moveCheepJumping : shiftVert(e, e.yvel)
+ }
+ }), 21, 1 / 0)
+}
+
+function Bubble(e) {
+ e.width = e.height = 2, e.nofall = e.nocollide = !0, e.movement = function(e) {
+ e.top < unitsizet16 ? killNormal(e) : shiftVert(e, e.yvel)
+ }, e.yvel = -unitsized4, setCharacter(e, "bubble")
+}
+
+function Lakitu(e, t) {
+ e.width = 8, e.height = 12, e.nofall = e.noshiftx = e.nocollidesolid = !0, e.playerdiff = e.counter = 0, e.dir = -1, e.norepeat = t, e.playerdiff = unitsizet16, e.group = "enemy", e.collide = collideEnemy, e.movement = moveLakituInit, e.death = killLakitu, setCharacter(e, "lakitu out"), map.has_lakitu = e
+}
+
+function moveLakituInit(e) {
+ if (map.has_lakitu && e.norepeat) return killNormal(e);
+ TimeHandler.addEventInterval((function(e) {
+ if (!e.alive) return !0;
+ throwSpiny(e)
+ }), 140, 1 / 0, e), e.movement = moveLakituInit2, moveLakituInit2(e), map.has_lakitu = e
+}
+
+function moveLakituInit2(e) {
+ if (e.right < player.left) return moveLakitu(e), e.movement = moveLakitu, map.lakitu = e, !0;
+ shiftHoriz(e, -unitsize)
+}
+
+function moveLakitu(e) {
+ player.xvel > unitsized8 && player.left > gamescreen.width * unitsized2 ? e.left < player.right + unitsizet16 && (slideToXLoc(e, player.right + unitsizet32 + player.xvel, 1.4 * player.maxspeed), e.counter = 0) : (e.counter += .007, slideToXLoc(e, player.left + player.xvel + 117 * Math.sin(Math.PI * e.counter), .7 * player.maxspeed))
+}
+
+function throwSpiny(e) {
+ if (!characterIsAlive(e)) return !1;
+ switchClass(e, "out", "hiding"), TimeHandler.addEvent((function(e) {
+ if (e.dead) return !1;
+ var t = new Thing(SpinyEgg);
+ addThing(t, e.left, e.top), t.yvel = -2.1 * unitsize, switchClass(e, "hiding", "out")
+ }), 21, e)
+}
+
+function killLakitu(e) {
+ delete e.noscroll, killFlip(e)
+}
+
+function Spiny(e) {
+ e.width = e.height = 8, e.group = "enemy", e.speed = .21 * unitsize, e.deadly = e.moveleft = !0, e.smart = !1, e.death = killFlip, e.collide = collideEnemy, e.movement = moveSimple, setCharacter(e, "spiny"), TimeHandler.addSpriteCycle(e, ["one", "two"])
+}
+
+function SpinyEgg(e) {
+ e.height = 8, e.width = 7, e.group = "enemy", e.deadly = !0, e.movement = moveSpinyEgg, e.spawntype = Spiny, e.spawner = e.death = createSpiny, e.collide = collideEnemy, setCharacter(e, "spinyegg"), TimeHandler.addSpriteCycle(e, ["one", "two"])
+}
+
+function moveSpinyEgg(e) {
+ e.resting && createSpiny(e)
+}
+
+function createSpiny(e) {
+ var t = new Thing(Spiny);
+ addThing(t, e.left, e.top), t.moveleft = objectToLeft(player, t), killNormal(e)
+}
+
+function Beetle(e) {
+ e.width = e.height = 8, e.group = "enemy", e.speed = e.xvel = .21 * unitsize, e.nofire = 2, e.moveleft = !0, e.smart = !1, e.collide = collideEnemy, e.movement = moveSmart, e.death = killBeetle, setCharacter(e, "beetle"), TimeHandler.addSpriteCycleSynched(e, ["one", "two"])
+}
+
+function killBeetle(e, t) {
+ if (e.alive) {
+ var n;
+ if (n = new Thing(t && 2 != t ? Koopa : BeetleShell, e.smart), TimeHandler.addEvent((function(e, t) {
+ addThing(e, t.left, t.bottom - e.height * unitsize), e.moveleft = t.moveleft
+ }), 0, n, e), killNormal(e), 2 != t) return n;
+ killFlip(n)
+ }
+}
+
+function BeetleShell(e) {
+ e.width = e.height = 8, e.nofire = !0, e.group = "item", e.speed = unitsizet2, e.moveleft = e.xvel = e.move = e.hitcount = e.peeking = e.counting = e.landing = e.enemyhitcount = 0, e.movement = moveShell, e.collide = hitShell, e.death = killFlip, e.spawntype = Beetle, setCharacter(e, "shell beetle")
+}
+
+function Coin(e, t) {
+ e.group = "coin", e.width = 5, e.height = 7, e.nofall = e.coin = e.nofire = e.nocollidechar = e.nokillend = e.onlyupsolids = e.skipoverlaps = !0, e.tolx = 0, e.toly = unitsized2, e.collide = hitCoin, e.animate = coinEmerge, e.death = killNormal, setCharacter(e, "coin one"), TimeHandler.addSpriteCycleSynched(e, ["one", "two", "three", "two", "one"]), t && (e.movement = coinBecomesSolid)
+}
+
+function coinBecomesSolid(e) {
+ switchContainers(e, characters, solids), e.movement = !1
+}
+
+function hitCoin(e, t) {
+ e.player && (AudioPlayer.play("Coin"), score(e, 200, !1), gainCoin(), killNormal(t))
+}
+
+function gainCoin() {
+ ++data.coins.amount >= 100 && (data.coins.amount = 0, gainLife()), updateDataElement(data.coins)
+}
+
+function coinEmerge(e, t) {
+ AudioPlayer.play("Coin"), removeClass(e, "still"), switchContainers(e, characters, scenery), score(e, 200, !1), gainCoin(), e.nocollide = e.alive = e.nofall = e.emerging = !0, e.blockparent ? e.movement = coinEmergeMoveParent : e.movement = coinEmergeMove, e.yvel = -unitsize, TimeHandler.addEvent((function(e) {
+ e.yvel *= -1
+ }), 25, e), TimeHandler.addEvent((function(e) {
+ killNormal(e), deleteThing(e, scenery, scenery.indexOf(e))
+ }), 49, e), TimeHandler.addEventInterval(coinEmergeMovement, 1, 1 / 0, e, t), TimeHandler.clearClassCycle(e, 0), addClass(e, "anim"), TimeHandler.addSpriteCycle(e, ["anim1", "anim2", "anim3", "anim4", "anim3", "anim2"], 0, 5)
+}
+
+function coinEmergeMovement(e, t) {
+ if (!e.alive) return !0;
+ shiftVert(e, e.yvel)
+}
+
+function coinEmergeMove(e) {
+ shiftVert(e, e.yvel, !0)
+}
+
+function coinEmergeMoveParent(e) {
+ e.bottom >= e.blockparent.bottom ? killNormal(e) : shiftVert(e, e.yvel, !0)
+}
+
+function Player(e) {
+ setPlayerSizeSmall(e), e.walkspeed = unitsized2, e.canjump = e.nofiredeath = e.nofire = e.player = e.nokillend = 1, e.numballs = e.moveleft = e.skidding = e.star = e.dying = e.nofall = e.maxvel = e.paddling = e.jumpers = e.landing = 0, e.running = "", e.power = data.playerpower, e.maxspeed = e.maxspeedsave = 1.35 * unitsize, e.scrollspeed = 1.75 * unitsize, e.keys = new Keys, e.fire = playerFires, e.movement = movePlayer, e.death = killPlayer, setCharacter(e, "player normal small still"), e.tolx = unitsizet2, e.toly = 0, e.gravity = map.gravity, map.underwater && (e.swimming = !0, TimeHandler.addSpriteCycle(e, ["swim1", "swim2"], "swimming", 5))
+}
+
+function placePlayer(e, t) {
+ clearOldPlayer(), window.player = new Thing(Player), window.luigi ? window.player.title = "Luigi" : window.player.title = "Mario";
+ var n = addThing(player, e || unitsizet16, t || (map.floor - player.height) * unitsize);
+ return data.playerpower >= 2 && (playerGetsBig(player, !0), 3 == data.playerpower && playerGetsFire(player, !0)), n
+}
+
+function clearOldPlayer() {
+ window.player && (player.alive = !1, player.dead = !0)
+}
+
+function Keys() {
+ this.run = this.crouch = this.jump = this.jumplev = this.sprint = 0
+}
+
+function thingStoreVelocity(e, t) {
+ e.xvelOld = e.xvel || 0, e.yvelOld = e.yvel || 0, e.nofallOld = e.nofall || !1, e.nocollideOld = e.nocollide || !1, e.movementOld = e.movement || e.movementOld, e.nofall = e.nocollide = !0, e.xvel = e.yvel = !1, t || (e.movement = !1)
+}
+
+function thingRetrieveVelocity(e, t) {
+ t || (e.xvel = e.xvelOld || 0, e.yvel = e.yvelOld || 0), e.movement = e.movementOld || e.movement, e.nofall = e.nofallOld || !1, e.nocollide = e.nocollideOld || !1
+}
+
+function removeCrouch() {
+ player.crouching = !1, player.toly = player.tolyold || 0, 1 != player.power && (removeClass(player, "crouching"), player.height = 16, updateBottom(player, 0), updateSize(player))
+}
+
+function playerShroom(e) {
+ e.shrooming || (AudioPlayer.play("Powerup"), score(e, 1e3, !0), 3 != e.power && (e.shrooming = !0, (2 == ++e.power ? playerGetsBig : playerGetsFire)(e), storePlayerStats()))
+}
+
+function playerGetsBig(e, t) {
+ if (setPlayerSizeLarge(e), e.keys.down = 0, removeClasses(player, "crouching small"), updateBottom(e, 0), updateSize(e), t) addClass(e, "large");
+ else {
+ addClass(player, "shrooming");
+ for (var n = [1, 2, 1, 2, 3, 2, 3], x = n.length - 1; x >= 0; --x) n[x] = "shrooming" + n[x];
+ thingStoreVelocity(player), n.push((function(e, t) {
+ return e.shrooming = t.length = 0, addClass(e, "large"), removeClasses(e, "shrooming shrooming3"), thingRetrieveVelocity(player), !0
+ })), TimeHandler.addSpriteCycle(e, n, "shrooming", 6)
+ }
+}
+
+function playerGetsSmall(e) {
+ var t = player.bottom;
+ e.keys.down = 0, thingStoreVelocity(e), addClass(e, "small"), flicker(e), removeClasses(player, "running skidding jumping fiery"), addClass(player, "paddling"), TimeHandler.addEvent((function(e) {
+ removeClass(e, "large"), setPlayerSizeSmall(e), setBottom(e, t - unitsize)
+ }), 21, player), TimeHandler.addEvent((function(e) {
+ thingRetrieveVelocity(e, !1), e.nocollidechar = !0, removeClass(e, "paddling"), (e.running || e.xvel) && addClass(e, "running"), TimeHandler.addEvent(setThingSprite, 1, e)
+ }), 42, player), TimeHandler.addEvent((function(e) {
+ e.nocollidechar = !1
+ }), 70, player)
+}
+
+function playerGetsFire(e) {
+ removeClass(e, "intofiery"), addClass(e, "fiery"), player.shrooming = !1
+}
+
+function setPlayerSizeSmall(e) {
+ setSize(e, 8, 8, !0), updateSize(e)
+}
+
+function setPlayerSizeLarge(e) {
+ setSize(e, 8, 16, !0), updateSize(e)
+}
+
+function movePlayer(e) {
+ if (e.keys.up) {
+ if (e.keys.jump > 0 && (e.yvel <= 0 || map.underwater) && (map.underwater && playerPaddles(e), e.resting ? (e.resting.xvel && (e.xvel += e.resting.xvel), e.resting = !1) : (e.jumping || map.underwater || switchClass(e, "running skidding", "jumping"), e.jumping = !0), !map.underwater)) {
+ var t = unitsize / pow(++e.keys.jumplev, map.jumpmod - .0014 * e.xvel);
+ e.yvel = max(e.yvel - t, map.maxyvelinv)
+ }
+ } else e.keys.jump = 0;
+ e.keys.crouch && !e.crouching && e.resting && (1 != e.power && (e.crouching = !0, addClass(e, "crouching"), e.height = 11, e.tolyold = e.toly, e.toly = unitsizet4, updateBottom(e, 0), updateSize(e)), e.resting.actionTop && e.resting.actionTop(e, e.resting, e.resting.transport));
+ var n = 0;
+ if (0 == e.keys.run || e.crouching) e.xvel *= .98, n = .035;
+ else {
+ var x = e.keys.run * (.098 * ((e.keys.sprint && !map.underwater || 0) + 1));
+ e.xvel += x || 0, e.xvel *= .98, n = 7e-4, signBool(e.keys.run) == e.moveleft ? e.skidding || (addClass(e, "skidding"), e.skidding = !0) : e.skidding && (removeClass(e, "skidding"), e.skidding = !1)
+ }
+ e.xvel > n ? e.xvel -= n : e.xvel < -n ? e.xvel += n : 0 != e.xvel && (e.xvel = 0, window.nokeys || 0 != e.keys.run || (e.keys.left_down ? e.keys.run = -1 : e.keys.right_down && (e.keys.run = 1))), Math.abs(e.xvel) < .14 ? e.running && (e.running = !1, 1 == player.power && setPlayerSizeSmall(e), removeClasses(e, "running skidding one two three"), addClass(e, "still"), TimeHandler.clearClassCycle(e, "running")) : e.running || (e.running = !0, switchClass(e, "still", "running"), playerStartRunningCycle(e), 1 == e.power && setPlayerSizeSmall(e)), e.xvel > 0 ? (e.xvel = min(e.xvel, e.maxspeed), e.moveleft && (e.resting || map.underwater) && (unflipHoriz(e), e.moveleft = !1)) : e.xvel < 0 && (e.xvel = max(e.xvel, -1 * e.maxspeed), e.moveleft || !e.resting && !map.underwater || (flipHoriz(e), e.moveleft = !0)), e.resting && (e.hopping && (removeClass(e, "hopping"), e.xvel && addClass(e, "running"), e.hopping = !1), e.keys.jumplev = e.yvel = e.jumpcount = 0, e.jumping && (e.jumping = !1, removeClass(e, "jumping"), 1 == e.power && setPlayerSizeSmall(e), addClass(e, abs(e.xvel) < .14 ? "still" : "running")), e.paddling && (e.paddling = e.swimming = !1, removeClasses(e, "paddling swim1 swim2"), TimeHandler.clearClassCycle(e, "paddling"), addClass(e, "running"))), isNaN(e.xvel)
+}
+
+function playerStartRunningCycle(e) {
+ e.running = TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"], "running", setPlayerRunningCycler)
+}
+
+function setPlayerRunningCycler(e) {
+ e.timeout = 5 + ceil(player.maxspeedsave - abs(player.xvel))
+}
+
+function playerPaddles(e) {
+ e.paddling || (removeClasses(e, "skidding paddle1 paddle2 paddle3 paddle4 paddle5"), addClass(e, "paddling"), TimeHandler.clearClassCycle(e, "paddling_cycle"), TimeHandler.addSpriteCycle(e, ["paddle1", "paddle2", "paddle3", "paddle3", "paddle2", "paddle1", function() {
+ return e.paddling = !1
+ }], "paddling_cycle", 5)), e.paddling = e.swimming = !0, e.yvel = -.84 * unitsize
+}
+
+function playerBubbles() {
+ addThing(new Thing(Bubble), player.right, player.top)
+}
+
+function movePlayerVine(e) {
+ var t = e.attached;
+ if (e.bottom < t.top) return unattachPlayer(e);
+ if (e.keys.run == e.attachoff) {
+ for (; objectsTouch(e, t);) shiftHoriz(e, e.keys.run, !0);
+ return unattachPlayer(e)
+ }
+ if (e.keys.up) e.animatednow = !0, shiftVert(e, -1 * unitsized4, !0);
+ else if (e.keys.crouch) {
+ if (e.animatednow = !0, shiftVert(e, unitsized2, !0), e.bottom > t.bottom - unitsizet4) return unattachPlayer(e)
+ } else e.animatednow = !1;
+ e.animatednow && !e.animated ? addClass(e, "animated") : !e.animatednow && e.animated && removeClass(e, "animated"), e.animated = e.animatednow, e.bottom < -16 && (locMovePreparations(e), !t.locnum && map.random ? goToTransport(["Random", "Sky", "Vine"]) : shiftToLocation(t.locnum))
+}
+
+function unattachPlayer(e) {
+ e.movement = movePlayer, removeClasses(e, "climbing", "animated"), TimeHandler.clearClassCycle(e, "climbing"), e.yvel = e.skipoverlaps = e.attachoff = e.nofall = e.climbing = e.attached = e.attached.attached = !1, e.xvel = e.keys.run
+}
+
+function playerHopsOff(e, t, n) {
+ removeClasses(e, "climbing running"), addClass(e, "jumping"), e.piping = e.nocollide = e.nofall = e.climbing = !1, e.gravity = gravity / 4, e.xvel = 3.5, e.yvel = -3.5, TimeHandler.addEvent((function(e) {
+ unflipHoriz(e), e.gravity = gravity, e.movement = movePlayer, e.attached = !1, n && (addClass(e, "running"), playerStartRunningCycle(e))
+ }), 21, e)
+}
+
+function playerFires() {
+ if (!(player.numballs >= 2)) {
+ ++player.numballs, addClass(player, "firing");
+ var e = new Thing(FireBall, player.moveleft, !0);
+ e.yvel = unitsize, addThing(e, player.right + unitsized4, player.top + unitsizet8), player.moveleft && setRight(e, player.left - unitsized4, !0), e.animate(e), e.ondelete = fireDeleted, TimeHandler.addEvent((function(e) {
+ removeClass(e, "firing")
+ }), 7, player)
+ }
+}
+
+function emergeFire(e) {
+ AudioPlayer.play("Fireball")
+}
+
+function playerStar(e) {
+ e.star || (++e.star, AudioPlayer.play("Powerup"), AudioPlayer.playTheme("Star", !0), TimeHandler.addEvent(playerRemoveStar, 560, e), switchClass(e, "normal", "star"), TimeHandler.addSpriteCycle(e, ["star1", "star2", "star3", "star4"], "star", 5))
+}
+
+function playerRemoveStar(e) {
+ e.star && (--e.star, removeClasses(e, "star star1 star2 star3 star4"), TimeHandler.clearClassCycle(e, "star"), addClass(e, "normal"), AudioPlayer.playTheme())
+}
+
+function killPlayer(e, t) {
+ if (e.alive && !e.flickering && !e.dying) {
+ if (2 == t) notime = !0, e.dead = e.dying = !0;
+ else {
+ if (!t && e.power > 1) return AudioPlayer.play("Power Down"), e.power = 1, storePlayerStats(), playerGetsSmall(e);
+ 2 != t && (TimeHandler.clearAllCycles(e), setSize(e, 7.5, 7, !0), updateSize(e), setClass(e, "character player dead"), nokeys = notime = e.dying = !0, thingStoreVelocity(e), containerForefront(e, characters), TimeHandler.addEvent((function(e) {
+ thingRetrieveVelocity(e, !0), e.nocollide = !0, e.movement = e.resting = !1, e.gravity = gravity / 2.1, e.yvel = -1.4 * unitsize
+ }), 7, e))
+ }
+ AudioPlayer.pause(), window.editing || AudioPlayer.play("Player Dies"), e.nocollide = e.nomove = nokeys = 1, --data.lives.amount, map.random || (data.score.amount = data.scoreold), window.editing ? setTimeout((function() {
+ editorSubmitGameFuncPlay(), editor.playing = editor.playediting = !0
+ }), 35 * timer) : !map.random || data.lives.amount <= 0 ? window.reset = setTimeout(data.lives.amount ? setMap : gameOver, 280 * timer) : (nokeys = notime = !1, updateDataElement(data.score), updateDataElement(data.lives), TimeHandler.addEvent((function() {
+ playerDropsIn(), AudioPlayer.playTheme()
+ }), 117))
+ }
+}
+
+function playerDropsIn() {
+ clearOldPlayer(), placePlayer(unitsizet16, -1 * unitsizet8 + map.underwater * unitsize * 24), flicker(player), map.underwater ? player.gravity = gravity / 2.8 : (player.nocollide = !0, TimeHandler.addEvent((function() {
+ player.nocollide = !1, addThing(new Thing(RestingStone), player.left, player.bottom + player.yvel)
+ }), map.respawndist || 17))
+}
+
+function gameOver() {
+ gameon = !1, pause(), AudioPlayer.pauseTheme(), AudioPlayer.play("Game Over");
+ var e = "GAME OVER
";
+ e += "", body.className = "Night", body.innerHTML = e, window.gamecount = 1 / 0, clearPlayerStats(), setTimeout(gameRestart, 7e3)
+}
+
+function gameRestart() {
+ seedlast = .007, body.style.visibility = "hidden", body.innerHTML = body.style.paddingTop = body.style.fontSize = "", body.appendChild(canvas), gameon = !0, map.random ? setMapRandom() : setMap(1, 1), TimeHandler.addEvent((function() {
+ body.style.visibility = ""
+ })), setLives(3)
+}
+
+function Floor(e, t, n) {
+ e.width = 8 * (t || 1), e.height = 8 * n || unitsizet32, e.spritewidth = 8, e.spriteheight = 8, e.repeat = !0, setSolid(e, "floor")
+}
+
+function Clouds(e, t) {
+ e.width = 8 * t, e.height = 8, setSolid(e, "clouds")
+}
+
+function Brick(e, t) {
+ if (e.width = e.height = 8, e.used = !1, e.bottomBump = brickBump, t)
+ if (t instanceof Array)
+ for (e.contents = t; e.contents.length < 3;) e.contents.push(!1);
+ else e.contents = [t, !1, !1];
+ else e.contents = !1;
+ e.death = killNormal, setSolid(e, "brick unused"), e.tolx = 1
+}
+
+function brickBump(e, t) {
+ if (!e.up && "player" == t.type && (AudioPlayer.play("Bump"), !e.used)) {
+ if (e.up = t, t.power > 1 && !e.contents) return TimeHandler.addEvent(brickBreak, 2, e, t);
+ blockBumpMovement(e), e.contents && (player.power > 1 && e.contents[0] == Mushroom && !e.contents[1] && (e.contents[0] = FireFlower), TimeHandler.addEvent((function(e) {
+ var t = e.contents,
+ n = new Thing(t[0], t[1], t[2]);
+ addThing(n, e.left, e.top), setMidXObj(n, e, !0), n.blockparent = e, n.animate(n, e), e.contents[0] == Coin ? (e.lastcoin && makeUsedBlock(e), TimeHandler.addEvent((function(e) {
+ e.lastcoin = !0
+ }), 245, e)) : makeUsedBlock(e)
+ }), 7, e))
+ }
+}
+
+function makeUsedBlock(e) {
+ e.used = !0, switchClass(e, "unused", "used")
+}
+
+function brickBreak(e, t) {
+ AudioPlayer.play("Break Block"), score(e, 50), e.up = t, TimeHandler.addEvent(placeShards, 1, e), killNormal(e)
+}
+
+function placeShards(e) {
+ for (var t, n = 0; n < 4; ++n) addThing(t = new Thing(BrickShard), e.left + (n < 2) * e.width * unitsize - unitsizet2, e.top + n % 2 * e.height * unitsize - unitsizet2), t.xvel = unitsized2 - unitsize * (n > 1), t.yvel = -1.4 * unitsize + n % 2, TimeHandler.addEvent(killNormal, 350, t)
+}
+
+function BrickShard(e) {
+ e.width = e.height = 4, e.nocollide = !0, e.death = killNormal, setCharacter(e, "brickshard"), TimeHandler.addSpriteCycle(e, [unflipHoriz, flipHoriz])
+}
+
+function attachEmerge(e, t) {
+ e.animate = setInterval((function() {
+ setBottom(e, t.top, !0), t.up || (clearInterval(e.animate), e.animate = !1)
+ }), timer)
+}
+
+function Block(e, t, n) {
+ if (e.width = e.height = 8, e.used = !1, e.bottomBump = blockBump, t)
+ if (t instanceof Array)
+ for (e.contents = t; e.contents.length < 3;) e.contents.push(!1);
+ else e.contents = [t, !1, !1];
+ else e.contents = [Coin];
+ e.death = killNormal, setSolid(e, "Block unused"), e.hidden = !!n && (e.hidden = e.skipoverlaps = !0), e.tolx = 1, TimeHandler.addSpriteCycleSynched(e, ["one", "two", "three", "two", "one"])
+}
+
+function blockBump(e, t) {
+ "player" == t.type && (e.used ? AudioPlayer.play("Bump") : (e.used = 1, e.hidden = e.hidden = e.skipoverlaps = !1, e.up = t, blockBumpMovement(e), removeClass(e, "hidden"), switchClass(e, "unused", "used"), player.power > 1 && e.contents[0] == Mushroom && !e.contents[1] && (e.contents[0] = FireFlower), TimeHandler.addEvent(blockContentsEmerge, 7, e)))
+}
+
+function blockContentsEmerge(e) {
+ var t = new Thing(e.contents[0], e.contents[1], e.contents[2]);
+ addThing(t, e.left, e.top), setMidXObj(t, e, !0), t.blockparent = e, t.animate(t, e)
+}
+
+function Pipe(e, t, n) {
+ e.width = e.spritewidth = 16, e.height = 8 * (t || 1), !1 !== n && (e.actionTop = intoPipeVert, e.transport = n), setSolid(e, "pipe")
+}
+
+function PipeSide(e, t, n) {
+ e.width = e.spritewidth = n ? 8 : 19.5, e.height = e.spriteheight = 16, t && (e.actionLeft = intoPipeHoriz, e.transport = t), setSolid(e, "pipe side " + (n ? "small" : ""))
+}
+
+function PipeVertical(e, t) {
+ e.spritewidth = e.width = 16, e.spriteheight = e.repeat = 1, e.height = t, setSolid(e, "pipe vertical")
+}
+
+function Vine(e, t) {
+ e.width = e.spriteheight = 7, e.height = 0, e.locnum = t, e.nocollide = e.nofall = e.repeat = !0, e.animate = vineEmerge, e.movement = vineMovement, setCharacter(e, "vine")
+}
+
+function vineEmerge(e, t) {
+ AudioPlayer.play("Vine Emerging"), setHeight(e, 0), e.movement = vineMovement, TimeHandler.addEvent(vineEnable, 14, e), TimeHandler.addEventInterval(vineStay, 1, 14, e, t)
+}
+
+function vineStay(e, t) {
+ setBottom(e, t.top)
+}
+
+function vineEnable(e) {
+ e.nocollide = !1, e.collide = touchVine
+}
+
+function vineMovement(e) {
+ increaseHeightTop(e, unitsized4), e.attached && shiftVert(e.attached, -unitsized4, !0)
+}
+
+function touchVine(e, t) {
+ !e.player || e.attached || e.climbing || e.bottom > t.bottom + unitsizet2 || (t.attached = e, e.attached = t, e.nofall = e.skipoverlaps = !0, e.xvel = e.yvel = e.resting = e.jumping = e.jumpcount = e.running = 0, e.attachleft = !objectToLeft(e, t), e.attachoff = 2 * e.attachleft - 1, e.movementsave = e.movement, e.movement = movePlayerVine, e.keys = new Keys, TimeHandler.clearClassCycle(e, "running"), removeClass(e, "running skidding"), unflipHoriz(e), e.attachleft && flipHoriz(e), addClass(e, "climbing"), e.climbing = TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), lookTowardThing(e, t), e.attachleft ? setLeft(e, t.right - unitsizet4) : setRight(e, t.left + unitsizet4))
+}
+
+function Springboard(e) {
+ e.width = 8, e.height = e.heightnorm = 14.5, e.tension = e.tensionsave = 0, e.dir = 1, e.collide = collideSpring, setSolid(e, "springboard")
+}
+
+function collideSpring(e, t) {
+ return e.yvel >= 0 && e.player && !t.tension && characterOnSolid(e, t) ? springPlayerInit(t, e) : characterTouchedSolid(e, t)
+}
+
+function springPlayerInit(e, t) {
+ e.tension = e.tensionsave = max(.77 * t.yvel, unitsize), t.movement = movePlayerSpringDown, t.spring = e, t.xvel /= 2.8
+}
+
+function movePlayerSpringDown(e) {
+ return objectsTouch(e, e.spring) ? e.spring.height < 2.5 * unitsize || e.spring.tension < unitsized32 ? (e.movement = movePlayerSpringUp, void(e.spring.movement = moveSpringUp)) : ((e.left < e.spring.left + unitsizet2 || e.right > e.spring.right - unitsizet2) && (e.xvel /= 1.4), reduceSpringHeight(e.spring, e.spring.tension), setBottom(e, e.spring.top, !0), e.spring.tension /= 2, void updateSize(e.spring)) : (e.movement = movePlayer, e.spring.movement = moveSpringUp, void(e.spring = !1))
+}
+
+function movePlayerSpringUp(e) {
+ if (!e.spring || !objectsTouch(e, e.spring)) return e.spring = !1, void(e.movement = movePlayer)
+}
+
+function moveSpringUp(e) {
+ reduceSpringHeight(e, -e.tension), e.tension *= 2, e == player.spring && setBottom(player, e.top, !0), e.height > e.heightnorm && (e == player.spring && (player.yvel = max(-unitsizet2, -.98 * e.tensionsave), player.resting = player.spring = !1), reduceSpringHeight(e, (e.height - e.heightnorm) * unitsize), e.tension = e.tensionsave = e.movement = !1)
+}
+
+function reduceSpringHeight(e, t) {
+ reduceHeight(e, t, !0)
+}
+
+function Stone(e, t, n) {
+ e.width = 8 * t || 8, e.height = 8 * n || 8, e.repeat = !0, setSolid(e, "Stone")
+}
+
+function GenericStone(e, t, n) {
+ return Stone(e, t, n)
+}
+
+function RestingStone(e) {
+ e.width = e.height = 8, e.used = !1, e.movement = RestingStoneUnused, setSolid(e, "Stone hidden"), e.title = "Stone"
+}
+
+function RestingStoneUnused(e) {
+ if (player.resting) {
+ if (player.resting != e) return killNormal(e);
+ e.movement = RestingStoneUsed, removeClass(e, "hidden"), setThingSprite(player)
+ }
+}
+
+function RestingStoneUsed(e) {
+ if (!player.resting) return killNormal(e)
+}
+
+function CastleBlock(e, t, n) {
+ e.width = e.height = 8;
+ var x, r, i = !1;
+ t instanceof Array ? (x = t[0], r = t[1], i = n) : (x = t, r = n), setSolid(e, i ? "castleblockinvis" : "castleblock"), x && (e.balls = new Array(x), e.dt = .07 * (r ? 1 : -1), e.timeout = round(7 / (abs(r) || 1)), e.movement = castleBlockSpawn, e.timer = e.counter = 0, e.angle = .25, e.spawn_as_char = !0)
+}
+
+function castleBlockSpawn(e) {
+ for (var t = 0; t < e.balls.length; ++t) {
+ spawn = new Thing(CastleFireBall, 4 * t);
+ var n = e.width * unitsized4,
+ x = e.left + n,
+ r = e.top + n;
+ e.balls[t] = addThing(spawn, x + t * unitsize * 3, r + t * unitsize * 3)
+ }
+ e.movement = !1;
+ abs(e.dt);
+ TimeHandler.addEventInterval(castleBlockEvent, e.timeout, 1 / 0, e)
+}
+
+function castleBlockEvent(e) {
+ e.midx = e.left, e.midy = e.top, e.counter = 0, e.angle += e.dt;
+ for (var t = 1; t < e.balls.length; ++t) setMidX(e.balls[t], e.midx + t * unitsizet4 * Math.cos(e.angle * Math.PI), !0), setMidY(e.balls[t], e.midy + t * unitsizet4 * Math.sin(e.angle * Math.PI), !0)
+}
+
+function CastleFireBall(e, t) {
+ e.width = e.height = 4, e.deadly = e.nofire = e.nocollidechar = e.nocollidesolid = e.nofall = e.nostar = e.outerok = e.skipoverlaps = !0, e.movement = !1, e.collide = collideEnemy, setCharacter(e, "fireball castle"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 4)
+}
+
+function CastleBridge(e, t) {
+ e.height = 8, e.width = 8 * t || 4, e.spritewidth = 4, e.repeat = !0, setSolid(e, "CastleBridge")
+}
+
+function CastleChain(e) {
+ e.height = 8, e.width = e.spritewidth = 7.5, e.nocollide = !0, setSolid(e, "castlechain")
+}
+
+function CastleAxe(e) {
+ e.width = e.height = 8, e.spritewidth = e.spriteheight = 8, e.nocollide = !0, setSolid(e, "castleaxe"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"])
+}
+
+function CastleAxeFalls(e, t) {
+ var n = t.axe;
+ !e.player || e.right < n.left + unitsize || e.bottom > n.bottom - unitsize || (killNormal(n), killNormal(t), notime = nokeys = !0, thingStoreVelocity(e), killOtherCharacters(), TimeHandler.addEvent(killNormal, 7, n.chain), TimeHandler.addEvent(CastleAxeKillsBridge, 14, n.bridge, n), AudioPlayer.pauseTheme(), AudioPlayer.playTheme("World Clear", !1, !1))
+}
+
+function CastleAxeKillsBridge(e, t) {
+ e.width -= 2, e.right -= unitsizet2, e.width > 0 ? TimeHandler.addEvent(CastleAxeKillsBridge, 1, e, t) : (e.width = 0, TimeHandler.addEvent(CastleAxeKillsBowser, 1, t.bowser)), setWidth(e, e.width)
+}
+
+function CastleAxeKillsBowser(e) {
+ e.nofall = !1, e.nothrow = !0, ++player.star, TimeHandler.addEvent(CastleAxeContinues, 35, player)
+}
+
+function CastleAxeContinues(e) {
+ map.canscroll = !0, startWalking(e)
+}
+
+function Toad(e) {
+ e.width = 16, e.height = e.spriteheight = 12, e.group = "toad", setSolid(e, "toad npc")
+}
+
+function Peach(e) {
+ e.width = 16, e.height = e.spriteheight = 12, e.group = "peach", setSolid(e, "peach npc")
+}
+
+function collideCastleNPC(e, t) {
+ killNormal(t), e.keys.run = 0, TimeHandler.addEvent((function(e) {
+ var t;
+ for (t = 0; t < e.length; ++t) TimeHandler.addEvent(proliferate, 70 * t, e[t].element, {
+ style: {
+ visibility: "visible"
+ }
+ });
+ TimeHandler.addEvent(endLevel, 70 * (t + 3))
+ }), 21, t.text)
+}
+
+function TreeTop(e, t) {
+ e.width = 8 * t, e.height = 8, e.repeat = !0, setSolid(e, "treetop")
+}
+
+function ShroomTop(e, t) {
+ e.width = 8 * t, e.height = 8, e.repeat = !0, setSolid(e, "shroomtop")
+}
+
+function Platform(e, t, n) {
+ e.width = 4 * (t || 4), e.height = 4, e.spritewidth = 4, e.moving = 0, e.repeat = e.killonend = !0, "function" == typeof n && (n = [n]), n instanceof Array && (e.movement = n[0], e.begin = n[1] * unitsize, e.end = n[2] * unitsize, e.maxvel = (n[3] || 1.5) * unitsized4, e.movement == moveFloating || e.movement == movePlatformSpawn ? e.yvel = e.maxvel : e.xvel = e.maxvel, e.changing = 0), e.movement == collideTransport && (e.movement = !1, e.collide = collideTransport), setSolid(e, "platform")
+}
+
+function PlatformGenerator(e, t, n) {
+ e.width = 4 * t, e.interval = 35, e.height = 6 * e.interval, e.dir = n, e.nocollide = e.hidden = !0, e.movement = PlatformGeneratorInit, setSolid(e, "platformgenerator")
+}
+
+function PlatformGeneratorInit(e) {
+ for (var t = 0, n = e.interval, x = e.height; t < x; t += n) e.platlast = new Thing(Platform, e.width / 4, [movePlatformSpawn, 0, 0, 1.5]), e.platlast.yvel *= e.dir, 1 == e.dir ? addThing(e.platlast, e.left, e.top + t * unitsize) : addThing(e.platlast, e.left, e.bottom - t * unitsize), e.platlast.parent = e, t += e.interval;
+ e.movement = !1
+}
+
+function movePlatformSpawn(e) {
+ e.bottom < e.parent.top ? (setBottom(e, e.parent.bottom), detachPlayer(e)) : e.top > e.parent.bottom ? (setTop(e, e.parent.top), detachPlayer(e)) : movePlatformNorm(e)
+}
+
+function movePlatformNorm(e) {
+ shiftHoriz(e, e.xvel), shiftVert(e, e.yvel), e == player.resting && e.alive && (setBottom(player, e.top), shiftHoriz(player, e.xvel), player.right > innerWidth && setRight(player, innerWidth))
+}
+
+function detachPlayer(e) {
+ player.resting == e && (player.resting = !1)
+}
+
+function Scale(e, t, n) {
+ e.height = 5, e.width = 4 * t, e.spritewidth = e.spriteheight = 5, e.repeat = e.nocollide = !0, setSolid(e, "scale")
+}
+
+function Flag(e) {
+ e.width = e.height = 8, e.nocollide = !0, setSolid(e, "flag")
+}
+
+function FlagPole(e) {
+ e.width = 1, e.height = 72, e.nocollide = e.repeat = !0, setSolid(e, "flagpole")
+}
+
+function FlagTop(e) {
+ e.spritewidth = e.spriteheight = e.width = e.height = 4, e.nocollide = !0, setSolid(e, "flagtop")
+}
+
+function FlagDetector(e) {
+ e.width = 2, e.height = 100, e.collide = FlagCollision, setSolid(e, "flagdetector"), e.hidden = !0
+}
+
+function CastleDoorDetector(e) {
+ e.width = e.height = 4, e.collide = endLevelPoints, setSolid(e, "castledoor"), e.hidden = !0
+}
+
+function FlagCollision(e, t) {
+ if (!e || !e.player) return killNormal(e);
+ window.detector = t, AudioPlayer.pause(), AudioPlayer.play("Flagpole"), killOtherCharacters(), nokeys = notime = player.nofall = 1, player.xvel = player.yvel = player.keys.up = player.keys.jump = map.canscroll = map.ending = player.movement = 0, player.nocollidechar = !0, setRight(e, t.pole.left, !0), removeClasses(e, "running jumping skidding"), addClass(e, "climbing animated"), updateSize(e), TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), playerRemoveStar(player);
+ var n = !1,
+ x = !1,
+ r = (t.stone.top - e.bottom) / unitsize,
+ i = setInterval((function() {
+ n || (e.bottom >= t.stone.top ? (scorePlayerFlag(r, t.stone), n = !0, setBottom(e, t.stone.top, !0), removeClass(player, "animated"), TimeHandler.clearClassCycle(player, "climbing")) : shiftVert(e, unitsize, !0)), x || (t.flag.bottom >= t.stone.top ? (x = !0, setBottom(t.flag, t.stone.top, !0)) : shiftVert(t.flag, unitsize, !0)), n && x && (setBottom(e, t.stone.top, !0), clearInterval(i), setTimeout((function() {
+ FlagOff(e, t.pole)
+ }), 21 * timer)), refillCanvas()
+ }), timer)
+}
+
+function scorePlayerFlag(e, t) {
+ var n;
+ n = e < 28 ? e < 8 ? 100 : 400 : e < 40 ? 800 : e < 62 ? 2e3 : 5e3, score(player, n, !0)
+}
+
+function FlagOff(e, t) {
+ player.keys.run = notime = nokeys = 1, player.maxspeed = player.walkspeed, flipHoriz(e), TimeHandler.clearClassCycle(e, "climbing"), setLeft(e, t.right, !0), setTimeout((function() {
+ AudioPlayer.play("Stage Clear"), playerHopsOff(e, t, !0)
+ }), 14 * timer)
+}
+
+function endLevelPoints(e, t) {
+ if (e && e.player) {
+ notime = nokeys = !0, killNormal(t), killNormal(e);
+ var n = parseInt(getLast(String(data.time.amount)));
+ 1 != n && 3 != n && 6 != n && (n = 0);
+ var x = setInterval((function() {
+ --data.time.amount, data.score.amount += 50, updateDataElement(data.score), updateDataElement(data.time), AudioPlayer.play("Coin"), data.time.amount <= 0 && (clearInterval(x), setTimeout((function() {
+ endLevelFireworks(e, n, t)
+ }), 49 * timer))
+ }), timer)
+ }
+}
+
+function endLevelFireworks(e, t, n) {
+ var x, r, i = 0;
+ if (t) {
+ for (var a = n.left + 32 * unitsized2; i < t;) explodeFirework(++i, a);
+ x = timer * (i + 2) * 42
+ } else x = 0;
+ r = function() {
+ setTimeout((function() {
+ endLevel()
+ }), x)
+ }, AudioPlayer.addEventImmediate("Stage Clear", "ended", (function() {
+ TimeHandler.addEvent(r, 35)
+ }))
+}
+
+function explodeFirework(e, t) {
+ setTimeout((function() {
+ var n = new Thing(Firework, e);
+ addThing(n, t + n.locs[0] - 6 * unitsize, unitsizet16 + n.locs[1]), n.animate()
+ }), timer * e * 42)
+}
+
+function Firework(e, t) {
+ if (e.width = e.height = 8, e.nocollide = e.nofire = e.nofall = !0, t) switch (t) {
+ case 1:
+ e.locs = [unitsizet16, unitsizet16];
+ break;
+ case 2:
+ e.locs = [-unitsizet16, unitsizet16];
+ break;
+ case 3:
+ e.locs = [2 * unitsizet16, 2 * unitsizet16];
+ break;
+ case 4:
+ e.locs = [-2 * unitsizet16, 2 * unitsizet16];
+ break;
+ case 5:
+ e.locs = [0, 1.5 * unitsizet16];
+ break;
+ default:
+ e.locs = [0, 0]
+ }
+ e.animate = function() {
+ var t = e.className + " n";
+ e.locs && AudioPlayer.play("Firework"), TimeHandler.addEvent((function(e) {
+ setClass(e, t + 1)
+ }), 0, e), TimeHandler.addEvent((function(e) {
+ setClass(e, t + 2)
+ }), 7, e), TimeHandler.addEvent((function(e) {
+ setClass(e, t + 3)
+ }), 14, e), TimeHandler.addEvent((function(e) {
+ killNormal(e)
+ }), 21, e)
+ }, setCharacter(e, "firework"), score(e, 500)
+}
+
+function Coral(e, t) {
+ e.width = 8, e.height = 8 * t, e.repeat = !0, setSolid(e, "coral")
+}
+
+function BridgeBase(e, t) {
+ e.height = 4, e.spritewidth = 4, e.width = 8 * t, e.repeat = !0, setSolid(e, "bridge-base")
+}
+
+function WarpWorld(e) {
+ e.width = 106, e.height = 88, e.movement = setWarpWorldInit, e.collide = enableWarpWorldText, e.pirhanas = [], e.pipes = [], e.texts = [], e.hidden = !0, setSolid(e, "warpworld")
+}
+
+function setWarpWorldInit(e) {
+ shiftHoriz(e, e.width * unitsized2), e.width /= 2, updateSize(e), e.movement = !1
+}
+
+function enableWarpWorldText(e, t) {
+ var n, x = t.pirhanas,
+ r = t.texts;
+ for (n in x) x[n].death();
+ for (n in r) r[n].element.style.visibility = "";
+ killNormal(t)
+}
+
+function resetScenery() {
+ window.Scenery = {
+ sprites: {
+ BrickHalf: [8, 4],
+ BrickPlain: [8, 8],
+ Bush1: [16, 8],
+ Bush2: [24, 8],
+ Bush3: [32, 8],
+ Castle: [75, 88],
+ CastleDoor: [8, 20],
+ CastleRailing: [8, 4],
+ CastleRailingFilled: [8, 4],
+ CastleTop: [12, 12],
+ CastleWall: [8, 48],
+ Cloud1: [16, 12],
+ Cloud2: [24, 12],
+ Cloud3: [32, 12],
+ HillSmall: [24, 9.5],
+ HillLarge: [40, 17.5],
+ Fence: [8, 8],
+ Pirhana: [8, 12],
+ pirhana: [8, 12],
+ PlantSmall: [7, 15],
+ PlantLarge: [8, 23],
+ Railing: [4, 4],
+ ShroomTrunk: [8, 8],
+ String: [1, 1],
+ TreeTrunk: [8, 8],
+ Water: {
+ 0: 4,
+ 1: 5,
+ spriteCycle: ["one", "two", "three", "four"]
+ },
+ WaterFill: [4, 5]
+ },
+ patterns: {
+ backreg: [
+ ["HillLarge", 0, 0],
+ ["Cloud1", 68, 68],
+ ["Bush3", 92, 0],
+ ["HillSmall", 128, 0],
+ ["Cloud1", 156, 76],
+ ["Bush1", 188, 0],
+ ["Cloud3", 220, 68],
+ ["Cloud2", 292, 76],
+ ["Bush2", 332, 0],
+ ["Blank", 384]
+ ],
+ backcloud: [
+ ["Cloud2", 28, 64],
+ ["Cloud1", 76, 32],
+ ["Cloud2", 148, 72],
+ ["Cloud1", 228, 0],
+ ["Cloud1", 284, 32],
+ ["Cloud1", 308, 40],
+ ["Cloud1", 372, 0],
+ ["Blank", 384]
+ ],
+ backcloudmin: [
+ ["Cloud1", 68, 68],
+ ["Cloud1", 156, 76],
+ ["Cloud3", 220, 68],
+ ["Cloud2", 292, 76],
+ ["Blank", 384]
+ ],
+ backfence: [
+ ["PlantSmall", 88, 0],
+ ["PlantLarge", 104, 0],
+ ["Fence", 112, 0, 4],
+ ["Cloud1", 148, 68],
+ ["PlantLarge", 168, 0],
+ ["PlantSmall", 184, 0],
+ ["PlantSmall", 192, 0],
+ ["Cloud1", 220, 76],
+ ["Cloud2", 244, 68],
+ ["Fence", 304, 0, 2],
+ ["PlantSmall", 320, 0],
+ ["Fence", 328, 0],
+ ["PlantLarge", 344, 0],
+ ["Cloud1", 364, 76],
+ ["Cloud2", 388, 68],
+ ["Blank", 384]
+ ],
+ backfencemin: [
+ ["PlantLarge", 104, 0],
+ ["Fence", 112, 0, 4],
+ ["Cloud1", 148, 68],
+ ["PlantLarge", 168, 0],
+ ["PlantSmall", 184, 0],
+ ["PlantSmall", 192, 0],
+ ["Cloud1", 220, 76],
+ ["Cloud2", 244, 68],
+ ["Fence", 304, 0, 2],
+ ["PlantSmall", 320, 0],
+ ["Fence", 328, 0],
+ ["Cloud1", 364, 76],
+ ["Cloud2", 388, 68],
+ ["Blank", 384]
+ ],
+ backfencemin2: [
+ ["Cloud2", 4, 68],
+ ["PlantSmall", 88, 0],
+ ["PlantLarge", 104, 0],
+ ["Fence", 112, 0, 1],
+ ["Fence", 128, 0, 2],
+ ["Cloud1", 148, 68],
+ ["PlantSmall", 184, 0],
+ ["PlantSmall", 192, 0],
+ ["Cloud1", 220, 76],
+ ["Cloud2", 244, 68],
+ ["Fence", 304, 0, 2],
+ ["PlantSmall", 320, 0],
+ ["Fence", 328, 0],
+ ["PlantLarge", 344, 0],
+ ["Cloud1", 364, 76],
+ ["Cloud2", 388, 68],
+ ["Blank", 384]
+ ],
+ backfencemin3: [
+ ["Cloud2", 4, 68],
+ ["PlantSmall", 88, 0],
+ ["PlantLarge", 104, 0],
+ ["Fence", 112, 0, 4],
+ ["Cloud1", 148, 68],
+ ["PlantSmall", 184, 0],
+ ["PlantSmall", 192, 0],
+ ["Cloud1", 220, 76],
+ ["Cloud2", 244, 68],
+ ["Cloud1", 364, 76],
+ ["Cloud2", 388, 68],
+ ["Blank", 384]
+ ]
+ }
+ }, processSceneryPatterns(Scenery.patterns)
+}
+
+function processSceneryPatterns(e) {
+ var t, n;
+ for (n in e)(t = e[n]).length && (t.width = t[t.length - 1][1], t.pop())
+}
+
+function SceneryBlocker(e, t, n) {
+ e.width = t || 8, e.height = n || 8, e.nocollide = e.hidden = !0, setSolid(e, "sceneryblocker")
+}
+
+function Sprite(e, t, n) {
+ n || (n = [1, 1]);
+ var x = e.template = Scenery.sprites[t];
+ x ? (e.width = (e.spritewidth = x[0]) * (n[0] || 1), e.height = (e.spriteheight = x[1]) * (n[1] || 1), e.unitwidth = e.spritewidth * unitsize, e.unitheight = e.spriteheight * unitsize, e.nocollide = e.maxquads = 1, e.repeat = !0, setScenery(e, "scenery " + t), e.title = t, x.spriteCycleTimer && TimeHandler.addSpriteCycle(e, spriteCycleTimer, spriteCycleTimer || void 0)) : log("No sprite template found for", t)
+}
+
+function LocationShifter(e, t, n) {
+ e.loc = t, e.width = n[0], e.height = n[1], e.collide = collideLocationShifter, e.hidden = !0, setSolid(e, "blue")
+}
+
+function collideLocationShifter(e, t) {
+ e.player && (t.nocollide = player.piping = !0, TimeHandler.addEvent((function(e) {
+ shiftToLocation(t.loc), map.random && entryRandom(e)
+ }), 1, e))
+}
+
+function ScrollBlocker(e, t) {
+ e.width = 40, e.height = 140, e.nocollide = e.hidden = !0, e.big = t, e.movement = function() {
+ e.left - player.xvel <= gamescreen.right - gamescreen.left && (map.canscroll = e.movement = !1, map.noscroll = e.big)
+ }, setSolid(e, "scrollblocker")
+}
+
+function ScrollEnabler(e) {
+ e.width = 40, e.height = 140, e.hidden = !0, e.collide = function() {
+ e.left - player.xvel <= gamescreen.right - gamescreen.left && (map.canscroll = e.nocollide = !0)
+ }, setSolid(e, "scrollenabler")
+}
+
+function zoneToggler(e, t) {
+ e.width = 40, e.height = 140, e.func = t, e.hidden = !0, e.collide = function(e, t) {
+ t.func(), t.nocollide = !0
+ }, setSolid(e, "zonetoggler " + t.name)
+}
+
+function GenerationStarter(e, t, n) {
+ e.width = 8, e.height = gamescreen.height + 20, e.func = t, e.arg = n, e.collide = function(e, t) {
+ if ("player" != e.type) return !1;
+ spawnMap(), killNormal(t)
+ }, e.movement = function(e) {
+ e.movement = !1, addClass(e, "used"), e.func((gamescreen.left + e.right) / unitsize, e.arg)
+ }, setSolid(e, "generationstarter"), e.hidden = !0
+}
+
+function castleDecider(e, t, n) {
+ e.height = ceilmax, e.width = 10, e.nocollide = !0, e.xloc = t, e.section = map.area.sections[n], e.next = map.area.sections[n + 1], e.movement = function(e) {
+ if (!(e.left > gamescreen.right - gamescreen.left) && e.section.activated) {
+ var t = e.section;
+ t.numpass = t.colliders.length = 0, t.passed ? (++map.area.sections.current, e.next(e.xloc)) : t(e.xloc), t.activated = t.passed = !1, spawnMap(), killNormal(e)
+ }
+ }, setSolid(e, "decider blue " + n), e.hidden = !0
+}
+
+function FuncCollider(e, t, n) {
+ n ? (e.width = n[0], e.height = n[1]) : (e.width = 8, e.height = ceilmax + 40), e.collide = t, e.hidden = !0, setSolid(e, "funccollider blue " + t.name)
+}
+
+function FuncSpawner(e, t, n) {
+ e.width = 8, e.height = 8, e.movement = function() {
+ t(e, n)
+ }, e.argument = n, e.nocollide = e.hidden = !0, setSolid(e, "funccollider blue " + t.name)
+}
+
+function Collider(e, t, n) {
+ e.width = t[0], e.height = t[1], n instanceof Array ? (e.func = n[0] || function() {}, e.movement = n[1] || function() {}) : (e.func = n || function() {}, e.movement = !1), e.collide = function(e, t) {
+ if (!e.player) return !1;
+ t.func(e, t)
+ }, setSolid(e, "collider blue " + e.func.name), e.hidden = !0
+}
+
+function TonedJS(e) {
+ var t = {
+ giveSup: function(e, t) {
+ for (var n in t = t || {}, e) t[n] = e[n];
+ return t
+ },
+ giveSub: function(e, t) {
+ for (var n in t = t || {}, e) t.hasOwnProperty(n) || (t[n] = e[n]);
+ return t
+ },
+ proliferate: function(e, t, n) {
+ var x, r;
+ for (r in t) n && e.hasOwnProperty(r) || ("object" == typeof(x = t[r]) && null != x ? (e.hasOwnProperty(r) || (e[r] = x instanceof Array ? [] : {}), proliferate(e[r], x, n)) : e[r] = x);
+ return e
+ },
+ getFirst: function(e, t) {
+ for (var n in e) return t ? n : e[n]
+ },
+ getLast: function(e, t) {
+ for (var n in e);
+ return t ? n : e[n]
+ },
+ followPath: function(e, t, n) {
+ return null != t[n] && null != e[t[n]] ? followPath(e[t[n]], t, ++n) : e
+ },
+ createElement: function(e) {
+ for (var t = document.createElement(e || "div"), n = arguments.length; --n > 0;) proliferate(t, arguments[n]);
+ return t
+ },
+ classAdd: function(e, t) {
+ e.className += " " + t
+ },
+ classRemove: function(e, t) {
+ e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
+ },
+ elementSetPosition: function(e, t, n) {
+ null == t && (t = e.left), null == n && (n = e.top), proliferate(e, {
+ left: t,
+ top: n,
+ style: {
+ marginLeft: t + "px",
+ marginTop: n + "px"
+ }
+ })
+ },
+ elementShiftLeft: function(e, t) {
+ e.left || (e.left = Number(e.style.marginLeft.replace("px", ""))), e.style.marginLeft = round(e.left += t) + "px"
+ },
+ elementShiftTop: function(e, t) {
+ e.top || (e.top = Number(e.style.marginLeft.replace("px", ""))), e.style.marginTop = round(e.top += t) + "px"
+ },
+ removeChildSafe: function(e, t) {
+ e && (t = t || document.body).contains(e) && t.removeChild(e)
+ },
+ findParentOfType: function(e, t) {
+ var n = e.parentElement;
+ return n && n.nodeName != t ? findParentType(n, t) : n
+ },
+ clearAllTimeouts: function() {
+ for (var e = setTimeout((function() {})); e--;) clearTimeout(e)
+ },
+ stringTrim: function(e) {
+ return e.replace(/^\s+|\s+$/g, "")
+ },
+ stringOf: function(e, t) {
+ return 0 == t ? "" : new Array(1 + (t || 1)).join(e)
+ },
+ stringHas: function(e, t) {
+ return -1 != e.indexOf(t)
+ },
+ stringHasI: function(e, t) {
+ return -1 != e.toLowerCase().indexOf(t.toLowerCase())
+ },
+ capitalizeFirst: function(e, t) {
+ return t = t || 1, e.substr(0, t).toUpperCase() + e.substr(t).toLowerCase()
+ },
+ ArrayD: function(e) {
+ if (1 == arguments.length) return new Array(e);
+ var t, n = arrayMake(arguments),
+ x = new Array(e);
+ for (n.shift(), t = e - 1; t >= 0; --t) x[t] = ArrayD.apply(this, n);
+ return x
+ },
+ arrayOf: function(e, t) {
+ t = t || 1;
+ for (var n = new Array(t); t--;) n[t] = e;
+ return n
+ },
+ arrayMake: function(e) {
+ return Array.prototype.slice.call(e)
+ },
+ arrayRange: function(e, t) {
+ for (var n = 1 + t - e, x = new Array(n), r = e, i = 0; i < n;) x[i++] = r++;
+ return x
+ },
+ arrayShuffle: function(e, t, n) {
+ t = t || 0, n = n || e.length;
+ for (var x, r, i = t; i <= n; ++i) r = randInt(i + 1), x = e[i], e[i] = e[r], e[r] = x;
+ return e
+ },
+ removeDuplicates: function(e) {
+ var t, n, x, r, i, a = [];
+ for (r = 0, x = e.length; r < x; ++r) {
+ for (t = e[r], n = !1, i = 0; i < r; ++i)
+ if (e[i] == t) {
+ n = !0;
+ break
+ }
+ n || a.push(t)
+ }
+ return a
+ },
+ makeDigit: function(e, t, n) {
+ return e = String(e), stringOf(n || 0, max(0, t - e.length)) + e
+ },
+ roundDigit: function(e, t) {
+ return Number(t ? ~~(.5 + e / t) * t : round(e))
+ },
+ sign: function(e) {
+ return e ? e < 0 ? -1 : 1 : 0
+ },
+ round: function(e) {
+ return ~~(.5 + e)
+ },
+ max: Math.max,
+ min: Math.min,
+ abs: Math.abs,
+ pow: Math.pow,
+ ceil: Math.ceil,
+ floor: Math.floor,
+ random: Math.random,
+ randInt: function(e) {
+ return floor(Math.random() * (e || 1))
+ },
+ signBool: function(e) {
+ return e > 0
+ },
+ log: console.log.bind(console),
+ now: Date.now
+ };
+ return e && t.giveSub(t, window), t
+}
+
+function resetTriggers() {
+ window.controls = new Controls({
+ left: [37, 65, "AXIS_LEFT", "DPAD_LEFT"],
+ right: [39, 68, "AXIS_RIGHT", "DPAD_RIGHT"],
+ up: [38, 87, 32, "FACE_1", "DPAD_UP", "LEFT_BOTTOM_SHOULDER"],
+ down: [40, 83, "AXIS_DOWN", "DPAD_DOWN"],
+ sprint: [16, 17, "FACE_1"],
+ pause: [80, "START_FORWARD"],
+ mute: [77],
+ q: [81],
+ l: [76]
+ }), window.gamepad = new Gamepad, gamepad.bind(Gamepad.Event.BUTTON_DOWN, ControlsPipe("keydown", !0)), gamepad.bind(Gamepad.Event.BUTTON_UP, ControlsPipe("keyup", !1)), gamepad.bind(Gamepad.Event.AXIS_CHANGED, (function(e) {
+ var t = e.value,
+ n = abs(t);
+ if (!(n < .1)) switch (e.axis) {
+ case "LEFT_STICK_Y":
+ case "RIGHT_STICK_Y":
+ n > .5 ? keydown(t > 0 ? "DPAD_DOWN" : "DPAD_UP") : (keyup("DPAD_UP"), keyup("DPAD_DOWN"));
+ break;
+ case "LEFT_STICK_X":
+ case "RIGHT_STICK_X":
+ n > .5 ? keydown(t < 0 ? "DPAD_LEFT" : "DPAD_RIGHT") : (keyup("DPAD_UP"), keyup("DPAD_DOWN"))
+ }
+ })), gamepad.init(), proliferate(body, {
+ onkeydown: ControlsPipe("keydown", !0),
+ onkeyup: ControlsPipe("keyup", !1),
+ oncontextmenu: contextmenu,
+ onmousedown: mousedown
+ }), setMessageTriggers()
+}
+
+function Controls(e, t) {
+ this.pipes = e;
+ var n, x, r, i, a = this.keydown = {
+ left: function(e) {
+ e.run = -1, e.left_down = !0
+ },
+ right: function(e) {
+ e.run = 1, e.right_down = !0
+ },
+ up: function(e) {
+ e.up = !0, player.canjump && (player.resting || map.underwater) && (e.jump = 1, player.canjump = e.jumplev = 0, AudioPlayer.play(player.power > 1 ? "Jump Super" : "Jump Small"), map.underwater && setTimeout((function() {
+ player.jumping = e.jump = !1
+ }), 14 * timer))
+ },
+ down: function(e) {
+ e.crouch = !0
+ },
+ sprint: function(e) {
+ 3 != player.power || 0 != e.sprint || e.crouch || player.fire(), e.sprint = 1
+ },
+ pause: function(e) {
+ paused || window.editing && !editor.playing || setTimeout((function() {
+ pause(!0)
+ }), 140)
+ },
+ mute: function(e) {
+ AudioPlayer.toggleMute()
+ },
+ q: function(e) {
+ switch (++qcount > 28 && maxlulz(), qcount) {
+ case 7:
+ lulz();
+ break;
+ case 14:
+ superlulz();
+ break;
+ case 21:
+ hyperlulz()
+ }
+ },
+ l: function(e) {
+ toggleLuigi()
+ }
+ },
+ o = this.keyup = {
+ left: function(e) {
+ e.run = 0, e.left_down = !1
+ },
+ right: function(e) {
+ e.run = 0, e.right_down = !1
+ },
+ up: function(e) {
+ map.underwater || (e.jump = e.up = 0), player.canjump = !0
+ },
+ down: function(e) {
+ e.crouch = 0, removeCrouch()
+ },
+ sprint: function(e) {
+ e.sprint = 0
+ },
+ pause: function(e) {
+ unpause(!0)
+ }
+ };
+ for (n in e)
+ for (i in x = e[n]) a[r = x[i]] = a[n], o[r] = o[n]
+}
+
+function ControlsPipe(e, t) {
+ var n = controls[e];
+ return function(x) {
+ t && (player && player.dead || window.paused) || window.nokeys || (("number" != typeof x || x.which || x.control) && (x = x.which || x.control), n[x] ? n[x](player.keys) : mlog(e, "Could not", e, x), window.gamehistory[gamecount] = [keydown, x])
+ }
+}
+
+function keydown(e) {
+ if (!(player && player.dead || window.paused || window.nokeys)) {
+ var t = controls.keydown;
+ ("object" == typeof e || e.which) && (e = e.which), t[e] && t[e](player.keys), window.gamehistory[gamecount] = [keydown, e]
+ }
+}
+
+function keyup(e) {
+ if (!window.nokeys) {
+ var t = controls.keyup;
+ ("object" == typeof e || e.which) && (e = e.which), t[e] && t[e](player.keys), window.gamehistory[gamecount] = [keyup, e]
+ }
+}
+
+function contextmenu(e) {
+ e.preventDefault && e.preventDefault()
+}
+
+function mousedown(e) {
+ 3 == e.which && (paused ? unpause() : window.editor && (editing || editor.playing) || pause(!0), e.preventDefault && e.preventDefault())
+}
+
+function scriptKeys(e) {
+ var t, n;
+ for (t in e) n = e[t], TimeHandler.addEvent(n[0], t, n[1]), TimeHandler.addEvent((function() {
+ alert(n[0].name + ", " + n[1])
+ }), t)
+}
+
+function lulz(e, t) {
+ player.star = !0, e = e || [Goomba], t = t || 7, TimeHandler.addEventInterval((function() {
+ if (!(characters.length > 210)) {
+ var t = new Thing(e[randInt(e.length)], randBoolJS(), randBoolJS());
+ t.yvel = random() * -unitsizet4, t.xvel = t.speed = random() * unitsizet2 * randSign(), addThing(t, (32 * random() + 128) * unitsize, 88 * random() * unitsize)
+ }
+ }), t, 1 / 0)
+}
+
+function superlulz() {
+ lulz([Goomba, Koopa, Beetle, HammerBro, Lakitu, Podoboo, Blooper])
+}
+
+function hyperlulz() {
+ lulz([Bowser], 21)
+}
+
+function maxlulz() {
+ TimeHandler.addEventInterval((function(e) {
+ setAreaSetting(e[randInt(e.length)])
+ }), 7, 1 / 0, ["Overworld", "Underworld", "Underwater", "Sky", "Castle"])
+}
+
+function mapKeyToControl(e, t) {
+ if (-1 == window.controls.pipes[e].indexOf(t)) {
+ window.controls.pipes[e].push(t);
+ var n = window.controls.pipes;
+ window.controls = new Controls(n), proliferate(body, {
+ onkeydown: ControlsPipe("keydown", !0),
+ onkeyup: ControlsPipe("keyup", !1),
+ oncontextmenu: contextmenu,
+ onmousedown: mousedown
+ })
+ }
+}
+
+function setMessageTriggers() {
+ var e = {
+ setMap: triggerSetMap,
+ startEditor: function() {
+ loadEditor()
+ },
+ toggleOption: function(e) {
+ var t = "toggle" + e.option;
+ console.log(t, window[t]), window[t] ? window[t]() : log("Could not toggle", t)
+ },
+ setKey: function(e) {
+ mapKeyToControl(e.action, e.keyCode)
+ }
+ };
+ window.addEventListener("message", (function(t) {
+ var n = t.data,
+ x = n.type;
+ e[x] ? e[x](n) : console.log("Unknown event type received:", x, ".\n", n)
+ }))
+}
+
+function triggerSetMap(e) {
+ clearPlayerStats(), setMap.apply(this, e.map || []), setLives(3)
+}
+
+function upkeep() {
+ if (!window.paused) {
+ window.nextupk = setTimeout(upkeep, timer);
+ for (var e = window.speed; e > 0; --e) adjustFPS(), QuadsKeeper.determineAllQuadrants(solids), maintainSolids(), maintainCharacters(), maintainPlayer(), texts.length && maintainTexts(), TimeHandler.handleEvents(), refillCanvas()
+ }
+}
+
+function adjustFPS() {
+ window.time_now = now();
+ var e = time_now - time_prev,
+ t = roundDigit(1e3 / e, .001);
+ window.fps = roundDigit(.7 * fps + .3 * t, .01), window.realtime = fps_target / fps, window.time_prev = time_now
+}
+
+function pause(e) {
+ paused && !window.nextupk || (cancelAnimationFrame(nextupk), AudioPlayer.pause(), paused = !0, e && AudioPlayer.play("Pause"))
+}
+
+function unpause() {
+ paused && (window.nextupk = requestAnimationFrame(upkeep), paused = !1, AudioPlayer.resume())
+}
+
+function maintainSolids(e) {
+ for (var t, n = 0; n < solids.length; ++n)(t = solids[n]).alive && t.movement && t.movement(t), (!t.alive || t.right < QuadsKeeper.getDelX()) && deleteThing(t, solids, n)
+}
+
+function maintainCharacters(e) {
+ var t, n, x = gamescreen.right + QuadsKeeper.getOutDifference();
+ for (n = 0; n < characters.length; ++n)(t = characters[n]).resting ? t.yvel = 0 : (t.nofall || (t.yvel += t.gravity || map.gravity), t.yvel = min(t.yvel, map.maxyvel)), updatePosition(t), QuadsKeeper.determineThingQuadrants(t), t.under = t.undermid = !1, determineThingCollisions(t), t.resting && (characterOnResting(t, t.resting) ? (t.yvel = !1, setBottom(t, t.resting.top)) : t.resting = !1), t.alive ? "player" == t.type || map.shifting || !(0 == t.numquads || t.left > x) || t.outerok ? !t.nomove && t.movement && t.movement(t) : deleteThing(t, characters, n) : map.shifting || deleteThing(t, characters, n)
+}
+
+function maintainPlayer(e) {
+ if (player.alive) {
+ if (player.yvel > 0 && (map.underwater || (player.keys.jump = 0), player.jumping || (map.underwater ? player.paddling || (switchClass(player, "paddling", "paddling"), player.padding = !0) : (addClass(player, "jumping"), player.jumping = !0)), !player.piping && !player.dying && player.top > gamescreen.deathheight)) {
+ if (map.exitloc) return map.random ? (goToTransport(["Random", "Overworld", "Down"]), void playerDropsIn()) : shiftToLocation(map.exitloc);
+ clearPlayerStats(), killPlayer(player, 2)
+ }
+ player.xvel > 0 ? player.right > gamescreen.middlex && player.right > gamescreen.right - gamescreen.left && (player.xvel = min(0, player.xvel)) : player.left < 0 && (player.xvel = max(0, player.xvel)), player.under && (player.jumpcount = 0), window.scrolloffset = map.canscroll * (player.right - gamescreen.middlex), scrolloffset > 0 && !map.shifting ? scrollWindow(lastscroll = round(min(player.scrollspeed, scrolloffset))) : lastscroll = 0
+ }
+}
+
+function maintainTexts() {
+ var e, t, n;
+ for (n = texts.length - 1; n >= 0; --n) e = (t = texts[n]).element || t, t.xvel && elementShiftLeft(e, t.xvel), t.yvel && elementShiftTop(e, t.yvel)
+}
+
+function followPath(e, t, n) {
+ return null != t[n] && null != e[t[n]] ? followPath(e[t[n]], t, ++n) : e
+}
+
+function clearAllTimeouts() {
+ for (var e = setTimeout((function() {})); e--;) clearTimeout(e)
+}
+
+function getCanvas(e, t, n) {
+ var x = createElement("canvas", {
+ width: e,
+ height: t
+ });
+ return n && (n = n || unitsize, proliferate(x.style, {
+ width: e * n + "px",
+ height: t * n + "px"
+ })), x.getContext("2d").webkitImageSmoothingEnabled = !1, x
+}
+
+function step(e) {
+ unpause(), upkeep(), pause(), e > 0 && step(e - 1)
+}
+
+function fastforward(e) {
+ window.speed = max(0, parseInt(e || 0)) + 1
+}
+
+function toggleFastFWD(e) {
+ window.fastforwarding ? (fastforward(0), window.fastforwarding = !1) : (fastforward(2), window.fastforwarding = !0)
+}
+
+function specifyTimer(e) {
+ timer = e, requestAnimationFrame = function(e) {
+ window.setTimeout(e, timer)
+ }
+}
+
+function changeUnitsize(e) {
+ function t(e) {
+ for (i in e) updateSize(e[i]), updatePosition(e[i])
+ }
+ e && (resetUnitsize(e), t(solids), t(characters))
+}
+
+function randTrue(e) {
+ return floor(getSeed() * ((e || 1) + 1))
+}
+
+function randSign(e) {
+ return 2 * randTrue(e) - 1
+}
+
+function randBoolJS(e) {
+ return floor(2 * random())
+}
+
+function updatePosition(e) {
+ e.nomove || shiftHoriz(e, e.xvel), e.nofall || shiftVert(e, e.yvel)
+}
+
+function updateSize(e) {
+ var t;
+ e.unitwidth = e.width * unitsize, e.unitheight = e.height * unitsize, e.spritewidthpixels = e.spritewidth * unitsize, e.spriteheightpixels = e.spriteheight * unitsize, (t = e.canvas) && (t.width = e.spritewidthpixels, t.height = e.spriteheightpixels, refillThingCanvas(e))
+}
+
+function reduceHeight(e, t, n) {
+ e.top += t, e.height -= t / unitsize, n && updateSize(e)
+}
+
+function shiftBoth(e, t, n) {
+ e.noshiftx || shiftHoriz(e, t), e.noshifty || shiftVert(e, n)
+}
+
+function shiftHoriz(e, t) {
+ e.left += t, e.right += t
+}
+
+function shiftVert(e, t) {
+ e.top += t, e.bottom += t
+}
+
+function setLeft(e, t) {
+ e.left = t, e.right = e.left + e.width * unitsize
+}
+
+function setRight(e, t) {
+ e.right = t, e.left = e.right - e.width * unitsize
+}
+
+function setTop(e, t) {
+ e.top = t, e.bottom = e.top + e.height * unitsize
+}
+
+function setBottom(e, t) {
+ e.bottom = t, e.top = e.bottom - e.height * unitsize
+}
+
+function setWidth(e, t, n, x) {
+ e.width = t, e.unitwidth = t * unitsize, n && (e.spritewidth = t, e.spritewidthpixels = t * unitsize), x && (updateSize(e), setThingSprite(e))
+}
+
+function setHeight(e, t, n, x) {
+ e.height = t, e.unitheight = t * unitsize, n && (e.spriteheight = t, e.spriteheightpixels = t * unitsize), x && (updateSize(e), setThingSprite(e))
+}
+
+function setSize(e, t, n, x, r) {
+ t && setWidth(e, t, x), n && setHeight(e, n, x), r && (updateSize(e), setThingSprite(e))
+}
+
+function setMidX(e, t, n) {
+ setLeft(e, t + e.width * unitsized2, n)
+}
+
+function getMidX(e) {
+ return e.left + e.width * unitsized2
+}
+
+function setMidY(e, t, n) {
+ setTop(e, t + e.height * unitsized2, n)
+}
+
+function setMidXObj(e, t, n) {
+ setLeft(e, t.left + t.width * unitsized2 - e.width * unitsized2, n)
+}
+
+function slideToXLoc(e, t, n, x) {
+ n = n || 1 / 0;
+ var r = getMidX(e);
+ shiftHoriz(e, r < t ? min(n, t - r) : max(-n, t - r), x)
+}
+
+function updateLeft(e, t) {
+ e.left += t, e.right = e.left + e.width * unitsize
+}
+
+function updateRight(e, t) {
+ e.right += t, e.left = e.right - e.width * unitsize
+}
+
+function updateTop(e, t) {
+ e.top += t, e.bottom = e.top + e.height * unitsize
+}
+
+function updateBottom(e, t) {
+ e.bottom += t, e.top = e.bottom - e.height * unitsize
+}
+
+function increaseHeightTop(e, t, n) {
+ e.top -= t, e.height += t / unitsize, e.unitheight = e.height * unitsize
+}
+
+function determineThingCollisions(e) {
+ if (!e.nocollide) {
+ var t, n, x, r, i, a, o;
+ for (e.resting && 0 != e.resting.yvel || (e.resting = !1), e.skipoverlaps || checkOverlap(e), r = 0, a = e.numquads; r < a; ++r)
+ for (n = (t = e.quadrants[r]).things, i = 0, o = t.numthings; i < o && e != (x = n[i]); ++i) !x.alive || x.scenery || x.nocollide || !objectsTouch(e, x) || !e.player && x.hidden && x.visual_scenery && x.visual_scenery.hidden && !solidOnCharacter(x, e) || (x.character ? objectsCollided(e, x) : e.nocollidesolid || (objectsCollided(e, x), e.skipoverlaps || x.skipoverlaps || !characterOverlapsSolid(e, x) || e.overlaps.push(x)));
+ e.undermid ? e.undermid.bottomBump(e.undermid, e) : e.under instanceof Thing && e.under.bottomBump(e.under, e)
+ }
+}
+
+function checkOverlap(e) {
+ if (e.overlapdir) e.overlapdir < 0 && e.right <= e.ocheck.left + unitsizet2 || e.left >= e.ocheck.right - unitsizet2 ? (e.overlapdir = 0, e.overlaps = []) : shiftHoriz(e, e.overlapdir, !0);
+ else if (e.overlaps.length > 0) {
+ var t, n, x = e.overlaps,
+ r = {
+ right: -1 / 0
+ },
+ i = {
+ left: 1 / 0
+ },
+ a = 0;
+ for (n in e.overlapfix = !0, x) a += getMidX(t = x[n]), t.right > r.right && (r = t), t.left < i.left && (i = t);
+ a /= x.length, getMidX(e) >= a - unitsized16 ? (e.overlapdir = unitsize, e.ocheck = r) : (e.overlapdir = -unitsize, e.ocheck = i)
+ }
+}
+
+function characterOverlapsSolid(e, t) {
+ return e.top <= t.top && e.bottom > t.bottom
+}
+
+function objectsTouch(e, t) {
+ return e.right - unitsize > t.left && e.left + unitsize < t.right && e.bottom >= t.top && e.top <= t.bottom
+}
+
+function charactersTouch(e, t) {
+ return !(e.bottom <= t.top + unitsizet2 || e.top + unitsizet2 >= t.bottom)
+}
+
+function objectInQuadrant(e, t) {
+ return e.right + unitsize >= t.left && e.left - unitsize <= t.right && e.bottom + unitsize >= t.top && e.top - unitsize <= t.bottom
+}
+
+function objectsCollided(e, t) {
+ return e.solid && !t.solid ? objectsCollided(t, e) : t.up && e != t.up ? characterTouchesUp(e, t) : void(t.solid || e.player ? t.collide(e, t) : e.collide(t, e))
+}
+
+function objectToLeft(e, t) {
+ return (e.left + e.right) / 2 < (t.left + t.right) / 2
+}
+
+function objectOnTop(e, t) {
+ return !("solid" == e.type && t.yvel > 0) && (!(e.yvel < t.yvel && "solid" != t.type) && (!!(e.player && e.bottom < t.bottom && "enemy" == t.group) || e.left + unitsize < t.right && e.right - unitsize > t.left && (e.bottom - t.yvel <= t.top + t.toly || e.bottom <= t.top + t.toly + abs(e.yvel - t.yvel))))
+}
+
+function objectOnSolid(e, t) {
+ return e.left + unitsize < t.right && e.right - unitsize > t.left && (e.bottom - e.yvel <= t.top + t.toly || e.bottom <= t.top + t.toly + abs(e.yvel - t.yvel))
+}
+
+function solidOnCharacter(e, t) {
+ return !(t.yvel >= 0) && (t.midx = getMidX(t), t.midx > e.left && t.midx < e.right && e.bottom - e.yvel <= t.top + t.toly - t.yvel)
+}
+
+function characterOnSolid(e, t) {
+ return e.resting == t || objectOnSolid(e, t) && e.yvel >= 0 && e.left + e.xvel + unitsize != t.right && e.right - e.xvel - unitsize != t.left
+}
+
+function characterOnResting(e, t) {
+ return objectOnSolid(e, t) && e.left + e.xvel + unitsize != t.right && e.right - e.xvel - unitsize != t.left
+}
+
+function characterTouchedSolid(e, t) {
+ if (t.up != e) {
+ if (characterOnSolid(e, t)) {
+ if (t.hidden) return;
+ e.resting = t, e.player && map.underwater && removeClass(e, "paddling")
+ } else if (solidOnCharacter(t, e)) {
+ var n = e.left + e.width * unitsize / 2;
+ if (n > t.left && n < t.right) e.undermid = t;
+ else if (t.hidden) return;
+ e.under ? e.under.push(t) : e.under = [t], e.player && setTop(e, t.bottom - e.toly + t.yvel, !0), e.yvel = t.yvel, e.player && (e.keys.jump = 0)
+ }
+ t.hidden || characterNotBumping(e, t) || objectOnTop(e, t) || objectOnTop(t, e) || e.under || e == t.up || (e.right <= t.right ? (e.xvel = min(e.xvel, 0), shiftHoriz(e, max(t.left + unitsize - e.right, -unitsized2), !0)) : e.left >= t.left && (e.xvel = max(e.xvel, 0), shiftHoriz(e, min(t.right - unitsize - e.left, unitsized2), !0)), e.player ? t.actionLeft && t.actionLeft(e, t, t.transport) : (e.moveleft = !e.moveleft, "item" == e.group && e.collide(t, e)))
+ }
+}
+
+function characterNotBumping(e, t) {
+ return e.top + e.toly + abs(e.yvel) > t.bottom
+}
+
+function characterTouchesUp(e, t) {
+ switch (e.group) {
+ case "item":
+ e.moveleft = getMidX(e) <= getMidX(t) + unitsized2, characterHops(e);
+ break;
+ case "coin":
+ e.animate(e);
+ break;
+ default:
+ e.death(e, 2), scoreEnemyBelow(e)
+ }
+}
+
+function characterHops(e) {
+ e.yvel = -1.4 * unitsize, e.resting = !1
+}
+
+function characterIsAlive(e) {
+ return !(!e || e.dead || !e.alive)
+}
+
+function scorePlayerShell(e, t) {
+ return e.star ? score(t, 200, !0) : t.resting ? t.peeking ? score(t, 1e3, !0) : score(t, 100, !0) : score(t, 8e3, !0)
+}
+
+function scoreEnemyStomp(e) {
+ switch (e.type.split(" ")[0]) {
+ case "koopa":
+ e.fly ? 400 : 100;
+ break;
+ case "bulletbill":
+ case "cheepcheep":
+ 200;
+ break;
+ case "hammerbro":
+ 1e3;
+ break;
+ case "lakitu":
+ 800;
+ break;
+ default:
+ 100
+ }
+}
+
+function scoreEnemyFire(e) {
+ var t = 200;
+ switch (e.type.split(" ")[0]) {
+ case "goomba":
+ t = 100;
+ break;
+ case "hammerbro":
+ t = 1e3;
+ break;
+ case "bowser":
+ t = 5e3;
+ break;
+ default:
+ t = 200
+ }
+ scoreEnemyFin(e, t)
+}
+
+function scoreEnemyStar(e) {
+ var t = 200;
+ switch (e.type.split(" ")[0]) {
+ case "goomba":
+ t = 100;
+ break;
+ case "hammerbro":
+ t = 1e3;
+ break;
+ default:
+ t = 200
+ }
+ scoreEnemyFin(e, t), AudioPlayer.play("Kick")
+}
+
+function scoreEnemyBelow(e) {
+ var t = 100;
+ switch (e.type.split(" ")[0]) {
+ case "hammerbro":
+ t = 1e3;
+ break;
+ default:
+ t = 100
+ }
+ scoreEnemyFin(e, t)
+}
+
+function scoreEnemyFin(e, t) {
+ score(e, t, !0)
+}
+
+function moveSimple(e) {
+ e.direction != e.moveleft && (e.moveleft ? (e.xvel = -e.speed, e.noflip || unflipHoriz(e)) : (e.noflip || flipHoriz(e), e.xvel = e.speed), e.direction = e.moveleft)
+}
+
+function moveSmart(e) {
+ moveSimple(e), 0 != e.yvel || e.resting && !offResting(e) || (e.moveleft ? shiftHoriz(e, unitsize, !0) : shiftHoriz(e, -unitsize, !0), e.moveleft = !e.moveleft)
+}
+
+function offResting(e) {
+ return e.moveleft ? e.right - unitsize < e.resting.left : e.left + unitsize > e.resting.right
+}
+
+function moveJumping(e) {
+ moveSimple(e), e.resting && (e.yvel = -abs(e.jumpheight), e.resting = !1)
+}
+
+function moveFloating(e) {
+ setPlatformEndpoints(e), e.begin = map.floor * unitsize - e.begin, e.end = map.floor * unitsize - e.end, (e.movement = moveFloatingReal)(e)
+}
+
+function moveFloatingReal(e) {
+ e.top < e.end ? e.yvel = min(e.yvel + unitsized32, e.maxvel) : e.bottom > e.begin && (e.yvel = max(e.yvel - unitsized32, -e.maxvel)), movePlatformNorm(e)
+}
+
+function moveSliding(e) {
+ setPlatformEndpoints(e), (e.movement = moveSlidingReal)(e)
+}
+
+function moveSlidingReal(e) {
+ gamescreen.left + e.left < e.begin ? e.xvel = min(e.xvel + unitsized32, e.maxvel) : gamescreen.left + e.right > e.end && (e.xvel = max(e.xvel - unitsized32, -e.maxvel)), movePlatformNorm(e)
+}
+
+function setPlatformEndpoints(e) {
+ if (e.begin > e.end) {
+ var t = e.begin;
+ e.begin = e.end, e.end = t
+ }
+}
+
+function collideTransport(e, t) {
+ characterTouchedSolid(e, t), t == e.resting && (t.movement = movePlatformNorm, t.collide = characterTouchedSolid, t.xvel = unitsized2)
+}
+
+function moveFalling(e) {
+ if (e != player.resting) return e.yvel = 0;
+ shiftVert(e, e.yvel += unitsized8), setBottom(player, e.top), e.yvel >= 2.8 * unitsize && (e.freefall = !0, e.movement = moveFreeFalling)
+}
+
+function moveFallingScale(e) {
+ player.resting == e ? (shiftScaleStringVert(e, e.string, e.yvel += unitsized16), shiftScaleStringVert(e.partner, e.partner.string, -e.yvel), e.tension += e.yvel, e.partner.tension -= e.yvel) : e.yvel > 0 && (shiftScaleStringVert(e, e.string, e.yvel -= unitsized32), shiftScaleStringVert(e.partner, e.partner.string, -e.yvel), e.tension -= e.yvel, e.partner.tension += e.yvel), e.partner.tension <= 0 && (e.collide = e.partner.collide = characterTouchedSolid, e.movement = e.partner.movement = moveFreeFalling)
+}
+
+function moveFreeFalling(e) {
+ shiftVert(e, e.yvel += unitsized16), e.yvel > unitsizet2 && (e.movement = function(e) {
+ shiftVert(e, e.yvel)
+ })
+}
+
+function shiftScaleStringVert(e, t, n) {
+ shiftVert(e, n), t.bottom = e.top, t.height = (t.bottom - t.top) / unitsize, updateSize(t)
+}
+
+function setClass(e, t) {
+ e.className = t, setThingSprite(e)
+}
+
+function setClassInitial(e, t) {
+ e.className = t
+}
+
+function addClass(e, t) {
+ e.className += " " + t, setThingSprite(e)
+}
+
+function removeClass(e, t) {
+ e.className = e.className.replace(new RegExp(" " + t, "gm"), ""), setThingSprite(e)
+}
+
+function switchClass(e, t, n) {
+ removeClass(e, t), addClass(e, n)
+}
+
+function removeClasses(e) {
+ var t, n, x;
+ for (n = 1; n < arguments.length; ++n)
+ for ((t = arguments[n]) instanceof Array || (t = t.split(" ")), x = t.length - 1; x >= 0; --x) removeClass(e, t[x])
+}
+
+function addClasses(e, t) {
+ for (var n = t instanceof Array ? t : t.split(" "), x = n.length - 1; x >= 0; --x) addClass(e, n[x])
+}
+
+function addElementClass(e, t) {
+ e.className += " " + t
+}
+
+function removeElementClass(e, t) {
+ e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
+}
+
+function flipHoriz(e) {
+ addClass(e, "flipped")
+}
+
+function flipVert(e) {
+ addClass(e, "flip-vert")
+}
+
+function unflipHoriz(e) {
+ removeClass(e, "flipped")
+}
+
+function unflipVert(e) {
+ removeClass(e, "flip-vert")
+}
+
+function deleteThing(e, t, n) {
+ t.splice(n, 1), e.ondelete && e.ondelete()
+}
+
+function switchContainers(e, t, n) {
+ t.splice(t.indexOf(e), 1), n.push(e)
+}
+
+function containerForefront(e, t) {
+ t.splice(t.indexOf(e), 1), t.unshift(e)
+}
+
+function killNormal(e) {
+ e && (e.hidden = e.dead = !0, e.alive = e.resting = e.movement = !1, TimeHandler.clearAllCycles(e))
+}
+
+function killFlip(e, t) {
+ flipVert(e), e.bottomBump = function() {}, e.nocollide = e.dead = !0, e.resting = e.movement = e.speed = e.xvel = e.nofall = !1, e.yvel = -unitsize, TimeHandler.addEvent((function(e) {
+ killNormal(e)
+ }), 70 + (t || 0))
+}
+
+function generalMovement(e, t, n, x) {
+ var r = setInterval((function() {
+ shiftVert(e, n), shiftHoriz(e, t)
+ }), timer);
+ setTimeout((function() {
+ clearInterval(r)
+ }), x)
+}
+
+function blockBumpMovement(e) {
+ var t = -3,
+ n = setInterval((function() {
+ shiftVert(e, t), 3.5 == (t += .5) && (clearInterval(n), e.up = !1), determineThingCollisions(e)
+ }), timer)
+}
+
+function emergeUp(e, t) {
+ AudioPlayer.play("Powerup Appears"), flipHoriz(e), e.nomove = e.nocollide = e.alive = e.nofall = e.emerging = !0, switchContainers(e, characters, scenery);
+ var n = setInterval((function() {
+ shiftVert(e, -unitsized8), e.bottom <= t.top && (clearInterval(n), switchContainers(e, scenery, characters), e.nocollide = e.nomove = e.moveleft = e.nofall = e.emerging = !1, e.emergeOut && e.emergeOut(e, t), e.movement && (e.movementsave = e.movement, e.movement = moveSimple, e.moving = TimeHandler.addEventInterval((function(e, t) {
+ if (e.resting != t) return TimeHandler.addEvent((function(e) {
+ e.movement = e.movementsave
+ }), 1, e), !0
+ }), 1, 1 / 0, e, t)))
+ }), timer)
+}
+
+function flicker(e, t, n) {
+ t = round(t) || 49, n = round(n) || 3;
+ e.flickering = !0, TimeHandler.addEventInterval((function(e) {
+ e.hidden = !e.hidden
+ }), n, t, e), TimeHandler.addEvent((function(e) {
+ e.flickering = e.hidden = !1
+ }), t * n + 1, e)
+}
+
+function killOtherCharacters() {
+ var e, t;
+ if (window.characters)
+ for (t = characters.length - 1; t >= 0; --t)(e = characters[t]).nokillend ? e.killonend && e.killonend(e) : deleteThing(e, characters, t);
+ if (window.solids)
+ for (t = solids.length - 1; t >= 0; --t) solids[t].killonend && deleteThing(solids[t], solids, t)
+}
+
+function lookTowardPlayer(e, t) {
+ player.right <= e.left ? e.lookleft && !t || (e.lookleft = !0, e.moveleft = !1, unflipHoriz(e)) : player.left >= e.right && (e.lookleft || t) && (e.lookleft = !1, e.moveleft = !0, flipHoriz(e))
+}
+
+function lookTowardThing(e, t) {
+ t.right <= e.left ? (e.lookleft = !0, e.moveleft = !1, unflipHoriz(e)) : t.left >= e.right && (e.lookleft = !1, e.moveleft = !0, flipHoriz(e))
+}
+
+function playCurrentThemeHurry(e) {
+ AudioPlayer.playTheme("Hurry " + (e || area.theme))
+}! function(e) {
+ "use strict";
+ var t = function() {},
+ n = {
+ getType: function() {
+ return "null"
+ },
+ isSupported: function() {
+ return !1
+ },
+ update: t
+ },
+ x = function(e) {
+ var n = this,
+ x = window;
+ this.update = t, this.requestAnimationFrame = e || x.requestAnimationFrame || x.webkitRequestAnimationFrame || x.mozRequestAnimationFrame, this.tickFunction = function() {
+ n.update(), n.startTicker()
+ }, this.startTicker = function() {
+ n.requestAnimationFrame.apply(x, [n.tickFunction])
+ }
+ };
+ x.prototype.start = function(e) {
+ this.update = e || t, this.startTicker()
+ };
+ var r = function() {};
+ r.prototype.update = t, r.prototype.start = function(e) {
+ this.update = e || t
+ };
+ var i = function(e, t) {
+ this.listener = e, this.gamepadGetter = t, this.knownGamepads = []
+ };
+ i.factory = function(e) {
+ var t = n,
+ x = window && window.navigator;
+ return x && (void 0 !== x.webkitGamepads ? t = new i(e, (function() {
+ return x.webkitGamepads
+ })) : void 0 !== x.webkitGetGamepads && (t = new i(e, (function() {
+ return x.webkitGetGamepads()
+ })))), t
+ }, i.getType = function() {
+ return "WebKit"
+ }, i.prototype.getType = function() {
+ return i.getType()
+ }, i.prototype.isSupported = function() {
+ return !0
+ }, i.prototype.update = function() {
+ var e, t, n = this,
+ x = Array.prototype.slice.call(this.gamepadGetter(), 0);
+ for (t = this.knownGamepads.length - 1; t >= 0; t--) e = this.knownGamepads[t], x.indexOf(e) < 0 && (this.knownGamepads.splice(t, 1), this.listener._disconnect(e));
+ for (t = 0; t < x.length; t++)(e = x[t]) && n.knownGamepads.indexOf(e) < 0 && (n.knownGamepads.push(e), n.listener._connect(e))
+ };
+ var a = function(e) {
+ this.listener = e, window.addEventListener("gamepadconnected", (function(t) {
+ e._connect(t.gamepad)
+ })), window.addEventListener("gamepaddisconnected", (function(t) {
+ e._disconnect(t.gamepad)
+ }))
+ };
+ a.factory = function(e) {
+ var t = n;
+ return window && void 0 !== window.addEventListener && (t = new a(e)), t
+ }, a.getType = function() {
+ return "Firefox"
+ }, a.prototype.getType = function() {
+ return a.getType()
+ }, a.prototype.isSupported = function() {
+ return !0
+ }, a.prototype.update = t;
+ var o = function(e) {
+ this.updateStrategy = e || new x, this.gamepads = [], this.listeners = {}, this.platform = n, this.deadzone = .03, this.maximizeThreshold = .97
+ };
+ o.UpdateStrategies = {
+ AnimFrameUpdateStrategy: x,
+ ManualUpdateStrategy: r
+ }, o.PlatformFactories = [i.factory, a.factory], o.Type = {
+ PLAYSTATION: "playstation",
+ LOGITECH: "logitech",
+ XBOX: "xbox",
+ UNKNOWN: "unknown"
+ }, o.Event = {
+ CONNECTED: "connected",
+ UNSUPPORTED: "unsupported",
+ DISCONNECTED: "disconnected",
+ TICK: "tick",
+ BUTTON_DOWN: "button-down",
+ BUTTON_UP: "button-up",
+ AXIS_CHANGED: "axis-changed"
+ }, o.StandardButtons = ["FACE_1", "FACE_2", "FACE_3", "FACE_4", "LEFT_TOP_SHOULDER", "RIGHT_TOP_SHOULDER", "LEFT_BOTTOM_SHOULDER", "RIGHT_BOTTOM_SHOULDER", "SELECT_BACK", "START_FORWARD", "LEFT_STICK", "RIGHT_STICK", "DPAD_UP", "DPAD_DOWN", "DPAD_LEFT", "DPAD_RIGHT", "HOME"], o.StandardAxes = ["LEFT_STICK_X", "LEFT_STICK_Y", "RIGHT_STICK_X", "RIGHT_STICK_Y"];
+ var l, s = function(e, t, n) {
+ return t < e.length ? e[t] : n + (t - e.length + 1)
+ };
+ o.StandardMapping = {
+ env: {},
+ buttons: {
+ byButton: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
+ },
+ axes: {
+ byAxis: [0, 1, 2, 3]
+ }
+ }, o.Mappings = [{
+ env: {
+ platform: a.getType(),
+ type: o.Type.PLAYSTATION
+ },
+ buttons: {
+ byButton: [14, 13, 15, 12, 10, 11, 8, 9, 0, 3, 1, 2, 4, 6, 7, 5, 16]
+ },
+ axes: {
+ byAxis: [0, 1, 2, 3]
+ }
+ }, {
+ env: {
+ platform: i.getType(),
+ type: o.Type.LOGITECH
+ },
+ buttons: {
+ byButton: [1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 10]
+ },
+ axes: {
+ byAxis: [0, 1, 2, 3]
+ }
+ }, {
+ env: {
+ platform: a.getType(),
+ type: o.Type.LOGITECH
+ },
+ buttons: {
+ byButton: [0, 1, 2, 3, 4, 5, -1, -1, 6, 7, 8, 9, 11, 12, 13, 14, 10],
+ byAxis: [-1, -1, -1, -1, -1, -1, [2, 0, 1],
+ [2, 0, -1]
+ ]
+ },
+ axes: {
+ byAxis: [0, 1, 3, 4]
+ }
+ }], o.prototype.init = function() {
+ var e = o.resolvePlatform(this),
+ t = this;
+ return this.platform = e, this.updateStrategy.start((function() {
+ t._update()
+ })), e.isSupported()
+ }, o.prototype.bind = function(e, t) {
+ return void 0 === this.listeners[e] && (this.listeners[e] = []), this.listeners[e].push(t), this
+ }, o.prototype.unbind = function(e, t) {
+ if (void 0 !== e) {
+ if (void 0 !== t) {
+ if (void 0 === this.listeners[e]) return !1;
+ for (var n = 0; n < this.listeners[e].length; n++)
+ if (this.listeners[e][n] === t) return this.listeners[e].splice(n, 1), !0;
+ return !1
+ }
+ this.listeners[e] = []
+ } else this.listeners = {}
+ }, o.prototype.count = function() {
+ return this.gamepads.length
+ }, o.prototype._fire = function(e, t) {
+ if (void 0 !== this.listeners[e])
+ for (var n = 0; n < this.listeners[e].length; n++) this.listeners[e][n].apply(this.listeners[e][n], [t])
+ }, o.getNullPlatform = function() {
+ return Object.create(n)
+ }, o.resolvePlatform = function(e) {
+ var t, x = n;
+ for (t = 0; !x.isSupported() && t < o.PlatformFactories.length; t++) x = o.PlatformFactories[t](e);
+ return x
+ }, o.prototype._connect = function(e) {
+ var t, n, x = this._resolveMapping(e);
+ for (e.state = {}, e.lastState = {}, e.updater = [], t = x.buttons.byButton.length, n = 0; n < t; n++) this._addButtonUpdater(e, x, n);
+ for (t = x.axes.byAxis.length, n = 0; n < t; n++) this._addAxisUpdater(e, x, n);
+ this.gamepads[e.index] = e, this._fire(o.Event.CONNECTED, e)
+ }, o.prototype._addButtonUpdater = function(e, t, n) {
+ var x, r = s(o.StandardButtons, n, "EXTRA_BUTTON_"),
+ i = this._createButtonGetter(e, t.buttons, n),
+ a = this,
+ l = {
+ gamepad: e,
+ control: r
+ };
+ e.state[r] = 0, e.lastState[r] = 0, x = function() {
+ var t = i(),
+ n = e.lastState[r],
+ x = t > .5,
+ s = n > .5;
+ e.state[r] = t, x && !s ? a._fire(o.Event.BUTTON_DOWN, Object.create(l)) : !x && s && a._fire(o.Event.BUTTON_UP, Object.create(l)), 0 !== t && 1 !== t && t !== n && a._fireAxisChangedEvent(e, r, t), e.lastState[r] = t
+ }, e.updater.push(x)
+ }, o.prototype._addAxisUpdater = function(e, t, n) {
+ var x, r = s(o.StandardAxes, n, "EXTRA_AXIS_"),
+ i = this._createAxisGetter(e, t.axes, n),
+ a = this;
+ e.state[r] = 0, e.lastState[r] = 0, x = function() {
+ var t = i(),
+ n = e.lastState[r];
+ e.state[r] = t, t !== n && a._fireAxisChangedEvent(e, r, t), e.lastState[r] = t
+ }, e.updater.push(x)
+ }, o.prototype._fireAxisChangedEvent = function(e, t, n) {
+ var x = {
+ gamepad: e,
+ axis: t,
+ value: n
+ };
+ this._fire(o.Event.AXIS_CHANGED, x)
+ }, o.prototype._createButtonGetter = (l = function() {
+ return 0
+ }, function(e, t, n) {
+ var x, r, i = l,
+ a = this;
+ return -1 !== (x = t.byButton[n]) ? "number" == typeof x && x < e.buttons.length && (i = function() {
+ return e.buttons[x]
+ }) : t.byAxis && n < t.byAxis.length && (x = t.byAxis[n], r = x, "[object Array]" === Object.prototype.toString.call(r) && 3 == x.length && x[0] < e.axes.length && (i = function(e, t, n) {
+ var x = l;
+ return t < n ? x = function() {
+ var x = n - t,
+ r = e();
+ return (r = (r - t) / x) < 0 ? 0 : r
+ } : n < t && (x = function() {
+ var x = t - n,
+ r = e();
+ return (r = (r - n) / x) > 1 ? 0 : 1 - r
+ }), x
+ }(i = function() {
+ var t = e.axes[x[0]];
+ return a._applyDeadzoneMaximize(t)
+ }, x[1], x[2]))), i
+ }), o.prototype._createAxisGetter = function() {
+ var e = function() {
+ return 0
+ };
+ return function(t, n, x) {
+ var r, i = e,
+ a = this;
+ return -1 !== (r = n.byAxis[x]) && "number" == typeof r && r < t.axes.length && (i = function() {
+ var e = t.axes[r];
+ return a._applyDeadzoneMaximize(e)
+ }), i
+ }
+ }(), o.prototype._disconnect = function(e) {
+ var t, n = [];
+ for (void 0 !== this.gamepads[e.index] && delete this.gamepads[e.index], t = 0; t < this.gamepads.length; t++) void 0 !== this.gamepads[t] && (n[t] = this.gamepads[t]);
+ this.gamepads = n, this._fire(o.Event.DISCONNECTED, e)
+ }, o.prototype._resolveControllerType = function(e) {
+ return -1 !== (e = e.toLowerCase()).indexOf("playstation") ? o.Type.PLAYSTATION : -1 !== e.indexOf("logitech") || -1 !== e.indexOf("wireless gamepad") ? o.Type.LOGITECH : -1 !== e.indexOf("xbox") || -1 !== e.indexOf("360") ? o.Type.XBOX : o.Type.UNKNOWN
+ }, o.prototype._resolveMapping = function(e) {
+ var t, n, x = o.Mappings,
+ r = null,
+ i = {
+ platform: this.platform.getType(),
+ type: this._resolveControllerType(e.id)
+ };
+ for (t = 0; !r && t < x.length; t++) n = x[t], o.envMatchesFilter(n.env, i) && (r = n);
+ return r || o.StandardMapping
+ }, o.envMatchesFilter = function(e, t) {
+ var n, x = !0;
+ for (n in e) e[n] !== t[n] && (x = !1);
+ return x
+ }, o.prototype._update = function() {
+ this.platform.update(), this.gamepads.forEach((function(e) {
+ e && e.updater.forEach((function(e) {
+ e()
+ }))
+ })), this.gamepads.length > 0 && this._fire(o.Event.TICK, this.gamepads)
+ }, o.prototype._applyDeadzoneMaximize = function(e, t, n) {
+ return t = void 0 !== t ? t : this.deadzone, n = void 0 !== n ? n : this.maximizeThreshold, e >= 0 ? e < t ? e = 0 : e > n && (e = 1) : e > -t ? e = 0 : e < -n && (e = -1), e
+ }, e.Gamepad = o
+}("undefined" != typeof module && module.exports || window);
+var customMute = !0;
+
+function AudioPlayr(e) {
+ "use strict";
+ var t, n, x, r, i, a, o, l, s, d, u = this.play = function(e) {
+ var n = x[e];
+ if (!n) {
+ if (!(n = t[e])) return console.log("Unknown sound: '" + e + "'"), n;
+ x[e] = n
+ }
+ return n.name_raw = e, c(n), n.volume = !i, customMute || n.play(), n.used++ || n.addEventListener("ended", (function() {
+ ! function(e, t) {
+ x[t] && delete x[t]
+ }(0, e)
+ })), n
+ };
+
+ function p(e) {
+ customMute || e.play()
+ }
+
+ function c(e) {
+ e && e.pause && (e.pause(), e.readyState && (e.currentTime = 0))
+ }
+
+ function m(e, t) {
+ var x, r, i = document.createElement("Audio");
+ for (r in h(i, d), n) x = n[r], i.appendChild(h(document.createElement("Source"), {
+ type: "audio/" + x,
+ src: a + "/" + t + "/" + x + "/" + e + "." + x
+ }));
+ return customMute || i.play(), i
+ }
+
+ function h(e, t) {
+ var n, x;
+ for (x in t) "object" == typeof(n = t[x]) ? (e[x] || (e[x] = {}), h(e[x], n)) : e[x] = n;
+ return e
+ }
+ this.playLocal = function(e, t) {
+ var n, x = u(e);
+ if (!x) return x;
+ switch (l.constructor) {
+ case Function:
+ n = l(t);
+ break;
+ case Number:
+ n = l;
+ break;
+ default:
+ n = Number(n) || 1
+ }
+ return x.volume = x.volume_real = n = 0, x
+ }, this.playTheme = function(e, t, n) {
+ if (n = void 0 === n || n, !e) switch (s.constructor) {
+ case Function:
+ e = s();
+ break;
+ case String:
+ e = s
+ }(i = r) && (c(i), r = void 0, delete x[i.name_raw]);
+ var i = r = u(e);
+ return i.loop = n, t || (i.used = !1), 1 == i.used && i.addEventListener("ended", this.playTheme), i
+ }, this.addEventListener = function(e, t, n) {
+ var r = x[e];
+ r && r.addEventListenever(t, n)
+ }, this.addEventImmediate = function(e, t, n) {
+ var r = x[e];
+ r && !r.paused ? r.addEventListener(t, n) : n()
+ }, this.toggleMute = function() {
+ for (var e in i = !i, x) x[e].volume = i ? 0 : x[e].volume_real || 1;
+ o && (localStorage[o] = i)
+ }, this.pause = function() {
+ for (var e in x) x[e] && x[e].pause()
+ }, this.resume = function() {
+ for (var e in x) x[e] && !customMute && p(x[e])
+ }, this.pauseTheme = function() {
+ r && r.pause()
+ }, this.resumeTheme = function() {
+ r && r.play()
+ }, this.clear = function() {
+ this.pause(), x = {}, this.theme = void 0
+ }, this.getLibrary = function() {
+ return t
+ }, this.getSounds = function() {
+ return x
+ },
+ function(e) {
+ t = e.library || {}, n = e.filetypes || ["mp3", "ogg"], i = e.muted || !1, a = e.directory || "", o = e.localStorageMuted || "", l = e.getVolumeLocal || 1, s = e.getThemeDefault || "Theme";
+ var r = e.soundSettings || {};
+ d = e.soundSettings || {
+ preload: r.preload || "auto",
+ used: 0,
+ volume: 0
+ }, x = {}, o && (i = localStorage[o]),
+ function() {
+ var e, n, x, r;
+ for (x in t)
+ for (r in e = t[x]) n = e[r], t[n] = m(n, x)
+ }()
+ }(e || {})
+}
+
+function TimeHandlr(e) {
+ "use strict";
+ var t, n, x, r, i, a, o, l, s;
+ this.getTime = function() {
+ return t
+ }, this.getEvents = function() {
+ return n
+ };
+ var d = this.addEvent = function(e, n) {
+ if (!(e instanceof Function)) return console.warn("Attempting to add an event that isn't a function."), console.log(arguments), !1;
+ n = n || 1;
+ var x = g(arguments);
+ x.splice(0, 2);
+ var r = {
+ func: e,
+ time_exec: t + n,
+ time_repeat: n,
+ args: x,
+ repeat: 1
+ };
+ return c(r, r.time_exec), r
+ },
+ u = this.addEventInterval = function(e, n, x) {
+ if (!(e instanceof Function)) return console.warn("Attempting to add an event that isn't a function."), console.log(arguments), !1;
+ n = n || 1, x = x || 1;
+ var r = g(arguments);
+ r.splice(0, 3);
+ var i = {
+ func: e,
+ time_exec: t + n,
+ time_repeat: n,
+ args: r,
+ repeat: x
+ };
+ return e.event = i, c(i, i.time_exec), i
+ },
+ p = this.addEventIntervalSynched = function(e, n, x, r, i) {
+ var a = n * i.length,
+ o = w(t / a) * a,
+ l = this,
+ s = function(e, n, x) {
+ return x.startcount = t, u.apply(e, n)
+ };
+ if (n = n || 1, x = x || 1, o == t) return s(l, arguments, r);
+ var p = o - t;
+ d(s, p, l, arguments, r)
+ };
+
+ function c(e, t) {
+ return n[t] ? (n[t].push(e), n[t]) : n[t] = [e]
+ }
+ this.clearEvent = function(e) {
+ e && (e.repeat = 0)
+ }, this.clearAllEvents = function() {
+ n = {}
+ };
+ var m = this.clearClassCycle = function(e, t) {
+ if (e[x] && e[x][t]) {
+ var n = e[x][t];
+ n[0] = !1, n.length = !1, delete e[x][t]
+ }
+ };
+ this.clearAllCycles = function(e) {
+ var t, n, x = e[x];
+ for (t in x)(n = x[t])[0] = !1, n.length = 1, delete x[t]
+ }, this.addSpriteCycle = function(e, t, n, r) {
+ e[x] || (e[x] = {}), m(e, n);
+ var i = "function" == typeof r;
+ n = n || 0;
+ var a = e[x][n] = h(e, t, i ? 0 : r);
+ return a.event && i && (a.event.count_changer = r), f(e, t), a
+ }, this.addSpriteCycleSynched = function(e, t, n, r) {
+ e[x] || (e[x] = {}), m(e, n), n = n || 0;
+ var i = e[x][n] = h(e, t, r, !0);
+ return f(e, t), i
+ };
+
+ function h(e, t, n, x) {
+ t.loc = t.oldclass = -1;
+ var a = x ? p : u;
+ return e[r] = function() {
+ a(f, n || o, 1 / 0, e, t)
+ }, e[i] && e[r](), t
+ }
+
+ function f(e, t) {
+ if (!e || !t || !t.length) return !0;
+ if (null != a && !e[a]) return !0; - 1 != t.oldclass && "" !== t.oldclass && s(e, t.oldclass), t.loc = ++t.loc % t.length;
+ var n = t[t.loc];
+ if (n) {
+ var x = n instanceof Function ? n(e, t) : n;
+ return "string" == typeof x ? (t.oldclass = x, l(e, x), !1) : !1 === x
+ }
+ return !1 === n
+ }
+
+ function g(e) {
+ return Array.prototype.slice.call(e)
+ }
+
+ function v(e, t) {
+ e.className += " " + t
+ }
+
+ function y(e, t) {
+ e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
+ }
+ this.handleEvents = function() {
+ ++t;
+ var e = n[t];
+ if (e) {
+ var x, r, i;
+ for (i = 0, r = e.length; i < r; ++i)(x = e[i]).repeat > 0 && !x.func.apply(this, x.args) && (x.count_changer && x.count_changer(x), x.repeat instanceof Function ? x.repeat.bind(x)() && (x.count += x.time_repeat, c(x, x.time_exec)) : --x.repeat > 0 && (x.time_exec += x.time_repeat, c(x, x.time_exec)));
+ delete n[t]
+ }
+ };
+ var w = Math.ceil;
+ ! function(e) {
+ t = e.time || 0, n = e.events || {}, x = e.cycles || "cycles", e.className || "className", r = e.onSpriteCycleStart || "onSpriteCycleStart", i = e.doSpriteCycleStart || "doSpriteCycleStart", a = e.cycleCheckValidity, o = e.timingDefault || 7, l = e.addClass || window.addClass || v, s = e.removeClass || window.removeClass || y
+ }(e || {})
+}
+
+function QuadsKeepr(e) {
+ "use strict";
+ var t, n, x, r, i, a, o, l, s, d, u, p, c, m, h, f, g, v, y, w, T, S;
+ this.getQuadrants = function() {
+ return t
+ }, this.getNumQuads = function() {
+ return x
+ }, this.getNumRows = function() {
+ return r
+ }, this.getNumCols = function() {
+ return i
+ }, this.getQuadWidth = function() {
+ return l
+ }, this.getQuadHeight = function() {
+ return s
+ }, this.getDelX = function() {
+ return u
+ }, this.getOutDifference = function() {
+ return p
+ };
+ var P = this.resetQuadrants = function() {
+ t.length = 0, n.length = 0;
+ for (var e = 0; e < i; ++e) C((e - 2) * l);
+ c = t[0]
+ };
+
+ function b(e, t) {
+ this.left = t, this.top = (e - 1) * s, this.right = this.left + l, this.bottom = this.top + s, this.things = [], this.numobjects = this.tolx = this.toly = 0
+ }
+
+ function C(e) {
+ for (var x = [], i = 0; i < r; ++i) m = new b(i, e), x.push(m), t.push(m);
+ n.push(x)
+ }
+
+ function k() {
+ n.shift();
+ for (var e = 0; e < r; ++e) t.shift();
+ c = t[0], p = l
+ }
+
+ function z(e) {
+ for (var t = 0, n = e.length; t < n; ++t) E(e[t])
+ }
+ this.updateQuadrants = function(e) {
+ for (p += e = e || 0; c.left <= u;) k(), C(m.right), S && S()
+ }, this.determineAllQuadrants = function() {
+ var e, n;
+ for (e = 0; e < x; ++e) t[e].numthings = 0;
+ for (e = 0, n = arguments.length; e < n; ++e) z(arguments[e])
+ };
+ var E = this.determineThingQuadrants = function(e) {
+ e[y] = 0;
+ for (var n = 0; n < x; ++n)
+ if (A(e, t[n]) && (B(e, t[n], n), e[y] > e[w])) return
+ };
+
+ function B(e, t, n) {
+ e[T][e[y]] = t, ++e[y], t.things[t.numthings] = e, ++t.numthings
+ }
+
+ function A(e, t) {
+ return e[g] + d >= t.left && e[h] - d <= t.right && e[v] + d >= t.top && e[f] - d <= t.bottom
+ }! function(e) {
+ t = [], n = [], x = e.num_quads, r = e.num_rows, i = e.num_cols, x ? (r && (i = x / r), i && (r = x / i)) : (r || (r = 2), i || (i = 2), x = r * i), a = e.screen_width || 640, o = e.screen_height || 480, l = a / (i - 3), s = o / (r - 2), d = e.tolerance || 0, u = e.delx || -2 * l, p = l, h = e.thing_left || "left", g = e.thing_right || "right", f = e.thing_top || "top", v = e.thing_bottom || "bottom", y = e.thing_num_quads || "numquads", w = e.thing_max_quads || "maxquads", T = e.thing_quadrants || "quadrants", S = e.onUpdate, e.onCollide, P()
+ }(e || {})
+}
\ No newline at end of file
diff --git a/games/mario-game/index.html b/games/mario-game/index.html
index f668a37f..c1126b59 100644
--- a/games/mario-game/index.html
+++ b/games/mario-game/index.html
@@ -58,6 +58,11 @@
if ((event.keyCode === 32 || event.keyCode === 38 || event.keyCode === 40) && event.target === document.body) {
event.preventDefault();
}
+ if (event.key.toLowerCase() === 'q' && event.ctrlKey) {
+ event.preventDefault();
+ data.lives.amount = "Infinity";
+ updateDataElement(data.lives);
+ }
},
false
);
diff --git a/games/subway-surfers-ny/NewYorkIcon.png b/games/subway-surfers-ny/NewYorkIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..185297c3fd97d62fd5f5c8dacb3e5935a2c80f1d
GIT binary patch
literal 64816
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