From 56343d41157af5a4b622b38d2bd5edc66afff519 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 9 Oct 2011 20:34:19 +0800 Subject: [PATCH 01/87] Bumped version to 0.9.2 --- CHANGELOG | 3 +++ src/version.txt | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 12f17bec67..0e9d0a7f2f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,9 @@ Version History --------------- +0.9.2 +* + 0.9.1 * Core: "cache image" option (disabled by default) to use canvas instead of directly using Image Object * Core: add onPause and onResume callback when game is paused/resumed on losing/gaining focus diff --git a/src/version.txt b/src/version.txt index f374f6662e..2003b639c4 100644 --- a/src/version.txt +++ b/src/version.txt @@ -1 +1 @@ -0.9.1 +0.9.2 From 90a6de3a318f8aa8e3b3e0f4b28b8633564be335 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 9 Oct 2011 20:42:32 +0800 Subject: [PATCH 02/87] Added a few missing details, as highlighted in Issue #18 --- tutorial/index.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tutorial/index.html b/tutorial/index.html index 805751cc58..6a00074731 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -1267,7 +1267,7 @@

Part 8: Adding a second level

Part 9: Adding a title screen

To finish, let's add a title screen to our game, using the title_screen.jpg - files in the "/data/GUI" folder: +"/data/GUI" folder (and of course to be added in the ressource list, as we done it previously for other images) : Title screen and on top of it we will add some message, and wait for the user input to start the game !

@@ -1406,7 +1406,10 @@

Part 9: Adding a title screen

What do we have above?
1) In the constructor, we declare a few objects to handle the background tile, a font - for displaying our message, and our scroller.
+ for displaying our message, and our scroller.
+ Note : Concerning the font, if you check carefully the corresponding asset + (32x32_font.png), you will notice that it only contains uppercase letters, so be sure + as well to only use uppercase letter in your text.
2) In the reset function, we load the resources we need (image, font, etc..) and reset our scrolling text position, add a tween object for it (with a callback to reset the scrolling text), and bind the ENTER key. Additionally, I'm also playing the From f3aa03fbecfd1520655a75b42c2b360f65b0d2be Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 10 Oct 2011 19:25:38 +0800 Subject: [PATCH 03/87] Updated examples to use the 0.9.2 build --- examples/alexkidd/index.html | 2 +- examples/dirtyRect/index.html | 2 +- examples/tiled_example_loader/index.html | 2 +- examples/tilemap_collision_demo/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/alexkidd/index.html b/examples/alexkidd/index.html index 1a272e169d..aaf234af66 100644 --- a/examples/alexkidd/index.html +++ b/examples/alexkidd/index.html @@ -41,7 +41,7 @@

Alex Kidd JS/TileD Demo

- + diff --git a/examples/dirtyRect/index.html b/examples/dirtyRect/index.html index 4ef82c3a73..eedfe60978 100644 --- a/examples/dirtyRect/index.html +++ b/examples/dirtyRect/index.html @@ -11,7 +11,7 @@
- + diff --git a/examples/tiled_example_loader/index.html b/examples/tiled_example_loader/index.html index a89dc28bc7..bb12ae21d6 100644 --- a/examples/tiled_example_loader/index.html +++ b/examples/tiled_example_loader/index.html @@ -25,7 +25,7 @@

A lightweight HTML5 game engine

Tiled Orthogonal Map Loader

you can scroll the selected map using the arrow keys

- +
diff --git a/examples/tilemap_collision_demo/index.html b/examples/tilemap_collision_demo/index.html index 4c78029248..57427c8de0 100644 --- a/examples/tilemap_collision_demo/index.html +++ b/examples/tilemap_collision_demo/index.html @@ -34,7 +34,7 @@

Tiled and collision demo

- + From 18a0b33e938e38d6f4e38af14a53431928390314 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 10 Oct 2011 19:43:40 +0800 Subject: [PATCH 04/87] Allowed to specify either an ObjectEntity or a position Vector as Target (Other object type will now throw an exception). --- src/entity/camera.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/entity/camera.js b/src/entity/camera.js index 2640510107..5bc1fab2c2 100755 --- a/src/entity/camera.js +++ b/src/entity/camera.js @@ -182,12 +182,17 @@ /** * set the viewport to follow the specified entity - * @param {Object} Object Entity to follow + * @param {Object} Object ObjectEntity or Position Vector to follow * @param {axis} [axis="AXIS.BOTH"] AXIS.HORIZONTAL, AXIS.VERTICAL, AXIS.BOTH */ follow : function(target, axis) { - this.target = target; + if (target instanceof me.ObjectEntity) + this.target = target.pos; + else if (target instanceof me.Vector2d) + this.target = target; + else + throw "melonJS: invalid target for viewport.follow"; // if axis is null, camera is moved on target center this.follow_axis = axis || this.AXIS.NONE; }, From 365bff959883deb1f805143de8ae0fe8d4fbe7dc Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 10 Oct 2011 19:48:09 +0800 Subject: [PATCH 05/87] Default value for axis was wrongly set to AXIS.NONE (while the documentation was indicating the correct value : AXIS.BOTH) --- src/entity/camera.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity/camera.js b/src/entity/camera.js index 5bc1fab2c2..421156e1ae 100755 --- a/src/entity/camera.js +++ b/src/entity/camera.js @@ -194,7 +194,7 @@ else throw "melonJS: invalid target for viewport.follow"; // if axis is null, camera is moved on target center - this.follow_axis = axis || this.AXIS.NONE; + this.follow_axis = axis || this.AXIS.BOTH; }, /** From 3433ee40994bd46bc0bba5c4543feed22daee0d8 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 10 Oct 2011 20:01:22 +0800 Subject: [PATCH 06/87] Ensured viewport is refreshed when changing the target to follow (e.g. 2 players use case). Fix Issue #17 --- src/entity/camera.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/entity/camera.js b/src/entity/camera.js index 421156e1ae..7d34ace778 100755 --- a/src/entity/camera.js +++ b/src/entity/camera.js @@ -195,6 +195,9 @@ throw "melonJS: invalid target for viewport.follow"; // if axis is null, camera is moved on target center this.follow_axis = axis || this.AXIS.BOTH; + + // force a camera update + this.update(true); }, /** From 2a78474737c07459a6caa167e1af92e9e2bce8df Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 10 Oct 2011 20:31:40 +0800 Subject: [PATCH 07/87] Javascript is magic sometimes, as I have no idea why this was working before :) --- src/core.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core.js b/src/core.js index b6b38e6bab..850a0d800f 100755 --- a/src/core.js +++ b/src/core.js @@ -1245,7 +1245,7 @@ // remove the object from the object list /** @private */ - pendingDefer = function () + pendingDefer = (function (obj) { idx = gameObjects.indexOf(obj); if (idx!=-1) { @@ -1254,7 +1254,7 @@ objCount = gameObjects.length; } pendingDefer = null; - }.defer(obj); + }).defer(obj); } }; From 4dab4e2ea9f7aed162f7efe673bf7142be129522 Mon Sep 17 00:00:00 2001 From: Tom Streller Date: Tue, 11 Oct 2011 14:47:12 +0200 Subject: [PATCH 08/87] added some Cake magic --- .gitignore | 7 ++++++- Cakefile | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 34 ++++++++++++++++++++++++++++++ src/version.js | 1 + 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 Cakefile create mode 100644 package.json create mode 100644 src/version.js diff --git a/.gitignore b/.gitignore index 360a744ea5..7a374e4cfb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,9 @@ Thumbs.db Desktop.ini # project specific ignore -add-on/ \ No newline at end of file +add-on/ +node_modules/ +build/ + +# Vim swap files +*.sw* diff --git a/Cakefile b/Cakefile new file mode 100644 index 0000000000..a1a9d4e10c --- /dev/null +++ b/Cakefile @@ -0,0 +1,56 @@ +fs = require 'fs' +util = require 'util' + +files = [ + './src/core.js', + './src/loader/loader.js', + './src/math/geometry.js', + './src/entity/camera.js', + './src/entity/entity.js', + './src/font/font.js', + './src/GUI/GUI.js', + './src/GUI/HUD.js', + './src/audio/audio.js', + './src/video/video.js', + './src/input/input.js', + './src/utils/utils.js', + './src/utils/stat.js', + './src/level/level.js', + './src/level/TMXTiledMap.js', + './src/utils/tween.js'] + +version = require './src/version.js' + +builddir = './build' +targetfile = "melonJS-#{version}" + +task 'build:browser', 'Compile and minify for use in browser', -> + util.log "Creating browser file for melonJS version #{version}." + contents = new Array + remaining = files.length + for file, index in files + do (file, index) -> + fs.readFile file, 'utf8', (err, cnt) -> + util.log err if err + contents[index] = cnt + + util.log "[#{index + 1}/#{files.length}] #{file}" + + process() if --remaining is 0 + process = -> + util.log "Creating #{builddir}/#{targetfile}.js" + + code = contents.join "\n\n" + fs.unlink builddir, -> + fs.mkdir builddir, 0755, -> + fs.writeFile "#{builddir}/#{targetfile}.js", code, 'utf8', (err) -> + console.log err if err + try + util.log "Creating #{builddir}/#{targetfile}.min.js" + {parser, uglify} = require 'uglify-js' + ast = parser.parse code + code = uglify.gen_code uglify.ast_squeeze uglify.ast_mangle ast, extra: yes + fs.writeFile "#{builddir}/#{targetfile}-min.js", code + +task 'build', 'Compile', -> + invoke 'build:browser' diff --git a/package.json b/package.json new file mode 100644 index 0000000000..f64ecbc057 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "melonJS", + "version": "0.9.2", + "description": "MelonJS Game Engine", + + "homepage": "http://www.melonjs.org/", + "repositories": [ + { + "type": "git", + "url": "https://github.com/obiot/melonJS" + } + ], + + "licenses": [ + { + "type": "Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License", + "url": "http://creativecommons.org/licenses/by-nc-sa/3.0/" + } + ], + + "author": { + "name": "Olivier Biot", + "email": "?" + }, + + "engines": { + "node": ">0.4 <0.6" + }, + + "dependencies": { + "coffee-script": ">1 <2", + "uglify-js": "1.1.0" + } +} diff --git a/src/version.js b/src/version.js new file mode 100644 index 0000000000..e97364a5c7 --- /dev/null +++ b/src/version.js @@ -0,0 +1 @@ +module.exports = '0.9.2'; From 237d7f852c132e51419c3804ec50c7ed561a0fa7 Mon Sep 17 00:00:00 2001 From: Tom Streller Date: Tue, 11 Oct 2011 20:27:41 +0200 Subject: [PATCH 09/87] makefile now takes version from src/version.js --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b1c263b329..21ec32b24b 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,8 @@ buildir = build/ docdir = docs/ # CURRENT BUILD VERSION -ME_VER=$(shell cat $(srcdir)version.txt) -VERSION=sed "s/@VERSION/${VERSION}/"' +ME_VER=$(shell cat src/version.js | sed -re "s/.*'([0-9].[0-9].[0-9])'.*/\1/") +VERSION=sed "s/@VERSION/${VERSION}/" # list of module to compile MODULE = $(srcdir)core.js\ @@ -90,4 +90,4 @@ doc: java -jar $(JSDOC_PATH)/jsrun.jar $(JSDOC_PATH)/app/run.js -a -t=$(JSDOC_PATH)/templates/melonjs $(DEBUG) $(JSDOC_OPTION) -####################################################################### \ No newline at end of file +####################################################################### From d763b0e8a5b9f4069cf1cf841e3958a764002077 Mon Sep 17 00:00:00 2001 From: obiot Date: Wed, 12 Oct 2011 09:05:10 +0800 Subject: [PATCH 10/87] made it work, and removed the (now) useless version.txt --- Makefile | 2 +- src/version.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 src/version.txt diff --git a/Makefile b/Makefile index 21ec32b24b..deb434c405 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ buildir = build/ docdir = docs/ # CURRENT BUILD VERSION -ME_VER=$(shell cat src/version.js | sed -re "s/.*'([0-9].[0-9].[0-9])'.*/\1/") +ME_VER=$(shell cat $(srcdir)version.js | sed "s/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/") VERSION=sed "s/@VERSION/${VERSION}/" # list of module to compile diff --git a/src/version.txt b/src/version.txt deleted file mode 100644 index 2003b639c4..0000000000 --- a/src/version.txt +++ /dev/null @@ -1 +0,0 @@ -0.9.2 From f174028dfd14d44d508587039e18ffa0fb37dfd2 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 18 Oct 2011 23:37:22 +0800 Subject: [PATCH 11/87] Corrected a typo error (issue #22), and asset type for the title screen (should have been png) --- tutorial/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial/index.html b/tutorial/index.html index 6a00074731..bb4c5b447f 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -769,9 +769,9 @@

Part 5: Adding some basic objects and enemies

return false; if (this.alive) { - if (this.walkLeft && this.pos.x < = this.startX) { + if (this.walkLeft && this.pos.x <= this.startX) { this.walkLeft = false; - } else if (!this.walkLeft && this.pos.x > = this.endX) { + } else if (!this.walkLeft && this.pos.x >= this.endX) { this.walkLeft = true; } @@ -1266,7 +1266,7 @@

Part 8: Adding a second level

Part 9: Adding a title screen

-

To finish, let's add a title screen to our game, using the title_screen.jpg +

To finish, let's add a title screen to our game, using the title_screen.png files in the "/data/GUI" folder (and of course to be added in the ressource list, as we done it previously for other images) : Title screen and on top of it we will add some message, and wait for the user input to start the game !

From 889d03e975726497ef02581b46d1541b11cbb10c Mon Sep 17 00:00:00 2001 From: obiot Date: Wed, 19 Oct 2011 00:09:42 +0800 Subject: [PATCH 12/87] Added melonJS UML Class Diagram (big thx to Ben2303 for this) --- uml/diagram.uxf.xml | 825 ++++++++++++++++++++++++++++++++++++++++++++ uml/melonJS.mm | 173 ++++++++++ 2 files changed, 998 insertions(+) create mode 100644 uml/diagram.uxf.xml create mode 100644 uml/melonJS.mm diff --git a/uml/diagram.uxf.xml b/uml/diagram.uxf.xml new file mode 100644 index 0000000000..4f08821729 --- /dev/null +++ b/uml/diagram.uxf.xml @@ -0,0 +1,825 @@ + + + 8 + + com.umlet.element.Class + + 512 + 536 + 240 + 64 + + AnimatedSpriteObject +-- +AnimatedSpriteObject(x, y, image, spritewidth) +update() //called by the game manager +-- +{me.loader#getImage} image + + + + + com.umlet.element.Class + + 880 + 72 + 272 + 32 + + /Object/ +-- +JavaScript Inheritance Helper +bg=light_gray +fg=white + + + + com.umlet.element.Class + + 512 + 368 + 240 + 136 + + SpriteObject +-- +SpriteObject(x, y, image) +destroy() +draw() +flix(flip) +flipy(flip) +onDestroyEvent() +update() //called by the game manager +-- +{me.loader#getImage} image + + + + + com.umlet.element.Class + + 328 + 176 + 144 + 152 + + Rect +-- +Rect(Vector2d v, int w, int h) +set(Vector 2d v, int w, int h) +-- +bottom int +height int +left int +Vector2d pos +right int +top int +width int + + + + + com.umlet.element.Class + + 512 + 624 + 240 + 104 + + AnimationSheet +-- +AnimationSheet(name, frame) +addAnimation(name, frame) +isCurrentAnimation(name) +setCurrentAnimation(name, onComplete) +update() //called by the game manager + + + + + com.umlet.element.Class + + 776 + 176 + 144 + 168 + + Font +-- +Font(font, size, color, align) +-- +bold() +draw(context, text, x, y) +italic() +measureText(text, text) +set(font, size, color, align) +-- +font string +size int +color string +align string + + + + + com.umlet.element.Class + + 776 + 384 + 144 + 136 + + BitmapFont +-- +BitmapFont(font, size, scale, firstChar) +draw(context, text, x, y) +measureText(text, text) +set(align, scale) +-- +{String} font +{int} size +{int} scale Optional, Default: "1.0" +{String} firstChar Optional, Default: "0x20" + + + + com.umlet.element.Class + + 512 + 760 + 240 + 200 + + ObjectEntity +-- +ObjectEntity(x, y, settings) +doClimb(up) +doJump() +doWalk(left) +flicker(duration, callback) +forceJump() +onCollision(res, obj) +setVelocity(x, y) +updateCollRect(x, w, y, h) +updateMovement() +-- +{int} x the x coordinates of the sprite object +{int} y the y coordinates of the sprite object +{me.ObjectSettings} settings Object Properties as defined in Tiled + + + + com.umlet.element.Class + + 856 + 880 + 80 + 80 + + ObjectSettings +-- +collidable +image +spriteWidth +type +bg=white +fg=gray + + + + com.umlet.element.Relation + + 728 + 760 + 144 + 160 + + lt=<. +<<include>> + 128;144;24;24 + + + com.umlet.element.Class + + 512 + 1008 + 240 + 40 + + CollectableEntity +-- +CollectableEntity(x, y, settings) + + + + + + com.umlet.element.Relation + + 728 + 912 + 144 + 128 + + lt=<. +<<include>> + 128;24;24;112 + + + com.umlet.element.Class + + 1456 + 584 + 152 + 168 + + Audio +-- +audio() +enable() +init(audioFormat) +isAudioEnable() +pause(sound_id) +pauseTrack() +play(sound_id, loop, callback) +playTrack(sound_id) +resumeTrack(sound_id) +stop(sound_id) +stopTrack() + + + + com.umlet.element.Class + + 200 + 48 + 80 + 24 + + debug + + + + com.umlet.element.Class + + 1280 + 120 + 280 + 72 + + entityPool +-- +add(className, object) +-- +{String} className as defined in the Name fied of the Object Properties (in Tiled) +{Object} object corresponding Object to be instanciated + + + + com.umlet.element.Relation + + 1128 + 64 + 168 + 104 + + lt=<. +<<include>> + 24;24;152;88 + + + com.umlet.element.Class + + 1568 + 120 + 248 + 384 + + game +-- +add() +addEntity() +addHUD(x, y, w, h, bg) +colllide(obj) +disableHUD() +init(x, y, width, height) +remove() +removeAll() +repaint() +reset() +sort() +-- +<constant> ACTION_OBJECT +Default object type constant. +See type property of the returned collision vector. +<constant> COLLECTABLE_OBJECT +Default object type constant. +See type property of the returned collision vector. +{me.TiledLayer} collisionMap +a reference to the game collision Map +{me.TMXTileMap} currentLevel +a reference to the game current level +<constant> ENEMY_OBJECT +Default object type constant. +See type property of the returned collision vector. +{me.HUD_Object} HUD +a reference to the game HUD (if defined). +{me.ViewportEntity} viewport +a reference to the game viewport. + + + + com.umlet.element.Class + + 200 + 24 + 80 + 24 + + gamestat + + + + com.umlet.element.Class + + 936 + 176 + 120 + 112 + + HUD_Item +-- +HUD_Item(x, y, val) +draw(context, x, y) +init(x, y, val) +reset() +update(value) +-- +{me.Vector2d} pos +{Int} value + + + + com.umlet.element.Class + + 1656 + 512 + 160 + 120 + + input +-- +bindKey(keycode, action, lock) +enableGyroscopicEvent() +enableMouseEvent() +isKeyPressed() +keyStatus() +unbindKey() +-- +KEY + + + + com.umlet.element.Class + + 304 + 368 + 160 + 104 + + InvisibleEntity +-- +InvisibleEntity(x, y, settings) +onCollision(res, obj) +updateColRect(x, w, y, h) +-- +{int} x +{int} y +{me.ObjectSettings} settings + + + + + com.umlet.element.Class + + 1456 + 416 + 104 + 80 + + levelDirector +-- +getCurrentLevelId() +loadLevel(level) +nextLevel +previousLevel() + + + + + com.umlet.element.Class + + 304 + 512 + 160 + 104 + + LevelEntity +-- +LevelEntity(x, y, settings) +goTo(level) +-- +{int} x +{int} y +{me.ObjectSettings} settings + + + + + com.umlet.element.Class + + 1032 + 384 + 120 + 120 + + loader +-- +getImage(image) +getLoadProgree() +getXml(xmlfile) +preload(ressources) +-- +onload +{String} Image +{Array.} ressources + + + + com.umlet.element.Class + + 0 + 176 + 192 + 88 + + ParallaxBackgroundEntity +-- +ParallaxBackgroundEntity(z) +addLayer(imagesrc, speed, zOrder) +draw(context, x, y) +update() //this method is called by the @see me.game object +-- +{int} z Optional, Default: "0" + + + + com.umlet.element.Class + + 1072 + 176 + 136 + 96 + + ScreenObject +-- +ScreenObject() +draw() +init(addAdObject) +onDestroyEvent() +onResetEvent(arguments) +update() + + + + com.umlet.element.Class + + 1280 + 416 + 168 + 232 + + state +-- +change(state, args) +isCurrent(state) +pause(pauseTrack) +resume(resumeTrack) +set(state, so) +setTransition() +transition(effect, color, duration) +-- +<constant> CREDITS +<constant> GAME_END +<constant> GAMEOVER +<constant> LOADING +<constant> MENU +<constant> PLAY +<constant> READY +<constant> SCORE +<constant> SETTINGS + + + + + + com.umlet.element.Class + + 976 + 904 + 160 + 120 + + sys +-- +<static> fps +<static> gyro +<static> interpolation +<static> scale +<static> sound +<static> storage +<static> ua +<static> useNativeAnimFrame + + + + + + com.umlet.element.Class + + 1456 + 512 + 104 + 64 + + timer +-- +timer() +getTime() +-- +tick + + + + com.umlet.element.Class + + 200 + 72 + 80 + 24 + + Tween + + + + com.umlet.element.Class + + 120 + 24 + 80 + 24 + + Vector2d + + + + com.umlet.element.Class + + 1280 + 200 + 280 + 208 + + video +-- +video() +applyEffect(effect, option) +blitSurface() +clearSurface(context, col) +createCanvasSurface(width, height) +getHeight() +getScreenCanvas() +getScreenFrameBuffer() +getWidth() +getWrapper() +init(wrapper, width, height, double_buffering, scale) +scale(context, scale) +setAlpha(context, enable) +updateDisplaySize(scale) + + + + com.umlet.element.Class + + 0 + 368 + 264 + 216 + + ViewportEntity +-- +ViewportEntity(minX, minY, maxX, maxY, realw, realh) +fadeIn(color, duration, onComplete) +fadeOut(color, duration, onComplete) +fadeOut(flash) effect +follow(Object, axis) +getHeight() +getWidth() +isVisible(rect) +move(x, y) +reset(x, y) +setBounds(w, h) +setDeadzone(w, h) +shake(intensity, duration, axis, onComplete) +-- +AXIS + + + + com.umlet.element.Class + + 120 + 48 + 80 + 24 + + Number + + + + com.umlet.element.Class + + 120 + 72 + 80 + 24 + + String + + + + com.umlet.element.Relation + + 208 + 264 + 136 + 120 + + lt=<<- + 120;24;24;24;24;104 + + + com.umlet.element.Relation + + 360 + 304 + 40 + 80 + + lt=<<- + 24;24;24;64 + + + com.umlet.element.Relation + + 448 + 272 + 208 + 112 + + lt=<<- + 24;24;192;24;192;96 + + + com.umlet.element.Relation + + 360 + 448 + 40 + 80 + + lt=<<- + 24;24;24;64 + + + com.umlet.element.Relation + + 608 + 480 + 40 + 72 + + lt=<<- + 24;24;24;56 + + + com.umlet.element.Relation + + 608 + 576 + 40 + 64 + + lt=<<- + 24;24;24;48 + + + com.umlet.element.Relation + + 608 + 704 + 40 + 72 + + lt=<<- + 24;24;24;56 + + + com.umlet.element.Relation + + 608 + 936 + 40 + 88 + + lt=<<- + 24;24;24;72 + + + com.umlet.element.Relation + + 376 + 64 + 520 + 128 + + lt=<<- + 504;24;24;24;24;112 + + + com.umlet.element.Relation + + 872 + 80 + 40 + 112 + + lt=<<- + 24;24;24;96 + + + com.umlet.element.Relation + + 976 + 80 + 40 + 112 + + lt=<<- + 24;24;24;96 + + + com.umlet.element.Relation + + 1072 + 80 + 40 + 112 + + lt=<<- + 24;24;24;96 + + + com.umlet.element.Relation + + 824 + 320 + 40 + 80 + + lt=<<- + 24;24;24;64 + + + com.umlet.element.Note + + 1272 + 96 + 592 + 16 + + Namespace me + + + + com.umlet.element.Relation + + 168 + 200 + 176 + 40 + + lt=<<- + 160;24;24;24 + + diff --git a/uml/melonJS.mm b/uml/melonJS.mm new file mode 100644 index 0000000000..392567c5ab --- /dev/null +++ b/uml/melonJS.mm @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Object -> Rect -> SpriteObject +

+

+ AnimationSheet (that would implement various texture/sprite format) +

+

+ ObjectEntity, that implements, SpriteObject & AnimationSheet +

+

+ +

+

+ All entities should have a common ancestor (hence some renaming) +

+

+ About renaming (blue labels), I think more is needed. +

+

+ +

+

+ HUD_Item is a little lonely, maybe attache all hud items to a hub object. +

+

+ +

+

+ Should put a special color for singletons. +

+

+ +

+

+ On a side note, maybe several canvas may help (didn't check if it's already done): +

+

+ - 1 canvas for tilemap +

+

+ - 1 canvas for sprites +

+

+ - 1 canvas for particules +

+

+ +

+

+ game object, add constant{} container +

+

+ use it for directions so doWalk() like things can be clarified +

+

+ +

+

+ replace arrays with vectors (need to find a good js vector lib or make one without forgetting fast element removal (switch last item with removed one instead of moving aaaaalllll the other elems)) +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
From a7c09820a661495ddb09a6de29a69d162be41c30 Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 21 Oct 2011 20:35:35 +0800 Subject: [PATCH 13/87] Fixed the "shaking" bug when the collision box was not bottom- aligned with the sprite (you can't fall when there is no gravity...) --- src/entity/entity.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index f71f933b35..6c60b2d90e 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -1099,7 +1099,7 @@ // console.log(this.jumpspeed); } // else apply a constant gravity - else if (!this.onladder) { + else if (!this.onladder && this.gravity) { //this.jumping = false this.falling = true; this.vel.y += (this.gravity * me.timer.tick); From 0afc2599075954fbafc4fc1d0ad11b039ce31d6b Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 23 Oct 2011 13:45:32 +0800 Subject: [PATCH 14/87] Added a setValue function to the gamestat object, thx to jwrnr for the suggestion and code :) Added a setValue function to the gamestat object, thx to jwrnr for suggestion & code :) http://groups.google.com/group/melonjs/browse_thread/thread/4516157ce106 8af1 --- src/utils/stat.js | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/utils/stat.js b/src/utils/stat.js index 0bab7d2c2b..c31a2d915b 100644 --- a/src/utils/stat.js +++ b/src/utils/stat.js @@ -23,8 +23,7 @@ this.defaultvalue = val || 0; this.value = val || 0; this.updated = true; - } - ; + }; /* ---- @@ -33,8 +32,7 @@ --- */ Stat_Item.prototype.reset = function() { - this.value = this.defaultvalue; - this.updated = true; + this.set(this.defaultvalue); }; /* ---- @@ -43,11 +41,18 @@ --- */ - Stat_Item.prototype.update = function(value) { - this.value += value; - this.updated = true; - return this.updated; + Stat_Item.prototype.update = function(val) { + return this.set(this.value + val); }; + + /** + * Sets the value of an item + */ + Stat_Item.prototype.set = function(value) { + this.value = value; + this.updated = true; + return this.updated; + }; /*---------------------------------------------------------*/ @@ -105,14 +110,31 @@ * @param {String} name name of the item * @param {int} val value to be added * @example - * // update the"stars" item + * // update the "stars" item * me.gamestat.updateValue("stars", 1); */ singleton.updateValue = function(name, value) { if (items[name]) items[name].update(value); }; + + /** + * set value of an item + * @name me.gamestat#setValue + * @public + * @function + * @param {String} name name of the item + * @param {int} val value to be set + * @example + * // set the"stars" item + * me.gamestat.setValue("stars", 1); + */ + singleton.setValue = function(name, value) { + if (items[name]) + items[name].set(value); + }; + /** * return an item value * @name me.gamestat#getItemValue From 257627e0238a4f35523a452598d4bfe7dc1969d5 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 23 Oct 2011 21:41:50 +0800 Subject: [PATCH 15/87] Also add a setItemValue() function for HUD Object Items. --- src/GUI/HUD.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/GUI/HUD.js b/src/GUI/HUD.js index 4dc709470c..0b9e143237 100644 --- a/src/GUI/HUD.js +++ b/src/GUI/HUD.js @@ -81,8 +81,16 @@ * reset the item to the default value */ reset : function() { - this.value = this.defaultvalue; + this.set(this.defaultvalue); + }, + + /** + * set the item value to the specified one + */ + set : function(value) { + this.value = value; this.updated = true; + return true; }, /** @@ -90,9 +98,7 @@ * @param {int} value add the specified value */ update : function(value) { - this.value += value; - this.updated = true; - return this.updated; + return this.set(this.value + value); }, /** @@ -161,13 +167,21 @@ this.objCount++; this.HUD_invalidated = true; }, + + /** + * set the value of an item + */ + setItemValue : function(name) { + if (this.HUDItems[name] && (this.HUDItems[name].set(value) == true)) + this.HUD_invalidated = true; + }, + /** * update the value of an item */ updateItemValue : function(name, value) { - if (this.HUDItems[name] - && (this.HUDItems[name].update(value) == true)) + if (this.HUDItems[name] && (this.HUDItems[name].update(value) == true)) this.HUD_invalidated = true; }, @@ -175,10 +189,10 @@ * get the value of an item */ getItemValue : function(name) { - return (this.HUDItems[name]) ? this.HUDItems[name].value - : 0; + return (this.HUDItems[name]) ? this.HUDItems[name].value : 0; }, - + + /** * return true if the HUD has been updated */ From 7cc807fe84800d506dbf29eaaf23934a35f69a99 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 25 Oct 2011 20:15:37 +0800 Subject: [PATCH 16/87] Fixed collision detection bug, or how to forget to uncomment something that SHOULD be uncommented..... anyway thanks to Tibor for pointing out this ! --- src/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core.js b/src/core.js index 850a0d800f..f065c51cd8 100755 --- a/src/core.js +++ b/src/core.js @@ -1339,7 +1339,7 @@ // this should be replace by a list of the 4 adjacent cell around the object requesting collision for ( var i = objCount, obj; i--, obj = gameObjects[i];)//for (var i = objlist.length; i-- ;) { - if (obj.visible && obj.collidable && obj.isEntity)// && (obj!=objB)) + if (obj.visible && obj.collidable && obj.isEntity && (obj!=objB)) { // if return value != null, we have a collision if (result = obj.checkCollision(objB)) From 4e569d4ecaec0370e8c85ff32a840ff805f5991d Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 29 Oct 2011 21:10:25 +0800 Subject: [PATCH 17/87] Added the possibility to configure the engine behavior in case of audio loading error (Issue #27) by default the engine will stop, but it's however now possible to continue loading by setting the me.sys.stopOnAudioError flag to false (before the preloader), sound will then be disable. --- src/audio/audio.js | 23 +++++++++++++++++------ src/core.js | 13 +++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/audio/audio.js b/src/audio/audio.js index 513ab5d700..4980f6fac7 100644 --- a/src/audio/audio.js +++ b/src/audio/audio.js @@ -139,15 +139,26 @@ function soundLoadError(sound_id) { // check the retry counter if (retry_counter++ > 3) { - // what the hell ...? - throw "melonJS: failed loading audio: " + sound_id + "." - + activeAudioExt; + // something went wrong + var errmsg = "melonJS: failed loading " + sound_id + "." + activeAudioExt; + if (me.sys.stopOnAudioError===false) { + // disable audio + me.audio.disable(); + // call load callback if defined + if (load_cb) { + load_cb(); + } + // warning + console.log(errmsg + ", disabling audio"); + } else { + // throw an exception and stop everything ! + throw errmsg; + } + // else try loading again ! } else { - // reload ! audio_channels[sound_id][0].load(); } - } - ; + }; /* * --- diff --git a/src/core.js b/src/core.js index f065c51cd8..c0616b6e46 100755 --- a/src/core.js +++ b/src/core.js @@ -160,8 +160,17 @@ * @type {Boolean} * @memberOf me.sys */ - enableWebGL : false - + enableWebGL : false, + + /** + * Specify either to stop on audio loading error or not
+ * if me.debug.stopOnAudioLoad is true, melonJS will throw an exception and stop loading
+ * if me.debug.stopOnAudioLoad is false, melonJS will disable sounds and output a warning message in the console
+ * default value : true
+ * @type {Boolean} + * @memberOf me.sys + */ + stopOnAudioError : true }; // add me to the global window variable From 35c4ccc7cd3d03914be5bc619fef1e7a5f004667 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 31 Oct 2011 20:18:04 +0800 Subject: [PATCH 18/87] Added : function to load additional resource (limited to Image type for now) when a level is already loaded --- src/loader/loader.js | 46 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/loader/loader.js b/src/loader/loader.js index e65bbd662c..ebe109b63e 100644 --- a/src/loader/loader.js +++ b/src/loader/loader.js @@ -174,19 +174,19 @@ preloadImages( [{name: 'image1', src: 'images/image1.png'}, - {name: 'image1', src: 'images/image1.png'}, - {name: 'image1', src: 'images/image1.png'}, - {name: 'image1', src: 'images/image1.png'}]); + {name: 'image2', src: 'images/image2.png'}, + {name: 'image3', src: 'images/image3.png'}, + {name: 'image4', src: 'images/image4.png'}]); --- */ - function preloadImage(img) { + function preloadImage(img, onload, onerror) { // create new Image object and add to array imgList.push(img.name); imgList[img.name] = new Image(); - imgList[img.name].onload = obj.onResourceLoaded.bind(obj); - imgList[img.name].onerror = onImageError.bind(this); + imgList[img.name].onload = onload || obj.onResourceLoaded.bind(obj); + imgList[img.name].onerror = onerror || onImageError.bind(this); imgList[img.name].src = img.src + me.nocache; } ; @@ -333,7 +333,7 @@ break; default: - throw "melonJS: loader : unknow resource type : %s" + throw "melonJS: me.loader.preload : unknow resource type : %s" + res[i].type; break; } @@ -344,6 +344,38 @@ checkLoadStatus(); }; + /** + * Load a single resource (to be used if you need to load additional resource during the game)
+ * Given parmeter must contain the following fields :
+ * - name : internal name of the resource
+ * - type : only "image" supported
+ * - src : path and file name of the resource
+ * @name me.loader#load + * @public + * @function + * @param {Object} resource + * @param {Function} onload function to be called when the resource is loaded + * @param {Function} onerror function to be called in case of error + * @example + * // load a image asset + * me.loader.load({name: "avatar", type:"image", src: "data/avatar.png"}, this.onload.bind(this), this.onerror.bind(this)); + */ + + obj.load = function(res, onload, onerror) { + // check ressource type + switch (res.type) { + case "image": + // reuse the preloadImage fn + preloadImage(res, onload, onerror); + break; + + default: + throw "melonJS: me.loader.load : unknow or invalide resource type : %s" + res.type; + break; + }; + }; + + /** * return the specified XML object * @name me.loader#getXML From 882db486cf792847007f79407bf34c6aab0f3ada Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 31 Oct 2011 20:24:03 +0800 Subject: [PATCH 19/87] Also ignore the "docs" directory when tracking changes --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7a374e4cfb..20292ba6e7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ Desktop.ini add-on/ node_modules/ build/ +docs/ # Vim swap files *.sw* From 42a9e377dc6e248fa10896e1aa79b5fa66cbe19a Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 31 Oct 2011 21:06:05 +0800 Subject: [PATCH 20/87] Added required comments for proper documentation generation of the HUD_Object --- src/GUI/HUD.js | 353 ++++++++++++++++++++++++++++++------------------- 1 file changed, 215 insertions(+), 138 deletions(-) diff --git a/src/GUI/HUD.js b/src/GUI/HUD.js index 0b9e143237..d6cf005536 100644 --- a/src/GUI/HUD.js +++ b/src/GUI/HUD.js @@ -118,146 +118,223 @@ }); /*---------------------------------------------------------*/ - /* ----- - - a Simple HUD object - - ------ */ - HUD_Object = me.Rect - .extend({ - /** - * Constructor - */ - init : function(x, y, w, h, bg) { - // call the parent constructor - this.parent(new me.Vector2d(x || 0, y || 0), w - || me.video.getWidth(), h || me.video.getHeight()); - - // default background color (if specified) - this.bgcolor = bg; - - // hold all the items labels - this.HUDItems = {}; - // hold all the items objects - this.HUDobj = []; - // Number of items in the HUD - this.objCount = 0; - - // visible or not... - this.visible = true; - - // state of HUD (to trigger redraw); - this.HUD_invalidated = true; - - // create a canvas where to draw everything - HUDCanvasSurface = me.video.createCanvasSurface(this.width, - this.height); - - // this is a little hack to ensure the HUD is always the first draw - this.z = 999; - - }, - - /** - * add an item to the HUD Object - */ - addItem : function(name, item) { - this.HUDItems[name] = item; - this.HUDobj.push(this.HUDItems[name]); - this.objCount++; - this.HUD_invalidated = true; - }, - - /** - * set the value of an item - */ - setItemValue : function(name) { - if (this.HUDItems[name] && (this.HUDItems[name].set(value) == true)) - this.HUD_invalidated = true; - }, - - - /** - * update the value of an item - */ - updateItemValue : function(name, value) { - if (this.HUDItems[name] && (this.HUDItems[name].update(value) == true)) - this.HUD_invalidated = true; - }, - - /** - * get the value of an item - */ - getItemValue : function(name) { - return (this.HUDItems[name]) ? this.HUDItems[name].value : 0; - }, - - - /** - * return true if the HUD has been updated - */ - update : function() { - return this.HUD_invalidated; - }, - - /** - * reset the item to it's default value - */ - reset : function(name) { - if (this.HUDItems[name]) - this.HUDItems[name].reset(); - this.HUD_invalidated = true; - }, - - /** - * reset all items to their default value - */ - resetAll : function() { - for ( var i = this.objCount, obj; i--, obj = this.HUDobj[i];) { - obj.reset(); - } - this.HUD_invalidated = true; - }, - - /** - * override the default me.Rect get Rectangle definition - * since the HUD if a flaoting object - * (is this correct?) - * @return {me.Rect} new rectangle - */ - - getRect : function() { - p = this.pos.clone(); - p.add(me.game.viewport.pos); - return new me.Rect(p, this.width, this.height); - }, - - /** - * draw the HUD - */ - draw : function(context) { - //console.log("draw HUD"); - if (this.HUD_invalidated) { - if (this.bgcolor) - me.video.clearSurface(HUDCanvasSurface, - this.bgcolor); - else - HUDCanvasSurface.canvas.width = HUDCanvasSurface.canvas.width; - - for ( var i = this.objCount, obj; i--, - obj = this.HUDobj[i];) { - if (obj.visible) { - obj.draw(HUDCanvasSurface, 0, 0); - } - } + /** + * HUD Object
+ * There is no constructor function for me.HUD_Object
+ * Object instance is accessible through me.game.HUD if previously initialized using me.game.addHUD(...); + * @class + * @extends Object + * @memberOf me + * @example + * // create a "score object" that will use a Bitmap font + * // to display the score value + * ScoreObject = me.HUD_Item.extend( + * { + * // constructor + * init: function(x, y) + * { + * // call the parent constructor + * this.parent(x, y); + * // create a font + * this.font = new me.BitmapFont("font16px", 16); + * }, + * // draw function + * draw : function (context, x, y) + * { + * this.font.draw (context, this.value, this.pos.x +x, this.pos.y +y); + * } + * }); + * + * // add a default HUD to the game mngr (with no background) + * me.game.addHUD(0,0,480,100); + * // add the "score" HUD item + * me.game.HUD.addItem("score", new ScoreObject(470,10)); + */ + + + HUD_Object = me.Rect.extend( + /** @scope me.HUD_Object.prototype */ + { + /** + * @Constructor + * @private + */ + init : function(x, y, w, h, bg) { + // call the parent constructor + this.parent(new me.Vector2d(x || 0, y || 0), w + || me.video.getWidth(), h || me.video.getHeight()); + + // default background color (if specified) + this.bgcolor = bg; + + // hold all the items labels + this.HUDItems = {}; + // hold all the items objects + this.HUDobj = []; + // Number of items in the HUD + this.objCount = 0; + + // visible or not... + this.visible = true; + + // state of HUD (to trigger redraw); + this.HUD_invalidated = true; + + // create a canvas where to draw everything + HUDCanvasSurface = me.video.createCanvasSurface(this.width, + this.height); + + // this is a little hack to ensure the HUD is always the first draw + this.z = 999; + + }, + + /** + * add an item to the me.game.HUD Object + * @name me.HUD_Object#addItem + * @public + * @function + * @param {String} name name of the item + * @param {me.HUD_Item} item HUD Item to be added + * @example + * // add a "score" HUD item + * me.game.HUD.addItem("score", new ScoreObject(470,10)); + */ + addItem : function(name, item) { + this.HUDItems[name] = item; + this.HUDobj.push(this.HUDItems[name]); + this.objCount++; + this.HUD_invalidated = true; + }, + + /** + * set the value of the specified item + * @name me.HUD_Object#setItemValue + * @public + * @function + * @param {String} name name of the item + * @param {int} val value to be set + * @example + * // set the "score" item value to 100 + * me.game.HUD.setItemValue("score", 100); + */ + setItemValue : function(name, value) { + if (this.HUDItems[name] && (this.HUDItems[name].set(value) == true)) + this.HUD_invalidated = true; + }, + + + /** + * update (add) the value of the specified item + * @name me.HUD_Object#updateItemValue + * @public + * @function + * @param {String} name name of the item + * @param {int} val value to be set + * @example + * // add 10 to the current "score" item value + * me.game.HUD.setItemValue("score", 10); + */ + updateItemValue : function(name, value) { + if (this.HUDItems[name] && (this.HUDItems[name].update(value) == true)) + this.HUD_invalidated = true; + }, + + /** + * return the value of the specified item + * @name me.HUD_Object#getItemValue + * @public + * @function + * @param {String} name name of the item + * @return {int} + * @example + * // return the value of the "score" item + * score = me.game.HUD.getItemValue("score"); + */ + getItemValue : function(name) { + return (this.HUDItems[name]) ? this.HUDItems[name].value : 0; + }, + + + /** + * return true if the HUD has been updated + * @private + */ + update : function() { + return this.HUD_invalidated; + }, + + /** + * reset the specified item to default value + * @name me.HUD_Object#reset + * @public + * @function + * @param {String} [name="all"] name of the item + */ + reset : function(name) { + if (name != undefined) { + // only reset the specified one + if (this.HUDItems[name]) + this.HUDItems[name].reset(); + this.HUD_invalidated = true; + } else { + // reset everything + singleton.resetAll(); + } + }, + + /** + * reset all items to default value + * @private + */ + resetAll : function() { + for ( var i = this.objCount, obj; i--, obj = this.HUDobj[i];) { + obj.reset(); + } + this.HUD_invalidated = true; + }, + + /** + * override the default me.Rect get Rectangle definition + * since the HUD if a flaoting object + * (is this correct?) + * @private + * @return {me.Rect} new rectangle + */ + + getRect : function() { + p = this.pos.clone(); + p.add(me.game.viewport.pos); + return new me.Rect(p, this.width, this.height); + }, + + /** + * draw the HUD + * @private + */ + draw : function(context) { + //console.log("draw HUD"); + if (this.HUD_invalidated) { + if (this.bgcolor) + me.video.clearSurface(HUDCanvasSurface, + this.bgcolor); + else + HUDCanvasSurface.canvas.width = HUDCanvasSurface.canvas.width; + + for ( var i = this.objCount, obj; i--, + obj = this.HUDobj[i];) { + if (obj.visible) { + obj.draw(HUDCanvasSurface, 0, 0); } - // draw the HUD - context.drawImage(HUDCanvasSurface.canvas, this.pos.x, - this.pos.y); - // reset the flag - this.HUD_invalidated = false; } - }); + } + // draw the HUD + context.drawImage(HUDCanvasSurface.canvas, this.pos.x, + this.pos.y); + // reset the flag + this.HUD_invalidated = false; + } + }); // expose our stuff to the global scope $.me.HUD_Item = HUD_Item; From 77e5d36f96055bb62c0fa294cf47795422c58960 Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 4 Nov 2011 18:33:38 +0800 Subject: [PATCH 21/87] Added a method to indicate the sign of a number --- src/core.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core.js b/src/core.js index c0616b6e46..b651128da9 100755 --- a/src/core.js +++ b/src/core.js @@ -605,6 +605,15 @@ return "0123456789ABCDEF".charAt((this - this % 16) >> 4) + "0123456789ABCDEF".charAt(this % 16); }; + + /** + * Returns a value indicating the sign of a number
+ * @extends Number + * @return {Number} sign of a the number + */ + Number.prototype.sign = function() { + return this < 0 ? -1 : (this > 0 ? 1 : 0); + } /************************************************************************************/ From 84c4361170753ecf93e9ab5b13c6ad57929c013a Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 4 Nov 2011 18:57:27 +0800 Subject: [PATCH 22/87] Added basic friction management, refactored some code, and added some missing function "documentation" Thanks to Anthony for the original math (see http://groups.google.com/group/melonjs/browse_thread/thread/2411bab21954 9753) --- src/entity/entity.js | 156 ++++++++++++++++++++++++++----------------- src/utils/utils.js | 5 ++ 2 files changed, 100 insertions(+), 61 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 6c60b2d90e..1b44199678 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -821,8 +821,7 @@ this.name = settings.name; // adjust initial coordinates should be bottom left ones - this.pos.set(x, y + me.game.currentLevel.tileheight - - this.height); + this.pos.set(x, y + me.game.currentLevel.tileheight - this.height); // velocity to be applied on player movement this.vel = new me.Vector2d(); @@ -830,6 +829,9 @@ // default speed this.accel = new me.Vector2d(); + // default friction (0,0) + this.friction = new me.Vector2d(); + // max velocity to be applied on entity movement this.maxVel = new me.Vector2d(1000,1000); @@ -921,7 +923,8 @@ }, /** - * set the player default velocity
+ * set the entity default velocity
+ * note : velocity is by default limited to the same value, see setMaxVelocity if needed
* @param {Int} x velocity on x axis * @param {Int} y velocity on y axis * @protected @@ -930,9 +933,11 @@ setVelocity : function(x, y) { this.accel.x = (x != 0) ? x : this.accel.x; this.accel.y = (x != 0) ? y : this.accel.y; + + // limit by default to the same max value + this.setMaxVelocity(x,y); }, - /** * cap the entity velocity to the specified value
* (!) this will only cap the y velocity for now(!) @@ -946,7 +951,20 @@ }, /** - * make the player move left of right + * set the entity default friction
+ * @param {Int} x horizontal friction + * @param {Int} y vertical friction + * @protected + */ + setFriction : function(x, y) { + this.friction.x = x || 0; + this.friction.y = y || 0; + }, + + + /** + * helper function for platform games:
+ * make the entity move left of right
* @param {Boolean} left * @protected * @example @@ -961,12 +979,12 @@ */ doWalk : function(left) { this.flipX(left); - this.vel.x = (left) ? -this.accel.x * me.timer.tick - : this.accel.x * me.timer.tick; + this.vel.x += (left) ? -this.accel.x * me.timer.tick : this.accel.x * me.timer.tick; }, /** - * make the player move up and down
+ * helper function for platform games:
+ * make the entity move up and down
* only valid is the player is on a ladder * @param {Boolean} up * @protected @@ -990,25 +1008,12 @@ return false; }, + /** - * return the distance to the specified entity - * @param {me.ObjectEntity} entity Entity - * @return {float} distance + * helper function for platform games:
+ * make the entity jump
+ * @protected */ - distanceTo: function(o) - { - // the Vector object also implements the same function, but - // we have to use here the center of both object - dx = (this.pos.x + (this.width>>1)) - (o.pos.x + (o.width>>1)); - dy = (this.pos.y + (this.height>>1)) - (o.pos.y + (o.height>>1)); - return Math.sqrt(dx*dx+dy*dy); - }, - - /* ----- - - make the player jump - - ------ */ doJump : function() { if (!this.jumping && !this.falling) { this.jumpspeed = this.accel.y; @@ -1025,17 +1030,33 @@ return false; }, - /* ----- - - force the player to jump - - ------ */ + /** + * helper function for platform games:
+ * force to the entity to jump (for double jump)
+ * @protected + */ forceJump : function() { this.jumping = false; this.falling = false; this.doJump(); }, + + + /** + * return the distance to the specified entity + * @param {me.ObjectEntity} entity Entity + * @return {float} distance + */ + distanceTo: function(o) + { + // the Vector object also implements the same function, but + // we have to use here the center of both object + dx = (this.pos.x + (this.width>>1)) - (o.pos.x + (o.width>>1)); + dy = (this.pos.y + (this.height>>1)) - (o.pos.y + (o.height>>1)); + return Math.sqrt(dx*dx+dy*dy); + }, + /** * handle the player movement on a slope * and update vel value @@ -1065,7 +1086,48 @@ this.pos.y += this.slopeY; } }, + + /** + * compute the new velocity value + * @private + */ + computeVelocity : function(vel) { + + // apply gravity on y axis + if (this.jumping) { + this.jumpspeed -= this.gravity; + if ((this.jumpspeed < 0))// || !me.input.keyStatus('jump')) // jumping) + { + this.jumping = false; + this.falling = true; + vel.y = 0; + } else + vel.y = -this.jumpspeed; + } + // else apply a constant gravity + else if (!this.onladder && this.gravity) { + //this.jumping = false + this.falling = true; + vel.y += (this.gravity * me.timer.tick); + } + + // apply friction + if (this.friction.x) + vel.x = me.utils.applyFriction(vel.x,this.friction.x); + if (this.friction.y) + vel.y = me.utils.applyFriction(vel.y,this.friction.y); + + // cap velocity + if (vel.y !=0) + vel.y = vel.y.clamp(-this.maxVel.y,this.maxVel.y); + if (vel.x !=0) + vel.x = vel.x.clamp(-this.maxVel.x,this.maxVel.x); + + return vel; + }, + + /** * handle the player movement, "trying" to update his position
* @return {Boolean} true if player position has been updated @@ -1084,42 +1146,14 @@ */ updateMovement : function() { - // apply gravity on y axis - if (this.jumping) { - this.jumpspeed -= this.gravity; - if ((this.jumpspeed < 0))// || !me.input.keyStatus('jump')) // jumping) - { - this.jumping = false; - this.falling = true; - this.vel.y = 0; - //console.log("falling!"); - } else - this.vel.y = -this.jumpspeed; - - // console.log(this.jumpspeed); - } - // else apply a constant gravity - else if (!this.onladder && this.gravity) { - //this.jumping = false - this.falling = true; - this.vel.y += (this.gravity * me.timer.tick); - } + this.vel = this.computeVelocity(this.vel); - // cap the y velocity - if (this.vel.y !=0) - { - this.vel.y = this.vel.y.clamp(-this.maxVel.y,this.maxVel.y); - } - // check for collision - collision = this.collisionMap.checkCollision( - this.collisionBox, this.vel); + collision = this.collisionMap.checkCollision(this.collisionBox, this.vel); // update some flags this.onladder = collision.xprop.isLadder; - this.onslope = collision.yprop.isSlope - || collision.xprop.isSlope; - //console.log(this.onslope); + this.onslope = collision.yprop.isSlope || collision.xprop.isSlope; // y collision if (collision.y) { diff --git a/src/utils/utils.js b/src/utils/utils.js index bf1f597139..d4bff1a86c 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -158,6 +158,11 @@ api.RGBToHex = function(r, g, b) { return r.toHex() + g.toHex() + b.toHex(); }; + + // apply friction to a force + api.applyFriction = function(v, f) { + return (v+f<0)?v+(f*me.timer.tick):(v-f>0)?v-(f*me.timer.tick):0; + }; // return our object return api; From 21a329f3b19fac91abe0aae8d9259ba870058c19 Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 4 Nov 2011 18:58:52 +0800 Subject: [PATCH 23/87] Modified a couple of examples to use friction (player is now gradually stopping when key is unpressed) --- examples/alexkidd/gameObj.js | 20 ++++++++++---------- examples/dirtyRect/gameObj.js | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/examples/alexkidd/gameObj.js b/examples/alexkidd/gameObj.js index aab3480b7b..2df5a69708 100644 --- a/examples/alexkidd/gameObj.js +++ b/examples/alexkidd/gameObj.js @@ -15,23 +15,26 @@ init:function (x, y, settings) { // define this here, since not defined in tiled - settings.image = "alex_light"; + settings.image = "alex_light"; settings.spritewidth = 16; // call the constructor this.parent(x, y , settings); // set the walking & jumping speed - this.setVelocity(2, 12); - + this.setVelocity(3, 12); + + // add friction + this.setFriction(0.5); + // adjust the bounding box this.updateColRect(1,14, -1,0); // set the display to follow our position on both axis me.game.viewport.follow(this.pos, me.game.viewport.AXIS.BOTH); - // adjust the deadzone - me.game.viewport.setDeadzone( me.game.viewport.width/6, me.game.viewport.height/4); + // adjust the deadzone + me.game.viewport.setDeadzone( me.game.viewport.width/6, me.game.viewport.height/4); }, @@ -52,10 +55,7 @@ { this.doWalk(false); } - else - { - this.vel.x = 0; - } + if (me.input.isKeyPressed('jump')) { this.doJump(); @@ -63,7 +63,7 @@ // check & update player movement updated = this.updateMovement(); - + // check for collision with other entities me.game.collide(this); diff --git a/examples/dirtyRect/gameObj.js b/examples/dirtyRect/gameObj.js index 36fcd01f7c..d2d76385f8 100644 --- a/examples/dirtyRect/gameObj.js +++ b/examples/dirtyRect/gameObj.js @@ -25,6 +25,9 @@ var PlayerEntity = me.ObjectEntity.extend( // set the walking & jumping speed this.setVelocity(3, 15); + + // set the walking & jumping speed + this.setFriction(0.3); // adjust the bounding box this.updateColRect(8,48, -1,0); @@ -48,11 +51,8 @@ var PlayerEntity = me.ObjectEntity.extend( { this.doWalk(false); } - else - { - this.vel.x = 0; - } - if (me.input.isKeyPressed('jump')) + + if (me.input.isKeyPressed('jump')) { this.doJump(); } From 3d7a5d9a1641b6667c7ce1505b131a046b602a7f Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 4 Nov 2011 21:44:08 +0800 Subject: [PATCH 24/87] fixed: make sure dx and dy are defined locally --- src/entity/entity.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 1b44199678..a2a6ae2c0c 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -1,4 +1,4 @@ -/* + /* * MelonJS Game Engine * Copyright (C) 2011, Olivier BIOT * http://www.melonjs.org @@ -1051,8 +1051,8 @@ { // the Vector object also implements the same function, but // we have to use here the center of both object - dx = (this.pos.x + (this.width>>1)) - (o.pos.x + (o.width>>1)); - dy = (this.pos.y + (this.height>>1)) - (o.pos.y + (o.height>>1)); + var dx = (this.pos.x + (this.width>>1)) - (o.pos.x + (o.width>>1)); + var dy = (this.pos.y + (this.height>>1)) - (o.pos.y + (o.height>>1)); return Math.sqrt(dx*dx+dy*dy); }, From 95c5c3cbd40ec94fdc9b6ef152cfb6498d2cdbf4 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 5 Nov 2011 17:15:02 +0800 Subject: [PATCH 25/87] Another batch of wrongly defined variable and some minor typo corrections. --- src/core.js | 5 +++-- src/entity/camera.js | 10 ++++------ src/entity/entity.js | 15 +++++---------- src/level/TMXTiledMap.js | 4 +++- src/level/level.js | 9 +++------ src/loader/loader.js | 26 +++++++++++--------------- src/video/video.js | 3 +-- 7 files changed, 30 insertions(+), 42 deletions(-) diff --git a/src/core.js b/src/core.js index b651128da9..3f1d9827cd 100755 --- a/src/core.js +++ b/src/core.js @@ -1214,7 +1214,8 @@ api.update = function() { // update the Frame counter me.timer.update(); - + // previous rect (if any) + var oldRect = null; // loop through our objects for ( var i = objCount, obj; i--, obj = gameObjects[i];) { // check for previous rect before position change @@ -1265,7 +1266,7 @@ /** @private */ pendingDefer = (function (obj) { - idx = gameObjects.indexOf(obj); + var idx = gameObjects.indexOf(obj); if (idx!=-1) { gameObjects.splice(idx, 1); // update the number of object diff --git a/src/entity/camera.js b/src/entity/camera.js index 7d34ace778..416bb6ef73 100755 --- a/src/entity/camera.js +++ b/src/entity/camera.js @@ -65,15 +65,13 @@ /** @private */ init : function(minX, minY, maxX, maxY, realw, realh) { // viewport coordinates - this.parent(new me.Vector2d(minX, minY), maxX - minX, maxY - - minY); + this.parent(new me.Vector2d(minX, minY), maxX - minX, maxY - minY); // keep track of camera update this.last = new me.Vector2d(-1, -1); // real worl limits - this.limits = new me.Vector2d(realw || this.width, realh - || this.height); + this.limits = new me.Vector2d(realw||this.width, realh||this.height); // target to follow this.target = null; @@ -207,8 +205,8 @@ */ move : function(x, y) { - newx = ~~(this.pos.x + x); - newy = ~~(this.pos.y + y); + var newx = ~~(this.pos.x + x); + var newy = ~~(this.pos.y + y); if ((newx >= 0) && (newx <= this._limitwidth)) this.pos.x = newx; diff --git a/src/entity/entity.js b/src/entity/entity.js index a2a6ae2c0c..50bc97ba2b 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -302,7 +302,7 @@ */ draw : function(context) { // last x pos of the viewport - x = this.vp.x; + var x = this.vp.x; if (x > this.lastx) { // going right @@ -564,8 +564,7 @@ * @param {Context2d} context 2d Context on which draw our object **/ draw : function(context) { - var xpos = this.pos.x - this.vp.pos.x, ypos = this.pos.y - - this.vp.pos.y; + var xpos = this.pos.x - this.vp.pos.x, ypos = this.pos.y - this.vp.pos.y; if (this.scaleFlag) { context.scale(this.scale.x, this.scale.y); @@ -768,8 +767,7 @@ */ update : function() { if (this.visible && (this.fpscount++ > this.animationspeed)) { - this.setCurrentSprite(++this.current.idx - % this.current.length); + this.setCurrentSprite(++this.current.idx % this.current.length); if ((this.current.idx == 0) && this.resetAnim) this.setCurrentAnimation(this.resetAnim); @@ -812,10 +810,7 @@ /** @private */ init : function(x, y, settings) { - this.parent(x, y, - (typeof settings.image == "string") ? me.loader - .getImage(settings.image) : settings.image, - settings.spritewidth); + this.parent(x, y, (typeof settings.image == "string") ? me.loader.getImage(settings.image) : settings.image, settings.spritewidth); // set the object entity name this.name = settings.name; @@ -1149,7 +1144,7 @@ this.vel = this.computeVelocity(this.vel); // check for collision - collision = this.collisionMap.checkCollision(this.collisionBox, this.vel); + var collision = this.collisionMap.checkCollision(this.collisionBox, this.vel); // update some flags this.onladder = collision.xprop.isLadder; diff --git a/src/level/TMXTiledMap.js b/src/level/TMXTiledMap.js index 3c269e1ba5..1dab6a720d 100755 --- a/src/level/TMXTiledMap.js +++ b/src/level/TMXTiledMap.js @@ -380,7 +380,7 @@ this.TileProperties[tileID] = {}; - tileProp = this.TileProperties[tileID]; + var tileProp = this.TileProperties[tileID]; // apply tiled defined properties setTMXProperties(tileProp, tileInfo[i]); @@ -533,6 +533,8 @@ var idx = data.length - 1; var flipx, flipy; + + var gid; // set everything for ( var y = this.height - 1; y >= 0; y--) { diff --git a/src/level/level.js b/src/level/level.js index 73b59a57ed..fedcc4b5c7 100755 --- a/src/level/level.js +++ b/src/level/level.js @@ -347,11 +347,8 @@ TiledLayer.prototype.checkCollision = function(obj, pv) { - //var x = (pv.x > 0) ? obj.pos.x + obj.colPos.x + obj.width + pv.x - 1 : obj.pos.x + obj.colPos.x + pv.x; // first pv.x - 1 - //var y = (pv.y > 0) ? obj.pos.y + obj.colPos.y + obj.height + pv.y : obj.pos.y + obj.colPos.y + pv.y ; - - x = (pv.x < 0) ? obj.left + pv.x : obj.right + pv.x; - y = (pv.y < 0) ? obj.top + pv.y : obj.bottom + pv.y; + var x = (pv.x < 0) ? obj.left + pv.x : obj.right + pv.x; + var y = (pv.y < 0) ? obj.top + pv.y : obj.bottom + pv.y; //to return tile collision detection collide = { x : false, // true if collision on x axis @@ -658,7 +655,7 @@ if (levels[level] instanceof me.TMXTileMap) { // check the status of the state mngr - isRunning = me.state.isRunning(); + var isRunning = me.state.isRunning(); if (isRunning) { // pause the game loop to avoid diff --git a/src/loader/loader.js b/src/loader/loader.js index ebe109b63e..b16d24e5d3 100644 --- a/src/loader/loader.js +++ b/src/loader/loader.js @@ -65,15 +65,15 @@ ---*/ draw : function(context) { + + // measure the logo size var y = context.canvas.height / 2; - + var logo1_width = this.logo1.measureText(context, "melon").width; + var logo_width = logo1_width + this.logo2.measureText(context, "JS").width; + + // clear surface me.video.clearSurface(context, "black"); - - // measure the logo size - logo1_width = this.logo1.measureText(context, "melon").width; - logo_width = logo1_width - + this.logo2.measureText(context, "JS").width - + // draw the melonJS logo this.logo1.draw(context, 'melon', ((context.canvas.width - logo_width) / 2), @@ -152,8 +152,7 @@ } else { timerId = setTimeout(checkLoadStatus, 100); } - } - ; + }; /* --- @@ -163,8 +162,7 @@ function onImageError(e) { // retry mechanism with image loading ??? throw "melonJS: Failed loading image resource"; - } - ; + }; /* --- @@ -188,8 +186,7 @@ imgList[img.name].onload = onload || obj.onResourceLoaded.bind(obj); imgList[img.name].onerror = onerror || onImageError.bind(this); imgList[img.name].src = img.src + me.nocache; - } - ; + }; /* --- @@ -225,8 +222,7 @@ resourceCount += 1; tmxCount += 1; } - } - ; + }; /* --- diff --git a/src/video/video.js b/src/video/video.js index 594ae78633..604aa6c688 100644 --- a/src/video/video.js +++ b/src/video/video.js @@ -130,8 +130,7 @@ } } // get the game tick - api.tick = (delta > minstep && me.sys.interpolation) ? delta / step - : 1; + api.tick = (delta > minstep && me.sys.interpolation) ? delta / step : 1; }; // return our apiect From 7d34b46cbe13108b33cc42a57f01f0fee49e4cad Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 5 Nov 2011 18:50:38 +0800 Subject: [PATCH 26/87] fixed missing parameter in the documentation --- src/font/font.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/font/font.js b/src/font/font.js index 7bf17ed1ce..d252880119 100644 --- a/src/font/font.js +++ b/src/font/font.js @@ -87,6 +87,7 @@ /** * measure the given test width + * @param {Context} context 2D Context * @param {String} text * @return {int} width */ @@ -197,7 +198,7 @@ }, /** - * measure the given test width + * measure the given test width * @param {String} text * @return {int} width */ From e6b278df968350f1dad18988cd625e3644737ff6 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 10 Nov 2011 19:57:28 +0800 Subject: [PATCH 27/87] Avoid multiple property redefinition in case of multiple resize of the collision box --- src/math/geometry.js | 75 ++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/math/geometry.js b/src/math/geometry.js index ea43dbfd1b..cf801ba0fd 100644 --- a/src/math/geometry.js +++ b/src/math/geometry.js @@ -260,6 +260,11 @@ // half width/height hWidth : 0, hHeight : 0, + + // flags to check if we + // already redefined properties + hProp : false, + vProp : false, /** @private */ @@ -276,11 +281,6 @@ this.width = w; this.height = h; - // full width/height - /* - this.fWidth = w; - this.fHeight = h; - */ // half width/height this.hWidth = ~~(w / 2); this.hHeight = ~~(h / 2); @@ -375,40 +375,47 @@ this.colPos.x = x; this.width = w; this.hWidth = ~~(this.width / 2); - - // redefine our properties taking colPos into account - Object.defineProperty(this, "left", { - get : function() { - return this.pos.x + this.colPos.x; - }, - configurable : true - }); - Object.defineProperty(this, "right", { - get : function() { - return this.pos.x + this.colPos.x + this.width; - }, - configurable : true - }); + + // avoid Property definition if not necessary + if (!this.hProp) { + // redefine our properties taking colPos into account + Object.defineProperty(this, "left", { + get : function() { + return this.pos.x + this.colPos.x; + }, + configurable : true + }); + Object.defineProperty(this, "right", { + get : function() { + return this.pos.x + this.colPos.x + this.width; + }, + configurable : true + }); + this.hProp = true; + } } if (y != -1) { this.colPos.y = y; this.height = h; this.hHeight = ~~(this.height / 2); - // redefine our properties taking colPos into account - Object.defineProperty(this, "top", { - get : function() { - return this.pos.y + this.colPos.y; - }, - configurable : true - }); - Object.defineProperty(this, "bottom", - { - get : function() { - return this.pos.y + this.colPos.y - + this.height; - }, - configurable : true - }); + + // avoid Property definition if not necessary + if (!this.vProp) { + // redefine our properties taking colPos into account + Object.defineProperty(this, "top", { + get : function() { + return this.pos.y + this.colPos.y; + }, + configurable : true + }); + Object.defineProperty(this, "bottom", { + get : function() { + return this.pos.y + this.colPos.y + this.height; + }, + configurable : true + }); + this.vProp = true; + } } }, From 7a26cacb5d2fc21a4c033543f3d5890e6af24149 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 17 Nov 2011 20:44:47 +0800 Subject: [PATCH 28/87] Added: support for multiple lines sprite sheet (with fixed width and height) --- src/entity/entity.js | 86 +++++++++++------- .../templates/melonjs/publish.js | 1 + .../static/images/spritesheet_grid.png | Bin 0 -> 2247 bytes 3 files changed, 52 insertions(+), 35 deletions(-) create mode 100644 tools/jsdoc-toolkit/templates/melonjs/static/images/spritesheet_grid.png diff --git a/src/entity/entity.js b/src/entity/entity.js index 50bc97ba2b..cdb6e81a2c 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -26,7 +26,7 @@ ObjectSettings = { /** * object entity name
- * OPTIONAL + * as defined in the Tiled Object Properties * @public * @type {String} * @name me.ObjectSettings#name @@ -43,7 +43,7 @@ */ image : null, /** - * size of a single sprite in the spritesheet
+ * width of a single sprite in the spritesheet
* MANDATORY
* (in case of TiledObject, this field is automatically set) * @public @@ -51,6 +51,18 @@ * @name me.ObjectSettings#spritewidth */ spritewidth : null, + + /** + * height of a single sprite in the spritesheet
+ * OPTIONAL
+ * if not specified the value will be set to the corresponding image height
+ * (in case of TiledObject, this field is automatically set) + * @public + * @type {Int} + * @name me.ObjectSettings#spriteheight + */ + spriteheight : null, + /** * custom type for collision detection
@@ -384,9 +396,10 @@ // z position (for ordering display) z : 0, - // offset of the sprite to be displayed + // index of the sprite to be displayed currentSprite : 0, - currentSpriteOff : 0, + // and corresponding offset + offset : null, // if true, image scaling is needed scaleFlag : false, @@ -430,25 +443,24 @@ /** * @ignore */ - init : function(x, y, image, spritewidth) { + init : function(x, y, image, spritewidth, spriteheight) { // call the parent constructor - this.parent(new me.Vector2d(x, y), spritewidth - || image.width, image.height); + this.parent(new me.Vector2d(x, y), + spritewidth || image.width, + spriteheight || image.height); // cache image reference this.image = image; - // #sprite in the image - this.spritecount = spritewidth ? ~~(image.width / spritewidth) - : 1; + // #sprite per row + this.spritecount = spritewidth ? ~~(image.width / spritewidth) : 1; // scale factor of the object this.scale = new me.Vector2d(1.0, 1.0); // create a a default collision rectangle - this.collisionBox = new me.Rect(this.pos, this.width, - this.height); + this.collisionBox = new me.Rect(this.pos, this.width, this.height); // get a reference to the current viewport this.vp = me.game.viewport; @@ -456,9 +468,10 @@ // default animation speed this.animationspeed = me.sys.fps / 10; - // set the current sprite index & offset - this.currentSprite = 0, this.currentSpriteOff = 0; - + // set the default sprite index & offset + this.currentSprite = 0; + this.offset = new me.Vector2d(0, 0); + // if one single image, disable animation if (this.image.width == spritewidth) { this.update = function() { @@ -535,7 +548,7 @@ setCurrentSprite : function(s) { this.currentSprite = s; - this.currentSpriteOff = this.width * s; + this.offset.x = this.width * s; }, /** @@ -582,9 +595,10 @@ } - context.drawImage(this.image, this.currentSpriteOff, 0, - this.width, this.height, ~~xpos, ~~ypos, - this.width, this.height); + context.drawImage(this.image, + this.offset.x, this.offset.y, + this.width, this.height, ~~xpos, ~~ypos, + this.width, this.height); if (this.scaleFlag) { // restore the transform matrix to the normal one @@ -639,14 +653,15 @@ * @param {int} x the x coordinates of the sprite object * @param {int} y the y coordinates of the sprite object * @param {me.loader#getImage} Image reference of the animation sheet - * @param {int} spritewidth width of the sprite image + * @param {int} spritewidth width of a single sprite within the spritesheet + * @param {int} [spriteheight] height of a single sprite within the spritesheet (value will be set to the image height if not specified) */ AnimationSheet = me.SpriteObject .extend( /** @scope me.AnimationSheet.prototype */ { /** @private */ - init : function(x, y, image, spritewidth) { + init : function(x, y, image, spritewidth, spriteheight) { // hold all defined animation this.anim = []; @@ -657,7 +672,7 @@ this.current = null; // call the constructor - this.parent(x, y, image, spritewidth); + this.parent(x, y, image, spritewidth, spriteheight); // if one single image, disable animation if (this.image.width == spritewidth) { @@ -673,9 +688,11 @@ }, /** - * add an animation + * add an animation
+ * the index list must follow the logic as per the following example :
+ * * @param {String} name animation id - * @param {Int[]} frame list of sprite offset defining the animaton + * @param {Int[]} index list of sprite index defining the animaton * @example * // walking animatin * this.addAnimation ("walk", [0,1,2,3,4,5]); @@ -693,22 +710,18 @@ }; if (frame == null) { - // add them all + // by default create an animation with all sprites from row #0 for ( var i = 0; i < this.spritecount; i++) { // compute and add the offset of each frame - //console.log(this.spriteWidth); - this.anim[name].frame[i] = i * this.width;//spriteWidth - //console.log(this.anim[name].frame[i]); + this.anim[name].frame[i] = new me.Vector2d(i * this.width, 0); } } else { var frameidx = 0; for ( var i = 0; i < frame.length; i++) { // compute and add the offset of each frame - //console.log(frame[i]); - this.anim[name].frame[frameidx] = frame[i] - * this.width;//spriteWidth - //console.log(this.anim[name].frame[frameidx]); + this.anim[name].frame[frameidx] = new me.Vector2d(this.width * (frame[i] % this.spritecount), + this.height * ~~(frame[i] / this.spritecount)); frameidx++; } } @@ -734,7 +747,7 @@ setCurrentAnimation : function(name, resetAnim) { this.current = this.anim[name]; this.resetAnim = resetAnim || null; - this.currentSpriteOff = this.current.frame[this.current.idx]; + this.offset = this.current.frame[this.current.idx]; }, /** @@ -757,7 +770,7 @@ setCurrentSprite : function(s) { this.current.idx = s; - this.currentSpriteOff = this.current.frame[s]; + this.offset = this.current.frame[s]; }, /** @@ -810,7 +823,10 @@ /** @private */ init : function(x, y, settings) { - this.parent(x, y, (typeof settings.image == "string") ? me.loader.getImage(settings.image) : settings.image, settings.spritewidth); + this.parent(x, y, + (typeof settings.image == "string") ? me.loader.getImage(settings.image) : settings.image, + settings.spritewidth, + settings.spriteheight); // set the object entity name this.name = settings.name; diff --git a/tools/jsdoc-toolkit/templates/melonjs/publish.js b/tools/jsdoc-toolkit/templates/melonjs/publish.js index 20af5d1694..358ae83bee 100644 --- a/tools/jsdoc-toolkit/templates/melonjs/publish.js +++ b/tools/jsdoc-toolkit/templates/melonjs/publish.js @@ -108,6 +108,7 @@ function publish(symbolSet) { if (out) { IO.copyFile(template+"images/logo.png", out); IO.copyFile(template+"images/logo.png", symbol); + IO.copyFile(template+"images/spritesheet_grid.png", symbol); IO.copyFile(template+"tiled/object_properties.png", symbol); IO.copyFile(template+"misc/me.Rect.colpos.png", symbol); } diff --git a/tools/jsdoc-toolkit/templates/melonjs/static/images/spritesheet_grid.png b/tools/jsdoc-toolkit/templates/melonjs/static/images/spritesheet_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..13a683811286f9bf5244e927ebde01b0536ee0f6 GIT binary patch literal 2247 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 Date: Thu, 17 Nov 2011 21:57:53 +0800 Subject: [PATCH 29/87] added: possibility to specify a specific transparent color for sprite sheet, through the "transparent_color" property. --- src/entity/entity.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/entity/entity.js b/src/entity/entity.js index cdb6e81a2c..79f936e3e2 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -42,6 +42,17 @@ * @name me.ObjectSettings#image */ image : null, + + /** + * specify a transparent color for the image in rgb format (rrggb or #rrggb)
+ * OPTIONAL
+ * (using this option will imply processing time on the image) + * @public + * @type {String} + * @name me.ObjectSettings#transparent_color + */ + transparent_color : null, + /** * width of a single sprite in the spritesheet
* MANDATORY
@@ -480,7 +491,19 @@ } }, + + /** + * specify a transparent color + * @param {String} color color key in rgb format (rrggb or #rrggb) + */ + setTransparency : function(col) { + // remove the # if present + col = (col.charAt(0) == "#") ? col.substring(1, 7) : col; + // applyRGB Filter (return a context object) + this.image = me.video.applyRGBFilter(this.image, "transparent", col.toUpperCase()).canvas; + }, + /** * Flip object on horizontal axis * @param {Boolean} flip enable/disable flip @@ -828,6 +851,11 @@ settings.spritewidth, settings.spriteheight); + // check for user defined transparent color + if (settings.transparent_color) { + this.setTransparency(settings.transparent_color); + } + // set the object entity name this.name = settings.name; From 8cff1d5a1812785fe04c4842e6dbd13b479e0be9 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 17 Nov 2011 22:01:35 +0800 Subject: [PATCH 30/87] Use the original spritesheet, now that the format is supported by the engine :) --- .../graphics/sprites/alex_climb_light.png | Bin 572 -> 0 bytes .../data/graphics/sprites/alex_light.png | Bin 404 -> 0 bytes .../data/graphics/sprites/alex_light_full.png | Bin 4441 -> 0 bytes examples/alexkidd/gameObj.js | 19 +++++++++++++----- examples/alexkidd/ressources.js | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) delete mode 100644 examples/alexkidd/data/graphics/sprites/alex_climb_light.png delete mode 100644 examples/alexkidd/data/graphics/sprites/alex_light.png delete mode 100644 examples/alexkidd/data/graphics/sprites/alex_light_full.png diff --git a/examples/alexkidd/data/graphics/sprites/alex_climb_light.png b/examples/alexkidd/data/graphics/sprites/alex_climb_light.png deleted file mode 100644 index 5eb37004e348359fe51969d20d6227dbfb8d5d54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P)F1DBimvK@&DgDOEQFV?d|5~8e|*Ec1TKvIjv6n2QGviW+TPD_1>&6 zIIOn^Gpzg|;Pw`t)|e67n_OMk5P~ByLe1cH5O`C%MGfYaIDQcqqg(4XGJvri1vkcv zpJq&^dPkw?!@_Z)H_MPjx&an2Y$btSq%TH^mxR8ERK>OzhJNg zQ0iXu-bkR>KTj9OkcwMVrZ_SkR^VV+$no=kKldWWNir?BH@xn;#Dk%JFE`Ab&!!n8Jc-Yae{ugT^q2kf`B0eB%?bSvjNFvJ zNIEXR<&LD&&0#<;*rcg5BaU;pn&pp^>bP0l+XkKRl%nR diff --git a/examples/alexkidd/data/graphics/sprites/alex_light_full.png b/examples/alexkidd/data/graphics/sprites/alex_light_full.png deleted file mode 100644 index ac751e3f9a2e80e5c5581df587e29ede0163b5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4441 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 diff --git a/examples/alexkidd/gameObj.js b/examples/alexkidd/gameObj.js index 2df5a69708..b286f5754e 100644 --- a/examples/alexkidd/gameObj.js +++ b/examples/alexkidd/gameObj.js @@ -5,9 +5,9 @@ ------ */ /************************************************************************************/ - /* */ - /* a player entity */ - /* */ + /* */ + /* a player entity */ + /* */ /************************************************************************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -15,8 +15,10 @@ init:function (x, y, settings) { // define this here, since not defined in tiled - settings.image = "alex_light"; - settings.spritewidth = 16; + settings.image = "alexkidd"; + settings.transparent_color = "#ff00ff"; + settings.spritewidth = 17; + settings.spriteheight = 26; // call the constructor this.parent(x, y , settings); @@ -36,6 +38,13 @@ // adjust the deadzone me.game.viewport.setDeadzone( me.game.viewport.width/6, me.game.viewport.height/4); + // walking animation + this.addAnimation ("walk", [1,2,3,0]); + + // set default one + this.setCurrentAnimation("walk"); + + }, diff --git a/examples/alexkidd/ressources.js b/examples/alexkidd/ressources.js index 6400c1ca5f..0154cf565c 100644 --- a/examples/alexkidd/ressources.js +++ b/examples/alexkidd/ressources.js @@ -7,7 +7,7 @@ var g_ressources = [ {name: "tileset01", type:"image", src: "data/graphics/tilesets/tileset01.png"}, {name: "background01", type:"image", src: "data/graphics/backgrounds/background01.png"}, {name: "background02", type:"image", src: "data/graphics/backgrounds/background02.png"}, - {name: "alex_light", type:"image", src: "data/graphics/sprites/alex_light.png"}, + {name: "alexkidd", type:"image", src: "data/graphics/sprites/alexkidd.png"}, {name: "zone1/1/p1", type: "tmx", src: "data/map/zone1/1.tmx"}, {name: "zone1/2/p1", type: "tmx", src: "data/map/zone1/2.tmx"}, {name: "zone1/3/p1", type: "tmx", src: "data/map/zone1/3.tmx"} From bcee8aeab028d0e933402bc24e89483921f0daf4 Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 18 Nov 2011 00:11:43 +0800 Subject: [PATCH 31/87] Added missing documentation for the most useful ObjectEntity properties. --- src/entity/entity.js | 114 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 100 insertions(+), 14 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 79f936e3e2..48781c6e4a 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -862,38 +862,102 @@ // adjust initial coordinates should be bottom left ones this.pos.set(x, y + me.game.currentLevel.tileheight - this.height); - // velocity to be applied on player movement + /** + * entity current velocity
+ * @public + * @type me.Vector2d + * @name me.ObjectEntity#vel + */ this.vel = new me.Vector2d(); - // default speed + /** + * entity current acceleration
+ * @public + * @type me.Vector2d + * @name me.ObjectEntity#accel + */ this.accel = new me.Vector2d(); - // default friction (0,0) + /** + * entity current friction
+ * @public + * @type me.Vector2d + * @name me.ObjectEntity#friction + */ this.friction = new me.Vector2d(); - // max velocity to be applied on entity movement + /** + * max velocity (to limit entity velocity)
+ * @public + * @type me.Vector2d + * @name me.ObjectEntity#maxVel + */ this.maxVel = new me.Vector2d(1000,1000); // some default contants + /** + * Default gravity value of the entity
+ * default value : 0.98 (earth gravity)
+ * to be set to 0 for RPG, shooter, etc... + * @public + * @type Number + * @name me.ObjectEntity#gravity + */ this.gravity = 0.98; // just to identify our object this.isEntity = true; - // to know if our object can break tiles - this.canBreakTile = false; - // dead state :) + /** + * dead/living state of the entity
+ * default value : true + * @public + * @type Boolean + * @name me.ObjectEntity#alive + */ this.alive = true; - // some usefull jump variable + // some usefull variable + + /** + * falling state of the object
+ * true if the object is falling
+ * false if the object is standing on something
+ * (!) READ ONLY property + * @public + * @type Boolean + * @name me.ObjectEntity#falling + */ this.falling = false; + /** + * jumping state of the object
+ * equal true if the entity is jumping
+ * (!) READ ONLY property + * @public + * @type Boolean + * @name me.ObjectEntity#jumping + */ this.jumping = false; this.jumpspeed = 0; // some usefull slope variable this.slopeY = 0; + /** + * equal true if the entity is standing on a slope
+ * (!) READ ONLY property + * @public + * @type Boolean + * @name me.ObjectEntity#onslope + */ this.onslope = false; + /** + * equal true if the entity is on a ladder
+ * (!) READ ONLY property + * @public + * @type Boolean + * @name me.ObjectEntity#onladder + */ this.onladder = false; // to enable collision detection @@ -903,14 +967,36 @@ this.type = settings.type || 0; // to manage the flickering effect + /** + * equal true if the entity is flickering
+ * (!) READ ONLY property + * @public + * @type Boolean + * @name me.ObjectEntity#flickering + */ this.flickering = false; this.flickerTimer = -1; this.flickercb = null; // ref to the collision map this.collisionMap = me.game.collisionMap; - - // a callback when the entity break a tile :) + + // to know if our object can break tiles + /** + * Define if an entity can go through breakable tiles
+ * default value : false
+ * @public + * @type Boolean + * @name me.ObjectEntity#canBreakTile + */ + this.canBreakTile = false; + + /** + * a callback when an entity break a tile
+ * @public + * @type Function + * @name me.ObjectEntity#onTileBreak + */ this.onTileBreak = null; }, @@ -1004,7 +1090,7 @@ /** * helper function for platform games:
* make the entity move left of right
- * @param {Boolean} left + * @param {Boolean} left will automatically flip horizontally the entity sprite * @protected * @example * if (me.input.isKeyPressed('left')) @@ -1025,7 +1111,7 @@ * helper function for platform games:
* make the entity move up and down
* only valid is the player is on a ladder - * @param {Boolean} up + * @param {Boolean} up will automatically flip vertically the entity sprite * @protected * @example * if (me.input.isKeyPressed('up')) @@ -1174,11 +1260,11 @@ * // make the player move * if (me.input.isKeyPressed('left')) * { - * this.doWalk(true); + * this.vel.x -= this.accel.x * me.timer.tick; * } * else if (me.input.isKeyPressed('right')) * { - * this.doWalk(false); + * this.vel.x += this.accel.x * me.timer.tick; * } * // update player position * this.updateMovement(); From 6f90697b43e1100ca1b3dd42536b86b02d7cb1c7 Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 18 Nov 2011 02:33:06 +0800 Subject: [PATCH 32/87] Cleaned up the applyRGBFilter function (at least a part for now). --- src/utils/utils.js | 13 ++++++++++ src/video/video.js | 59 ++++++++-------------------------------------- 2 files changed, 23 insertions(+), 49 deletions(-) diff --git a/src/utils/utils.js b/src/utils/utils.js index d4bff1a86c..c1aa6e07dd 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -159,6 +159,19 @@ return r.toHex() + g.toHex() + b.toHex(); }; + // return the given canvas or image pixels + api.getPixels = function(arg) { + if (arg instanceof HTMLImageElement) { + var c = me.video.createCanvasSurface(arg.width, arg.height); + c.drawImage(arg, 0, 0); + return c.getImageData(0, 0, arg.width, arg.height); + } else { + // canvas ! + return arg.getContext('2d').getImageData(0, 0, arg.width, arg.height); + } + }; + + // apply friction to a force api.applyFriction = function(v, f) { return (v+f<0)?v+(f*me.timer.tick):(v-f>0)?v-(f*me.timer.tick):0; diff --git a/src/video/video.js b/src/video/video.js index 604aa6c688..062f77d257 100644 --- a/src/video/video.js +++ b/src/video/video.js @@ -414,6 +414,7 @@ context2D.drawImage(backBufferCanvas, 0, 0, backBufferCanvas.width, backBufferCanvas.height, 0, 0, game_width_zoom, game_height_zoom); + }; } else { // "empty" function, as we directly render stuff on "context2D" @@ -430,56 +431,17 @@ * this function will throw a Security Exception with FF if used locally * @name me.video#applyRGBFilter * @function - * @param {Object} [canvas] Canvas or Image Object on which to apply the filter + * @param {Object} object Canvas or Image Object on which to apply the filter * @param {String} effect "b&w", "brightness", "transparent" * @param {String} option : level [0...1] (for brightness), color to be replaced (for transparent) * @return {Context2D} context object */ - api.applyRGBFilter = function() { - - // if first arguments is not an image or a canvas - if (typeof arguments[0] == "string") { - // get effect and option parameters value - var effect = arguments[0]; - var option = arguments[1]; - - //create a new canvas using the main canvas size - var fcanvas = api.createCanvasSurface(); - - // get the content of the main canvas - var imgpix = backBufferContext2D.getImageData(0, 0, - backBufferCanvas.width, backBufferCanvas.height); - - } else { - //create a output canvas using the given canvas or image size - var fcanvas = api.createCanvasSurface(arguments[0].width, - arguments[0].height); - - // is it an image ? - if (arguments[0] instanceof HTMLImageElement) { - // build a temp canvas - var tempCtx = me.video.createCanvasSurface( - arguments[0].width, arguments[0].height); - - // draw the image into the canvas context - tempCtx.drawImage(arguments[0], 0, 0); - // get the image data - var imgpix = tempCtx.getImageData(0, 0, arguments[0].width, - arguments[0].height); - - } else // a canvas ? - { - // let's hope ! :) - var imgpix = arguments[0].getContext('2d').getImageData(0, - 0, arguments[0].width, arguments[0].height); - } - // get effect and option parameters value - var effect = arguments[1]; - var option = arguments[2]; - - } - - // pointer to the image data + api.applyRGBFilter = function(object, effect, option) { + //create a output canvas using the given canvas or image size + var fcanvas = api.createCanvasSurface(object.width, object.height); + // get the pixels array of the give parameter + var imgpix = me.utils.getPixels(object); + // pointer to the pixels data var pix = imgpix.data; // apply selected effect @@ -495,9 +457,8 @@ } case "brightness": { - var brightness = Math.abs(option); - // make sure it's not greater than 1.0 - brightness = (brightness > 1.0) ? 1.0 : brightness; + // make sure it's between 0.0 and 1.0 + var brightness = Math.abs(option).clamp(0.0, 1.0); for ( var i = 0, n = pix.length; i < n; i += 4) { pix[i] *= brightness; // red From d9e066ad8b4ca1e61436c3f7130e9b928230df07 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 19 Nov 2011 00:14:20 +0800 Subject: [PATCH 33/87] Added a GUID property ("Game" Unique Identifier) to the EntityObject, allowing to have a unique identifier for each entities. GUID is composed of a basename (leveled) and a sequential number (corresponding to the object instantiation order), ensuring that we have a unique id, but also always the same each time the game or level is loaded. --- src/core.js | 35 +++++++++++++++++++++++++++++++++++ src/entity/entity.js | 11 +++++++++++ src/level/level.js | 5 +++++ src/utils/utils.js | 21 ++++++++++++++++++++- 4 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/core.js b/src/core.js index 3f1d9827cd..b5d77a546a 100755 --- a/src/core.js +++ b/src/core.js @@ -554,6 +554,20 @@ String.prototype.contains = function(word) { return this.indexOf(word) > -1; }; + + /** + * convert the string to hex value + * @extends String + * @return {String} + */ + String.prototype.toHex = function() { + var res = "", c = 0; + while(c + * note : avoid calling this function every frame since + * it parses the whole object list each time + * @name me.game#getEntityByGUID + * @public + * @function + * @param {String} GUID entity GUID + * @return {me.ObjectEntity} Object Entity (or null if not found) + */ + api.getEntityByGUID = function(guid) + { + for (var i = objCount, obj; i--, obj = gameObjects[i];) { + if(obj.isEntity && obj.GUID == guid) { + return obj; + } + } + return null; + }; + /** * add a HUD obj to the game manager * @name me.game#addHUD diff --git a/src/entity/entity.js b/src/entity/entity.js index 48781c6e4a..f1da75f03e 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -838,6 +838,14 @@ .extend( /** @scope me.ObjectEntity.prototype */ { + /** + * Entity "Game Unique Identifier"
+ * @public + * @type String + * @name me.ObjectEntity#GUID + */ + GUID : null, + // default type of the object (null) type : 0, @@ -856,6 +864,9 @@ this.setTransparency(settings.transparent_color); } + // set the object GUID value + this.GUID = me.utils.createGUID(); + // set the object entity name this.name = settings.name; diff --git a/src/level/level.js b/src/level/level.js index fedcc4b5c7..0820e8691a 100755 --- a/src/level/level.js +++ b/src/level/level.js @@ -665,6 +665,11 @@ // reset the gameObject Manager (just in case!) me.game.reset(); + + // reset the GUID generator + // and pass the level id as parameter + me.utils.resetGUID(level); + // load the level levels[level].reset(); levels[level].load(); diff --git a/src/utils/utils.js b/src/utils/utils.js index c1aa6e07dd..621393a1d6 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -72,6 +72,11 @@ // cache rgb converted value var rgbCache = {}; + + // guid default value + var GUID_base = ""; + var GUID_index = 0; + /*--------------------------------------------- @@ -170,7 +175,21 @@ return arg.getContext('2d').getImageData(0, 0, arg.width, arg.height); } }; - + + // reset the GUID Base Name + // the idea here being to have a unique ID + // per level / object + api.resetGUID = function(base) { + // also ensure it's only 8bit ASCII characters + GUID_base = base.toUpperCase().toHex(); + GUID_index = 0; + }; + + // create and return a very simple GUID + // Game Unique ID + api.createGUID = function() { + return GUID_base + "-" + (GUID_index++); + }; // apply friction to a force api.applyFriction = function(v, f) { From 0a50d22dc7857e3b42959b6255796aad1784b593 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 22 Nov 2011 21:10:57 +0800 Subject: [PATCH 34/87] Also cancel event bubbling --- src/input/input.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/input/input.js b/src/input/input.js index 06e8c9a444..f2e7347245 100644 --- a/src/input/input.js +++ b/src/input/input.js @@ -60,8 +60,7 @@ $.removeEventListener('keyup', keyup, false); } keyboardInitialized = enable; - } - ; + }; /* --- @@ -73,9 +72,9 @@ if (e.preventDefault) e.preventDefault(); e.returnValue = false; - //e.cancelBubble = true; - } - ; + // this is apprently needed on some platforms + e.cancelBubble = true; + }; /* --- From fc8dcf5697b07a6eec65d8ee97c3a4b48fadd98d Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 22 Nov 2011 21:13:18 +0800 Subject: [PATCH 35/87] Return also non entity objects like layers. --- src/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core.js b/src/core.js index b5d77a546a..dca580df8b 100755 --- a/src/core.js +++ b/src/core.js @@ -1165,7 +1165,7 @@ { var objList = []; for (var i = objCount, obj; i--, obj = gameObjects[i];) { - if(obj.isEntity && obj.name == entityName) { + if(obj.name == entityName) { objList.push(obj); } } From b374e242180a8771951e21769fdf775ab4e4f585 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 22 Nov 2011 21:17:53 +0800 Subject: [PATCH 36/87] Finally implemented the resize function ! This won't however automatically resize the collision box accordingly. It's easy to do (just done it in my demo), but I'm not sure this should be in the engine, or maybe through an additional parameter that would specify either to resize it or not ? --- src/entity/entity.js | 62 +++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index f1da75f03e..9ad44688b5 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -396,9 +396,8 @@ .extend( /** @scope me.SpriteObject.prototype */ { - // default pos & scale of the object - //pos : null, - scale : null, + // default scale ratio of the object + scale : null, // just to keep track of when we flip lastflipX : false, @@ -412,8 +411,10 @@ // and corresponding offset offset : null, - // if true, image scaling is needed + // if true, image flipping/scaling is needed scaleFlag : false, + + /** * a flag that can prevent the object to be destroyed
@@ -549,26 +550,25 @@ } }, - /*--- - - scale the object - - NOT WORKING FOR NOW... - --- - scale : function(x, y) - { - this.scale_x = this.scale_x < 0.0 ? -x : x; - this.scale_y = this.scale_y < 0.0 ? -y : y; - // set the scaleFlag - this.scaleFlag = ((this.scale_x!= 1.0) || (this.scale_y!= 1.0)) - }; + /** + * Resize the object around his center
+ * Note : This won't resize the corresponding collision box + * @param {Boolean} ratio scaling ratio */ + resize : function(ratio) + { + if (ratio > 0) { + this.scale.x = this.scale.x < 0.0 ? -ratio : ratio; + this.scale.y = this.scale.y < 0.0 ? -ratio : ratio; + // set the scaleFlag + this.scaleFlag = ((this.scale.x!= 1.0) || (this.scale.y!= 1.0)) + } + }, /** * set the current sprite * @private */ - setCurrentSprite : function(s) { this.currentSprite = s; this.offset.x = this.width * s; @@ -600,27 +600,24 @@ * @param {Context2d} context 2d Context on which draw our object **/ draw : function(context) { + var xpos = this.pos.x - this.vp.pos.x, ypos = this.pos.y - this.vp.pos.y; if (this.scaleFlag) { + // translate to the middle of the sprite + context.translate(xpos + this.hWidth, ypos + this.hHeight); + // scale context.scale(this.scale.x, this.scale.y); - - /* - ...?????? - context.translate( - this.width - ((this.width * this.scale_x)), - this.height -((this.height * this.scale_y))); - */ - - xpos = (xpos * this.scale.x) - - (this.scale.x < 0 ? this.width : 0); - ypos = (ypos * this.scale.y) - - (this.scale.y < 0 ? this.height : 0); - + // translate back to upper left coordinates + context.translate(-this.hWidth, -this.hHeight); + // reset coordinates + xpos = ypos = 0; } - + context.drawImage(this.image, this.offset.x, this.offset.y, - this.width, this.height, ~~xpos, ~~ypos, + this.width, this.height, + ~~xpos, ~~ypos, this.width, this.height); if (this.scaleFlag) { @@ -629,7 +626,6 @@ } if (me.debug.renderHitBox) { - // draw the sprite rectangle this.parent(context, "blue"); // draw the collisionBox From 6db05ad94b141ae99dbe01b4eb82a1d648863ba4 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 22 Nov 2011 21:30:51 +0800 Subject: [PATCH 37/87] Avoid (again!) global variable declaration when it should be local... --- src/math/geometry.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/math/geometry.js b/src/math/geometry.js index cf801ba0fd..66499599fc 100644 --- a/src/math/geometry.js +++ b/src/math/geometry.js @@ -345,8 +345,8 @@ * @return {me.Rect} the union(ed) rectangle */ union : function(/** {me.Rect} */ r) { - x1 = Math.min(this.pos.x, r.pos.x); - y1 = Math.min(this.pos.y, r.pos.y); + var x1 = Math.min(this.pos.x, r.pos.x); + var y1 = Math.min(this.pos.y, r.pos.y); this.width = Math.ceil(Math.max(this.pos.x + this.width, r.pos.x + r.width) @@ -488,7 +488,7 @@ */ collideVsAABB : function(/** {me.Rect} */ rect) { // response vector - p = new Vector2d(0, 0); + var p = new Vector2d(0, 0); // check if both box are overlaping if (this.checkAxisAligned(rect)) { From bc4f97bb2f4cf31d190e30aed29158af6f244983 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 22 Nov 2011 21:58:56 +0800 Subject: [PATCH 38/87] bad code = stupid commit... --- src/core.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core.js b/src/core.js index dca580df8b..442f2d4396 100755 --- a/src/core.js +++ b/src/core.js @@ -604,8 +604,8 @@ */ Number.prototype.round = function() { // if only one argument use the object value - num = (arguments.length == 1) ? this : arguments[0]; - powres = Math.pow(10, arguments[1] || arguments[0]); + var num = (arguments.length == 1) ? this : arguments[0]; + var powres = Math.pow(10, arguments[1] || arguments[0]); return (Math.round(num * powres) / powres); }; From 271858f6515f115f811464c2950e334456f8414f Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 24 Nov 2011 20:36:51 +0800 Subject: [PATCH 39/87] Fixed: Entities with 1 single sprite (no animation) not being updated (Issue #28) The whole inheritance tree for ObjectEntity, as also highlighted by ben2303, and how is managed animation really need to changed :) --- src/entity/entity.js | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 9ad44688b5..721ed3f281 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -484,13 +484,6 @@ this.currentSprite = 0; this.offset = new me.Vector2d(0, 0); - // if one single image, disable animation - if (this.image.width == spritewidth) { - this.update = function() { - return false; - } - } - }, /** @@ -694,16 +687,15 @@ this.parent(x, y, image, spritewidth, spriteheight); // if one single image, disable animation - if (this.image.width == spritewidth) { - this.update = function() { - return false; - } - } else { - // create a default animation sequence with all sprites - this.addAnimation("default", null); - // set as default - this.setCurrentAnimation("default"); - } + if ((this.image.width == this.width) && (this.image.height == this.height)) { + // override setCurrrentSprite with an empty function + this.setCurrentSprite = function() {;}; + } + + // create a default animation sequence with all sprites + this.addAnimation("default", null); + // set as default + this.setCurrentAnimation("default"); }, /** @@ -790,6 +782,11 @@ setCurrentSprite : function(s) { this.current.idx = s; this.offset = this.current.frame[s]; + + // switch animation if we reach the end of the strip + // and a callback is defined + if ((this.current.idx == 0) && this.resetAnim) + this.setCurrentAnimation(this.resetAnim); }, /** @@ -800,10 +797,6 @@ update : function() { if (this.visible && (this.fpscount++ > this.animationspeed)) { this.setCurrentSprite(++this.current.idx % this.current.length); - - if ((this.current.idx == 0) && this.resetAnim) - this.setCurrentAnimation(this.resetAnim); - this.fpscount = 0; return true; } From c0315bd7e11245461a218bf7d42b253e0e276ba8 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 24 Nov 2011 21:10:25 +0800 Subject: [PATCH 40/87] Added an isometric example (although not working for now and will throw an exception) --- .../data/isometric_grass_and_water.png | Bin 0 -> 104828 bytes .../data/isometric_grass_and_water.tmx | 12 ++++++++ examples/tiled_example_loader/index.html | 1 + examples/tiled_example_loader/main.js | 5 +++- examples/tiled_example_loader/ressources.js | 26 ++++++++++-------- 5 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 examples/tiled_example_loader/data/isometric_grass_and_water.png create mode 100644 examples/tiled_example_loader/data/isometric_grass_and_water.tmx diff --git a/examples/tiled_example_loader/data/isometric_grass_and_water.png b/examples/tiled_example_loader/data/isometric_grass_and_water.png new file mode 100644 index 0000000000000000000000000000000000000000..b342a0cb43526605d06330c1c3613671e6bee2d2 GIT binary patch literal 104828 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

mK)WONgq1rds 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

SY|icFHuvxpFy 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⪼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 PxKCZ>g>sdWb;$n!QT)pc literal 0 HcmV?d00001 diff --git a/examples/tiled_example_loader/data/isometric_grass_and_water.tmx b/examples/tiled_example_loader/data/isometric_grass_and_water.tmx new file mode 100644 index 0000000000..e9a896dad8 --- /dev/null +++ b/examples/tiled_example_loader/data/isometric_grass_and_water.tmx @@ -0,0 +1,12 @@ + + + + + + + + + H4sIAAAAAAAAA32V227DMAxDpTpb13Uvazu0//+lc4AIJU6oPAiJHVsXklJeEfGa9jTPeq/1edpps5y2yHps62X7NuRd/T3hW2PccL+eznfFr2+df83/KjUwxiL+WFOdJx6Mof7Vn+ar2GlNKTGIj77f5J7mqTi5enSffte8fwwPej/Bfcoea8vY4/Q97QIe6h79jfB1Ka6uDvKs/Gbsua69Tsfr+t4Y/WvOGV7DysPA2VN4TgvTj2mfkrfGIr/ENA/i6Z2vrS7y7mKTC8dP7bGHdW/1/TvtL/aaIGaKqeLEfmOOj3j3jmqUvdnlSLzIbyJGxwtr0v5hLkvssdAYeoda0fyVy24+FMcrDxfEcFyzTznTmJPqy/WQm5fEjfgRp6PZ5+akmzcdpt0Zxu1mgPaG455zx/E2cFZ7mziQM6eNTiuO2yPtd3OaXLmeG/Db5UGO2R9O45yp1DJr7/BxGJAXziHOBuWJ/wP+O/nPUD1QL+X3H78y42PECQAA + + + diff --git a/examples/tiled_example_loader/index.html b/examples/tiled_example_loader/index.html index bb12ae21d6..cb6f28766e 100644 --- a/examples/tiled_example_loader/index.html +++ b/examples/tiled_example_loader/index.html @@ -37,6 +37,7 @@

Tiled Orthogonal Map Loader

+ diff --git a/examples/tiled_example_loader/main.js b/examples/tiled_example_loader/main.js index a23a1aba61..fe59ee6a78 100644 --- a/examples/tiled_example_loader/main.js +++ b/examples/tiled_example_loader/main.js @@ -134,9 +134,12 @@ var jsApp = case "3": level = "sewers"; break; - case "4": + case "4": level = "cute"; break; + case "5": + level = "isometric"; + break; default: return; }; diff --git a/examples/tiled_example_loader/ressources.js b/examples/tiled_example_loader/ressources.js index 5cdd043ba0..1541555549 100644 --- a/examples/tiled_example_loader/ressources.js +++ b/examples/tiled_example_loader/ressources.js @@ -5,15 +5,17 @@ ------ */ var g_ressources= [ - // images - {name: "free_tileset_version_10", type:"image", src: "data/free_tileset_version_10.png"}, - {name: "tmw_desert_spacing", type:"image", src: "data/tmw_desert_spacing.png"}, - {name: "sewer_tileset", type:"image", src: "data/sewer_tileset.png"}, - {name: "sky", type:"image", src: "data/sky.png"}, - {name: "tiles", type:"image", src: "data/tiles.png"}, - // TMX maps - {name: "village", type: "tmx", src: "data/village.tmx"}, - {name: "desert", type: "tmx", src: "data/desert.tmx"}, - {name: "sewers", type: "tmx", src: "data/sewers.tmx"}, - {name: "cute", type: "tmx", src: "data/cute.tmx"} - ]; \ No newline at end of file + // images + {name: "free_tileset_version_10", type:"image", src: "data/free_tileset_version_10.png"}, + {name: "tmw_desert_spacing", type:"image", src: "data/tmw_desert_spacing.png"}, + {name: "sewer_tileset", type:"image", src: "data/sewer_tileset.png"}, + {name: "sky", type:"image", src: "data/sky.png"}, + {name: "tiles", type:"image", src: "data/tiles.png"}, + {name: "isometric_grass_and_water", type:"image", src: "data/isometric_grass_and_water.png"}, + // TMX maps + {name: "village", type: "tmx", src: "data/village.tmx"}, + {name: "desert", type: "tmx", src: "data/desert.tmx"}, + {name: "sewers", type: "tmx", src: "data/sewers.tmx"}, + {name: "cute", type: "tmx", src: "data/cute.tmx"}, + {name: "isometric", type: "tmx", src: "data/isometric_grass_and_water.tmx"} +]; \ No newline at end of file From 5cd9aafd3b6a142150d52ef0695184260b7ee991 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 24 Nov 2011 21:16:47 +0800 Subject: [PATCH 41/87] replaced with the uncompressed version --- .../data/isometric_grass_and_water.tmx | 629 +++++++++++++++++- 1 file changed, 626 insertions(+), 3 deletions(-) diff --git a/examples/tiled_example_loader/data/isometric_grass_and_water.tmx b/examples/tiled_example_loader/data/isometric_grass_and_water.tmx index e9a896dad8..465685e7d9 100644 --- a/examples/tiled_example_loader/data/isometric_grass_and_water.tmx +++ b/examples/tiled_example_loader/data/isometric_grass_and_water.tmx @@ -1,12 +1,635 @@ - - - H4sIAAAAAAAAA32V227DMAxDpTpb13Uvazu0//+lc4AIJU6oPAiJHVsXklJeEfGa9jTPeq/1edpps5y2yHps62X7NuRd/T3hW2PccL+eznfFr2+df83/KjUwxiL+WFOdJx6Mof7Vn+ar2GlNKTGIj77f5J7mqTi5enSffte8fwwPej/Bfcoea8vY4/Q97QIe6h79jfB1Ka6uDvKs/Gbsua69Tsfr+t4Y/WvOGV7DysPA2VN4TgvTj2mfkrfGIr/ENA/i6Z2vrS7y7mKTC8dP7bGHdW/1/TvtL/aaIGaKqeLEfmOOj3j3jmqUvdnlSLzIbyJGxwtr0v5hLkvssdAYeoda0fyVy24+FMcrDxfEcFyzTznTmJPqy/WQm5fEjfgRp6PZ5+akmzcdpt0Zxu1mgPaG455zx/E2cFZ7mziQM6eNTiuO2yPtd3OaXLmeG/Db5UGO2R9O45yp1DJr7/BxGJAXziHOBuWJ/wP+O/nPUD1QL+X3H78y42PECQAA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2af8eb35ad02cca06175fd428e5d8e837d85eb53 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 24 Nov 2011 21:53:49 +0800 Subject: [PATCH 42/87] Playing around with isometric stuff (just for fun, still not supported) --- src/level/TMXTiledMap.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/level/TMXTiledMap.js b/src/level/TMXTiledMap.js index 1dab6a720d..0e6653d79d 100755 --- a/src/level/TMXTiledMap.js +++ b/src/level/TMXTiledMap.js @@ -172,11 +172,11 @@ this.z = zOrder++; // check some returned values - if (this.orientation != "orthogonal") { + if (this.orientation != "orthogonal") { throw "melonJS: " + this.orientation + " type TMX Tile Map not supported!"; } - // set the map properties (if any) + // set the map properties (if any) setTMXProperties(this, map); // ensure the visible flag is set to false, by default @@ -246,8 +246,7 @@ } else { // regular layer or collision layer - this.mapLayers.push(new TMXLayer(xmlElements.item(i), - this.tilesets, zOrder++)); + this.mapLayers.push(new TMXLayer(xmlElements.item(i), this.orientation, this.tilesets, zOrder++)); zOrder++; } break; @@ -417,7 +416,7 @@ /* Manage a tile Layer */ /* */ /************************************************************************************/ - function TMXLayer(layer, tilesets, zOrder) { + function TMXLayer(layer, orientation, tilesets, zOrder) { // call the parent me.TiledLayer.call(this, me.XMLParser.getIntAttribute(layer, TMX_TAG_WIDTH), @@ -426,6 +425,7 @@ tilesets, zOrder); // get invalidated when the viewport is changed + this.orientation = orientation; this.layerInvalidated = true; this.name = me.XMLParser.getStringAttribute(layer, TMX_TAG_NAME); this.visible = (me.XMLParser.getIntAttribute(layer, TMX_TAG_VISIBLE, 1) == 1); @@ -563,11 +563,21 @@ } if (this.visible) { - //draw our tile - this.tileset.drawTile(this.layerSurface, - x * this.tilewidth, y * this.tileheight, - gid - this.tileset.firstgid, flipx, flipy); - + //draw our tile + if (this.orientation == "orthogonal") { + this.tileset.drawTile(this.layerSurface, + x * this.tilewidth, + y * this.tileheight, + gid - this.tileset.firstgid, + flipx, flipy); + } + else { // isometric + this.tileset.drawTile(this.layerSurface, + (x - y) * this.tilewidth>>1, + (y + x) * this.tileheight>>2, + gid - this.tileset.firstgid, + flipx, flipy); + } } } } From de57a10ed34a9497b823b79017f7265742d7e80e Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 24 Nov 2011 22:29:35 +0800 Subject: [PATCH 43/87] Restored the primary function of the SpriteObject : display a sprite ! the more simple is it, the better is it: animation code was anyway redundant with the one from the AnimationSheet Object, "invisible" for the end-user (since AnimationSheet is now used for animation), and this will help cleaning stuff for later reorganization. --- src/entity/entity.js | 73 +++++++++++++------------------------------- 1 file changed, 22 insertions(+), 51 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 721ed3f281..7b875f6bf0 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -376,7 +376,7 @@ $.me.ParallaxBackgroundEntity = ParallaxBackgroundEntity /** - * A Simple object to display static or animated sprite on screen. + * A Simple object to display a sprite on screen. * @class * @extends me.Rect * @memberOf me @@ -384,13 +384,11 @@ * @param {int} x the x coordinates of the sprite object * @param {int} y the y coordinates of the sprite object * @param {me.loader#getImage} image reference to the Sprite Image - * @param {int} [spritewidth] size of a single sprite inside the provided image + * @param {int} [spritewidth] sprite width + * @param {int} [spriteheigth] sprite height * @example * // create a static Sprite Object * mySprite = new SpriteObject (100, 100, me.loader.getImage("mySpriteImage")); - * // create a animated Sprite Object - * mySprite = new SpriteObject (100, 100, me.loader.getImage("mySpriteImage"), 64); - */ SpriteObject = me.Rect .extend( @@ -399,6 +397,9 @@ // default scale ratio of the object scale : null, + // if true, image flipping/scaling is needed + scaleFlag : false, + // just to keep track of when we flip lastflipX : false, lastflipY : false, @@ -406,16 +407,9 @@ // z position (for ordering display) z : 0, - // index of the sprite to be displayed - currentSprite : 0, - // and corresponding offset + // image offset offset : null, - // if true, image flipping/scaling is needed - scaleFlag : false, - - - /** * a flag that can prevent the object to be destroyed
* if set to false, the objet won't be destroy when calling me.game.remove(obj)
@@ -446,12 +440,6 @@ // a reference to the game vp vp : null, - // count the fps and manage animation change - fpscount : 0, - - // animation cyling speed - animationspeed : 0, - /** * @ignore */ @@ -465,9 +453,6 @@ // cache image reference this.image = image; - // #sprite per row - this.spritecount = spritewidth ? ~~(image.width / spritewidth) : 1; - // scale factor of the object this.scale = new me.Vector2d(1.0, 1.0); @@ -477,11 +462,7 @@ // get a reference to the current viewport this.vp = me.game.viewport; - // default animation speed - this.animationspeed = me.sys.fps / 10; - // set the default sprite index & offset - this.currentSprite = 0; this.offset = new me.Vector2d(0, 0); }, @@ -512,9 +493,6 @@ // set the scaleFlag this.scaleFlag = ((this.scale.x != 1.0) || (this.scale.y != 1.0)) - // flip ourself - //this.parent(this.width); - // flip the collision box this.collisionBox.flipX(this.width); } @@ -534,9 +512,6 @@ // set the scaleFlag this.scaleFlag = ((this.scale.x != 1.0) || (this.scale.y != 1.0)) - // flip ourself - //this.parent(this.height); - // flip the collision box this.collisionBox.flipY(this.height); @@ -559,29 +534,13 @@ }, /** - * set the current sprite - * @private - */ - setCurrentSprite : function(s) { - this.currentSprite = s; - this.offset.x = this.width * s; - }, - - /** - * sprite update (animation update)
+ * sprite update
* not to be called by the end user
* called by the game manager on each game loop * @protected - * @return true if object state changed (position, animation, etc...) + * @return false **/ update : function() { - if (this.visible && (this.fpscount++ > this.animationspeed)) { - //this.setCurrentSprite(++this.currentSprite < this.spritecount ? this.currentSprite : 0); - this.setCurrentSprite(++this.currentSprite - % this.spritecount); - this.fpscount = 0; - return true; - } return false; }, @@ -672,6 +631,12 @@ .extend( /** @scope me.AnimationSheet.prototype */ { + // count the fps and manage animation change + fpscount : 0, + + // animation cyling speed + animationspeed : 0, + /** @private */ init : function(x, y, image, spritewidth, spriteheight) { // hold all defined animation @@ -685,12 +650,18 @@ // call the constructor this.parent(x, y, image, spritewidth, spriteheight); - + + // #sprite per row + this.spritecount = ~~(this.image.width / this.width); + // if one single image, disable animation if ((this.image.width == this.width) && (this.image.height == this.height)) { // override setCurrrentSprite with an empty function this.setCurrentSprite = function() {;}; } + + // default animation speed + this.animationspeed = me.sys.fps / 10; // create a default animation sequence with all sprites this.addAnimation("default", null); From fceb5110e156afce0c36a7a07bcdbe02bbe420aa Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 11:17:45 +0800 Subject: [PATCH 44/87] Moved the flickering stuff to SpriteObject qs well, since this is an "effect" applied to the displayed sprite. Despite of the code clean up, this does not magically fix issue #29 --- src/core.js | 4 +- src/entity/entity.js | 124 +++++++++++++++++++++---------------------- 2 files changed, 62 insertions(+), 66 deletions(-) diff --git a/src/core.js b/src/core.js index 442f2d4396..ffc34e399f 100755 --- a/src/core.js +++ b/src/core.js @@ -1260,7 +1260,7 @@ updated = obj.update(); // check if object is visible - if (obj.isEntity && !obj.flickering) { + if (obj.isEntity) { obj.visible = api.viewport.isVisible(obj.collisionBox); } @@ -1858,7 +1858,7 @@ _screenObject[_state].screen.reset.apply(_screenObject[_state].screen, _extraArgs); // cache the new screen object update function - _activeUpdateFrame = _screenObject[_state].screen.onUpdateFrame; + _activeUpdateFrame = _screenObject[_state].screen.onUpdateFrame.bind(_screenObject[_state].screen); // and start the main loop of the // new requested state diff --git a/src/entity/entity.js b/src/entity/entity.js index 7b875f6bf0..5eaeeb2c68 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -436,6 +436,13 @@ // this object is useless here, but low level // function like flipX need to take this in account collisionBox : null, + + // to manage the flickering effect + flickering : false, + flickerTimer : -1, + flickercb : null, + flickerState : false, + // a reference to the game vp vp : null, @@ -477,6 +484,38 @@ // applyRGB Filter (return a context object) this.image = me.video.applyRGBFilter(this.image, "transparent", col.toUpperCase()).canvas; }, + + /** + * return the flickering state of the object + * @return Boolean + */ + isFlickering : function() { + return this.flickering; + }, + + + /** + * make the object flicker + * @param {Int} duration + * @param {Function} callback + * @example + * // make the object flicker for 60 frame + * // and then remove it + * this.flicker(60, function() + * { + * me.game.remove(this); + * }); + */ + flicker : function(duration, callback) { + this.flickerTimer = duration; + if (this.flickerTimer < 0) { + this.flickering = false; + this.flickercb = null; + } else if (!this.flickering) { + this.flickercb = callback; + this.flickering = true; + } + }, /** @@ -541,6 +580,16 @@ * @return false **/ update : function() { + //update the "flickering" state if necessary + if (this.flickering) { + this.flickerTimer -= me.timer.tick; + if (this.flickerTimer < 0) { + if (this.flickercb) + this.flickercb(); + this.flicker(-1); + } + return true; + } return false; }, @@ -553,6 +602,12 @@ **/ draw : function(context) { + // do nothing if we are flickering + if (this.flickering) { + this.flickerState = !this.flickerState; + if (!this.flickerState) return; + } + var xpos = this.pos.x - this.vp.pos.x, ypos = this.pos.y - this.vp.pos.y; if (this.scaleFlag) { @@ -766,6 +821,9 @@ * @protected */ update : function() { + // call the parent function + this.parent(); + // update animation if necessary if (this.visible && (this.fpscount++ > this.animationspeed)) { this.setCurrentSprite(++this.current.idx % this.current.length); this.fpscount = 0; @@ -937,18 +995,7 @@ this.type = settings.type || 0; - // to manage the flickering effect - /** - * equal true if the entity is flickering
- * (!) READ ONLY property - * @public - * @type Boolean - * @name me.ObjectEntity#flickering - */ - this.flickering = false; - this.flickerTimer = -1; - this.flickercb = null; - + // ref to the collision map this.collisionMap = me.game.collisionMap; @@ -1343,10 +1390,6 @@ } } - // -- THIS SHOULD NOT BE HERE --// - // update the flickering - this.updateFlickering(); - // check for other necessary updates if ((this.vel.x != 0) || (this.vel.y != 0)) { // update player position @@ -1365,56 +1408,9 @@ // nothing updated (that happens!) return false; - }, - - /** - * upate the object "flickering" - * @private - */ - - updateFlickering : function() { - if (this.flickering) { - this.flickerTimer -= me.timer.tick; // should be minus elapsed time; - - //console.log(this.flickerTimer); - - if (this.flickerTimer < 0) { - if (this.flickercb) - this.flickercb(); - this.flicker(-1); - } else { - this.visible = !this.visible; - return true; - } - } - return false; - }, - - /** - * make the object flicker - * @param {Int} duration - * @param {Function} callback - * @example - * // make the object flicker for 60 frame - * // and then remove it - * this.flicker(60, function() - * { - * me.game.remove(this); - * }); - */ - flicker : function(duration, callback) { - this.flickerTimer = duration; - if (this.flickerTimer < 0) { - this.flickering = false; - this.visible = true; - this.flickercb = null; - } else if (!this.flickering) { - this.flickercb = callback; - this.flickering = true; - } } - }); + }); // expose our object to our scope $.me.ObjectEntity = ObjectEntity; /************************************************************************************/ From d83867182c73246d0bb22c917737c7306a2dae42 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 13:49:32 +0800 Subject: [PATCH 45/87] Added proper documentation to the me.game.add function (missing parameters and an example) --- src/core.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core.js b/src/core.js index ffc34e399f..c3543496a5 100755 --- a/src/core.js +++ b/src/core.js @@ -1117,12 +1117,20 @@ }; /** - * add object to the game manager + * Manually add object to the game manager * @name me.game#add + * @param {me.ObjectEntity} obj Object to be added + * @param {int} [z="obj.z"] z index * @public * @function + * @example + * // create a new object + * var obj = new MyObject(x, y) + * // add the object and give the z index of the current object + * me.game.add(obj, this.z); + * // sort the object list (to ensure the object is properly displayed) + * me.game.sort(); */ - api.add = function(object, zOrder) { object.z = (zOrder) ? zOrder : object.z; From d4d89e5f43bbf8ec9eab97fdbdf0fb262885a9f5 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 14:59:30 +0800 Subject: [PATCH 46/87] Use native Base64 decode function when available --- src/core.js | 12 +++++++++- src/utils/utils.js | 55 +++++++++++++++++++++++++++------------------- 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/core.js b/src/core.js index c3543496a5..f0626313af 100755 --- a/src/core.js +++ b/src/core.js @@ -103,6 +103,13 @@ * @memberOf me.sys */ gyro : ($.DeviceMotionEvent !== undefined), + + /** + * Browser Base64 decoding capability (read-only)
+ * @type {Boolean} + * @memberOf me.sys + */ + nativeBase64 : false, // Global settings /** @@ -740,7 +747,10 @@ //if on mobile device, disable sound for now me.sys.sound = false; } - + + //check if browser support native b64 decoding + me.sys.nativeBase64 = (typeof(window.atob) == 'function'); + // init the FPS counter if needed me.timer.init(); diff --git a/src/utils/utils.js b/src/utils/utils.js index 621393a1d6..9d5ed204c7 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -22,32 +22,41 @@ // public method for decoding singleton.decode = function(input) { - var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; - + + // make sure our input string has the right format input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - while (i < input.length) { - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output.push(String.fromCharCode(chr1)); - - if (enc3 != 64) { - output.push(String.fromCharCode(chr2)); - } - if (enc4 != 64) { - output.push(String.fromCharCode(chr3)); - } + + if (me.sys.nativeBase64) { + // use native decoder + return $.atob(input); } + else { + // use cross-browser decoding + var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; + + while (i < input.length) { + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output.push(String.fromCharCode(chr1)); + + if (enc3 != 64) { + output.push(String.fromCharCode(chr2)); + } + if (enc4 != 64) { + output.push(String.fromCharCode(chr3)); + } + } - output = output.join(''); - return output; + output = output.join(''); + return output; + } }; return singleton; From e7f401ec4239eee6ba49d98bf7ada6d94e7d29bd Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 15:22:11 +0800 Subject: [PATCH 47/87] Corrected example to fix an issue with the flicker callback not being called (due to the parent function not being called) --- examples/tilemap_collision_demo/gameObj.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/examples/tilemap_collision_demo/gameObj.js b/examples/tilemap_collision_demo/gameObj.js index 7369872d81..306b96c2a8 100644 --- a/examples/tilemap_collision_demo/gameObj.js +++ b/examples/tilemap_collision_demo/gameObj.js @@ -211,10 +211,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(1, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -252,7 +252,7 @@ // set dead animation this.setCurrentAnimation("dead"); // make it flicker and call destroy once timer finished - this.flicker(45, function (){me.game.remove(this)}); + this.flicker(45, function(){me.game.remove(this)}); // dead sfx me.audio.play("enemykill", false); @@ -266,7 +266,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -289,12 +289,10 @@ } // check & update movement updated = this.updateMovement(); - - if (updated) - { - // update the object animation - this.parent(); - } + + // call the parent function + this.parent(); + return updated; } }); From d4619d719f0d89ee1aeeaf43b978d1caba472812 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 17:31:19 +0800 Subject: [PATCH 48/87] Fixed another couple of variables that should be local --- src/font/font.js | 2 +- src/video/video.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/font/font.js b/src/font/font.js index d252880119..0ee7ab8e66 100644 --- a/src/font/font.js +++ b/src/font/font.js @@ -96,7 +96,7 @@ context.font = this.font; context.fillStyle = this.color; context.textBaseLine = this.align; - dim = context.measureText(text); + var dim = context.measureText(text); dim.height = this.height; return dim; diff --git a/src/video/video.js b/src/video/video.js index 062f77d257..07b395129a 100644 --- a/src/video/video.js +++ b/src/video/video.js @@ -122,7 +122,7 @@ framecount++; framedelta += delta; if (framecount % 10 == 0) { - lastfps = ~~((1000 * framecount) / framedelta); + var lastfps = ~~((1000 * framecount) / framedelta); // clamp the result and "draw" it draw(lastfps.clamp(0, me.sys.fps)); framedelta = 0; From e85cbdf9a65ae816189e649f40791d11e0aa8745 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 26 Nov 2011 20:35:08 +0800 Subject: [PATCH 49/87] Added the possibility to either pass an animation id or a function for the onComplete parameter This could be useful if you wish to perform any action when the animation is over (like remove the object) --- src/entity/entity.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 5eaeeb2c68..15bad6d45e 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -773,12 +773,14 @@ /** * set the current animation * @param {String} name animation id - * @param {String} [onComplete] animation id to switch to when complete + * @param {Object} [onComplete] animation id to switch to when complete, or callback * @example * // set "walk" animation * this.setCurrentAnimation("walk"); * // set "eat" animation, and switch to "walk" when complete * this.setCurrentAnimation("eat", "walk"); + * // set "die" animation, and remove the object when finished + * this.setCurrentAnimation("die", function(){me.game.remove(this)}); **/ setCurrentAnimation : function(name, resetAnim) { @@ -811,8 +813,14 @@ // switch animation if we reach the end of the strip // and a callback is defined - if ((this.current.idx == 0) && this.resetAnim) - this.setCurrentAnimation(this.resetAnim); + if ((this.current.idx == 0) && this.resetAnim) { + // if string, change to the corresponding animation + if (typeof(this.resetAnim) == "String") + this.setCurrentAnimation(this.resetAnim); + // if function (callback) call it + else if (typeof(this.resetAnim) == "function") + this.resetAnim(); + } }, /** From 6c9c68d37c78f3f1e4ac19639494249a5f682212 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 27 Nov 2011 01:26:12 +0800 Subject: [PATCH 50/87] oups... --- src/entity/entity.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 15bad6d45e..0795c6bbca 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -815,7 +815,7 @@ // and a callback is defined if ((this.current.idx == 0) && this.resetAnim) { // if string, change to the corresponding animation - if (typeof(this.resetAnim) == "String") + if (typeof(this.resetAnim) == "string") this.setCurrentAnimation(this.resetAnim); // if function (callback) call it else if (typeof(this.resetAnim) == "function") From 4ca82283cac7c5b8885bf16a9949e25eedd52e64 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 27 Nov 2011 19:57:29 +0800 Subject: [PATCH 51/87] Fixed : BitmapFont scaling function --- src/font/font.js | 50 ++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/font/font.js b/src/font/font.js index 0ee7ab8e66..348e40f61a 100644 --- a/src/font/font.js +++ b/src/font/font.js @@ -138,8 +138,6 @@ // font scale; sSize : null, // first char in the ascii table - scale : 1.0, - // first char in the ascii table firstChar : 0x20, /** @private */ @@ -147,22 +145,25 @@ // font name and type this.parent(font, null, null); - // character size; - this.size = new me.Vector2d(size, 0); - // font scale; + // font characters size; + this.size = new me.Vector2d(); + + // font scaled size; this.sSize = new me.Vector2d(); - // first char in the ascii table - this.scale = scale || 1.0; - // first char in the ascii table this.firstChar = firstChar || 0x20; // load the font metrics - this.loadFontMetrics(font); + this.loadFontMetrics(font, size); // set a default alignement this.align = this.ALIGN.RIGHT + + // resize if necessary + if (scale) { + this.resize(scale); + } }, @@ -170,32 +171,38 @@ * Load the font metrics * @private */ - loadFontMetrics : function(font) { + loadFontMetrics : function(font, size) { this.font = me.loader.getImage(font); // some cheap metrics - //this.size.x = passed arguements; + this.size.x = size; this.size.y = this.font.height || 0; - this.sSize.copy(this.size); - this.sSize.x *= this.scale; - this.sSize.y *= this.scale; }, /** * change the font settings - * @param {String} align - * @param {int} scale + * @param {String} align ("left", "center", "right") + * @param {int} [scale] */ set : function(align, scale) { this.align = align; // updated scaled Size if (scale) { - this.sSize.copy(this.size); - this.sSize.x *= this.scale; - this.sSize.y *= this.scale; + this.resize(scale); } }, + + /** + * change the font display size + * @param {int} scale ratio + */ + resize : function(scale) { + // updated scaled Size + this.sSize.copy(this.size); + this.sSize.x *= scale; + this.sSize.y *= scale; + }, /** * measure the given test width @@ -229,8 +236,9 @@ for ( var i = 0; i < text.length; i++) { context.drawImage(this.font, (text.charCodeAt(i) - this.firstChar) * this.size.x, 0, - this.sSize.x, this.sSize.y, ~~x, ~~y, this.size.x, - this.size.y); + this.size.x, this.size.y, + ~~x, ~~y, + this.sSize.x, this.sSize.y); x += this.sSize.x; } From 2ed2273ce05669080cee7bab85de4aee9e607d82 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 29 Nov 2011 19:33:46 +0800 Subject: [PATCH 52/87] Changed : Code "optimization" by using a Tween object to manage the fadeIn/fadeOut object. Note that the API changed, since now the duration is expressed in ms as opposed to number of frame previously. --- src/core.js | 2 +- src/entity/camera.js | 81 ++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 49 deletions(-) diff --git a/src/core.js b/src/core.js index f0626313af..f33ab1568d 100755 --- a/src/core.js +++ b/src/core.js @@ -2079,7 +2079,7 @@ * @function * @param {String} effect (only "fade" is supported for now) * @param {String} color in RGB format (e.g. "#000000") - * @param {Int} duration (e.g. 15) + * @param {Int} [duration="1000"] in ms */ obj.transition = function(effect, color, duration) { if (effect == "fade") { diff --git a/src/entity/camera.js b/src/entity/camera.js index 416bb6ef73..e36d07e21e 100755 --- a/src/entity/camera.js +++ b/src/entity/camera.js @@ -53,6 +53,7 @@ // shake parameters _shake : null, + // fade parameters _fadeIn : null, _fadeOut : null, @@ -89,16 +90,16 @@ // flash variables this._fadeOut = { color : 0, - alpha : 0, + alpha : 0.0, duration : 0, - onComplete : null + tween : null }; // fade variables this._fadeIn = { color : 0, - alpha : 0, + alpha : 1.0, duration : 0, - onComplete : null + tween : null }; // set a default deadzone @@ -280,29 +281,8 @@ } } - // check for fade effect - if (this._fadeIn.alpha < 1.0) { - this._fadeIn.alpha += me.timer.tick - / this._fadeIn.duration; - if (this._fadeIn.alpha >= 1.0) { - this._fadeIn.alpha = 1.0; - if (this._fadeIn.onComplete) - this._fadeIn.onComplete(); - } - // updated! - updateTarget = true; - } - - // and for flash effect - if (this._fadeOut.alpha > 0.0) { - this._fadeOut.alpha -= me.timer.tick - / this._fadeOut.duration; - if (this._fadeOut.alpha <= 0.0) { - this._fadeOut.alpha = 0.0; - if (this._fadeOut.onComplete) - this._fadeOut.onComplete(); - } - // updated! + // check for fade/flash effect + if ((this._fadeIn.tween!=null) || (this._fadeOut.tween!=null)) { updateTarget = true; } @@ -349,34 +329,35 @@ }, /** - * fadeOut(flash) effect

+ * fadeOut(flash) effect

* screen is filled with the specified color and slowy goes back to normal - * @param {int} color - * @param {int} [duration="30"] + * @param {string} color in #rrggbb format + * @param {Int} [duration="1000"] in ms * @param {function} [onComplete] callback once effect is over */ fadeOut : function(color, duration, onComplete) { this._fadeOut.color = color; - this._fadeOut.duration = duration || 30; + this._fadeOut.duration = duration || 1000; // convert to ms this._fadeOut.alpha = 1.0; - this._fadeOut.onComplete = onComplete || null; - + this._fadeOut.tween = new me.Tween(this._fadeOut).to({alpha: 0.0}, this._fadeOut.duration ).onComplete(onComplete||null); + this._fadeOut.tween.start(); }, /** - * fadeIn effect

+ * fadeIn effect

* fade to the specified color - * @param {int} color - * @param {int} [duration="30"] + * @param {string} color in #rrggbb format + * @param {int} [duration="1000"] in ms * @param {function} [onComplete] callback once effect is over */ fadeIn : function(color, duration, onComplete) { this._fadeIn.color = color; - this._fadeIn.duration = duration || 30; + this._fadeIn.duration = duration || 1000; //convert to ms this._fadeIn.alpha = 0.0; - this._fadeIn.onComplete = onComplete || null; + this._fadeIn.tween = new me.Tween(this._fadeIn).to({alpha: 1.0}, this._fadeIn.duration ).onComplete(onComplete||null); + this._fadeIn.tween.start(); }, /** @@ -421,33 +402,37 @@ * render the camera effects */ draw : function(context) { + // fading effect - if (this._fadeIn.alpha < 1.0) { + if (this._fadeIn.tween) { if (me.sys.enableWebGL) { // don't use global alpha with webgl - me.video.clearSurface(context, me.utils.HexToRGB( - this._fadeIn.color, this._fadeIn.alpha)); + me.video.clearSurface(context, me.utils.HexToRGB(this._fadeIn.color, this._fadeIn.alpha)); } else { context.globalAlpha = this._fadeIn.alpha; - me.video.clearSurface(context, me.utils - .HexToRGB(this._fadeIn.color)); + me.video.clearSurface(context, me.utils.HexToRGB(this._fadeIn.color)); // set back full opacity context.globalAlpha = 1.0; } + // remove the tween if over + if (this._fadeIn.alpha==1.0) + this._fadeIn.tween = null; } + // flashing effect - if (this._fadeOut.alpha > 0.0) { + if (this._fadeOut.tween) { if (me.sys.enableWebGL) { // don't use global alpha with webgl - me.video.clearSurface(context, me.utils.HexToRGB( - this._fadeOut.color, this._fadeOut.alpha)); + me.video.clearSurface(context, me.utils.HexToRGB(this._fadeOut.color, this._fadeOut.alpha)); } else { context.globalAlpha = this._fadeOut.alpha; - me.video.clearSurface(context, me.utils - .HexToRGB(this._fadeOut.color)); + me.video.clearSurface(context, me.utils.HexToRGB(this._fadeOut.color)); // set back full opacity context.globalAlpha = 1.0; } + // remove the tween if over + if (this._fadeOut.alpha==0.0) + this._fadeOut.tween = null; } } From e3ddbfc104aa2fc2d4c8ad58ce9e10c773bbc286 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 29 Nov 2011 19:34:03 +0800 Subject: [PATCH 53/87] Updated examples to reflect last API change --- examples/alexkidd/data/map/zone1/1.tmx | 2 +- examples/alexkidd/data/map/zone1/2.tmx | 4 ++-- examples/alexkidd/data/map/zone1/3.tmx | 2 +- examples/alexkidd/main.js | 2 +- examples/dirtyRect/main.js | 2 +- examples/tilemap_collision_demo/gameObj.js | 2 +- examples/tilemap_collision_demo/main.js | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/alexkidd/data/map/zone1/1.tmx b/examples/alexkidd/data/map/zone1/1.tmx index 1fa9d5ad09..ef70499686 100644 --- a/examples/alexkidd/data/map/zone1/1.tmx +++ b/examples/alexkidd/data/map/zone1/1.tmx @@ -39,7 +39,7 @@ - + diff --git a/examples/alexkidd/data/map/zone1/2.tmx b/examples/alexkidd/data/map/zone1/2.tmx index 809960591f..3378b64793 100644 --- a/examples/alexkidd/data/map/zone1/2.tmx +++ b/examples/alexkidd/data/map/zone1/2.tmx @@ -42,7 +42,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/examples/alexkidd/data/map/zone1/3.tmx b/examples/alexkidd/data/map/zone1/3.tmx index 180806c9e0..ec401bfc43 100644 --- a/examples/alexkidd/data/map/zone1/3.tmx +++ b/examples/alexkidd/data/map/zone1/3.tmx @@ -33,7 +33,7 @@ - + diff --git a/examples/alexkidd/main.js b/examples/alexkidd/main.js index e445fac740..9d5d16fffe 100644 --- a/examples/alexkidd/main.js +++ b/examples/alexkidd/main.js @@ -48,7 +48,7 @@ var jsApp = me.state.set(me.state.PLAY, new PlayScreen()); // set a fade transition effect - me.state.transition("fade","#000000", 15); + me.state.transition("fade","#000000", 250); // add our player entity in the entity pool me.entityPool.add("playerspawnpoint", PlayerEntity); diff --git a/examples/dirtyRect/main.js b/examples/dirtyRect/main.js index aebe85deae..45a31b0200 100755 --- a/examples/dirtyRect/main.js +++ b/examples/dirtyRect/main.js @@ -81,7 +81,7 @@ var jsApp = me.state.set(me.state.PLAY, new PlayScreen()); // set a global fading transition for the screen - me.state.transition("fade", "#FFFFFF", 15); + me.state.transition("fade", "#FFFFFF", 250); // add our Player entity & Coin in the entity pool me.entityPool.add("mainPlayer", PlayerEntity); diff --git a/examples/tilemap_collision_demo/gameObj.js b/examples/tilemap_collision_demo/gameObj.js index 306b96c2a8..90e08acb2b 100644 --- a/examples/tilemap_collision_demo/gameObj.js +++ b/examples/tilemap_collision_demo/gameObj.js @@ -143,7 +143,7 @@ //console.log("ouch"); this.flicker(45); // flash the screen - me.game.viewport.fadeIn("#FFFFFF", 5); + me.game.viewport.fadeIn("#FFFFFF", 75); me.audio.play("die", false); } }, diff --git a/examples/tilemap_collision_demo/main.js b/examples/tilemap_collision_demo/main.js index 353543eda6..15657d5805 100644 --- a/examples/tilemap_collision_demo/main.js +++ b/examples/tilemap_collision_demo/main.js @@ -52,7 +52,7 @@ var jsApp = me.state.set(me.state.PLAY, new PlayScreen()); // set the fade transition effect - me.state.transition("fade","#FFFFFF", 15); + me.state.transition("fade","#FFFFFF", 250); // add our player entity in the entity pool me.entityPool.add("playerspawnpoint", PlayerEntity); From 84fd2508d6edd45c36c1482af5cc161a514e65d2 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 1 Dec 2011 19:47:01 +0800 Subject: [PATCH 54/87] Ensure x,y coordinates are also rounded when translated. --- src/entity/entity.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 0795c6bbca..9456ca5b6d 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -608,7 +608,7 @@ if (!this.flickerState) return; } - var xpos = this.pos.x - this.vp.pos.x, ypos = this.pos.y - this.vp.pos.y; + var xpos = ~~(this.pos.x - this.vp.pos.x), ypos = ~~(this.pos.y - this.vp.pos.y); if (this.scaleFlag) { // translate to the middle of the sprite @@ -624,7 +624,7 @@ context.drawImage(this.image, this.offset.x, this.offset.y, this.width, this.height, - ~~xpos, ~~ypos, + xpos, ypos, this.width, this.height); if (this.scaleFlag) { @@ -1407,10 +1407,6 @@ if ((this.onslope && !this.jumping) || this.onladder) { this.vel.y = 0; } - - // update objet animation - //this.update(); - return true; } // nothing updated (that happens!) From 8a9a1fd3e49f3145f261e9074547e7a51f4dfb45 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 5 Dec 2011 23:10:54 +0800 Subject: [PATCH 55/87] Changed : updateMovement function now returns a collision "vector" note : additional clean-up & documentation needed --- src/entity/entity.js | 49 ++++++++++++++++++++++--------- src/level/level.js | 69 +++++++++++++++++++------------------------- 2 files changed, 66 insertions(+), 52 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 9456ca5b6d..986640edaf 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -1281,7 +1281,7 @@ /** * handle the player movement, "trying" to update his position
- * @return {Boolean} true if player position has been updated + * @return {me.Vector2d} a collision vector * @example * // make the player move * if (me.input.isKeyPressed('left')) @@ -1293,7 +1293,31 @@ * this.vel.x += this.accel.x * me.timer.tick; * } * // update player position - * this.updateMovement(); + * var res = this.updateMovement(); + * + * // check for collision result with the environment + * if (res.x != 0) + * { + * // x axis + * if (res.x<0) + * console.log("x axis : left side !"); + * else + * console.log("x axis : right side !"); + * } + * else if(res.y != 0) + * { + * // y axis + * if (res.y<0) + * console.log("y axis : top side !"); + * else + * console.log("y axis : bottom side !"); + * + * // display the tile type + * console.log(res.yprop.type) + * } + * + * // check player status after collision check + * var updated = (this.vel.x!=0 || this.vel.y!=0); */ updateMovement : function() { @@ -1398,19 +1422,18 @@ } } - // check for other necessary updates - if ((this.vel.x != 0) || (this.vel.y != 0)) { - // update player position - this.pos.add(this.vel); - - // once applied cancel cumulative vel.y if onslope and !jumping or on ladder - if ((this.onslope && !this.jumping) || this.onladder) { + // update player position + this.pos.add(this.vel); + + + // once applied cancel cumulative vel.y if onslope and !jumping or on ladder + if ((this.onslope && !this.jumping) || this.onladder) { this.vel.y = 0; - } - return true; } - // nothing updated (that happens!) - return false; + + + // returns the collision "vector" + return collision; } diff --git a/src/level/level.js b/src/level/level.js index 0820e8691a..b3549c0126 100755 --- a/src/level/level.js +++ b/src/level/level.js @@ -202,29 +202,29 @@ //var x = (pv.x < 0) ? obj.pos.x + obj.colPos.x + pv.x: obj.pos.x + obj.colPos.x + obj.width + pv.x- 1; //var y = (pv.y < 0) ? obj.pos.y + obj.colPos.y + pv.y: obj.pos.y + obj.colPos.y + obj.height + pv.y ; - var x = (pv.x < 0) ? obj.left + pv.x : obj.right + pv.x - 1; + var x = (pv.x < 0) ? obj.left + pv.x : obj.right + pv.x; var y = (pv.y < 0) ? obj.top + pv.y : obj.bottom + pv.y; //to return tile collision detection - var collide = { - x : false, // true if collision on x axis - y : false, // true if collision on y axis - tile : undefined, + var res = { + x : 0, // !=0 if collision on x axis + y : 0, // !=0 if collision on y axis xprop : {}, yprop : {} }; // test x limits if (x <= 0 || x >= this.realwidth) { - collide.x = true; + res.x = pv.x; } // test y limits if (y <= 0 || y >= this.realheight) { - collide.y = true; + res.y = pv.y; } - return collide; + // return the collide object if collision + return res; }; /************************************************************************************/ @@ -350,58 +350,49 @@ var x = (pv.x < 0) ? obj.left + pv.x : obj.right + pv.x; var y = (pv.y < 0) ? obj.top + pv.y : obj.bottom + pv.y; //to return tile collision detection - collide = { - x : false, // true if collision on x axis + var res = { + x : 0, // !=0 if collision on x axis xtile : undefined, xprop : {}, - y : false, // true if collision on y axis + y : 0, // !=0 if collision on y axis ytile : undefined, yprop : {} }; //var tile; if (x <= 0 || x >= this.realwidth) { - collide.x = true; + res.x = pv.x; } else { - //console.log(obj.bottom); // x, bottom corner - collide.xtile = this.getTile(x, obj.bottom - 1);// obj.height - 1 - if (collide.xtile - && this.tileset.isTileCollidable(collide.xtile.tileId)) { - collide.x = true; - collide.xprop = this.tileset - .getTileProperties(collide.xtile.tileId); + res.xtile = this.getTile(x, obj.bottom - 1);// obj.height - 1 + if (res.xtile && this.tileset.isTileCollidable(res.xtile.tileId)) { + res.x = pv.x; // reuse pv.x to get a + res.xprop = this.tileset.getTileProperties(res.xtile.tileId); } else { // x, top corner - collide.xtile = this.getTile(x, obj.top); - if (collide.xtile - && this.tileset.isTileCollidable(collide.xtile.tileId)) { - collide.x = true; - collide.xprop = this.tileset - .getTileProperties(collide.xtile.tileId); + res.xtile = this.getTile(x, obj.top); + if (res.xtile && this.tileset.isTileCollidable(res.xtile.tileId)) { + res.x = pv.x; + res.xprop = this.tileset.getTileProperties(res.xtile.tileId); } } } // check for y movement // left, y corner - collide.ytile = this.getTile((pv.x < 0) ? obj.left : obj.right, y);// obj.width + 1 - if (collide.ytile - && this.tileset.isTileCollidable(collide.ytile.tileId)) { - collide.y = true; - collide.yprop = this.tileset - .getTileProperties(collide.ytile.tileId); + res.ytile = this.getTile((pv.x < 0) ? obj.left : obj.right, y);// obj.width + 1 + if (res.ytile && this.tileset.isTileCollidable(res.ytile.tileId)) { + res.y = pv.y || 1; + res.yprop = this.tileset.getTileProperties(res.ytile.tileId); } else { // right, y corner - collide.ytile = this.getTile((pv.x < 0) ? obj.right : obj.left, y); - if (collide.ytile - && this.tileset.isTileCollidable(collide.ytile.tileId)) { - collide.y = true; - collide.yprop = this.tileset - .getTileProperties(collide.ytile.tileId); + res.ytile = this.getTile((pv.x < 0) ? obj.right : obj.left, y); + if (res.ytile && this.tileset.isTileCollidable(res.ytile.tileId)) { + res.y = pv.y || 1; + res.yprop = this.tileset.getTileProperties(res.ytile.tileId); } } - - return collide; + // return the collide object + return res; }; /* ----- From 95146ddb5d0440b9df3f5cccff31f8444419350a Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 5 Dec 2011 23:12:04 +0800 Subject: [PATCH 56/87] Updated examples to comply with last API change --- examples/alexkidd/gameObj.js | 7 ++- examples/dirtyRect/gameObj.js | 7 ++- examples/tilemap_collision_demo/gameObj.js | 67 ++++++++++++---------- 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/examples/alexkidd/gameObj.js b/examples/alexkidd/gameObj.js index b286f5754e..794a4cebce 100644 --- a/examples/alexkidd/gameObj.js +++ b/examples/alexkidd/gameObj.js @@ -71,18 +71,19 @@ } // check & update player movement - updated = this.updateMovement(); + this.updateMovement(); // check for collision with other entities me.game.collide(this); // update animation - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); \ No newline at end of file diff --git a/examples/dirtyRect/gameObj.js b/examples/dirtyRect/gameObj.js index d2d76385f8..4551ba2706 100644 --- a/examples/dirtyRect/gameObj.js +++ b/examples/dirtyRect/gameObj.js @@ -58,7 +58,7 @@ var PlayerEntity = me.ObjectEntity.extend( } // check & update player movement - updated = this.updateMovement(); + this.updateMovement(); // check for collision res = me.game.collide(this); @@ -81,12 +81,13 @@ var PlayerEntity = me.ObjectEntity.extend( } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); diff --git a/examples/tilemap_collision_demo/gameObj.js b/examples/tilemap_collision_demo/gameObj.js index 90e08acb2b..887eaf7baa 100644 --- a/examples/tilemap_collision_demo/gameObj.js +++ b/examples/tilemap_collision_demo/gameObj.js @@ -43,7 +43,7 @@ this.addAnimation ("climb", [4,5,6,7]); // set default one - this.setCurrentAnimation("climb"); + this.setCurrentAnimation("walk"); }, @@ -83,51 +83,56 @@ { if (this.doJump()) { - me.audio.play("jump", false); + me.audio.play("jump", false); } + } - // check & update player movement - updated = this.updateMovement(); - + // check for collision with environment + var env_res = this.updateMovement(); + + // make sure we have the right animation + if (this.onladder) + { + if ((doClimb || this.jumping) && this.isCurrentAnimation("walk")) + this.setCurrentAnimation("climb"); + } + else if (this.isCurrentAnimation("climb")) + { + this.setCurrentAnimation("walk"); + } + + // check for collision with sthg var res = me.game.collide(this); if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - this.forceJump(); - } - else - { - this.die(); - } - } - else if (res.type == "spikeobject") - { - this.forceJump(); - this.die(); - } - } - - if (updated) { - // update the object animation - if (this.onladder & doClimb) + if (res.type == me.game.ENEMY_OBJECT) { - this.setCurrentAnimation("climb"); + if ((res.y>0) && !this.jumping) + { + this.forceJump(); + } + else + { + this.die(); + } } - else + else if (res.type == "spikeobject") { - this.setCurrentAnimation("walk"); + this.forceJump(); + this.die(); } + } + + if (this.vel.x!=0 || this.vel.y!=0 || (this.onladder && doClimb) || this.isFlickering()) + { this.parent(); + return true; } - return updated; + return false; }, From 195db59d8950b1e05192e7d1f84cf8b88daf3914 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 6 Dec 2011 03:10:29 +0800 Subject: [PATCH 57/87] Some necessary code clean-up for the doJump function (that was making something simple, so complicated) --- src/entity/entity.js | 96 ++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 66 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 986640edaf..342211c0f8 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -975,8 +975,7 @@ * @type Boolean * @name me.ObjectEntity#jumping */ - this.jumping = false; - this.jumpspeed = 0; + this.jumping = true; // some usefull slope variable this.slopeY = 0; @@ -1166,16 +1165,10 @@ * @protected */ doJump : function() { + // only jump if standing if (!this.jumping && !this.falling) { - this.jumpspeed = this.accel.y; + this.vel.y = -this.maxVel.y * me.timer.tick; this.jumping = true; - - // adjust y pos if on a slope tile - if (this.onslope) { - //this.pos.y -= this.slopeY; - //console.log("jump on slope"); - //this.jumpspeed += this.slopeY; - } return true; } return false; @@ -1187,8 +1180,7 @@ * @protected */ forceJump : function() { - this.jumping = false; - this.falling = false; + this.jumping = this.falling = false; this.doJump(); }, @@ -1214,23 +1206,24 @@ * @private */ checkSlope : function(tile, left) { + // first make the object stick to the tile this.pos.y = tile.pos.y - this.height; - + // normally the check should be on the object center point, but since the collision check is done // on corner, we must do the same thing here if (left) - this.slopeY = tile.height - - (this.collisionBox.right + this.vel.x - tile.pos.x); + this.slopeY = tile.height - (this.collisionBox.right + this.vel.x - tile.pos.x); else this.slopeY = (this.collisionBox.left + this.vel.x - tile.pos.x); // some limit check, workaround when entering/exiting slopes tile this.slopeY = this.slopeY.clamp(0, tile.height); - if ((this.vel.x != 0) || this.falling) { + if (this.vel.x != 0) { // apply it to vel.y this.vel.y = this.slopeY; + } else { // apply to pos.y, so we don't indicate we actually change pos this.vel.y = 0; @@ -1244,23 +1237,12 @@ */ computeVelocity : function(vel) { - // apply gravity on y axis - if (this.jumping) { - this.jumpspeed -= this.gravity; - if ((this.jumpspeed < 0))// || !me.input.keyStatus('jump')) // jumping) - { - this.jumping = false; - this.falling = true; - vel.y = 0; - } else - vel.y = -this.jumpspeed; - } - // else apply a constant gravity - else if (!this.onladder && this.gravity) { - //this.jumping = false - this.falling = true; - vel.y += (this.gravity * me.timer.tick); - } + // apply a constant gravity (if not on a ladder) + vel.y += !this.onladder?(this.gravity * me.timer.tick):0; + + // check if falling / jumping + this.falling = (vel.y > 0); + this.jumping = this.falling?false:this.jumping; // apply friction if (this.friction.x) @@ -1328,35 +1310,28 @@ // update some flags this.onladder = collision.xprop.isLadder; - this.onslope = collision.yprop.isSlope || collision.xprop.isSlope; + this.onslope = collision.yprop.isSlope || collision.xprop.isSlope; // y collision if (collision.y) { // going down, // collision with the floor - if (this.vel.y > 0) { + if (collision.y > 0) { // update the onslope flag //this.onslope = collision.yprop.isSlope - if (collision.yprop.isSolid - || (collision.yprop.isPlatform && (~~this.pos.y - + this.height <= collision.ytile.pos.y))) { + if (collision.yprop.isSolid || (collision.yprop.isPlatform && (~~this.pos.y + this.height <= collision.ytile.pos.y))) { // round pos.y this.pos.y = ~~this.pos.y; // adjust val to tile pos - this.vel.y = (this.falling) ? collision.ytile.pos.y - - this.pos.y - this.height - : 0; - + this.vel.y = (this.falling) ? collision.ytile.pos.y - this.pos.y - this.height : 0; this.falling = false; - } else if (collision.yprop.isSlope && !this.jumping) // && this.falling - { + } else if (collision.yprop.isSlope && !this.jumping) { // we stop falling //this.onslope = true; //console.log("yslope"); - this.checkSlope(collision.ytile, - collision.yprop.isLeftSlope); + this.checkSlope(collision.ytile, collision.yprop.isLeftSlope); //this.onladder = false; this.falling = false; //this.jumping = false; @@ -1364,28 +1339,23 @@ } else if (collision.yprop.isBreakable) { if (this.canBreakTile) { // remove the tile - me.game.currentLevel.clearTile( - collision.ytile.row, - collision.ytile.col); + me.game.currentLevel.clearTile(collision.ytile.row, collision.ytile.col); if (this.onTileBreak) this.onTileBreak(); } else { // cancel vel and adjust to tile pos // round pos.y this.pos.y = ~~this.pos.y; - this.vel.y = (this.falling) ? collision.ytile.pos.y - - this.pos.y - this.height - : 0; + this.vel.y = (this.falling) ? collision.ytile.pos.y - this.pos.y - this.height : 0; this.falling = false; } } } // going up // collision with ceiling - else if (this.vel.y < 0) { - if (!collision.yprop.isPlatform - && !collision.yprop.isLadder) { - this.jumping = false; + else if (collision.y < 0) { + if (!collision.yprop.isPlatform && !collision.yprop.isLadder) { + //this.jumping = false; this.falling = true; // cancel the y velocity this.vel.y = 0; @@ -1396,19 +1366,14 @@ // x collision if (collision.x) { if (collision.xprop.isSlope && !this.jumping) { - this.checkSlope(collision.xtile, - collision.xprop.isLeftSlope); + this.checkSlope(collision.xtile, collision.xprop.isLeftSlope); this.falling = false; } else { // can walk through the platform & ladder - if (!collision.xprop.isPlatform - && !collision.xprop.isLadder) { - if (collision.xprop.isBreakable - && this.canBreakTile) { + if (!collision.xprop.isPlatform && !collision.xprop.isLadder) { + if (collision.xprop.isBreakable && this.canBreakTile) { // remove the tile - me.game.currentLevel.clearTile( - collision.xtile.row, - collision.xtile.col); + me.game.currentLevel.clearTile(collision.xtile.row, collision.xtile.col); if (this.onTileBreak) { this.onTileBreak(); } @@ -1430,7 +1395,6 @@ if ((this.onslope && !this.jumping) || this.onladder) { this.vel.y = 0; } - // returns the collision "vector" return collision; From 9afdb0e79c4cfeb05cb90edf12452689f6b00b9f Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 12 Dec 2011 19:48:35 +0800 Subject: [PATCH 58/87] More code clean-up ! note : It's now up to the game to decide what to do once on a ladder (keep going up & down, or cancel velocity at each step). --- examples/tilemap_collision_demo/gameObj.js | 9 +++-- src/entity/entity.js | 40 +++++----------------- 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/examples/tilemap_collision_demo/gameObj.js b/examples/tilemap_collision_demo/gameObj.js index 887eaf7baa..6934fd03a7 100644 --- a/examples/tilemap_collision_demo/gameObj.js +++ b/examples/tilemap_collision_demo/gameObj.js @@ -19,6 +19,8 @@ // walking & jumping speed this.setVelocity(2, 13); + this.setFriction(0.2,0); + // update the hit box this.updateColRect(12,8, -1,0); @@ -67,7 +69,7 @@ } else { - this.vel.x = 0; + //this.vel.x = 0; } if (me.input.isKeyPressed('up')) @@ -91,9 +93,12 @@ // check for collision with environment var env_res = this.updateMovement(); - // make sure we have the right animation if (this.onladder) { + // cancel residual y vel + this.vel.y = 0; + + // make sure we have the right animation if ((doClimb || this.jumping) && this.isCurrentAnimation("walk")) this.setCurrentAnimation("climb"); } diff --git a/src/entity/entity.js b/src/entity/entity.js index 342211c0f8..1c952d2cb3 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -1210,25 +1210,18 @@ // first make the object stick to the tile this.pos.y = tile.pos.y - this.height; - // normally the check should be on the object center point, but since the collision check is done - // on corner, we must do the same thing here + // normally the check should be on the object center point, + // but since the collision check is done on corner, we must do the same thing here if (left) this.slopeY = tile.height - (this.collisionBox.right + this.vel.x - tile.pos.x); else this.slopeY = (this.collisionBox.left + this.vel.x - tile.pos.x); - - // some limit check, workaround when entering/exiting slopes tile - this.slopeY = this.slopeY.clamp(0, tile.height); - - if (this.vel.x != 0) { - // apply it to vel.y - this.vel.y = this.slopeY; - - } else { - // apply to pos.y, so we don't indicate we actually change pos - this.vel.y = 0; - this.pos.y += this.slopeY; - } + + // cancel y vel + this.vel.y = 0; + // set player position (+ workaround when entering/exiting slopes tile) + this.pos.y += this.slopeY.clamp(0, tile.height); + }, /** @@ -1318,8 +1311,6 @@ // going down, // collision with the floor if (collision.y > 0) { - // update the onslope flag - //this.onslope = collision.yprop.isSlope if (collision.yprop.isSolid || (collision.yprop.isPlatform && (~~this.pos.y + this.height <= collision.ytile.pos.y))) { // round pos.y @@ -1329,13 +1320,8 @@ this.falling = false; } else if (collision.yprop.isSlope && !this.jumping) { // we stop falling - //this.onslope = true; - //console.log("yslope"); this.checkSlope(collision.ytile, collision.yprop.isLeftSlope); - //this.onladder = false; this.falling = false; - //this.jumping = false; - //this.onslope = true; } else if (collision.yprop.isBreakable) { if (this.canBreakTile) { // remove the tile @@ -1355,7 +1341,6 @@ // collision with ceiling else if (collision.y < 0) { if (!collision.yprop.isPlatform && !collision.yprop.isLadder) { - //this.jumping = false; this.falling = true; // cancel the y velocity this.vel.y = 0; @@ -1381,21 +1366,12 @@ this.vel.x = 0; } } - // do we climb the ladder - //this.onladder = collision.xprop.isLadder && (this.vel.x != 0); - } } // update player position this.pos.add(this.vel); - - // once applied cancel cumulative vel.y if onslope and !jumping or on ladder - if ((this.onslope && !this.jumping) || this.onladder) { - this.vel.y = 0; - } - // returns the collision "vector" return collision; From 8c0512a8b94425d7213d79a86942080303dc11a9 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 12 Dec 2011 20:04:01 +0800 Subject: [PATCH 59/87] Removed the empty else statement --- examples/tilemap_collision_demo/gameObj.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/tilemap_collision_demo/gameObj.js b/examples/tilemap_collision_demo/gameObj.js index 6934fd03a7..0ef7d30db1 100644 --- a/examples/tilemap_collision_demo/gameObj.js +++ b/examples/tilemap_collision_demo/gameObj.js @@ -67,10 +67,6 @@ { this.doWalk(false); } - else - { - //this.vel.x = 0; - } if (me.input.isKeyPressed('up')) { From 2c5b1e28dd415b7b4e63b2caee08371f04821390 Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 12 Dec 2011 20:24:47 +0800 Subject: [PATCH 60/87] Fixed a regression with the "shaking" bug being back --- src/entity/entity.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 1c952d2cb3..6265bd50b1 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -1230,12 +1230,15 @@ */ computeVelocity : function(vel) { - // apply a constant gravity (if not on a ladder) - vel.y += !this.onladder?(this.gravity * me.timer.tick):0; - - // check if falling / jumping - this.falling = (vel.y > 0); - this.jumping = this.falling?false:this.jumping; + // apply gravity (if any) + if (this.gravity) { + // apply a constant gravity (if not on a ladder) + vel.y += !this.onladder?(this.gravity * me.timer.tick):0; + + // check if falling / jumping + this.falling = (vel.y > 0); + this.jumping = this.falling?false:this.jumping; + } // apply friction if (this.friction.x) From ffdd73f2f9fd8b30396617ffbf4fb4c0ff612947 Mon Sep 17 00:00:00 2001 From: obiot Date: Thu, 15 Dec 2011 20:41:01 +0800 Subject: [PATCH 61/87] Corrected displayed error string when level not found --- src/level/level.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/level/level.js b/src/level/level.js index b3549c0126..0bd31ce49d 100755 --- a/src/level/level.js +++ b/src/level/level.js @@ -639,7 +639,7 @@ */ obj.loadLevel = function(level) { if (levels[level] === undefined) { - throw ("melonJS: level %s not found" + level); + throw ("melonJS: level " + level + " not found"); return; } From 8a4bcaa2eacfde97ab7aaa7b4872f0326696e956 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 01:24:00 +0800 Subject: [PATCH 62/87] Added support for multiline fontsheet (with fixed cell size) --- src/font/font.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/font/font.js b/src/font/font.js index 348e40f61a..f5196a993b 100644 --- a/src/font/font.js +++ b/src/font/font.js @@ -125,7 +125,7 @@ * @memberOf me * @constructor * @param {String} font - * @param {int} size + * @param {int/Object} size either an int value, or an object like {x:16,y:16} * @param {int} [scale="1.0"] * @param {String} [firstChar="0x20"] @@ -139,6 +139,9 @@ sSize : null, // first char in the ascii table firstChar : 0x20, + + // #char per row + charCount : 0, /** @private */ init : function(font, size, scale, firstChar) { @@ -175,9 +178,12 @@ this.font = me.loader.getImage(font); // some cheap metrics - this.size.x = size; - this.size.y = this.font.height || 0; + this.size.x = size.x || size; + this.size.y = size.y || this.font.height; this.sSize.copy(this.size); + + // #char per row + this.charCount = ~~(this.font.width / this.size.x); }, /** @@ -232,10 +238,14 @@ if (this.align == this.ALIGN.RIGHT) { x -= text.length * this.sSize.x; } - + // draw the text for ( var i = 0; i < text.length; i++) { + // calculate the char index + var idx = text.charCodeAt(i) - this.firstChar; + // draw it context.drawImage(this.font, - (text.charCodeAt(i) - this.firstChar) * this.size.x, 0, + this.size.x * (idx % this.charCount), + this.size.y * ~~(idx / this.charCount), this.size.x, this.size.y, ~~x, ~~y, this.sSize.x, this.sSize.y); From 775f3ae5c40ac1d9cdea09c05490fa77f843a038 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 16:40:31 +0800 Subject: [PATCH 63/87] Goodbye CC, Hello MIT ! Website will be updated along with the 0.9.2 release. --- MIT-LICENSE | 19 +++++++++++++++++++ Makefile | 5 ++--- README | 5 ++--- src/core.js | 5 ++--- 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 MIT-LICENSE diff --git a/MIT-LICENSE b/MIT-LICENSE new file mode 100644 index 0000000000..d326c9203b --- /dev/null +++ b/MIT-LICENSE @@ -0,0 +1,19 @@ +Copyright (C) <2011> by + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile index deb434c405..54d39e9d4a 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,8 @@ # Copyright (C) 2011, Olivier BIOT # http://www.melonjs.org # -# melonJS is licensed under a Creative Commons -# Attribution-NonCommercial-NoDerivs 3.0 Unported License. -# http://creativecommons.org/licenses/by-nc-nd/3.0/ +# melonJS is licensed under the MIT License. +# http://www.opensource.org/licenses/mit-license.php # # javascript compilation / "minification" makefile # diff --git a/README b/README index a48d85a5ce..76d2a2ef4e 100644 --- a/README +++ b/README @@ -2,9 +2,8 @@ MelonJS Game Engine Copyright (C) 2011, Olivier BIOT http://www.melonjs.org -melonJS is licensed under a Creative Commons -Attribution-NonCommercial-ShareAlike 3.0 Unported License. -http://creativecommons.org/licenses/by-nc-sa/3.0/ +melonJS is licensed under the MIT License. +http://www.opensource.org/licenses/mit-license.php ------------------------------------------------------------------------------------------------------ diff --git a/src/core.js b/src/core.js index f33ab1568d..62e0c401c7 100755 --- a/src/core.js +++ b/src/core.js @@ -3,9 +3,8 @@ * Copyright (C) 2011, Olivier BIOT * http://www.melonjs.org * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php * * @author Olivier Biot 2011 * From 9a739e06b8125a97554214f5aa471481f0dc4901 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 17:56:07 +0800 Subject: [PATCH 64/87] sync'ed changelog and github history --- CHANGELOG | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0e9d0a7f2f..575c1881a9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,8 +1,35 @@ - -Version History +Version History --------------- 0.9.2 -* +* General: melonJS is now licensed under the terms of the MIT License +* General: added some Cake magic, allowing to use melonJS with CofeeScript (by scan) +* General: added melonJS UML Class Diagram in the official repository (by Ben2303) +* Audio: configurable behavior in case of audio loading error +* Core: fixed a shaking bug when collision box is not aligned with the sprite box +* Core: fixed collision detection bug (object being tested again itself) +* Core: refactored fading function using Tween objects (API CHANGE, see documentation) +* Core: added a helper method to know the sign of an number +* Core: Corrected variables definition (global->local) +* Core: added a GUID (ÒGame Unique IdentifierÓ) to objects +* Core: getEntityByName now also returns non Entity Object (like layers) +* Doc: various documentation correction and improvements +* Entity: added friction management +* Entity: updateMovement function now returns a collision "vector (API CHANGE, see documentation) +* Entity: refactored/cleaned-up movement/collision function +* Entity: added support for multiline spritesheet (fixed cell size) +* Entity: added the possibility to define a specific transparent color for spritesheet +* Entity: implemented a resize function, allowing to resize a sprite on the fly +* Entity: optimized/refactored SpriteObject +* Entity: fixed object with 1 single sprite (no animation) not begin updated +* Entity: Added the possibility to also specify a callback when an animation is over +* Event: also cancel event bubbling +* Font: added support for multiline fontsheet +* HUD: added a setItemValue() function +* Loader: added possibility to add graphics resources after pre-loading (e.g. ingame) +* TMX: use native Base64 decoding when available +* Viewport: Object to follow can either be a Object Entity or a position Vector +* Viewport: Fixed default value (if parameter not specified) for Axis to follow on +* Video: cleaned-up the applyRGBFilter function 0.9.1 * Core: "cache image" option (disabled by default) to use canvas instead of directly using Image Object From d75cb1f09b27b766f1ebada7841873214b4d6acb Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 17:57:50 +0800 Subject: [PATCH 65/87] typo correction --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 575c1881a9..ebfa1b6551 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,7 +10,7 @@ Version History * Core: refactored fading function using Tween objects (API CHANGE, see documentation) * Core: added a helper method to know the sign of an number * Core: Corrected variables definition (global->local) -* Core: added a GUID (ÒGame Unique IdentifierÓ) to objects +* Core: added a GUID (Game Unique Identifier) to objects * Core: getEntityByName now also returns non Entity Object (like layers) * Doc: various documentation correction and improvements * Entity: added friction management From e876a55db683cb7cbc55882c894973e9219183ca Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 18:12:57 +0800 Subject: [PATCH 66/87] A better readme ! to be completed --- README | 37 ----------------------------- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 37 deletions(-) delete mode 100644 README create mode 100644 README.md diff --git a/README b/README deleted file mode 100644 index 76d2a2ef4e..0000000000 --- a/README +++ /dev/null @@ -1,37 +0,0 @@ -MelonJS Game Engine -Copyright (C) 2011, Olivier BIOT -http://www.melonjs.org - -melonJS is licensed under the MIT License. -http://www.opensource.org/licenses/mit-license.php - ------------------------------------------------------------------------------------------------------- - -melonJS is the result of my enthusiasm & my past experiments with Javascript, -and currently features : - -- A fresh & lightweight 2D sprite-based engine -- Standalone library (does not rely on anything else, except a HTML5 capable browser) -- Compatible with most major browser (Chrome, Safari, Firefox, Opera, IE) -- Multiple Audio Channel support -- Basic physics & collision mechanisms (to ensure low cpu requirements) -- Tween Effects -- Transition effects -- A basic set of Object Entities (to be extended) -- Basic animation management -- A state manager (to easily manage loading, menu, options, in-game state) -- Tiled map format version 0.7.0 integration for easy level design - - Uncompressed Plain, Base64 and CSV encoded XML tilemap loading - - Orthogonal tilemap - - Multiple layers (multiple background/Foreground, collision and "Parallax" layers) - - Multiple Tileset - - Layer Alpha settings - - Tileset Transparency settings - - Tiled Object - - Flipped Tiles - - Dynamic Layer and Object/Group ordering - - Dynamic Entity loading - - Solid, Platform, Slope and Breakable Tiles -- System & bitmap fonts -- some basic GUI elements -- a customizable loader, etc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000..64fab42b23 --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ + +[melonJS](http://melonjs.org/) - a fresh & lightweight 2D sprite-based engine +============================================================================= + +Copyright (C) 2011, Olivier BIOT +melonJS is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php) + + +About melonJS +------------------------------------------------------------------------------- + +melonJS is the result of my enthusiasm & my past experiments with Javascript, +and currently features : + +- A fresh & lightweight 2D sprite-based engine +- Standalone library (does not rely on anything else, except a HTML5 capable browser) +- Compatible with most major browser (Chrome, Safari, Firefox, Opera, IE) +- Multiple Audio Channel support +- Basic physics & collision mechanisms (to ensure low cpu requirements) +- Tween Effects +- Transition effects +- A basic set of Object Entities (to be extended) +- Basic animation management +- A state manager (to easily manage loading, menu, options, in-game state) +- Tiled map format version 0.7.x integration for easy level design + - Uncompressed Plain, Base64 and CSV encoded XML tilemap loading + - Orthogonal tilemap + - Multiple layers (multiple background/Foreground, collision and "Parallax" layers) + - Multiple Tileset support + - Tileset Transparency settings + - Layers Alpha settings + - Tiled Objects + - Flipped Tiles + - Dynamic Layer and Object/Group ordering + - Dynamic Entity loading + - Solid, Platform, Slope and Breakable Tiles +- System & bitmap fonts +- some basic GUI elements +- a customizable loader, etc + +Building melonJS +------------------------------------------------------------------------------- +* regular flavored build : +$ cd melonJS +$ mkdir build +$ make +$ make doc + +* CoffeeScript flavored build : +First make sure that you have installed : + - [node.js](http://nodejs.org/) + - [npm](http://npmjs.org/) + - [CofeeScript](http://jashkenas.github.com/coffee-script/) + +sudo npm install -g coffee-script +$ cd melonJS +$ npm install -d # Installs the deps from the package.json file +$ cake build:browser + +Building the documentation +------------------------------------------------------------------------------- +$ cd melonJS +$ make doc +The generated documentation will be then available under the "docs" directory + +Questions, need help ? +------------------------------------------------------------------------------- + +If you need help, or have any questions, please feel free to ask on the +[melonJS developer forum](http://groups.google.com/group/melonjs), +or send us an email to contact@melonjs.org From b6b93a0aa4eabf67d649d489db9284641774bb85 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 18:17:40 +0800 Subject: [PATCH 67/87] typo correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 64fab42b23..c9a24dfc6d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ============================================================================= Copyright (C) 2011, Olivier BIOT -melonJS is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php) +melonJS is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php) About melonJS From f56550c8e92470484b1b5a7da6fa47db64b683a9 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 18:32:14 +0800 Subject: [PATCH 68/87] CR & format correction --- README.md | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index c9a24dfc6d..35660e14ac 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - [melonJS](http://melonjs.org/) - a fresh & lightweight 2D sprite-based engine ============================================================================= Copyright (C) 2011, Olivier BIOT + melonJS is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php) @@ -40,32 +40,42 @@ and currently features : Building melonJS ------------------------------------------------------------------------------- -* regular flavored build : -$ cd melonJS -$ mkdir build -$ make -$ make doc +* Regular flavored build : + +`$ cd melonJS` + +`$ mkdir build` + +`$ make` + +Both plain and minified library will be available under the "build" directory * CoffeeScript flavored build : + First make sure that you have installed : - - [node.js](http://nodejs.org/) - - [npm](http://npmjs.org/) - - [CofeeScript](http://jashkenas.github.com/coffee-script/) -sudo npm install -g coffee-script -$ cd melonJS -$ npm install -d # Installs the deps from the package.json file -$ cake build:browser +- [node.js](http://nodejs.org/) +- [npm](http://npmjs.org/) +- [CofeeScript](http://jashkenas.github.com/coffee-script/) + +`$ sudo npm install -g coffee-script` + +`$ cd melonJS` + +`$ npm install -d` # Installs the deps from the package.json file + +`$ cake build:browser` Building the documentation ------------------------------------------------------------------------------- -$ cd melonJS -$ make doc + +`cd melonJS` + +`make doc` + The generated documentation will be then available under the "docs" directory Questions, need help ? ------------------------------------------------------------------------------- - If you need help, or have any questions, please feel free to ask on the -[melonJS developer forum](http://groups.google.com/group/melonjs), -or send us an email to contact@melonjs.org +[melonJS developer forum](http://groups.google.com/group/melonjs), or send us an [email](mailto:contact@melonjs.org). From e2815d9470f9af4a7df7344b73a7e0ffa1768671 Mon Sep 17 00:00:00 2001 From: obiot Date: Sun, 18 Dec 2011 19:21:33 +0800 Subject: [PATCH 69/87] 1st-pass update of the tutorial with version 0.9.2 --- tutorial/index.html | 62 ++++----- tutorial/tutorial_final/gameObj.js | 96 +++++++------- tutorial/tutorial_final/index.html | 2 +- .../tutorial_final/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_final/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_final/main.js | 78 ++++++------ tutorial/tutorial_step2/index.html | 2 +- .../tutorial_step2/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step2/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step3/gameObj.js | 17 +-- tutorial/tutorial_step3/index.html | 2 +- .../tutorial_step3/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step3/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step4/index.html | 2 +- .../tutorial_step4/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step4/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step5/gameObj.js | 92 ++++++-------- tutorial/tutorial_step5/index.html | 2 +- .../tutorial_step5/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step5/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step6/gameObj.js | 106 ++++++---------- tutorial/tutorial_step6/index.html | 2 +- .../tutorial_step6/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step6/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step7/gameObj.js | 120 ++++++++---------- tutorial/tutorial_step7/index.html | 2 +- .../tutorial_step7/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step7/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_step8/gameObj.js | 120 ++++++++---------- tutorial/tutorial_step8/index.html | 2 +- .../tutorial_step8/lib/melonJS-0.9.1-min.js | 24 ---- .../tutorial_step8/lib/melonJS-0.9.2-min.js | 23 ++++ tutorial/tutorial_template/index.html | 2 +- .../lib/melonJS-0.9.1-min.js | 24 ---- .../lib/melonJS-0.9.2-min.js | 23 ++++ 35 files changed, 530 insertions(+), 602 deletions(-) delete mode 100644 tutorial/tutorial_final/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_final/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step2/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step2/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step3/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step3/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step4/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step4/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step5/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step5/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step6/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step6/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step7/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step7/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_step8/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js delete mode 100644 tutorial/tutorial_template/lib/melonJS-0.9.1-min.js create mode 100644 tutorial/tutorial_template/lib/melonJS-0.9.2-min.js diff --git a/tutorial/index.html b/tutorial/index.html index bb4c5b447f..581b122f37 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -96,7 +96,7 @@

Introduction:

use for the tutorial :
    -
  • a copy of melonJS (0.9.1) (/lib)
  • +
  • a copy of melonJS (0.9.2) (/lib)
  • a level tileset and a metatileset for collision (/data/area01_tileset/) @@ -118,12 +118,9 @@

    Introduction:

Testing/debugging :
- Due to the "cross-origin request" security mechanism implemented in Chrome, it's - unfortunately not possible to test any local content (at least for now). The browser - will complain when trying to load a level map. This means that, except if you have a - local server, you can only test your game with Chrome when the game is uploaded to an - actual web server. I therefore recommend using Safari or Opera locally, and then - check the final result "online" with Chrome.

+ When using Chrome, and due to the "cross-origin request" security mechanism implemented, + you need to use the "--disable-web-security" parameter when launching the browser in order + to test any local content, else the browser will complain when trying to load a level map.

Additional Credits :
- Introduction:

Part 1: Creating a level using Tiled

-

melonJS only supports XML and Base64 (uncompressed) encoded tilemaps, so +

melonJS supports Plain, CSV, XML and Base64 uncompressed encoded tilemaps, so before continuing, please check that your settings are correct (Tiled/Preferences). I recommend the Base64 encoding, since it produces a smaller file. Part 3: Add a main player } // check & update player movement - updated = this.updateMovement(); + this.updateMovement(); - // update animation - if (updated) { + // update animation if necessary + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation - this.parent(this); + this.parent(this); + return true; } - return updated; + return false; } }); @@ -780,14 +778,14 @@

Part 5: Adding some basic objects and enemies

} else { this.vel.x = 0; } - // check & update movement - updated = this.updateMovement(); - - if (updated) { - // update the object animation - this.parent(); - } - return updated; + + // update animation if necessary + if (this.vel.x!=0 || this.vel.y!=0) { + // update objet animation + this.parent(this); + return true; + } + return false; } }); @@ -838,10 +836,10 @@

Part 5: Adding some basic objects and enemies

} // check & update player movement - updated = this.updateMovement(); + this.updateMovement(); // check for collision - res = me.game.collide(this); + var res = me.game.collide(this); if (res) { // if we collide with an enemy @@ -857,12 +855,14 @@

Part 5: Adding some basic objects and enemies

} } - // update animation - if (updated) { - // update objet animation - this.parent(this); - } - return updated; + // update animation if necessary + if (this.vel.x!=0 || this.vel.y!=0) { + // update objet animation + this.parent(this); + return true; + } + return false; + } }); @@ -1196,7 +1196,7 @@

Part 7: Adding some audio

update function of the mainPlayer :


 // check for collision
-res = me.game.collide(this);
+var res = me.game.collide(this);
 
 if (res) {
     if (res.type == me.game.ENEMY_OBJECT) {
@@ -1441,7 +1441,7 @@ 

Part 9: Adding a title screen

me.state.set(me.state.PLAY, new PlayScreen()); // set a global fading transition for the screen - me.state.transition("fade", "#FFFFFF", 15); + me.state.transition("fade", "#FFFFFF", 250); // add our player entity in the entity pool me.entityPool.add("mainPlayer", PlayerEntity); diff --git a/tutorial/tutorial_final/gameObj.js b/tutorial/tutorial_final/gameObj.js index fe24f50cc0..266de8b48d 100644 --- a/tutorial/tutorial_final/gameObj.js +++ b/tutorial/tutorial_final/gameObj.js @@ -5,9 +5,9 @@ ------ */ /*************************/ - /* */ + /* */ /* a player entity */ - /* */ + /* */ /*************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -26,7 +26,7 @@ // set the walking & jumping speed this.setVelocity(3, 15); - // adjust the bounding box + // adjust the bounding box this.updateColRect(8,48, -1,0); // set the display to follow our position on both axis @@ -57,52 +57,53 @@ if (me.input.isKeyPressed('jump')) { if (this.doJump()) - { - me.audio.play("jump"); - } + { + me.audio.play("jump"); + } } // check & update player movement - updated = this.updateMovement(); + this.updateMovement(); - // check for collision - res = me.game.collide(this); - - if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - // bounce - me.audio.play("stomp"); - this.forceJump(); - } - else - { - // let's flicker in case we touched an enemy - this.flicker(45); - } - } - } + // check for collision + var res = me.game.collide(this); + + if (res) + { + if (res.type == me.game.ENEMY_OBJECT) + { + if ((res.y>0) && !this.jumping) + { + // bounce + me.audio.play("stomp"); + this.forceJump(); + } + else + { + // let's flicker in case we touched an enemy + this.flicker(45); + } + } + } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a Coin entity */ - /* */ - /****************************/ + /* */ + /* a Coin entity */ + /* */ + /***************************/ var CoinEntity = me.CollectableEntity.extend( { @@ -124,9 +125,9 @@ }); /************************************************************************************/ - /* */ - /* an enemy Entity */ - /* */ + /* */ + /* an enemy Entity */ + /* */ /************************************************************************************/ var EnemyEntity = me.ObjectEntity.extend( { @@ -147,10 +148,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(4, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -177,7 +178,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -190,29 +191,30 @@ { this.walkLeft = true; } - this.doWalk(this.walkLeft); + this.doWalk(this.walkLeft); } else { this.vel.x = 0; } // check & update movement - updated = this.updateMovement(); + this.updateMovement(); - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation this.parent(); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a score HUD Item */ - /* */ - /****************************/ + /* */ + /* a score HUD Item */ + /* */ + /***************************/ var ScoreObject = me.HUD_Item.extend( diff --git a/tutorial/tutorial_final/index.html b/tutorial/tutorial_final/index.html index bf069e249f..2f2b6641cd 100644 --- a/tutorial/tutorial_final/index.html +++ b/tutorial/tutorial_final/index.html @@ -29,7 +29,7 @@

melonJS game creation tutorial

-
SpicyPixel.NET for the GfxLib-Fuzed assets
- noSaopRadio for the ingame music
- + diff --git a/tutorial/tutorial_final/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_final/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_final/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_final/main.js b/tutorial/tutorial_final/main.js index a681cc55ae..f98b9168d7 100644 --- a/tutorial/tutorial_final/main.js +++ b/tutorial/tutorial_final/main.js @@ -9,30 +9,30 @@ // game resources var g_resources= [ - // our level tileset - {name: "area01_level_tiles", type:"image", src: "data/area01_tileset/area01_level_tiles.png"}, - // our levels - {name: "area01", type: "tmx", src: "data/area01.tmx"}, - {name: "area02", type: "tmx", src: "data/area02.tmx"}, - // the main player spritesheet - {name: "gripe_run_right", type:"image", src: "data/sprite/gripe_run_right.png"}, - // the parallax background - {name: "area01_bkg0", type:"image", src: "data/area01_parallax/area01_bkg0.png"}, - {name: "area01_bkg1", type:"image", src: "data/area01_parallax/area01_bkg1.png"}, - // the spinning coin spritesheet - {name: "spinning_coin_gold", type:"image", src: "data/sprite/spinning_coin_gold.png"}, - // our enemty entity - {name: "wheelie_right", type:"image", src: "data/sprite/wheelie_right.png"}, - // game font - {name: "32x32_font", type:"image", src: "data/sprite/32x32_font.png"}, - // audio resources - {name: "cling", type: "audio", src: "data/audio/", channel : 2}, - {name: "stomp", type: "audio", src: "data/audio/", channel : 1}, - {name: "jump", type: "audio", src: "data/audio/", channel : 1}, - {name: "DST-InertExponent", type: "audio", src: "data/audio/", channel : 1}, - // title screen - {name: "title_screen", type:"image", src: "data/GUI/title_screen.png"}, - ]; + // our level tileset + {name: "area01_level_tiles", type:"image", src: "data/area01_tileset/area01_level_tiles.png"}, + // our levels + {name: "area01", type: "tmx", src: "data/area01.tmx"}, + {name: "area02", type: "tmx", src: "data/area02.tmx"}, + // the main player spritesheet + {name: "gripe_run_right", type:"image", src: "data/sprite/gripe_run_right.png"}, + // the parallax background + {name: "area01_bkg0", type:"image", src: "data/area01_parallax/area01_bkg0.png"}, + {name: "area01_bkg1", type:"image", src: "data/area01_parallax/area01_bkg1.png"}, + // the spinning coin spritesheet + {name: "spinning_coin_gold", type:"image", src: "data/sprite/spinning_coin_gold.png"}, + // our enemty entity + {name: "wheelie_right", type:"image", src: "data/sprite/wheelie_right.png"}, + // game font + {name: "32x32_font", type:"image", src: "data/sprite/32x32_font.png"}, + // audio resources + {name: "cling", type: "audio", src: "data/audio/", channel : 2}, + {name: "stomp", type: "audio", src: "data/audio/", channel : 1}, + {name: "jump", type: "audio", src: "data/audio/", channel : 1}, + {name: "DST-InertExponent", type: "audio", src: "data/audio/", channel : 1}, + // title screen + {name: "title_screen", type:"image", src: "data/GUI/title_screen.png"}, +]; var jsApp = @@ -47,11 +47,11 @@ var jsApp = //me.debug.renderHitBox = true; - // init the video + // init the video if (!me.video.init('jsapp', 640, 480)) { alert("Sorry but your browser does not support html 5 canvas. Please try with another one!"); - return; + return; } @@ -76,27 +76,27 @@ var jsApp = --- */ loaded: function () { - // set the "Play/Ingame" Screen Object + // set the "Play/Ingame" Screen Object me.state.set(me.state.MENU, new TitleScreen()); // set the "Play/Ingame" Screen Object me.state.set(me.state.PLAY, new PlayScreen()); - // set a global fading transition for the screen - me.state.transition("fade", "#FFFFFF", 15); + // set a global fading transition for the screen + me.state.transition("fade", "#FFFFFF", 250); - // add our player entity in the entity pool + // add our player entity in the entity pool me.entityPool.add("mainPlayer", PlayerEntity); - me.entityPool.add("CoinEntity", CoinEntity); - me.entityPool.add("EnemyEntity", EnemyEntity); + me.entityPool.add("CoinEntity", CoinEntity); + me.entityPool.add("EnemyEntity", EnemyEntity); // enable the keyboard me.input.bindKey(me.input.KEY.LEFT, "left"); me.input.bindKey(me.input.KEY.RIGHT, "right"); - me.input.bindKey(me.input.KEY.X, "jump", true); + me.input.bindKey(me.input.KEY.X, "jump", true); - // start the game + // start the game me.state.change(me.state.MENU); } @@ -106,12 +106,12 @@ var jsApp = var PlayScreen = me.ScreenObject.extend( { - onResetEvent: function() + onResetEvent: function() { - // load a level + // load a level me.levelDirector.loadLevel("area01"); - // add a default HUD to the game mngr + // add a default HUD to the game mngr me.game.addHUD(0,430,640,60); // add a new HUD item @@ -120,8 +120,8 @@ var PlayScreen = me.ScreenObject.extend( // make sure everyhting is in the right order me.game.sort(); - // play the audio track - me.audio.playTrack("DST-InertExponent"); + // play the audio track + me.audio.playTrack("DST-InertExponent"); }, diff --git a/tutorial/tutorial_step2/index.html b/tutorial/tutorial_step2/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step2/index.html +++ b/tutorial/tutorial_step2/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step2/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step2/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step2/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step2/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step2/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step2/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step3/gameObj.js b/tutorial/tutorial_step3/gameObj.js index 02d1159605..1e10bbac31 100644 --- a/tutorial/tutorial_step3/gameObj.js +++ b/tutorial/tutorial_step3/gameObj.js @@ -4,10 +4,10 @@ ------ */ - /*************************/ - /* */ +/*************************/ + /* */ /* a player entity */ - /* */ + /* */ /*************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -26,7 +26,7 @@ // set the walking & jumping speed this.setVelocity(3, 15); - // adjust the bounding box + // adjust the bounding box this.updateColRect(8,48, -1,0); // set the display to follow our position on both axis @@ -61,14 +61,15 @@ // check & update player movement updated = this.updateMovement(); - + // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } - }); \ No newline at end of file + }); diff --git a/tutorial/tutorial_step3/index.html b/tutorial/tutorial_step3/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step3/index.html +++ b/tutorial/tutorial_step3/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step3/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step3/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step3/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step3/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step3/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step3/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step4/index.html b/tutorial/tutorial_step4/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step4/index.html +++ b/tutorial/tutorial_step4/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step4/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step4/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step4/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step4/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step4/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step4/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step5/gameObj.js b/tutorial/tutorial_step5/gameObj.js index 7a2c92cfff..a3ec4ebc18 100644 --- a/tutorial/tutorial_step5/gameObj.js +++ b/tutorial/tutorial_step5/gameObj.js @@ -5,9 +5,9 @@ ------ */ /*************************/ - /* */ + /* */ /* a player entity */ - /* */ + /* */ /*************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -26,7 +26,7 @@ // set the walking & jumping speed this.setVelocity(3, 15); - // adjust the bounding box + // adjust the bounding box this.updateColRect(8,48, -1,0); // set the display to follow our position on both axis @@ -62,42 +62,43 @@ // check & update player movement updated = this.updateMovement(); - // check for collision - res = me.game.collide(this); - - if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - // bounce - this.forceJump(); - } - else - { - // let's flicker in case we touched an enemy - this.flicker(45); - } - } - } + // check for collision + var res = me.game.collide(this); + + if (res) + { + if (res.type == me.game.ENEMY_OBJECT) + { + if ((res.y>0) && !this.jumping) + { + // bounce + this.forceJump(); + } + else + { + // let's flicker in case we touched an enemy + this.flicker(45); + } + } + } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); - /***************************/ - /* */ - /* a Coin entity */ - /* */ + /***************************/ + /* */ + /* a Coin entity */ + /* */ /***************************/ var CoinEntity = me.CollectableEntity.extend( { @@ -106,19 +107,14 @@ { // call the parent constructor this.parent(x, y , settings); - }, - - onDestroyEvent : function () - { - // do something when collected - } + } }); /************************************************************************************/ - /* */ - /* an enemy Entity */ - /* */ + /* */ + /* an enemy Entity */ + /* */ /************************************************************************************/ var EnemyEntity = me.ObjectEntity.extend( { @@ -139,10 +135,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(4, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -151,8 +147,7 @@ }, - // call by the engine when colliding with another object - // obj parameter corresponds to the other object (typically the player) touching this one + onCollision : function (res, obj) { @@ -160,7 +155,7 @@ // which mean at top position for this one if (this.alive && (res.y > 0) && obj.falling) { - this.flicker(45); + this.flicker(45); } }, @@ -169,7 +164,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -182,8 +177,6 @@ { this.walkLeft = true; } - - //console.log(this.walkLeft); this.doWalk(this.walkLeft); } else @@ -191,15 +184,14 @@ this.vel.x = 0; } // check & update movement - updated = this.updateMovement(); + this.updateMovement(); - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation this.parent(); + return true; } - return updated; + return false; } }); - - diff --git a/tutorial/tutorial_step5/index.html b/tutorial/tutorial_step5/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step5/index.html +++ b/tutorial/tutorial_step5/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step5/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step5/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step5/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step5/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step5/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step5/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step6/gameObj.js b/tutorial/tutorial_step6/gameObj.js index ce43eff5c0..dfafb7c511 100644 --- a/tutorial/tutorial_step6/gameObj.js +++ b/tutorial/tutorial_step6/gameObj.js @@ -62,43 +62,44 @@ // check & update player movement updated = this.updateMovement(); - // check for collision - res = me.game.collide(this); - - if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - // bounce - this.forceJump(); - } - else - { - // let's flicker in case we touched an enemy - this.flicker(45); - } - } - } + // check for collision + var res = me.game.collide(this); + + if (res) + { + if (res.type == me.game.ENEMY_OBJECT) + { + if ((res.y>0) && !this.jumping) + { + // bounce + this.forceJump(); + } + else + { + // let's flicker in case we touched an enemy + this.flicker(45); + } + } + } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); - /****************************/ - /* */ - /* a Coin entity */ - /* */ - /****************************/ + /***************************/ + /* */ + /* a Coin entity */ + /* */ + /***************************/ var CoinEntity = me.CollectableEntity.extend( { @@ -106,12 +107,6 @@ { // call the parent constructor this.parent(x, y , settings); - - // animation speed - //this.animationspeed = 8; - - // bounding box - //this.updateColRect(8,16,16,16); }, onDestroyEvent : function () @@ -119,7 +114,6 @@ // do something when collide // increase score me.game.HUD.updateItemValue("score", 250); - } }); @@ -148,10 +142,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(4, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -168,20 +162,7 @@ // which mean at top position for this one if (this.alive && (res.y > 0) && obj.falling) { - // make it dead - //this.alive = true; - // and not collidable anymore - //this.collidable = false; - // set dead animation - //this.setCurrentAnimation("dead"); - // make it flicker and call destroy once timer finished - //this.flicker(45, this.destroy.bind(this)); - this.flicker(45); - // dead sfx - //me.audio.play("enemykill", false); - - // give some score - //me.game.HUD.updateItemValue("score", 150); + this.flicker(45); } }, @@ -190,7 +171,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -203,8 +184,6 @@ { this.walkLeft = true; } - - //console.log(this.walkLeft); this.doWalk(this.walkLeft); } else @@ -212,29 +191,28 @@ this.vel.x = 0; } // check & update movement - updated = this.updateMovement(); + this.updateMovement(); - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation this.parent(); + return true; } - return updated; + return false; } }); - /****************************/ - /* */ - /* a score HUD Item */ - /* */ - /****************************/ - - - var ScoreObject = me.HUD_Item.extend( + /***************************/ + /* */ + /* a score HUD Item */ + /* */ + /***************************/ + var ScoreObject = me.HUD_Item.extend( { init: function(x, y) { - // call the parent constructor + // call the parent constructor this.parent(x, y); // create a font this.font = new me.BitmapFont("32x32_font", 32); diff --git a/tutorial/tutorial_step6/index.html b/tutorial/tutorial_step6/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step6/index.html +++ b/tutorial/tutorial_step6/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step6/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step6/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step6/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step6/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step6/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step6/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step7/gameObj.js b/tutorial/tutorial_step7/gameObj.js index 72e1003837..266de8b48d 100644 --- a/tutorial/tutorial_step7/gameObj.js +++ b/tutorial/tutorial_step7/gameObj.js @@ -5,9 +5,9 @@ ------ */ /*************************/ - /* */ + /* */ /* a player entity */ - /* */ + /* */ /*************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -26,11 +26,11 @@ // set the walking & jumping speed this.setVelocity(3, 15); - // adjust the bounding box + // adjust the bounding box this.updateColRect(8,48, -1,0); // set the display to follow our position on both axis - me.game.viewport.follow(this.pos, me.game.viewport.AXIS.BOTH); + me.game.viewport.follow(this.pos, me.game.viewport.AXIS.HORIZONTAL); }, @@ -57,52 +57,53 @@ if (me.input.isKeyPressed('jump')) { if (this.doJump()) - { - me.audio.play("jump"); - } + { + me.audio.play("jump"); + } } // check & update player movement - updated = this.updateMovement(); - - // check for collision - res = me.game.collide(this); + this.updateMovement(); - if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - // bounce - me.audio.play("stomp"); - this.forceJump(); - } - else - { - // let's flicker in case we touched an enemy - this.flicker(45); - } - } - } + // check for collision + var res = me.game.collide(this); + + if (res) + { + if (res.type == me.game.ENEMY_OBJECT) + { + if ((res.y>0) && !this.jumping) + { + // bounce + me.audio.play("stomp"); + this.forceJump(); + } + else + { + // let's flicker in case we touched an enemy + this.flicker(45); + } + } + } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a Coin entity */ - /* */ - /****************************/ + /* */ + /* a Coin entity */ + /* */ + /***************************/ var CoinEntity = me.CollectableEntity.extend( { @@ -110,12 +111,6 @@ { // call the parent constructor this.parent(x, y , settings); - - // animation speed - //this.animationspeed = 8; - - // bounding box - //this.updateColRect(8,16,16,16); }, onDestroyEvent : function () @@ -130,9 +125,9 @@ }); /************************************************************************************/ - /* */ - /* an enemy Entity */ - /* */ + /* */ + /* an enemy Entity */ + /* */ /************************************************************************************/ var EnemyEntity = me.ObjectEntity.extend( { @@ -153,10 +148,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(4, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -173,20 +168,8 @@ // which mean at top position for this one if (this.alive && (res.y > 0) && obj.falling) { - // make it dead - //this.alive = true; - // and not collidable anymore - //this.collidable = false; - // set dead animation - //this.setCurrentAnimation("dead"); - // make it flicker and call destroy once timer finished - //this.flicker(45, this.destroy.bind(this)); - this.flicker(45); - // dead sfx - //me.audio.play("enemykill", false); - - // give some score - //me.game.HUD.updateItemValue("score", 150); + // make it flicker + this.flicker(45); } }, @@ -195,7 +178,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -208,8 +191,6 @@ { this.walkLeft = true; } - - //console.log(this.walkLeft); this.doWalk(this.walkLeft); } else @@ -217,22 +198,23 @@ this.vel.x = 0; } // check & update movement - updated = this.updateMovement(); + this.updateMovement(); - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation this.parent(); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a score HUD Item */ - /* */ - /****************************/ + /* */ + /* a score HUD Item */ + /* */ + /***************************/ var ScoreObject = me.HUD_Item.extend( diff --git a/tutorial/tutorial_step7/index.html b/tutorial/tutorial_step7/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step7/index.html +++ b/tutorial/tutorial_step7/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step7/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step7/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step7/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step7/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step7/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step7/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step8/gameObj.js b/tutorial/tutorial_step8/gameObj.js index 72e1003837..266de8b48d 100644 --- a/tutorial/tutorial_step8/gameObj.js +++ b/tutorial/tutorial_step8/gameObj.js @@ -5,9 +5,9 @@ ------ */ /*************************/ - /* */ + /* */ /* a player entity */ - /* */ + /* */ /*************************/ var PlayerEntity = me.ObjectEntity.extend( { @@ -26,11 +26,11 @@ // set the walking & jumping speed this.setVelocity(3, 15); - // adjust the bounding box + // adjust the bounding box this.updateColRect(8,48, -1,0); // set the display to follow our position on both axis - me.game.viewport.follow(this.pos, me.game.viewport.AXIS.BOTH); + me.game.viewport.follow(this.pos, me.game.viewport.AXIS.HORIZONTAL); }, @@ -57,52 +57,53 @@ if (me.input.isKeyPressed('jump')) { if (this.doJump()) - { - me.audio.play("jump"); - } + { + me.audio.play("jump"); + } } // check & update player movement - updated = this.updateMovement(); - - // check for collision - res = me.game.collide(this); + this.updateMovement(); - if (res) - { - if (res.type == me.game.ENEMY_OBJECT) - { - if ((res.y>0) && !this.jumping) - { - // bounce - me.audio.play("stomp"); - this.forceJump(); - } - else - { - // let's flicker in case we touched an enemy - this.flicker(45); - } - } - } + // check for collision + var res = me.game.collide(this); + + if (res) + { + if (res.type == me.game.ENEMY_OBJECT) + { + if ((res.y>0) && !this.jumping) + { + // bounce + me.audio.play("stomp"); + this.forceJump(); + } + else + { + // let's flicker in case we touched an enemy + this.flicker(45); + } + } + } // update animation - if (updated) + if (this.vel.x!=0 || this.vel.y!=0) { // update objet animation this.parent(this); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a Coin entity */ - /* */ - /****************************/ + /* */ + /* a Coin entity */ + /* */ + /***************************/ var CoinEntity = me.CollectableEntity.extend( { @@ -110,12 +111,6 @@ { // call the parent constructor this.parent(x, y , settings); - - // animation speed - //this.animationspeed = 8; - - // bounding box - //this.updateColRect(8,16,16,16); }, onDestroyEvent : function () @@ -130,9 +125,9 @@ }); /************************************************************************************/ - /* */ - /* an enemy Entity */ - /* */ + /* */ + /* an enemy Entity */ + /* */ /************************************************************************************/ var EnemyEntity = me.ObjectEntity.extend( { @@ -153,10 +148,10 @@ this.pos.x = x + settings.width - settings.spritewidth; this.walkLeft = true; - // walking & jumping speed + // walking & jumping speed this.setVelocity(4, 6); - // make it collidable + // make it collidable this.collidable = true; this.type = me.game.ENEMY_OBJECT; @@ -173,20 +168,8 @@ // which mean at top position for this one if (this.alive && (res.y > 0) && obj.falling) { - // make it dead - //this.alive = true; - // and not collidable anymore - //this.collidable = false; - // set dead animation - //this.setCurrentAnimation("dead"); - // make it flicker and call destroy once timer finished - //this.flicker(45, this.destroy.bind(this)); - this.flicker(45); - // dead sfx - //me.audio.play("enemykill", false); - - // give some score - //me.game.HUD.updateItemValue("score", 150); + // make it flicker + this.flicker(45); } }, @@ -195,7 +178,7 @@ update : function () { // do nothing if not visible - if (!this.visible && !this.flickering) + if (!this.visible) return false; if (this.alive) @@ -208,8 +191,6 @@ { this.walkLeft = true; } - - //console.log(this.walkLeft); this.doWalk(this.walkLeft); } else @@ -217,22 +198,23 @@ this.vel.x = 0; } // check & update movement - updated = this.updateMovement(); + this.updateMovement(); - if (updated) + if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation this.parent(); + return true; } - return updated; + return false; } }); /****************************/ - /* */ - /* a score HUD Item */ - /* */ - /****************************/ + /* */ + /* a score HUD Item */ + /* */ + /***************************/ var ScoreObject = me.HUD_Item.extend( diff --git a/tutorial/tutorial_step8/index.html b/tutorial/tutorial_step8/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_step8/index.html +++ b/tutorial/tutorial_step8/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_step8/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_step8/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_step8/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_template/index.html b/tutorial/tutorial_template/index.html index c31f689f98..6361870a6e 100644 --- a/tutorial/tutorial_template/index.html +++ b/tutorial/tutorial_template/index.html @@ -11,7 +11,7 @@
- +
diff --git a/tutorial/tutorial_template/lib/melonJS-0.9.1-min.js b/tutorial/tutorial_template/lib/melonJS-0.9.1-min.js deleted file mode 100644 index 5d9112a7f3..0000000000 --- a/tutorial/tutorial_template/lib/melonJS-0.9.1-min.js +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * MelonJS Game Engine - * Copyright (C) 2011, Olivier BIOT - * http://www.melonjs.org - * - * melonJS is licensed under a Creative Commons - * Attribution-NonCommercial-ShareAlike 3.0 Unported License. - * http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * @author Olivier Biot 2011 - * - */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};Number.prototype.clamp=function(n,o){return thiso?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){num=(arguments.length==1)?this:arguments[0];powres=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(num*powres)/powres)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(A){r.currentLevel=A;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var z=0;z1){z=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[E].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){B(E)})}else{B.defer(E)}break;default:break}};v.isCurrent=function(E){return s==E};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(d){var f=d.canvas.height/2;me.video.clearSurface(d,"black");logo1_width=this.logo1.measureText(d,"melon").width;logo_width=logo1_width+this.logo2.measureText(d,"JS").width;this.logo1.draw(d,"melon",((d.canvas.width-logo_width)/2),(d.canvas.height+60)/2);this.logo2.draw(d,"JS",((d.canvas.width-logo_width)/2)+logo1_width,(d.canvas.height+60)/2);f+=40;var e=Math.floor(this.loadPercent*d.canvas.width);d.strokeStyle="silver";d.strokeRect(0,f,d.canvas.width,6);d.fillStyle="#89b002";d.fillRect(2,f+2,e-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(o){f.push(o.name);f[o.name]=new Image();f[o.name].onload=l.onResourceLoaded.bind(l);f[o.name].onerror=k.bind(this);f[o.name].src=o.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){this.target=f;this.follow_axis=e||this.AXIS.NONE},move:function(e,f){newx=~~(this.pos.x+e);newy=~~(this.pos.y+f);if((newx>=0)&&(newx<=this._limitwidth)){this.pos.x=newx}if((newy>=0)&&(newy<=this._limitheight)){this.pos.y=newy}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+f=1){this._fadeIn.alpha=1;if(this._fadeIn.onComplete){this._fadeIn.onComplete()}}g=true}if(this._fadeOut.alpha>0){this._fadeOut.alpha-=me.timer.tick/this._fadeOut.duration;if(this._fadeOut.alpha<=0){this._fadeOut.alpha=0;if(this._fadeOut.onComplete){this._fadeOut.onComplete()}}g=true}return g},shake:function(e,h,f,g){f=f||this.AXIS.BOTH;if(f==this.AXIS.BOTH){if(this.width==this.limits.x){f=this.AXIS.VERTICAL}else{if(this.height==this.limits.y){f=this.AXIS.HORIZONTAL}}}if((f==this.AXIS.HORIZONTAL)&&(this.width==this.limits.x)){return}if((f==this.AXIS.VERTICAL)&&(this.height==this.limits.y)){return}this._shake.intensity=e;this._shake.duration=h;this._shake.axis=f;this._shake.onComplete=g||null},fadeOut:function(e,g,f){this._fadeOut.color=e;this._fadeOut.duration=g||30;this._fadeOut.alpha=1;this._fadeOut.onComplete=f||null},fadeIn:function(e,g,f){this._fadeIn.color=e;this._fadeIn.duration=g||30;this._fadeIn.alpha=0;this._fadeIn.onComplete=f||null},getWidth:function(){return this.width},getHeight:function(){return this.height},focusOn:function(e){this.pos.x=e.x-this.width*0.5;this.pos.y=e.y-this.height*0.5},isVisible:function(e){return this.checkAxisAligned(e)},draw:function(e){if(this._fadeIn.alpha<1){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color,this._fadeIn.alpha))}else{e.globalAlpha=this._fadeIn.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeIn.color));e.globalAlpha=1}}if(this._fadeOut.alpha>0){if(me.sys.enableWebGL){me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color,this._fadeOut.alpha))}else{e.globalAlpha=this._fadeOut.alpha;me.video.clearSurface(e,me.utils.HexToRGB(this._fadeOut.color));e.globalAlpha=1}}}});b.me.Viewport=ViewportEntity})(window);(function(b,c){var a=Math.min;ObjectSettings={name:null,image:null,spritewidth:null,type:0,collidable:false};me.ObjectSettings=ObjectSettings;entityPool=(function(){var e={};var d={};e.init=function(){e.add("me.LevelEntity",LevelEntity);e.add("me.ObjectEntity",ObjectEntity);e.add("me.CollectableEntity",CollectableEntity);e.add("me.InvisibleEntity",InvisibleEntity)};e.add=function(g,f){d[g.toLowerCase()]=f};e.newIstanceOf=function(f){if(!d[f.name]){alert("cannot instance entity of type '"+f.name+"': Class not found!");return null}return new d[f.name](f.x,f.y,f)};return e})();b.me.entityPool=entityPool;ParallaxLayer=me.Rect.extend({init:function(d,f,e){this.image=me.loader.getImage(d);this.parent(new me.Vector2d(0,0),this.image.width,this.image.height);this.baseOffset=0;this.z=e||0;this.scrollspeed=f;this.vp_width=me.game.viewport.width},draw:function(g,d,h){var f=0;var e=a(this.width-d,this.vp_width);do{g.drawImage(this.image,d,0,e,this.height,f,h,e,this.height);f+=e;d=0;e=a(this.width,this.vp_width-f)}while((fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(f){x=this.vp.x;if(x>this.lastx){for(var e=0,d;d=this.parallaxLayers[e++];){d.baseOffset=(d.baseOffset+d.scrollspeed*me.timer.tick)%d.width;d.draw(f,~~d.baseOffset,0);this.lastx=x;this.updated=true}return}else{if(xthis.animationspeed)){this.setCurrentSprite(++this.currentSprite%this.spritecount);this.fpscount=0;return true}return false},draw:function(e){var d=this.pos.x-this.vp.pos.x,f=this.pos.y-this.vp.pos.y;if(this.scaleFlag){e.scale(this.scale.x,this.scale.y);d=(d*this.scale.x)-(this.scale.x<0?this.width:0);f=(f*this.scale.y)-(this.scale.y<0?this.height:0)}e.drawImage(this.image,this.currentSpriteOff,0,this.width,this.height,~~d,~~f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({init:function(d,g,f,e){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,g,f,e);if(this.image.width==e){this.update=function(){return false}}else{this.addAnimation("default",null);this.setCurrentAnimation("default")}},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);if((this.current.idx==0)&&this.resetAnim){this.setCurrentAnimation(this.resetAnim)}this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth);this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.gravity=0.98;this.isEntity=true;this.canBreakTile=false;this.alive=true;this.falling=false;this.jumping=false;this.jumpspeed=0;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.flickering=false;this.flickerTimer=-1;this.flickercb=null;this.collisionMap=me.game.collisionMap;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y},doWalk:function(d){this.flipX(d);this.vel.x=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.jumpspeed=this.accel.y;this.jumping=true;if(this.onslope){}return true}return false},forceJump:function(){this.jumping=false;this.falling=false;this.doJump()},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.slopeY=this.slopeY.clamp(0,d.height);if((this.vel.x!=0)||this.falling){this.vel.y=this.slopeY}else{this.vel.y=0;this.pos.y+=this.slopeY}},updateMovement:function(){if(this.jumping){this.jumpspeed-=this.gravity;if((this.jumpspeed<0)){this.jumping=false;this.falling=true;this.vel.y=0}else{this.vel.y=-this.jumpspeed}}else{if(!this.onladder){this.falling=true;this.vel.y+=(this.gravity*me.timer.tick)}}collision=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=collision.xprop.isLadder;this.onslope=collision.yprop.isSlope||collision.xprop.isSlope;if(collision.y){if(this.vel.y>0){if(collision.yprop.isSolid||(collision.yprop.isPlatform&&(~~this.pos.y+this.height<=collision.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(collision.yprop.isSlope&&!this.jumping){this.checkSlope(collision.ytile,collision.yprop.isLeftSlope);this.falling=false}else{if(collision.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(collision.ytile.row,collision.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?collision.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(this.vel.y<0){if(!collision.yprop.isPlatform&&!collision.yprop.isLadder){this.jumping=false;this.falling=true;this.vel.y=0}}}}if(collision.x){if(collision.xprop.isSlope&&!this.jumping){this.checkSlope(collision.xtile,collision.xprop.isLeftSlope);this.falling=false}else{if(!collision.xprop.isPlatform&&!collision.xprop.isLadder){if(collision.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(collision.xtile.row,collision.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.updateFlickering();if((this.vel.x!=0)||(this.vel.y!=0)){this.pos.add(this.vel);if((this.onslope&&!this.jumping)||this.onladder){this.vel.y=0}return true}return false},updateFlickering:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}else{this.visible=!this.visible;return true}}return false},flicker:function(d,e){this.flickerTimer=d;if(this.flickerTimer<0){this.flickering=false;this.visible=true;this.flickercb=null}else{if(!this.flickering){this.flickercb=e;this.flickering=true}}}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,d){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;dim=c.measureText(d);dim.height=this.height;return dim},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,scale:1,firstChar:32,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d(d,0);this.sSize=new me.Vector2d();this.scale=f||1;this.firstChar=e||32;this.loadFontMetrics(c);this.align=this.ALIGN.RIGHT},loadFontMetrics:function(c){this.font=me.loader.getImage(c);this.size.y=this.font.height||0;this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale},set:function(d,c){this.align=d;if(c){this.sSize.copy(this.size);this.sSize.x*=this.scale;this.sSize.y*=this.scale}},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(e,f,c,g){if(typeof(f)!="string"){f=f.toString()}if(this.align==this.ALIGN.RIGHT){c-=f.length*this.sSize.x}for(var d=0;dthis.pos.x)&&(dthis.pos.y)&&(e3){throw"melonJS: failed loading audio: "+t+"."+r}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(){if(typeof arguments[0]=="string"){var w=arguments[0];var r=arguments[1];var s=g.createCanvasSurface();var t=h.getImageData(0,0,j.width,j.height)}else{var s=g.createCanvasSurface(arguments[0].width,arguments[0].height);if(arguments[0] instanceof HTMLImageElement){var o=me.video.createCanvasSurface(arguments[0].width,arguments[0].height);o.drawImage(arguments[0],0,0);var t=o.getImageData(0,0,arguments[0].width,arguments[0].height)}else{var t=arguments[0].getContext("2d").getImageData(0,0,arguments[0].width,arguments[0].height)}var w=arguments[1];var r=arguments[2]}var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r);v=(v>1)?1:v;for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g};return f})();var a=(function(){var e={};var f={};e.decodeBase64=function(g){return c.decode(g)};e.decodeBase64AsArray=function(l,h){h=h||1;var o=c.decode(l),k=[],n,m,g;for(n=0,g=o.length/h;n=0;--m){k[n]+=o.charCodeAt((n*h)+m)<<(m<<3)}}return k};e.decodeCSV=function(j,h){j=j.trim().split("\n");var g=[];for(var k=0;k=this.realwidth){k.x=true}if(m<=0||m>=this.realheight){k.y=true}return k};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){collide.x=true}else{collide.xtile=this.getTile(x,j.bottom-1);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}else{collide.xtile=this.getTile(x,j.top);if(collide.xtile&&this.tileset.isTileCollidable(collide.xtile.tileId)){collide.x=true;collide.xprop=this.tileset.getTileProperties(collide.xtile.tileId)}}}collide.ytile=this.getTile((i.x<0)?j.left:j.right,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}else{collide.ytile=this.getTile((i.x<0)?j.right:j.left,y);if(collide.ytile&&this.tileset.isTileCollidable(collide.ytile.tileId)){collide.y=true;collide.yprop=this.tileset.getTileProperties(collide.ytile.tileId)}}return collide};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(l){if(i[l]===g){throw ("melonJS: level %s not found"+l);return}if(i[l] instanceof me.TMXTileMap){isRunning=me.state.isRunning();if(isRunning){me.state.pause()}me.game.reset();i[l].reset();i[l].load();j=l;me.game.loadTMXLevel(i[j]);if(isRunning){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(D,l){var V="map",E="name",v="value",I="version",R="orientation",M="width",J="height",H="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",z="id",n="data",t="compression",k="encoding",d="base64",h="csv",T="spacing",S="margin",u="properties",m="property",Q="image",f="source",j="visible",G="tileset",P="layer",N="objectgroup",s="object",C="x",B="y",M="width",J="height",L=2147483648,U=1073741824;function e(aa,Z){var X=Z.getElementsByTagName(u)[0];if(X){var W=X.getElementsByTagName(m);for(var Y=0;Y=this.tilesets[X].firstgid){Y=X}}}if(Y!=-1){return this.tilesets[Y]}else{throw"no matching tileset found for gid "+Z}};function F(X){this.firstgid=me.XMLParser.getIntAttribute(X,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(X,E),me.XMLParser.getIntAttribute(X,o),me.XMLParser.getIntAttribute(X,a),me.XMLParser.getIntAttribute(X,T,0),me.XMLParser.getIntAttribute(X,S,0),X.getElementsByTagName(Q)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=X.getElementsByTagName(Q)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var W=X.getElementsByTagName(w);for(var Y=0;Y=this.firstgid&&W<=this.lastgid)};function c(Y,W,aa){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(Y,M),me.XMLParser.getIntAttribute(Y,J),W,aa);this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(Y,E);this.visible=(me.XMLParser.getIntAttribute(Y,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(Y,H,1);e(this,Y);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var ab=Y.getElementsByTagName(n)[0];var Z=me.XMLParser.getStringAttribute(ab,k,null);var X=me.XMLParser.getStringAttribute(ab,t,null);if(Z==""){Z=null}if(X==""){X=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(ab,Z,X)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ad,W,ah){switch(ah){case null:switch(W){case null:var X=ad.getElementsByTagName(w);break;case h:case d:var aa="";for(var Y=0,ab=ad.childNodes.length;Y=0;ae--){for(var af=this.width-1;af>=0;af--){gid=(W==null)?me.XMLParser.getIntAttribute(X[ag--],g):X[ag--];ac=(gid&L);Z=(gid&U);gid&=~(L|U);if(gid>0){this.setTile(af,ae,gid);if(!this.tileset.contains(gid)){this.tileset=this.tilesets.getTilesetByGid(gid)}if(this.visible){this.tileset.drawTile(this.layerSurface,af*this.tilewidth,ae*this.tileheight,gid-this.tileset.firstgid,ac,Z)}}}}X=null};c.prototype.clearTile=function(W,X){me.TiledLayer.prototype.clearTile.call(this,W,X);if(this.visible){this.layerSurface.clearRect(W*this.tilewidth,X*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(W,X){W.drawImage(this.layerCanvas,this.vp.pos.x+X.pos.x,this.vp.pos.y+X.pos.y,X.width,X.height,X.pos.x,X.pos.y,X.width,X.height)};function i(Y,X,W,ab){this.objects=[];this.name=Y;this.width=me.XMLParser.getIntAttribute(X,M);this.height=me.XMLParser.getIntAttribute(X,J);this.z=ab;var aa=X.getElementsByTagName(s);for(var Z=0;Z1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file diff --git a/tutorial/tutorial_template/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_template/lib/melonJS-0.9.2-min.js new file mode 100644 index 0000000000..5adc1166bf --- /dev/null +++ b/tutorial/tutorial_template/lib/melonJS-0.9.2-min.js @@ -0,0 +1,23 @@ +/*! + * MelonJS Game Engine + * Copyright (C) 2011, Olivier BIOT + * http://www.melonjs.org + * + * melonJS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + * + * @author Olivier Biot 2011 + * + */ +(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X1?1:o;q=n(o);for(r in i){m[r]=l[r]+i[r]*q}if(h!==null){h.call(m,q)}if(o==1){me.game.remove(this);if(d!==null){d.call(m)}if(e!==null){e.start()}return false}return true};this.destroy=function(){return true}};Tween.Easing={Linear:{},Quadratic:{},Cubic:{},Quartic:{},Quintic:{},Sinusoidal:{},Exponential:{},Circular:{},Elastic:{},Back:{},Bounce:{}};Tween.Easing.Linear.EaseNone=function(c){return c};Tween.Easing.Quadratic.EaseIn=function(c){return c*c};Tween.Easing.Quadratic.EaseOut=function(c){return -c*(c-2)};Tween.Easing.Quadratic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c}return -0.5*(--c*(c-2)-1)};Tween.Easing.Cubic.EaseIn=function(c){return c*c*c};Tween.Easing.Cubic.EaseOut=function(c){return --c*c*c+1};Tween.Easing.Cubic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c}return 0.5*((c-=2)*c*c+2)};Tween.Easing.Quartic.EaseIn=function(c){return c*c*c*c};Tween.Easing.Quartic.EaseOut=function(c){return -(--c*c*c*c-1)};Tween.Easing.Quartic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c}return -0.5*((c-=2)*c*c*c-2)};Tween.Easing.Quintic.EaseIn=function(c){return c*c*c*c*c};Tween.Easing.Quintic.EaseOut=function(c){return(c=c-1)*c*c*c*c+1};Tween.Easing.Quintic.EaseInOut=function(c){if((c*=2)<1){return 0.5*c*c*c*c*c}return 0.5*((c-=2)*c*c*c*c+2)};Tween.Easing.Sinusoidal.EaseIn=function(c){return -Math.cos(c*Math.PI/2)+1};Tween.Easing.Sinusoidal.EaseOut=function(c){return Math.sin(c*Math.PI/2)};Tween.Easing.Sinusoidal.EaseInOut=function(c){return -0.5*(Math.cos(Math.PI*c)-1)};Tween.Easing.Exponential.EaseIn=function(c){return c==0?0:Math.pow(2,10*(c-1))};Tween.Easing.Exponential.EaseOut=function(c){return c==1?1:-Math.pow(2,-10*c)+1};Tween.Easing.Exponential.EaseInOut=function(c){if(c==0){return 0}if(c==1){return 1}if((c*=2)<1){return 0.5*Math.pow(2,10*(c-1))}return 0.5*(-Math.pow(2,-10*(c-1))+2)};Tween.Easing.Circular.EaseIn=function(c){return -(Math.sqrt(1-c*c)-1)};Tween.Easing.Circular.EaseOut=function(c){return Math.sqrt(1- --c*c)};Tween.Easing.Circular.EaseInOut=function(c){if((c/=0.5)<1){return -0.5*(Math.sqrt(1-c*c)-1)}return 0.5*(Math.sqrt(1-(c-=2)*c)+1)};Tween.Easing.Elastic.EaseIn=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return -(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))};Tween.Easing.Elastic.EaseOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}return(c*Math.pow(2,-10*d)*Math.sin((d-e)*(2*Math.PI)/f)+1)};Tween.Easing.Elastic.EaseInOut=function(d){var e,c=0.1,f=0.4;if(d==0){return 0}if(d==1){return 1}if(!f){f=0.3}if(!c||c<1){c=1;e=f/4}else{e=f/(2*Math.PI)*Math.asin(1/c)}if((d*=2)<1){return -0.5*(c*Math.pow(2,10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f))}return c*Math.pow(2,-10*(d-=1))*Math.sin((d-e)*(2*Math.PI)/f)*0.5+1};Tween.Easing.Back.EaseIn=function(c){var d=1.70158;return c*c*((d+1)*c-d)};Tween.Easing.Back.EaseOut=function(c){var d=1.70158;return(c=c-1)*c*((d+1)*c+d)+1};Tween.Easing.Back.EaseInOut=function(c){var d=1.70158*1.525;if((c*=2)<1){return 0.5*(c*c*((d+1)*c-d))}return 0.5*((c-=2)*c*((d+1)*c+d)+2)};Tween.Easing.Bounce.EaseIn=function(c){return 1-Tween.Easing.Bounce.EaseOut(1-c)};Tween.Easing.Bounce.EaseOut=function(c){if((c/=1)<(1/2.75)){return 7.5625*c*c}else{if(c<(2/2.75)){return 7.5625*(c-=(1.5/2.75))*c+0.75}else{if(c<(2.5/2.75)){return 7.5625*(c-=(2.25/2.75))*c+0.9375}else{return 7.5625*(c-=(2.625/2.75))*c+0.984375}}}};Tween.Easing.Bounce.EaseInOut=function(c){if(c<0.5){return Tween.Easing.Bounce.EaseIn(c*2)*0.5}return Tween.Easing.Bounce.EaseOut(c*2-1)*0.5+0.5};a.me.Tween=Tween})(window); \ No newline at end of file From 40c897ec8615600bfc217d6efb30a239e487d7aa Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 19 Dec 2011 14:07:32 +0800 Subject: [PATCH 70/87] Removed all the case test, since we don't have any particular action to perform, and allowing to use custom "state" value --- src/core.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/core.js b/src/core.js index 62e0c401c7..8d7fd22465 100755 --- a/src/core.js +++ b/src/core.js @@ -1751,7 +1751,7 @@ */ state = (function() { - // hold public stuff in our singletong + // hold public stuff in our singleton var obj = {}; /*--------------------------------------------- @@ -2109,16 +2109,7 @@ obj.change = function(state) { switch (state) { - case obj.LOADING: - case obj.MENU: - case obj.PLAY: - case obj.READY: - case obj.GAMEOVER: - case obj.GAME_END: - case obj.SCORE: - case obj.CREDITS: - case obj.SETTINGS: { - + default: { _extraArgs = null; if (arguments.length > 1) { // store extra arguments if any @@ -2143,11 +2134,6 @@ _switchState.defer(state); } - - break; - } - - default: { break; } } From a71bdb5ef8058658057cbccbade35f2358b8556d Mon Sep 17 00:00:00 2001 From: obiot Date: Fri, 23 Dec 2011 18:59:46 +0800 Subject: [PATCH 71/87] Fixed an initialization issue when using melonJS without a Tilemap (Tiled) level. --- src/entity/entity.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/entity/entity.js b/src/entity/entity.js index 6265bd50b1..fd8f77d9cd 100644 --- a/src/entity/entity.js +++ b/src/entity/entity.js @@ -896,8 +896,8 @@ // set the object entity name this.name = settings.name; - // adjust initial coordinates should be bottom left ones - this.pos.set(x, y + me.game.currentLevel.tileheight - this.height); + // adjust initial coordinates (should be bottom left ones when in a tiled world) + this.pos.set(x, me.game.currentLevel?y + me.game.currentLevel.tileheight - this.height:y); /** * entity current velocity
From a310fae93c6a237b381d9ac4594f6033e3820be9 Mon Sep 17 00:00:00 2001 From: obiot Date: Sat, 24 Dec 2011 11:44:51 +0800 Subject: [PATCH 72/87] Unsimplified some code --- examples/alexkidd/gameObj.js | 10 ++++++---- examples/alexkidd/main.js | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/alexkidd/gameObj.js b/examples/alexkidd/gameObj.js index 794a4cebce..51a204a017 100644 --- a/examples/alexkidd/gameObj.js +++ b/examples/alexkidd/gameObj.js @@ -24,7 +24,7 @@ this.parent(x, y , settings); // set the walking & jumping speed - this.setVelocity(3, 12); + this.setVelocity(2.5, 12); // add friction this.setFriction(0.5); @@ -58,16 +58,18 @@ if (me.input.isKeyPressed('left')) { - this.doWalk(true); + this.vel.x -= this.accel.x * me.timer.tick; + this.flipX(true); } else if (me.input.isKeyPressed('right')) { - this.doWalk(false); + this.vel.x += this.accel.x * me.timer.tick; + this.flipX(false); } if (me.input.isKeyPressed('jump')) { - this.doJump(); + this.vel.y = -this.maxVel.y * me.timer.tick; } // check & update player movement diff --git a/examples/alexkidd/main.js b/examples/alexkidd/main.js index 9d5d16fffe..75625c091e 100644 --- a/examples/alexkidd/main.js +++ b/examples/alexkidd/main.js @@ -56,7 +56,7 @@ var jsApp = // enable the keyboard me.input.bindKey(me.input.KEY.LEFT, "left"); me.input.bindKey(me.input.KEY.RIGHT, "right"); - me.input.bindKey(me.input.KEY.X, "jump", true); + me.input.bindKey(me.input.KEY.X, "jump", true); // start the game me.state.change(me.state.PLAY); From 0a54714d70188d12a67c80a6bd29c3d58174a08c Mon Sep 17 00:00:00 2001 From: obiot Date: Mon, 26 Dec 2011 14:07:14 +0800 Subject: [PATCH 73/87] 2nd-pass update for the tutorial --- tutorial/index.html | 32 +++++++-- tutorial/media/step8_next_level.png | Bin 61168 -> 52981 bytes tutorial/tutorial_final/data/area01.tmx | 2 +- .../tutorial_final/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_final/main.js | 2 +- tutorial/tutorial_final/screenObj.js | 16 ++--- .../tutorial_step2/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_step2/main.js | 4 +- tutorial/tutorial_step3/gameObj.js | 2 +- .../tutorial_step3/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_step3/main.js | 12 ++-- tutorial/tutorial_step4/gameObj.js | 20 ++---- .../tutorial_step4/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_step4/main.js | 10 +-- .../tutorial_step5/lib/melonJS-0.9.2-min.js | 2 +- .../tutorial_step6/lib/melonJS-0.9.2-min.js | 2 +- .../tutorial_step7/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_step7/main.js | 64 +++++++++--------- tutorial/tutorial_step8/data/area01.tmx | 4 +- tutorial/tutorial_step8/gameObj.js | 4 +- .../tutorial_step8/lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_step8/main.js | 32 ++++----- .../lib/melonJS-0.9.2-min.js | 2 +- tutorial/tutorial_template/main.js | 2 +- 24 files changed, 118 insertions(+), 106 deletions(-) diff --git a/tutorial/index.html b/tutorial/index.html index 581b122f37..094940d84b 100644 --- a/tutorial/index.html +++ b/tutorial/index.html @@ -410,7 +410,29 @@

Part 3: Add a main player

ObjectEntity, configure the default player speed, tweak the camera, and test if some keys are pressed and manage our player movement. Also, you may notice that I'm testing the return value of the updateMovement() function, which allows me to - control if I want the sprite animation to run or not.

+ control if I want the sprite animation to run or not.

+ +

Note that the functions here above, like doWalk() and doJump(), are + actually helper functions for platform games that basically compute the new player + velocity based on the parameters defined by the setVelocity() function : +

+
+/**
+ * helper function for platform games
+ * make the entity move left of right
+ * @param {Boolean} left will automatically flip horizontally the entity sprite
+ */
+doWalk : function(left) {
+	this.flipX(left);
+	this.vel.x += (left) ? -this.accel.x * me.timer.tick : this.accel.x * me.timer.tick;
+},
+
+
+ If you do plan to develop any other type of games (or if have more complex needs), + I do not recommend using these function, but to rather directly modify the entity velocity + based on your requirements. +

+

Then, we have to modify our "main" to actually declare our new Object in the EntityPool (that is used by the engine to instantiate object), and finally to map the @@ -454,6 +476,9 @@

Part 3: Add a main player

- image with the gripe_run_right value (name of our resource
- spritewidth with the value 64 which is the size of a single sprite in the spritesheet
+ - spriteheight we don't define this value here since we use a single line spritesheet, + and since in this case the engine will take the actual image height as a value for it.
+
These two parameters will be passed as parameters (settings object here above used by the constructor) when the object will be created. Now you can either specify these fields here in Tiled, or directly in your code (when dealing with multiple @@ -763,7 +788,7 @@

Part 5: Adding some basic objects and enemies

// manage the enemy movement update: function() { // do nothing if not visible - if (!this.visible && ! this.flickering) + if (!this.visible) return false; if (this.alive) { @@ -773,7 +798,6 @@

Part 5: Adding some basic objects and enemies

this.walkLeft = true; } - //console.log(this.walkLeft); this.doWalk(this.walkLeft); } else { this.vel.x = 0; @@ -1259,7 +1283,7 @@

Part 8: Adding a second level

property with "area02" for the value. So that when our player will hit the Object, the engine will automatically load the "area02" level.
Optionally we can also ask the engine to add a fadeOut/fadeIn effect when changing - level by adding the "fade" and "duration" property (as in the + level by adding the "fade" color and "duration" (in ms) properties (as in the image)

click here to see the final result.

diff --git a/tutorial/media/step8_next_level.png b/tutorial/media/step8_next_level.png index fb40672aa42bbee69a3314eec3ba19e51b8905e2..b920ff2bc67d7fa696e7f156b60af1070f688cc2 100644 GIT binary patch literal 52981 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 literal 61168 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 z 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 diff --git a/tutorial/tutorial_final/data/area01.tmx b/tutorial/tutorial_final/data/area01.tmx index 82365809aa..03260439f3 100644 --- a/tutorial/tutorial_final/data/area01.tmx +++ b/tutorial/tutorial_final/data/area01.tmx @@ -94,7 +94,7 @@
- + diff --git a/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js index 5adc1166bf..bc5d14fa9b 100644 --- a/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js +++ b/tutorial/tutorial_final/lib/melonJS-0.9.2-min.js @@ -9,7 +9,7 @@ * @author Olivier Biot 2011 * */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X - + @@ -94,7 +94,7 @@ - + diff --git a/tutorial/tutorial_step8/gameObj.js b/tutorial/tutorial_step8/gameObj.js index 266de8b48d..f3a7a8a8ae 100644 --- a/tutorial/tutorial_step8/gameObj.js +++ b/tutorial/tutorial_step8/gameObj.js @@ -197,9 +197,11 @@ { this.vel.x = 0; } + // check & update movement this.updateMovement(); - + + //update animation if necessary if (this.vel.x!=0 ||this.vel.y!=0) { // update the object animation diff --git a/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js b/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js index 5adc1166bf..bc5d14fa9b 100644 --- a/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js +++ b/tutorial/tutorial_step8/lib/melonJS-0.9.2-min.js @@ -9,7 +9,7 @@ * @author Olivier Biot 2011 * */ -(function(g,b){var k=g.document;me={mod:"melonJS",nocache:"",audio:null,video:null,timer:null,input:null,state:null,game:null,entityPool:null,levelDirector:null,XMLParser:null,loadingScreen:null,TMXTileMap:null};me.debug={displayFPS:false,renderHitBox:false,renderDirty:false};me.sys={ua:navigator.userAgent.toLowerCase(),sound:false,storage:false,gyro:(g.DeviceMotionEvent!==b),nativeBase64:false,fps:60,interpolation:false,scale:1,useNativeAnimFrame:false,cacheImage:false,dirtyRegion:false,enableWebGL:false,stopOnAudioError:true};g.me=me;var h=false;var i=false,j=false,m=[];function c(){if(!j){if(!k.body){return setTimeout(c,13)}if(k.removeEventListener){k.removeEventListener("DOMContentLoaded",c,false)}else{g.removeEventListener("load",c,false)}j=true;for(var n=0;n-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break;default:break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,f+me.game.currentLevel.tileheight-this.height);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X-1};String.prototype.toHex=function(){var n="",o=0;while(oo?o:this};Number.prototype.random=function(o,n){return(~~(Math.random()*(n-o+1))+o)};Number.prototype.round=function(){var n=(arguments.length==1)?this:arguments[0];var o=Math.pow(10,arguments[1]||arguments[0]);return(Math.round(n*o)/o)};Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt((this-this%16)>>4)+"0123456789ABCDEF".charAt(this%16)};Number.prototype.sign=function(){return this<0?-1:(this>0?1:0)};function d(){var n={xmlDoc:null,parser:null,parseFromString:function(o){if(g.DOMParser){parser=new DOMParser();xmlDoc=parser.parseFromString(o,"text/xml")}else{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(o)}if(xmlDoc==null){console.log("xml "+xmlDoc+" not found!")}},getFirstElementByTagName:function(o){return xmlDoc?xmlDoc.getElementsByTagName(o)[0]:null},getAllTagElements:function(){return xmlDoc?xmlDoc.getElementsByTagName("*"):null},getStringAttribute:function(q,s,r){var o=q.getAttribute(s);return o?o.trim().toLowerCase():r},getIntAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseInt(o):r},getFloatAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?parseFloat(o):r},getBooleanAttribute:function(q,s,r){var o=this.getStringAttribute(q,s,r);return o?(o=="true"):r},free:function(){xmlDoc=null;parser=null}};return n}function a(){if(h){return}var n=k.createElement("audio");me.utils.setNocache(k.location.href.match(/\?nocache/));if(n.canPlayType){me.audio.capabilities.mp3=("no"!=n.canPlayType("audio/mpeg"))&&(""!=n.canPlayType("audio/mpeg"));me.audio.capabilities.ogg=("no"!=n.canPlayType('audio/ogg; codecs="vorbis"'))&&(""!=n.canPlayType('audio/ogg; codecs="vorbis"'));me.audio.capabilities.wav=("no"!=n.canPlayType('audio/wav; codecs="1"'))&&(""!=n.canPlayType('audio/wav; codecs="1"'));me.sys.sound=me.audio.capabilities.mp3||me.audio.capabilities.ogg||me.audio.capabilities.wav}if((me.sys.ua.search("iphone")>-1)||(me.sys.ua.search("ipod")>-1)||(me.sys.ua.search("ipad")>-1)||(me.sys.ua.search("android")>-1)){me.sys.sound=false}me.sys.nativeBase64=(typeof(window.atob)=="function");me.timer.init();me.XMLParser=new d();me.loadingScreen=new me.DefaultLoadingScreen();me.state.init();me.entityPool.init();me.levelDirector.reset();h=true}drawManager=(function(){var o={};var r=[];var n;var q=[];o.isDirty=false;o.reset=function(){r=[];q=[];n=me.game.viewport.getRect();o.makeAllDirty()};o.makeDirty=function(u,s,t){if(s){o.isDirty=true;if(me.sys.dirtyRegion){if(t){r.push(t.union(u))}else{if(u.getRect){r.push(u.getRect())}}}}if(u.visible){q.splice(0,0,u)}};o.makeAllDirty=function(){r=[];r.push(n);o.isDirty=true};o.remove=function(s){q.splice(q.indexOf(s),1);wasVisible=s.visible;s.visible=false;o.makeDirty(s,true);s.visible=wasVisible};o.draw=function(s){for(var u=r.length,t;u--,t=r[u];){for(var w=q.length,v;w--,v=q[w];){if(me.sys.dirtyRegion&&v.isEntity&&!v.checkAxisAligned(t)){continue}v.draw(s,t)}if(me.debug.renderDirty){t.draw(s,"white")}}};o.flush=function(){if(me.sys.dirtyRegion){r=[]}q=[];o.isDirty=false};return o})();game=(function(){var r={};var q=null;var s=[];var n=0;var u=false;var t=[];var o=null;r.viewport=null;r.HUD=null;r.collisionMap=null;r.currentLevel=null;r.NO_OBJECT=0;r.ENEMY_OBJECT=1;r.COLLECTABLE_OBJECT=2;r.ACTION_OBJECT=3;r.init=function(w,v){if(!u){var w=w||me.video.getWidth();var v=v||me.video.getHeight();r.viewport=new me.Viewport(0,0,w,v);q=me.video.getScreenFrameBuffer();u=true}};r.reset=function(){if(o){clearTimeout(o)}o=null;if(!u){r.init()}r.removeAll();if(r.viewport){r.viewport.reset()}if(r.HUD!=null){r.add(r.HUD)}drawManager.reset()};r.loadTMXLevel=function(y){r.currentLevel=y;r.collisionMap=r.currentLevel.getLayerByName("collision");if(!r.collisionMap||!r.collisionMap.isCollisionMap){alert("WARNING : no collision map detected")}r.currentLevel.addTo(me.game);r.viewport.setBounds(r.currentLevel.realwidth,r.currentLevel.realheight);var v=r.currentLevel.getObjectGroups();for(var x=0;x1){x=Array.prototype.slice.call(arguments,1)}if(n.duration&&w[C].transition){q=function(){me.game.viewport.fadeOut(n.color,n.duration)};me.game.viewport.fadeIn(n.color,n.duration,function(){z(C)})}else{z.defer(C)}break}};v.isCurrent=function(C){return s==C};return v})();g.me.state=state;g.me.game=game})(window);(function(b,c){var a=me.ScreenObject.extend({init:function(){this.parent(true);this.logo1=new me.Font("century gothic",32,"white");this.logo2=new me.Font("century gothic",32,"#89b002");this.logo2.bold();this.invalidate=false;this.loadPercent=0;me.loader.onProgress=this.onProgressUpdate.bind(this)},onDestroyEvent:function(){this.logo1=this.logo2=null},onProgressUpdate:function(d){this.loadPercent=d;this.invalidate=true},update:function(){if(this.invalidate===true){this.invalidate=false;return true}return false},draw:function(f){var h=f.canvas.height/2;var e=this.logo1.measureText(f,"melon").width;var d=e+this.logo2.measureText(f,"JS").width;me.video.clearSurface(f,"black");this.logo1.draw(f,"melon",((f.canvas.width-d)/2),(f.canvas.height+60)/2);this.logo2.draw(f,"JS",((f.canvas.width-d)/2)+e,(f.canvas.height+60)/2);h+=40;var g=Math.floor(this.loadPercent*f.canvas.width);f.strokeStyle="silver";f.strokeRect(0,h,f.canvas.width,6);f.fillStyle="#89b002";f.fillRect(2,h+2,g-4,2)},});loader=(function(){var l={};var f=[];var d={};var m=0;var h=0;var j=0;var i=0;function g(){if(h==(m-i)){for(var o in d){if(d[o].isTMX){me.levelDirector.addTMXLevel(o);l.onResourceLoaded()}}if(l.onload){j=setTimeout(l.onload,300)}else{alert("no load callback defined")}}else{j=setTimeout(g,100)}}function k(o){throw"melonJS: Failed loading image resource"}function n(q,r,o){f.push(q.name);f[q.name]=new Image();f[q.name].onload=r||l.onResourceLoaded.bind(l);f[q.name].onerror=o||k.bind(this);f[q.name].src=q.src+me.nocache}function e(q,o){if(b.XMLHttpRequest){xmlhttp=new XMLHttpRequest();if(xmlhttp.overrideMimeType){xmlhttp.overrideMimeType("text/xml")}}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.open("GET",q.src+me.nocache,false);xmlhttp.onload=l.onResourceLoaded.bind(l);xmlhttp.send();d[q.name]={};d[q.name].xml=xmlhttp.responseText;d[q.name].isTMX=o||false;if(d[q.name].isTMX){m+=1;i+=1}}l.onload=c;l.onProgress=c;l.onResourceLoaded=function(o){h++;if(l.onProgress){l.onProgress(l.getLoadProgress())}};l.preload=function(q){me.audio.setLoadCallback(l.onResourceLoaded.bind(l));for(var o=0;oc.x?this.x:c.x;this.y=this.y>c.y?this.y:c.y},negate:function(){return new Vector2d(-this.x,-this.y)},negateSelf:function(){this.x=-this.x;this.y=-this.y},copy:function(c){this.x=c.x;this.y=c.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){var c=this.length();if(c(this._deadwidth)){this.pos.x=~~a((e.x)-(this._deadwidth),this._limitwidth)}else{if((e.x-this.pos.x)<(this.deadzone.x)){this.pos.x=~~c((e.x)-this.deadzone.x,0)}}},_followV:function(e){if((e.y-this.pos.y)>(this._deadheight)){this.pos.y=~~a((e.y)-(this._deadheight),this._limitheight)}else{if((e.y-this.pos.y)<(this.deadzone.y)){this.pos.y=~~c((e.y)-this.deadzone.y,0)}}},reset:function(e,f){this.pos.x=e||0;this.pos.y=f||0;this.last.set(-1,-1);this.target=null;this.follow_axis=null},setDeadzone:function(e,f){this.deadzone=new me.Vector2d(~~((this.width-e)/2),~~((this.height-f)/2-f*0.25));this._deadwidth=this.width-this.deadzone.x;this._deadheight=this.height-this.deadzone.y;this.update(true)},setBounds:function(e,f){this.limits.set(e,f);this._limitwidth=this.limits.x-this.width;this._limitheight=this.limits.y-this.height},follow:function(f,e){if(f instanceof me.ObjectEntity){this.target=f.pos}else{if(f instanceof me.Vector2d){this.target=f}else{throw"melonJS: invalid target for viewport.follow"}}this.follow_axis=e||this.AXIS.BOTH;this.update(true)},move:function(e,h){var g=~~(this.pos.x+e);var f=~~(this.pos.y+h);if((g>=0)&&(g<=this._limitwidth)){this.pos.x=g}if((f>=0)&&(f<=this._limitheight)){this.pos.y=f}},update:function(g){if(this.target&&g){switch(this.follow_axis){case this.AXIS.NONE:break;case this.AXIS.HORIZONTAL:this._followH(this.target,(this._shake.duration>0));break;case this.AXIS.VERTICAL:this._followV(this.target,(this._shake.duration>0));break;case this.AXIS.BOTH:this._followH(this.target,(this._shake.duration>0));this._followV(this.target,(this._shake.duration>0));break;default:break}g=(this.last.x!=this.pos.x)||(this.last.y!=this.pos.y);this.last.copy(this.pos)}if(this._shake.duration>0){this._shake.duration-=me.timer.tick;if(this._shake.duration<0){if(this._shake.onComplete){this._shake.onComplete()}}else{if((this._shake.axis==this.AXIS.BOTH)||(this._shake.axis==this.AXIS.HORIZONTAL)){var f=(Math.random()*this._shake.intensity);if(this.pos.x+this.width+fthis.width){this.width=this.parallaxLayers[d].width}if(this.parallaxLayers[d].height>this.height){this.height=this.parallaxLayers[d].height}},clearTile:function(d,e){},update:function(){return this.updated},getRect:function(){return new me.Rect(this.vp.clone(),this.width,this.height)},draw:function(g){var d=this.vp.x;if(d>this.lastx){for(var f=0,e;e=this.parallaxLayers[f++];){e.baseOffset=(e.baseOffset+e.scrollspeed*me.timer.tick)%e.width;e.draw(g,~~e.baseOffset,0);this.lastx=d;this.updated=true}return}else{if(d0){this.scale.x=this.scale.x<0?-d:d;this.scale.y=this.scale.y<0?-d:d;this.scaleFlag=((this.scale.x!=1)||(this.scale.y!=1))}},update:function(){if(this.flickering){this.flickerTimer-=me.timer.tick;if(this.flickerTimer<0){if(this.flickercb){this.flickercb()}this.flicker(-1)}return true}return false},draw:function(e){if(this.flickering){this.flickerState=!this.flickerState;if(!this.flickerState){return}}var d=~~(this.pos.x-this.vp.pos.x),f=~~(this.pos.y-this.vp.pos.y);if(this.scaleFlag){e.translate(d+this.hWidth,f+this.hHeight);e.scale(this.scale.x,this.scale.y);e.translate(-this.hWidth,-this.hHeight);d=f=0}e.drawImage(this.image,this.offset.x,this.offset.y,this.width,this.height,d,f,this.width,this.height);if(this.scaleFlag){e.setTransform(1,0,0,1,0,0)}if(me.debug.renderHitBox){this.parent(e,"blue");this.collisionBox.draw(e,"red")}},destroy:function(){if(this.autodestroy){this.onDestroyEvent()}return this.autodestroy},onDestroyEvent:function(){}});b.me.SpriteObject=SpriteObject;AnimationSheet=me.SpriteObject.extend({fpscount:0,animationspeed:0,init:function(d,h,f,e,g){this.anim=[];this.resetAnim=null;this.current=null;this.parent(d,h,f,e,g);this.spritecount=~~(this.image.width/this.width);if((this.image.width==this.width)&&(this.image.height==this.height)){this.setCurrentSprite=function(){}}this.animationspeed=me.sys.fps/10;this.addAnimation("default",null);this.setCurrentAnimation("default")},addAnimation:function(e,g){this.anim[e]={name:null,frame:[],idx:0,length:0};if(g==null){for(var f=0;fthis.animationspeed)){this.setCurrentSprite(++this.current.idx%this.current.length);this.fpscount=0;return true}return false}});b.me.AnimationSheet=AnimationSheet;ObjectEntity=AnimationSheet.extend({GUID:null,type:0,collidable:false,init:function(d,f,e){this.parent(d,f,(typeof e.image=="string")?me.loader.getImage(e.image):e.image,e.spritewidth,e.spriteheight);if(e.transparent_color){this.setTransparency(e.transparent_color)}this.GUID=me.utils.createGUID();this.name=e.name;this.pos.set(d,me.game.currentLevel?f+me.game.currentLevel.tileheight-this.height:f);this.vel=new me.Vector2d();this.accel=new me.Vector2d();this.friction=new me.Vector2d();this.maxVel=new me.Vector2d(1000,1000);this.gravity=0.98;this.isEntity=true;this.alive=true;this.falling=false;this.jumping=true;this.slopeY=0;this.onslope=false;this.onladder=false;this.collidable=e.collidable||false;this.type=e.type||0;this.collisionMap=me.game.collisionMap;this.canBreakTile=false;this.onTileBreak=null},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},setVelocity:function(d,e){this.accel.x=(d!=0)?d:this.accel.x;this.accel.y=(d!=0)?e:this.accel.y;this.setMaxVelocity(d,e)},setMaxVelocity:function(d,e){this.maxVel.x=d;this.maxVel.y=e},setFriction:function(d,e){this.friction.x=d||0;this.friction.y=e||0},doWalk:function(d){this.flipX(d);this.vel.x+=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick},doClimb:function(d){if(this.onladder){this.vel.y=(d)?-this.accel.x*me.timer.tick:this.accel.x*me.timer.tick;return true}return false},doJump:function(){if(!this.jumping&&!this.falling){this.vel.y=-this.maxVel.y*me.timer.tick;this.jumping=true;return true}return false},forceJump:function(){this.jumping=this.falling=false;this.doJump()},distanceTo:function(f){var e=(this.pos.x+(this.width>>1))-(f.pos.x+(f.width>>1));var d=(this.pos.y+(this.height>>1))-(f.pos.y+(f.height>>1));return Math.sqrt(e*e+d*d)},checkSlope:function(d,e){this.pos.y=d.pos.y-this.height;if(e){this.slopeY=d.height-(this.collisionBox.right+this.vel.x-d.pos.x)}else{this.slopeY=(this.collisionBox.left+this.vel.x-d.pos.x)}this.vel.y=0;this.pos.y+=this.slopeY.clamp(0,d.height)},computeVelocity:function(d){if(this.gravity){d.y+=!this.onladder?(this.gravity*me.timer.tick):0;this.falling=(d.y>0);this.jumping=this.falling?false:this.jumping}if(this.friction.x){d.x=me.utils.applyFriction(d.x,this.friction.x)}if(this.friction.y){d.y=me.utils.applyFriction(d.y,this.friction.y)}if(d.y!=0){d.y=d.y.clamp(-this.maxVel.y,this.maxVel.y)}if(d.x!=0){d.x=d.x.clamp(-this.maxVel.x,this.maxVel.x)}return d},updateMovement:function(){this.vel=this.computeVelocity(this.vel);var d=this.collisionMap.checkCollision(this.collisionBox,this.vel);this.onladder=d.xprop.isLadder;this.onslope=d.yprop.isSlope||d.xprop.isSlope;if(d.y){if(d.y>0){if(d.yprop.isSolid||(d.yprop.isPlatform&&(~~this.pos.y+this.height<=d.ytile.pos.y))){this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}else{if(d.yprop.isSlope&&!this.jumping){this.checkSlope(d.ytile,d.yprop.isLeftSlope);this.falling=false}else{if(d.yprop.isBreakable){if(this.canBreakTile){me.game.currentLevel.clearTile(d.ytile.row,d.ytile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.pos.y=~~this.pos.y;this.vel.y=(this.falling)?d.ytile.pos.y-this.pos.y-this.height:0;this.falling=false}}}}}else{if(d.y<0){if(!d.yprop.isPlatform&&!d.yprop.isLadder){this.falling=true;this.vel.y=0}}}}if(d.x){if(d.xprop.isSlope&&!this.jumping){this.checkSlope(d.xtile,d.xprop.isLeftSlope);this.falling=false}else{if(!d.xprop.isPlatform&&!d.xprop.isLadder){if(d.xprop.isBreakable&&this.canBreakTile){me.game.currentLevel.clearTile(d.xtile.row,d.xtile.col);if(this.onTileBreak){this.onTileBreak()}}else{this.vel.x=0}}}}this.pos.add(this.vel);return d}});b.me.ObjectEntity=ObjectEntity;CollectableEntity=ObjectEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.collidable=true;this.type=me.game.COLLECTABLE_OBJECT}});b.me.CollectableEntity=CollectableEntity;InvisibleEntity=me.Rect.extend({z:0,collisionBox:null,init:function(d,f,e){this.parent(new me.Vector2d(d,f),e.width,e.height);this.collisionBox=new me.Rect(this.pos,e.width,e.height);this.visible=true;this.collidable=true;this.isEntity=true},updateColRect:function(d,e,g,f){this.collisionBox.adjustSize(d,e,g,f)},checkCollision:function(e){var d=this.collisionBox.collideVsAABB(e.collisionBox);if(d.x!=0||d.y!=0){this.onCollision(d,e);d.type=this.type;return d}return null},onCollision:function(d,e){if(this.collidable&&(this.type==me.game.COLLECTABLE_OBJECT)){me.game.remove(this)}},destroy:function(){this.onDestroyEvent();return true},onDestroyEvent:function(){},update:function(){return false},draw:function(d){if(me.debug.renderHitBox){d.strokeStyle="blue";d.strokeRect(this.pos.x-me.game.viewport.pos.x,this.pos.y-me.game.viewport.pos.y,this.width,this.height);this.collisionBox.draw(d)}}});b.me.InvisibleEntity=InvisibleEntity;LevelEntity=InvisibleEntity.extend({init:function(d,f,e){this.parent(d,f,e);this.nextlevel=e.to;this.fade=e.fade;this.duration=e.duration;this.fading=false;this.gotolevel=e.to},onFadeComplete:function(){me.levelDirector.loadLevel(this.gotolevel);me.game.viewport.fadeOut(this.fade,this.duration)},goTo:function(d){this.gotolevel=d||this.nextlevel;if(this.fade&&this.duration){if(!this.fading){this.fading=true;me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))}}else{me.levelDirector.loadLevel(this.gotolevel)}},onCollision:function(){this.goTo()}});b.me.LevelEntity=LevelEntity})(window);(function(a,b){Font=Object.extend({ALIGN:{LEFT:"left",CENTER:"center",RIGHT:"right"},font:null,height:null,color:null,align:null,init:function(d,e,c,f){this.set(d,e,c,f)},bold:function(){this.font="bold "+this.font},italic:function(){this.font="italic "+this.font},set:function(d,e,c,f){this.font=""+e+"px "+d;this.height=e;this.color=c;this.align=f||"top"},getRect:function(){return new me.Rect(new Vector2d(0,0),0,0)},measureText:function(c,e){c.font=this.font;c.fillStyle=this.color;c.textBaseLine=this.align;var d=c.measureText(e);d.height=this.height;return d},draw:function(d,e,c,f){d.font=this.font;d.fillStyle=this.color;d.textBaseLine=this.align;d.fillText(e,~~c,~~f)}});BitmapFont=Font.extend({size:null,sSize:null,firstChar:32,charCount:0,init:function(c,d,f,e){this.parent(c,null,null);this.size=new me.Vector2d();this.sSize=new me.Vector2d();this.firstChar=e||32;this.loadFontMetrics(c,d);this.align=this.ALIGN.RIGHT;if(f){this.resize(f)}},loadFontMetrics:function(c,d){this.font=me.loader.getImage(c);this.size.x=d.x||d;this.size.y=d.y||this.font.height;this.sSize.copy(this.size);this.charCount=~~(this.font.width/this.size.x)},set:function(d,c){this.align=d;if(c){this.resize(c)}},resize:function(c){this.sSize.copy(this.size);this.sSize.x*=c;this.sSize.y*=c},measureText:function(c){return{width:c.length*this.sSize.x,height:this.sSize.y}},draw:function(f,g,d,h){if(typeof(g)!="string"){g=g.toString()}if(this.align==this.ALIGN.RIGHT){d-=g.length*this.sSize.x}for(var e=0;ethis.pos.x)&&(dthis.pos.y)&&(e3){var u="melonJS: failed loading "+t+"."+r;if(me.sys.stopOnAudioError===false){me.audio.disable();if(e){e()}console.log(u+", disabling audio")}else{throw u}}else{s[t][0].load()}}function d(t,w){l=0;if(w>1){var u=s[t][0];for(channel=1;channelm&&me.sys.interpolation)?j/e:1};return g})();video=(function(){var g={};var e=null;var i=null;var j=null;var h=null;var d=null;var k=false;var f=0;var c=0;g.init=function(n,r,m,l,q){k=l||false;me.sys.scale=k===true?q||1:1;f=r*me.sys.scale;c=m*me.sys.scale;d=document.getElementById(n);e=document.createElement("canvas");e.setAttribute("width",(f)+"px");e.setAttribute("height",(c)+"px");e.setAttribute("border","0px solid black");d.appendChild(e);if(me.sys.enableWebGL&&window.WebGLRenderingContext){try{WebGL2D.enable(e);i=e.getContext("webgl-2d");me.sys.cacheImage=true}catch(o){i=null}}if(i==null){me.sys.enableWebGL=false;if(!e.getContext){return false}i=e.getContext("2d")}if(k){h=g.createCanvasSurface(r,m);j=h.canvas}else{h=i;j=i.canvas}return true};g.getWrapper=function(){return d};g.getWidth=function(){return j.width};g.getHeight=function(){return j.height};g.createCanvasSurface=function(m,l){var n=document.createElement("canvas");n.width=m||j.width;n.height=l||j.height;return n.getContext("2d")};g.getScreenCanvas=function(){return e};g.getScreenFrameBuffer=function(){return h};g.updateDisplaySize=function(l){if(k){if(l){me.sys.scale=l}else{me.sys.scale=document.getElementById("screen size").value}f=j.width*me.sys.scale;c=j.height*me.sys.scale;e.width=f;e.height=c}};g.clearSurface=function(m,l){m.fillStyle=l;m.fillRect(0,0,m.canvas.width,m.canvas.height)};g.scale=function(l,m){l.translate(-(((l.canvas.width*m)-l.canvas.width)>>1),-(((l.canvas.height*m)-l.canvas.height)>>1));l.scale(m,m)};g.setAlpha=function(m,l){m.globalCompositeOperation=l?"source-over":"copy"};g.blitSurface=function(){if(k){g.blitSurface=function(){i.drawImage(j,0,0,j.width,j.height,0,0,f,c)}}else{g.blitSurface=function(){}}g.blitSurface()};g.applyRGBFilter=function(o,w,r){var s=g.createCanvasSurface(o.width,o.height);var t=me.utils.getPixels(o);var u=t.data;switch(w){case"b&w":for(var q=0,m=u.length;q>>3;u[q]=l;u[q+1]=l;u[q+2]=l}break;case"brightness":var v=Math.abs(r).clamp(0,1);for(var q=0,m=u.length;q>4);o=((n&15)<<4)|(l>>2);m=((l&3)<<6)|k;g.push(String.fromCharCode(r));if(l!=64){g.push(String.fromCharCode(o))}if(k!=64){g.push(String.fromCharCode(m))}}g=g.join("");return g}};return f})();var a=(function(){var e={};var f={};var h="";var g=0;e.decodeBase64=function(i){return c.decode(i)};e.decodeBase64AsArray=function(n,l){l=l||1;var r=c.decode(n),m=[],q,o,k;for(q=0,k=r.length/l;q=0;--o){m[q]+=r.charCodeAt((q*l)+o)<<(o<<3)}}return m};e.decodeCSV=function(l,k){l=l.trim().split("\n");var j=[];for(var m=0;m0)?i-(j*me.timer.tick):0};return e})();b.me.utils=a})(window);(function(b,c){function a(d){this.defaultvalue=d||0;this.value=d||0;this.updated=true}a.prototype.reset=function(){this.set(this.defaultvalue)};a.prototype.update=function(d){return this.set(this.value+d)};a.prototype.set=function(d){this.value=d;this.updated=true;return this.updated};gamestat=(function(){var f={};var e={};var g=[];var d=0;f.add=function(h,i){e[h]=new a(i);g.push(e[h]);d++};f.updateValue=function(h,i){if(e[h]){e[h].update(i)}};f.setValue=function(h,i){if(e[h]){e[h].set(i)}};f.getItemValue=function(h){return(e[h])?e[h].value:0};f.reset=function(h){if(h!=c){if(e[h]){e[h].reset()}}else{f.resetAll()}};f.resetAll=function(){for(var h=d,j;h--,j=g[h];){j.reset()}};return f})();b.me.gamestat=gamestat})(window);(function(f,g){removepath=/^.*(\\|\/|\:)/;removeext=/\.[^\.]*$/;var e={COLLISION_MAP:"collision",PARALLAX_MAP:"parallax",};var c=me.Rect.extend({init:function(i,m,j,k,l){this.parent(new me.Vector2d(i*j,m*k),j,k);this.tileId=l;this.row=i;this.col=m}});function b(k,l,j,n,m,i){this.name=k;this.tilewidth=l;this.tileheight=j;this.spacing=n;this.margin=m;this.image=(i)?me.loader.getImage(i.replace(removepath,"").replace(removeext,"")):null;this.type={SOLID:"solid",PLATFORM:"platform",L_SLOPE:"lslope",R_SLOPE:"rslope",LADDER:"ladder",BREAKABLE:"breakable"};this.TileProperties=[];if(this.image){this.hTileCount=~~((this.image.width-this.margin)/(this.tilewidth+this.spacing));this.vTileCount=~~((this.image.height-this.margin)/(this.tileheight+this.spacing))}}b.prototype.getPropertyList=function(){return{isCollidable:false,isSolid:false,isPlatform:false,isSlope:false,isLeftSlope:false,isRightSlope:false,isLadder:false,isBreakable:false}};b.prototype.getTileProperties=function(i){return this.TileProperties[i]};b.prototype.isTileCollidable=function(i){return this.TileProperties[i].isCollidable};b.prototype.getTileImage=function(j){var i=me.video.createCanvasSurface(this.tilewidth,this.tileheight);this.drawTile(i,0,0,j);return i.canvas};b.prototype.drawTile=function(l,i,q,o,k,j){var n=this.margin+(this.spacing+this.tilewidth)*(o%this.hTileCount);var m=this.margin+(this.spacing+this.tileheight)*~~(o/this.hTileCount);if(k||j){k=(k==0)?1:-1;j=(j==0)?1:-1;l.scale(k,j);i=(i*k)-(k<0?this.tilewidth:0);q=(q*j)-(j<0?this.tileheight:0)}l.drawImage(this.image,n,m,this.tilewidth,this.tileheight,i,q,this.tilewidth,this.tileheight);if(k||j){l.setTransform(1,0,0,1,0,0)}};function d(i,j){this.realwidth=i;this.realheight=j;this.isCollisionMap=true}d.prototype.checkCollision=function(l,k){var i=(k.x<0)?l.left+k.x:l.right+k.x;var m=(k.y<0)?l.top+k.y:l.bottom+k.y;var j={x:0,y:0,xprop:{},yprop:{}};if(i<=0||i>=this.realwidth){j.x=k.x}if(m<=0||m>=this.realheight){j.y=k.y}return j};function h(j,k,i,l){this.width=j;this.height=k;this.z=l;this.name=null;this.visible=false;this.layerData=null;this.xLUT={};this.yLUT={};this.tilesets=i;this.tileset=i?this.tilesets.getTilesetByIndex(0):null;this.tilewidth=this.tileset?this.tileset.tilewidth:0;this.tileheight=this.tileset?this.tileset.tileheight:0;this.realwidth=this.width*this.tilewidth;this.realheight=this.height*this.tileheight}h.prototype.initArray=function(j){this.layerData=[];for(var i=0;i=this.realwidth){j.x=k.x}else{j.xtile=this.getTile(i,l.bottom-1);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}else{j.xtile=this.getTile(i,l.top);if(j.xtile&&this.tileset.isTileCollidable(j.xtile.tileId)){j.x=k.x;j.xprop=this.tileset.getTileProperties(j.xtile.tileId)}}}j.ytile=this.getTile((k.x<0)?l.left:l.right,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}else{j.ytile=this.getTile((k.x<0)?l.right:l.left,m);if(j.ytile&&this.tileset.isTileCollidable(j.ytile.tileId)){j.y=k.y||1;j.yprop=this.tileset.getTileProperties(j.ytile.tileId)}}return j};h.prototype.update=function(){return false};function a(i,j){this.pos=new me.Vector2d(i,j);this.z=0;this.width=0;this.height=0;this.realwidth=-1;this.realheight=-1;this.tilewidth=0;this.tileheight=0;this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false}a.prototype.reset=function(){this.tilesets=null;this.mapLayers=[];this.objectGroups=[];this.initialized=false};a.prototype.getObjectGroupByName=function(i){return this.objectGroups[i]};a.prototype.getObjectGroups=function(){return this.objectGroups};a.prototype.getLayerByName=function(j){var l=null;j=j.trim().toLowerCase();for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].name.contains(j)){l=this.mapLayers[k];break}}if((j.contains(e.COLLISION_MAP))&&(l==null)){l=new d(me.game.currentLevel.realwidth,me.game.currentLevel.realheight)}return l};a.prototype.clearTile=function(j,l){for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible||this.mapLayers[k].isCollisionMap){this.mapLayers[k].clearTile(j,l)}}};a.prototype.addTo=function(j){if(this.visible){j.add(this)}for(var k=this.mapLayers.length;k--;){if(this.mapLayers[k].visible){j.add(this.mapLayers[k])}}};a.prototype.update=function(){return false};levelDirector=(function(){var k={};var i={};var j=null;k.reset=function(){};k.addLevel=function(l){throw"melonJS: no level loader defined"};k.addTMXLevel=function(l,m){if(i[l]==null){i[l]=new me.TMXTileMap(l,0,0)}if(m){m()}};k.loadLevel=function(m){if(i[m]===g){throw ("melonJS: level "+m+" not found");return}if(i[m] instanceof me.TMXTileMap){var l=me.state.isRunning();if(l){me.state.pause()}me.game.reset();me.utils.resetGUID(m);i[m].reset();i[m].load();j=m;me.game.loadTMXLevel(i[j]);if(l){me.state.resume()}}else{throw"melonJS: no level loader defined"}};k.getCurrentLevelId=function(){return j},k.reloadLevel=function(){return k.loadLevel(j)},k.nextLevel=function(){if(j+1=0){return k.loadLevel(j-1)}else{return false}};return k})();f.me.Tile=c;f.me.TileSet=b;f.me.TiledLayer=h;f.me.TileMap=a;f.me.LevelConstants=e;f.me.levelDirector=levelDirector})(window);(function(B,l){var T="map",C="name",v="value",G="version",P="orientation",K="width",H="height",F="opacity",q="trans",o="tilewidth",a="tileheight",r="firstgid",g="gid",w="tile",x="id",n="data",t="compression",k="encoding",d="base64",h="csv",R="spacing",Q="margin",u="properties",m="property",O="image",f="source",j="visible",E="tileset",N="layer",L="objectgroup",s="object",A="x",z="y",K="width",H="height",J=2147483648,S=1073741824;function e(Y,X){var V=X.getElementsByTagName(u)[0];if(V){var U=V.getElementsByTagName(m);for(var W=0;W=this.tilesets[V].firstgid){W=V}}}if(W!=-1){return this.tilesets[W]}else{throw"no matching tileset found for gid "+X}};function D(W){this.firstgid=me.XMLParser.getIntAttribute(W,r);me.TileSet.call(this,me.XMLParser.getStringAttribute(W,C),me.XMLParser.getIntAttribute(W,o),me.XMLParser.getIntAttribute(W,a),me.XMLParser.getIntAttribute(W,R,0),me.XMLParser.getIntAttribute(W,Q,0),W.getElementsByTagName(O)[0].getAttribute(f));this.lastgid=this.firstgid+(((this.hTileCount*this.vTileCount)-1)||0);this.trans=W.getElementsByTagName(O)[0].getAttribute(q);if(this.trans!==null&&this.image){this.image=me.video.applyRGBFilter(this.image,"transparent",this.trans.toUpperCase()).canvas}var U=W.getElementsByTagName(w);for(var X=0;X=this.firstgid&&U<=this.lastgid)};function c(X,W,U,Z){me.TiledLayer.call(this,me.XMLParser.getIntAttribute(X,K),me.XMLParser.getIntAttribute(X,H),U,Z);this.orientation=W;this.layerInvalidated=true;this.name=me.XMLParser.getStringAttribute(X,C);this.visible=(me.XMLParser.getIntAttribute(X,j,1)==1);this.opacity=me.XMLParser.getFloatAttribute(X,F,1);e(this,X);this.isCollisionMap=(this.name.contains(me.LevelConstants.COLLISION_MAP));if(this.isCollisionMap){this.visible=false}this.vp=me.game.viewport;var aa=X.getElementsByTagName(n)[0];var Y=me.XMLParser.getStringAttribute(aa,k,null);var V=me.XMLParser.getStringAttribute(aa,t,null);if(Y==""){Y=null}if(V==""){V=null}if(this.visible){this.layerSurface=me.video.createCanvasSurface(this.width*this.tilewidth,this.height*this.tileheight);this.layerCanvas=this.layerSurface.canvas;if(this.opacity>0&&this.opacity<1){this.layerSurface.globalAlpha=this.opacity}}if(this.visible||this.isCollisionMap){this.initArray(this.isCollisionMap);this.fillArray(aa,Y,V)}}c.prototype=new me.TiledLayer();c.prototype.fillArray=function(ac,U,ag){switch(ag){case null:switch(U){case null:var V=ac.getElementsByTagName(w);break;case h:case d:var Z="";for(var W=0,aa=ac.childNodes.length;W=0;ad--){for(var ae=this.width-1;ae>=0;ae--){X=(U==null)?me.XMLParser.getIntAttribute(V[af--],g):V[af--];ab=(X&J);Y=(X&S);X&=~(J|S);if(X>0){this.setTile(ae,ad,X);if(!this.tileset.contains(X)){this.tileset=this.tilesets.getTilesetByGid(X)}if(this.visible){if(this.orientation=="orthogonal"){this.tileset.drawTile(this.layerSurface,ae*this.tilewidth,ad*this.tileheight,X-this.tileset.firstgid,ab,Y)}else{this.tileset.drawTile(this.layerSurface,(ae-ad)*this.tilewidth>>1,(ad+ae)*this.tileheight>>2,X-this.tileset.firstgid,ab,Y)}}}}}V=null};c.prototype.clearTile=function(U,V){me.TiledLayer.prototype.clearTile.call(this,U,V);if(this.visible){this.layerSurface.clearRect(U*this.tilewidth,V*this.tileheight,this.tilewidth,this.tileheight)}};c.prototype.draw=function(U,V){U.drawImage(this.layerCanvas,this.vp.pos.x+V.pos.x,this.vp.pos.y+V.pos.y,V.width,V.height,V.pos.x,V.pos.y,V.width,V.height)};function i(W,V,U,Z){this.objects=[];this.name=W;this.width=me.XMLParser.getIntAttribute(V,K);this.height=me.XMLParser.getIntAttribute(V,H);this.z=Z;var Y=V.getElementsByTagName(s);for(var X=0;X Date: Mon, 26 Dec 2011 18:01:36 +0800 Subject: [PATCH 74/87] changelog update --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index ebfa1b6551..c858129b26 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,7 @@ Version History * Core: Corrected variables definition (global->local) * Core: added a GUID (Game Unique Identifier) to objects * Core: getEntityByName now also returns non Entity Object (like layers) +* Core: Fixed state change when using custom state values * Doc: various documentation correction and improvements * Entity: added friction management * Entity: updateMovement function now returns a collision "vector (API CHANGE, see documentation) @@ -22,6 +23,7 @@ Version History * Entity: optimized/refactored SpriteObject * Entity: fixed object with 1 single sprite (no animation) not begin updated * Entity: Added the possibility to also specify a callback when an animation is over +* Entity: Fixed an initialization issue when using melonJS without a Tilemap * Event: also cancel event bubbling * Font: added support for multiline fontsheet * HUD: added a setItemValue() function From a9910cb9455b3abc5dede8021bc96bb4bccbcd31 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 27 Dec 2011 19:19:39 +0800 Subject: [PATCH 75/87] Corrected the GUI Object, added proper documentation (was missing), and marked it as deprecated as it should be rewritten in a next release. --- src/GUI/GUI.js | 116 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 39 deletions(-) diff --git a/src/GUI/GUI.js b/src/GUI/GUI.js index 464ad88557..2ff510cdbe 100644 --- a/src/GUI/GUI.js +++ b/src/GUI/GUI.js @@ -6,39 +6,74 @@ */ (function($, undefined) { - - /************************************************************************************/ - /* GUI FUNCTIONS : */ - /* a basic set of objects to manage GUI elements */ - /* basically they are sprite object with some event management */ - /************************************************************************************/ - - /* ----- - - a Simple GUI object - - ------ */ - var GUI_Object = me.SpriteObject.extend({ - // object can be clicked or not + + /** + * GUI Object
+ * A basic object to manage GUI elements
+ * @deprecated won't survive version 0.9.3 + * @class + * @extends me.SpriteObject + * @memberOf me + * @example + * // Enable Mouse Event Management + * // should be ideally in the main at initialization + * me.input.enableMouseEvent(true); + * + * // create a basic GUI Object + * var myButton = me.GUI_Object.extend( + * { + * init:function(x, y) + * { + * settings = {} + * settings.image = "button"; + * settings.spritewidth = 100; + * settings.spriteheight = 50; + * // parent constructor + * this.parent(x, y, settings); + * }, + * + * // output something in the console + * // when the object is clicked + * clicked:function() + * { + * console.log("clicked!"); + * return false; + * } + * }); + * + * // add the object at pos (10,10), z index 4 + * me.game.add((new myButton(10,10)),4); + * + */ + GUI_Object = me.SpriteObject.extend({ + /** @scope me.GUI_Object.prototype */ + + /** + * object can be clicked or not + * @public + * @type boolean + * @name me.GUI_Object#isClickable + */ isClickable : true, + // object has been updated (clicked,etc..) updated : false, - /* ----- - - constructor function - - ------ */ - - init : function(x, y, image, spritewidth) { - this.parent(this, x, y, image, spritewidth); + /** + * @Constructor + * @private + */ + init : function(x, y, settings) { + this.parent(x, y, + ((typeof settings.image == "string") ? me.loader.getImage(settings.image) : settings.image), + settings.spritewidth, + settings.spriteheight); }, - /* ----- - - update function - - ------ */ + /** + * return true if the object has been clicked + * @private + */ update : function() { if (this.updated) { // clear the flag @@ -48,25 +83,28 @@ return false; }, - /* ----- - - a clicked function called when the object is clicked - return true if the object is to be redraw - - ------ */ + + /** + * function called when the object is clicked
+ * to be overwritten
+ * return true if object need to be updated + * @public + * @function + * @deprecated won't survive version 0.9.3 + */ clicked : function() { return false; }, - /* ----- - mouse event detection - - ------ */ + /** + * mouse event detection + * @private + */ mouseEvent : function(x, y) { - if ((x > this.pos.x) && (x < this.pos.x + this.displayWidth) + if ((x > this.pos.x) && (x < this.pos.x + this.width) && (y > this.pos.y) - && (y < this.pos.y + this.displayHeight)) { + && (y < this.pos.y + this.height)) { // notify the object we have been clicked :) if (this.isClickable) { this.updated = this.clicked(); From 32b1ab66c4b258a6ca0581ba1f4200443fa3431b Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 27 Dec 2011 19:32:01 +0800 Subject: [PATCH 76/87] Updated changelog --- CHANGELOG | 4 +++- src/GUI/HUD.js | 16 ++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c858129b26..dc294811af 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,7 +15,7 @@ Version History * Core: Fixed state change when using custom state values * Doc: various documentation correction and improvements * Entity: added friction management -* Entity: updateMovement function now returns a collision "vector (API CHANGE, see documentation) +* Entity: updateMovement function now returns a collision "vector" (API CHANGE, see documentation) * Entity: refactored/cleaned-up movement/collision function * Entity: added support for multiline spritesheet (fixed cell size) * Entity: added the possibility to define a specific transparent color for spritesheet @@ -24,6 +24,8 @@ Version History * Entity: fixed object with 1 single sprite (no animation) not begin updated * Entity: Added the possibility to also specify a callback when an animation is over * Entity: Fixed an initialization issue when using melonJS without a Tilemap +* GUI: Corrected me.GUI_Object and added missing documentation +* GUI: marked me.GUI_Object as deprecated, as it will be rewritten in a next release * Event: also cancel event bubbling * Font: added support for multiline fontsheet * HUD: added a setItemValue() function diff --git a/src/GUI/HUD.js b/src/GUI/HUD.js index d6cf005536..f9cf5ed553 100644 --- a/src/GUI/HUD.js +++ b/src/GUI/HUD.js @@ -109,9 +109,7 @@ * @param {y} y */ draw : function(context, x, y) { - //console.log("call score"); if (this.updated) { - //console.log("score : " + this.value); this.updated = false; } } @@ -313,14 +311,13 @@ * @private */ draw : function(context) { - //console.log("draw HUD"); if (this.HUD_invalidated) { - if (this.bgcolor) - me.video.clearSurface(HUDCanvasSurface, - this.bgcolor); - else + if (this.bgcolor) { + me.video.clearSurface(HUDCanvasSurface, this.bgcolor); + } + else { HUDCanvasSurface.canvas.width = HUDCanvasSurface.canvas.width; - + } for ( var i = this.objCount, obj; i--, obj = this.HUDobj[i];) { if (obj.visible) { @@ -329,8 +326,7 @@ } } // draw the HUD - context.drawImage(HUDCanvasSurface.canvas, this.pos.x, - this.pos.y); + context.drawImage(HUDCanvasSurface.canvas, this.pos.x, this.pos.y); // reset the flag this.HUD_invalidated = false; } From 1bfea824b2f26115b8d4b65bfc21c182fdbbed51 Mon Sep 17 00:00:00 2001 From: obiot Date: Tue, 27 Dec 2011 20:25:48 +0800 Subject: [PATCH 77/87] Added closure compiler to build the minified version This is not yet the default compiler (until minified build is fully tested on all browsers), you need to call "make google" if you want to use it. --- Makefile | 2 +- examples/dirtyRect/index.html | 2 +- examples/tilemap_collision_demo/index.html | 2 +- src/core.js | 1 - src/level/level.js | 1 - tools/closure-compiler/COPYING | 202 ++++++++++++++ tools/closure-compiler/README | 292 +++++++++++++++++++++ tools/closure-compiler/compiler.jar | Bin 0 -> 5266129 bytes 8 files changed, 497 insertions(+), 5 deletions(-) create mode 100644 tools/closure-compiler/COPYING create mode 100644 tools/closure-compiler/README create mode 100644 tools/closure-compiler/compiler.jar diff --git a/Makefile b/Makefile index 54d39e9d4a..1391e722cc 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ YUI_OPTION = # GOOGLE CLOSURE COMPILER GCC_VERSION = -GCC_PATH = tools/google-closure-compiler$(GCC_VERSION)/ +GCC_PATH = tools/closure-compiler$(GCC_VERSION)/ GCC_COMPRESSOR = ${GCC_PATH}compiler$(GCC_VERSION).jar GCC_OPTION = --jscomp_off=internetExplorerChecks #GCC_OPTION = --compilation_level ADVANCED_OPTIMIZATIONS diff --git a/examples/dirtyRect/index.html b/examples/dirtyRect/index.html index eedfe60978..7b786c7b1f 100644 --- a/examples/dirtyRect/index.html +++ b/examples/dirtyRect/index.html @@ -11,7 +11,7 @@
- + diff --git a/examples/tilemap_collision_demo/index.html b/examples/tilemap_collision_demo/index.html index 57427c8de0..130f49e0fe 100644 --- a/examples/tilemap_collision_demo/index.html +++ b/examples/tilemap_collision_demo/index.html @@ -34,7 +34,7 @@

Tiled and collision demo

- + diff --git a/src/core.js b/src/core.js index 8d7fd22465..c02dcc5389 100755 --- a/src/core.js +++ b/src/core.js @@ -1160,7 +1160,6 @@ /** * add an entity to the game manager * @name me.game#addEntity - * @public * @private * @function */ diff --git a/src/level/level.js b/src/level/level.js index 0bd31ce49d..6de9eede1f 100755 --- a/src/level/level.js +++ b/src/level/level.js @@ -640,7 +640,6 @@ obj.loadLevel = function(level) { if (levels[level] === undefined) { throw ("melonJS: level " + level + " not found"); - return; } if (levels[level] instanceof me.TMXTileMap) { diff --git a/tools/closure-compiler/COPYING b/tools/closure-compiler/COPYING new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/tools/closure-compiler/COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tools/closure-compiler/README b/tools/closure-compiler/README new file mode 100644 index 0000000000..e6d12c4adb --- /dev/null +++ b/tools/closure-compiler/README @@ -0,0 +1,292 @@ +/* + * Copyright 2009 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Contents +// + +The Closure Compiler performs checking, instrumentation, and +optimizations on JavaScript code. The purpose of this README is to +explain how to build and run the Closure Compiler. + +The Closure Compiler requires Java 6 or higher. +http://www.java.com/ + + +// +// Building The Closure Compiler +// + +There are three ways to get a Closure Compiler executable. + +1) Use one we built for you. + +Pre-built Closure binaries can be found at +http://code.google.com/p/closure-compiler/downloads/list + + +2) Check out the source and build it with Apache Ant. + +First, check out the full source tree of the Closure Compiler. There +are instructions on how to do this at the project site. +http://code.google.com/p/closure-compiler/source/checkout + +Apache Ant is a cross-platform build tool. +http://ant.apache.org/ + +At the root of the source tree, there is an Ant file named +build.xml. To use it, navigate to the same directory and type the +command + +ant jar + +This will produce a jar file called "build/compiler.jar". + + +3) Check out the source and build it with Eclipse. + +Eclipse is a cross-platform IDE. +http://www.eclipse.org/ + +Under Eclipse's File menu, click "New > Project ..." and create a +"Java Project." You will see an options screen. Give the project a +name, select "Create project from existing source," and choose the +root of the checked-out source tree as the existing directory. Verify +that you are using JRE version 6 or higher. + +Eclipse can use the build.xml file to discover rules. When you +navigate to the build.xml file, you will see all the build rules in +the "Outline" pane. Run the "jar" rule to build the compiler in +build/compiler.jar. + + +// +// Running The Closure Compiler +// + +Once you have the jar binary, running the Closure Compiler is straightforward. + +On the command line, type + +java -jar compiler.jar + +This starts the compiler in interactive mode. Type + +var x = 17 + 25; + +then hit "Enter", then hit "Ctrl-Z" (on Windows) or "Ctrl-D" (on Mac or Linux) +and "Enter" again. The Compiler will respond: + +var x=42; + +The Closure Compiler has many options for reading input from a file, +writing output to a file, checking your code, and running +optimizations. To learn more, type + +java -jar compiler.jar --help + +You can read more detailed documentation about the many flags at +http://code.google.com/closure/compiler/docs/gettingstarted_app.html + + +// +// Compiling Multiple Scripts +// + +If you have multiple scripts, you should compile them all together with +one compile command. + +java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js + +The Closure Compiler will concatenate the files in the order they're +passed at the command line. + +If you need to compile many, many scripts together, you may start to +run into problems with managing dependencies between scripts. You +should check out the Closure Library. It contains functions for +enforcing dependencies between scripts, and a tool called calcdeps.py +that knows how to give scripts to the Closure Compiler in the right +order. + +http://code.google.com/p/closure-library/ + +// +// Licensing +// + +Unless otherwise stated, all source files are licensed under +the Apache License, Version 2.0. + + +----- +Code under: +src/com/google/javascript/rhino +test/com/google/javascript/rhino + +URL: http://www.mozilla.org/rhino +Version: 1.5R3, with heavy modifications +License: Netscape Public License and MPL / GPL dual license + +Description: A partial copy of Mozilla Rhino. Mozilla Rhino is an +implementation of JavaScript for the JVM. The JavaScript parser and +the parse tree data structures were extracted and modified +significantly for use by Google's JavaScript compiler. + +Local Modifications: The packages have been renamespaced. All code not +relavant to parsing has been removed. A JSDoc parser and static typing +system have been added. + + +----- +Code in: +lib/rhino + +Rhino +URL: http://www.mozilla.org/rhino +Version: Trunk +License: Netscape Public License and MPL / GPL dual license + +Description: Mozilla Rhino is an implementation of JavaScript for the JVM. + +Local Modifications: Minor changes to parsing JSDoc that usually get pushed +up-stream to Rhino trunk. + + +----- +Code in: +lib/args4j.jar + +Args4j +URL: https://args4j.dev.java.net/ +Version: 2.0.12 +License: MIT + +Description: +args4j is a small Java class library that makes it easy to parse command line +options/arguments in your CUI application. + +Local Modifications: None. + + +----- +Code in: +lib/guava.jar + +Guava Libraries +URL: http://code.google.com/p/guava-libraries/ +Version: r08 +License: Apache License 2.0 + +Description: Google's core Java libraries. + +Local Modifications: None. + + +----- +Code in: +lib/jsr305.jar + +Annotations for software defect detection +URL: http://code.google.com/p/jsr-305/ +Version: svn revision 47 +License: BSD License + +Description: Annotations for software defect detection. + +Local Modifications: None. + + +----- +Code in: +lib/jarjar.jar + +Jar Jar Links +URL: http://jarjar.googlecode.com/ +Version: 1.1 +License: Apache License 2.0 + +Description: +A utility for repackaging Java libraries. + +Local Modifications: None. + + +---- +Code in: +lib/junit.jar + +JUnit +URL: http://sourceforge.net/projects/junit/ +Version: 4.8.2 +License: Common Public License 1.0 + +Description: A framework for writing and running automated tests in Java. + +Local Modifications: None. + + +--- +Code in: +lib/protobuf-java.jar + +Protocol Buffers +URL: http://code.google.com/p/protobuf/ +Version: 2.3.0 +License: New BSD License + +Description: Supporting libraries for protocol buffers, +an encoding of structured data. + +Local Modifications: None + + +--- +Code in: +lib/ant.jar +lib/ant-launcher.jar + +URL: http://ant.apache.org/bindownload.cgi +Version: 1.8.1 +License: Apache License 2.0 +Description: + Ant is a Java based build tool. In theory it is kind of like "make" + without make's wrinkles and with the full portability of pure java code. + +Local Modifications: None + + +--- +Code in: +lib/json.jar +URL: http://json.org/java/index.html +Version: JSON version 20090211 +License: MIT license +Description: +JSON is a set of java files for use in transmitting data in JSON format. + +Local Modifications: None + +--- +Code in: +tools/maven-ant-tasks-2.1.1.jar +URL: http://maven.apache.org +Version 2.1.1 +License: Apache License 2.0 +Description: + Maven Ant tasks are used to manage dependencies and to install/deploy to + maven repositories. + +Local Modifications: None diff --git a/tools/closure-compiler/compiler.jar b/tools/closure-compiler/compiler.jar new file mode 100644 index 0000000000000000000000000000000000000000..8962c4f0e1679b4a4fed7a82b3e997808f149092 GIT binary patch literal 5266129 zcmbTd1C(W3l0TewR@$nxZQHhOJ1gzXO53(=+pM&0+xqHF_ssNr^Pled`mA;CI`^)K z*s&va{32rSd*md6L7)KsxG)v%dH>_#?;nr=AOOAlU^jkB)gsc$SuT+FNyT^K9@ys8 zRhQ8h4^Nrg(+IN@DZ(?>1k|e#x;K4<5megK_h9dJAW}UG+mG5}pptj-;|cO**<_t` zF)GeVl;i!U<^TYwf0-o6Z_N#Dt!e*v3h2L6nA+N!S{eTnLX{uR5Cv7O^T(VXyK@tZp6 z+nN0n0pI_X0E>S%{9pX_KMiN6@8J07_3~E({>vFS7@Hcq{*xJC|F1J}Ff+IL$EEUr zANp^c7LHDCcK;Y2e--ct$ovPXuD;_x^D^9@=>D+MKba5G|0Mo%H2+l#%>OsT{|N5C z^8Mkw|JMFLwEBMs!G8nEUqw*eV-_YFLo0np$4DhjMI=*n?=B*v{<_$h9Dy7r++RY_;Rpdx6zsV(e80X^yUwf- zNvf?I&2j%)J^S?A z8?l$w;q&94FfJdQcuy{0aSk?flU-3Y(l%#3D6_V>I3y5cvu&W(G+#>(yDWhr?2Hhg z*Cj{p6xxbM6g=-RP%ksLMArR9RajIG3)VCVuQj`x=9S)?EoIFBaw`%51)JR1)OOfl zQP$cUz}_XVdM`aV|J-g0v)rCGXjiMns^Kt4m)1tXI-fRYg~+?YfL&kJln|AnNX5)3 z8z|Vc<5j$FM4o7hzWh|eXn;|*D)DhrHhYqY_CqRvA$q!)EO_BW(2ZZQ5qqO3PSUw^ z322V2_%yG|tfMC;nQL5>R39iFaR|W_{cM`SgDpAF9FwH~Bzic*k*PB`j`Wa08a*nL z&IOS~xP+A$xwdam8}dnR7ySt%slL@Sx5eQ}=j1cs_Ef|8V<-P~Xm4`5dwEsG;vu+g zZhhe~>$I|I=4GtG%Jl2ZHp`3i2eFs)r-sSSYvg#HFF4{D8|e%*Yztrt>Y++QYJ8-VG%q-Mb zzx4Q{6ioi;o*%OPtsr0Y6hU|2$Z)Mt+*1~DQ@@w4PI0*j+kzbRq!N~Bc>!Y`&N%nU zMZZB*<%z>0Q=;iU#JO3U40F7!1aTDF{DRBerZb~NN`AI+g!h8?0DV~ecM$g%Iw9Lt zaCnS8Q=ujR^^-EPT_pF>0*n(sNpQXD^#t-b{w20hS#b#+07N!HcX(6#s^kvQ!4}#N z%&sG`A;KTt!SG*zincpj?%_R)fM9vOG%IZo&h)MTH(pL5xU-VU6rzZb2qW7Js62d< zdt620y4Mh*yMZ1EqqtQftz2glmVtZqk~Hp4eNTja*lh0pdo5Kw6OgkxU*+GEO5ZA= zoyREsk!f0~W#L23{adzSw`rw*ac|e>t9!{Zv$bl{!~8&S`-XoF1o(yZEQ0QhwDnyo zr%RV^S2sfRXIsc;pnRPx&M@VcU+42tw5n)A(f1haVTj&nBq<<9A-yCM`T$~$i5;e? z*;SLMB7A&!9TFS*M^a<@up`d+FVO!4kiW$}++>m1!0&iR2Lu4%{J+M%ij+K&pqajd zxRbGizLTxP-*G^e-vWpqzJld!$|Rp8dW4@A1A-pTjvrnK5)f{4wGkuHS=2=3#v0et zHySDxWdfh{?UyjKw(>@D_8dkJXBLV=5DS0hvh2PZ0&ZI;J3fUi5n;iW%asF06*RsR z*!jVoA$XmI^IOhkc+oa05NFrNR1!2SIjJ$f- zIMkyK*G}Q%5-522i2cJ zylj0t_nK;bdLr%q1lwjv%3}+bLPn4hwTHDGq6@Hsk>4+1r$oEe??4&SLI(w`Y%ynn zowi8JS}QPTi&~&!nNS(GfV{6x+SE;_RYF~)Sc)7(0n~@MN6{`mNR4W?U|Cg(QCIdG zsTVVkW<1tAQpj}>UAfi`L4!p6TVUHV5kDc8Q5 z^W2{Qb4u`ml2?;^nbY_>{Tyt(I`rCFl4AT?eXvr&;(6PJeD>O*GuNg$7Gik|OY2qE zlPDF>2w}~|iZ6h}y!kSH5L$Ee!BV;~%*`PI^l;40UT0Xa%>_GPVpt?L;usDJUcYC3 zjB%{y3JP&8FMMa90G@=4qR3l*IFKn^$jJJu)@hyts@g@t=`%V@v)ACBQ6>A^uOdGC zim0P(P$1!hYaD+xQdq5BNS>j)0zOf^*WP#mN?*1MKioHvi(XuhkjLxpMP;59ba$O1 z(#htSpKhmUAwRuG#CZg}?toZw_kxd z0(j(j_o?YbH$eyF&H=G|&{f^6pKAqlRFJ?&SYm-aNu7;VTYuI#;7QOGQ#RL!a)un^ zN`G{VC#k0}=x^P{N1R_>k(}he&$$L2Gibv|SjljSWTzlioML1c*GRnqZy}y~8o>E! z5%4r|riXZ@OTI^lG4OnToGUrN^@_>?J=5LH&2{7A(y>iG0^rq3WXlZ~PrP7Aez1>s zOfe%J)$G(`ntCRbPSFe8a!%_)U3U+?vxs}^gUk=3!>8PHPI*L8=?+?M?7oY~z;Ctc z(WGR%6VdKQFjSo5C&>R?cz(XjwCOc5kGwFMAE@D2RiBO&S-cx+WZYb66MDw`uUK#<3$ZE8{oE78mg=aG40A*5CR3{ z_{m$OX5ov8FwBv<$0GF*w4MRI6I@L(g$l4(pRzn0r&@oG9xc6r`yw@1($%U2`8lhz zP+4g#8_*$U3By!O%Rve&6kzxoB` z5xIIKlSw=bXOO>8DJ}5NebIE~y3O{)Qnp$v>8Yy)2;aHJE5^W_?U(k<(*n;Yn@|n} zd_2jOa_5GnK9MdVz9>D*@hp+oE;z|T=Xhwl13PRe{*{qQevd}nm^hKsCg~h)ghLho zfN0IZh%xERhwm0lP6THjh-H>!s&#sse$pY}@kw7@a^T0%U>Z0Z^Es_m`>A?9g;Gtn zc*^=`Cq>KZjdlKZ4*zdQvHWW%DgH;_EUj-RXlvu>Y;F9XsZVbF8{qHMXM%Cnat%vl zFwi?F&xU{)`lc2?I(9i_gtxnf{X6R+Mg|6i3l_Gwm6y+Xwd+;^44FaBgPa1v3XGN# zEd+U{xn)-SfshF?wdg zkMP72H>`wg>xvoqC4;4Yc z`;*K6Ct^JVV|2cr5*uyK>pyI}{Lu*PTBCEJ{ob|cf&>8I{x=LFqHp-SB5?bA3RJOH z{G9^5Z8lld1A>BPk@yzKnOC~RTO|h>v0mC(;C%Vz^Y%o4 z97gEY;Q1Sxoc{QVr#-R}C}gt#o;vEqew1~T@s{Ceb9=Pa-3>w)$&J8Z6WS6IM29N8 zJ{0F`jKEI=vpYw338997z|Rta!Lx-DgETYz;57oRhB7nF`k{tYL$l3@AlQO31eOi$ z*)sf78X;f=Y8h&eXUhk7sL2-`2$v!75N6Kq2;)7pmO8j6Pk9l2Y9B^Xvr;uY%}bVA zMU3E}B2HsP!8+h-tolzg~sjkvOGQ32F8QPna$ z>14hJ#$YTmLjEO(`I@YueG&e3ACsfd9)Rr<*!iKL$ANUlR)ou+>! z!}zRJdze9SrEm3A!(NrL)k(&+Y~>sMc#jIY=PG0H@|mb^?6kVwDhPvAc9v6E*>+hW zcbr?Im^HyRG+=be5cxQDfN?;wS%>C@^!2`|J!Epem|jMnG+uH*Zk22;9&iBM^N~nTjQI1-z|Ucs;919 zGH6w$b6wS0jv7xA<3@9M7_2BKQardvS0f63`6OEwo-oUwb-~0JS87s74=YflD#Kmjzy;zmP8OVETs@opD1|v)g$_;p zQv9iX7PFQ+kPgl`jE$>PO-b;uDEu0FfXD0EvCw->bD_Y*m=-VwxLnjU?db}Se3 zj3~VAG?)m`DA-g4$Yc63>8LMh>#Fa5C|GkkI>C*)d5fRp4VVFJ1orkj-b;QPbOB+4 ztLCusET^Y%7tIcWcMn--IJ50%nh4JuH%(nkM>iWn0lhB<%%0$YU1Ws~JSm2h{x|js z!+4t;cveVb1db0thFT%99}p)r-UUd!h8ug1!1{d%bo`}vvC4re@dMf4VpS9y6y%6} z%x7f~c41!bkow48Ixgw&^D?2kUPJQqQXU*|!ajl;d||L+KJhWVfDS=CVMz46@5Of2 z(l67$fc^}@go8TH)xVME+iwWw_%{$og`SB1?+G)q8>){FW~lqQS_71mgM-aO$rD)K z4j#PsL!;lkbyIx$)$SXQFC4Lmwzia5pJ>(Lp-(ZVQ${yhqo zmyRpiXPYAC*uBSqVO|0?L9(C)8bLD3~2`?31yZ8iv zKD`TURp@fTZ9cJ0*@Oj$&Pk{#+Q5~sb0eyKu&$Yez!KC|2F+u!EAheI+-8Zk|Jru? zTPJoIIeq-=w+T*vHyr%`o*DiqA!PKejsIqi!Z>YNB!1-Jt(B%VI5c$$dA=D6;@t2W z>wcU*X(Xh04M7WcLj#5lnIz&jeizOBFDN7|M4ETNA?U;}K{iIu`@GH`_gd4btkk=V zr;OC>la(xB+NnvQtXRXebeFwmu-a&F8sg2+ISIB&T}0ikp2ZoV;`P7p+GNtbTGHNw zfy3ajngU8uq(>;V7c^l!h+lY)LkoML-wVC_J$d4LgkxX+a62FUO4rk18I1ARd&#R@ zW!enR4N2#bMdasvV>GK=pDj7#np9>BAp0DX+m0ecOw*4na%CGw9@;-`NT2PRA5uQ8 zli0x|m_tu0hW|k{#D~fb>}C$-s@K!wj*1f8`4uyw7e(B4g)@hIoN7JBY4Og9YV2Oe z(Yc2lraBKm1CyrFL@eYajaMEcV#*Ld$|bzd&@=2+{ReMLEqHc z*v9GaOGaT_23a1SdtpPS{}%)dPYj?if9B6xlw>HV_!uewXb{0XtCl%ObIe!%SN?Z^ z?!F*sR;%TdkR0e;OlI#;UcKFXo9VzBJ3}p}Ek)<@sZzyO(QY1GpcIkL5FnbzU1XZl zEg^(t`@w;P(DFcoxG*;BVCxruK52i9%1UAeX^7P^u3Wom=uW33{=!xUU2PKd$P#Ku z;BXx>JY#;zAz9(^BPnxwhrn(s1KGiig4imL3FFe!Ahi}h7{zbt`eb{-v~fbW7wdUQ zpiNl9RkRmPR>oClK~gOYTRx6V1?qp4v@+n4s5y`f)nMNJscP|W1bI$%crFD^? z);p#SG}c1isDWIfg{8Cm_JwnkCz=T1Pqc-7D@K=>1A|e^{>A>W-DF$q@N0bncvb3j zGlscn!bnThN^;EdgzI0jtbzQ*`fvVgxXmmD@rO;WFN&lk7+~^d%|Zkhq_s|YH5Y}r zigl!>+8pVQwdu~!5o3-E+#go~JE**=K;49}#0N?8;uwdDN7ZnsYEd(cRdT6*t2`wt zn*l2AwcsDto9-O8i~#O%0gp41;B3-(bUiPjGFV{rF#BSoa#0B}L&q>vF2+UdDnGaz zfBb@rT-Y%D^dFlm&X_x$$9Bx>f3f+ZRM}&fqwNkhKkxYkr$?8}l0O}l9QlZqFogW@ zoVk#i%yIGl$Ta;i#w3wV>5U+9Qlh(Xf7v(SaPf-L8yCbgi;jGK zK~dCnObW~JJEWpbeZ-JG}oj#9aJ&a_N?I#?WJa*ac7W$CO(5f zhYCGuy|U}Fne#3_t2t|N4OME+PFt5W|K>A6i-ZpljUF}3R+0^cr6_pWv5 z311GwHT!~Q^Ykv-)*tPwPH^MaOV(?3>v54b?UQQ8TNm!qZe}iH9y=8#E-c!^SGW?k zKK3U2(Wwz0vsUC;ZOwCy)_$XX=js^4)WyWn5XN^EJ?IzdTXR>w%rCQ%!O@{w>=t8D z6cM}0qBtusWx3jU-8tEBMT2Imx%Xc6lQ^BxZN}t3(5AL^vZN1z@&t*8SfU8> zN7}kEdHKDn;pGDob1J$}P{1e?fqNvxDjD-v|)?`|w-x-$Q`Eb>e?iJVXM{=2k}k*@{;t`N*z`pbvK+0gwz8 z{GvOab+&}w5U5+|Ic`FQBFt?#Q8-2&8mg0VK#bQpS{`wUaaB!ED0$13e)FKUICYGQ z$HXS6lrG@<@$}p}eYeg%{qlb0rhRsxj)=qO5C(&bwPwTh0mt zHu&H)?2(6uW&u;t1OJ2~Y%|jj8K2gfPq=ig1y-727*pP~Vx{(3BZS&vqK3=68!T96 z)SBH~>uh6h8$cjIi%S==e}P#`3yIb~DKcpH_z-3uB6m?{gM0i9ZI6$Am-|RaMZ#sS z6q8fyc;4R_LuPYcdnw1%p=xw8jX&H=tzs3n(q_$h?w5r~p?b9Ti>iAgwDW2L^E>g>oFY#nAnZg)Tdp^CV_! zFs4s*YG!kLMJoGMtOLd}nWBsnS<;Uu_N+Us(<@a!A9;VAVpw7^aq8?kOFpH2lYV~j z-1ahou_cGPQ0ejjIRtm5;cmv6hFio&)?2c2MF^Wf?JIWBk9m_34yVHc?mu6JrJb4y zJ7%yd+=>&gp!A}$2|rfuh=xXh8fWOjH8N@a*_RP-<^g>a+u8Oc7+~yO8QZ3b* zuGSp-vHS8wvDwdz@e}50i^2e5AsPlQxGvFjccZ+6t_(Lb4?e98c5OBaXLB2umtN~j zDFm(9)RsNUdn^X(C~Itu2%@>NQTS#o8*k(mdKo7$$CALlsSbViBRKJ^ zTaqD*-gl>9dYrS29C@tOp>%rTfyB7AgXFShfi*RhxNWHTM3S$FSD9+Smc*>o=EH@? ztkmKo32M={lumr;L>5$5vRj5bQezc7!bHdaLjnhqRV)g!&T8|NsDmt^bpB5R@A z1SVtwNx(!@323v1hJ{%u=L5*a}o60FmMax>(q(u4t>Ym5#UO!#|}YeQIIvRS4uM>F(I*_r~1Q?At4E9I46r3XcJ(g1>jX{JYzEh#}CrQIC?T188O(07rYf&l&?DJmiOSoy$ z44eN zwMLCXpMw$XuZd@Ih!^SIZ7jZTuSYFxv}L>4k5?ZaJ)AHa%Ahf>-=|eiAUlj~HNubu z(jTb}FYHiHIk)K!rB9S&yu>_VY~bfeIDZ~oj>+;L@7AFE*hWA zHIUisK3b&tnC9Tk8E-?vE#*RY zVq6zLN<-2P>aw8?;dh9FYqbZ&WHrb_;-nx9OCtgFIy=V16%vVwt2gT>jk%g?C88xr ziip{iBiXN>F=q#V1iDDu_++^xA zfyTFJZE9}IqUi{>OEL0fq~nq<9AmymCmPimsW_K6X!S75cCL;n$N6C!AKkAjY>2p_ z2J>}m?VTYP8pRDJm{u8e;u@ANPr{25%1!K?0~WR}g9r~Lao8ZNskj6AM+hYqC!VG8&d$28rPa&L_LbvH>UrwwsAt75oxbT91EUv8MO1$Sm~876W2 zIJm_(MC{UJqvm4bl0l@nux~`t@932R1(QToeBw^pL05*)M+jn8FRCyk26u8u(nP_C zGrmecj}XL#0u*!@;iwUm3$+-dSIzY3F||C=IA%&D{7<_U#Qd+z@LFs4jo+8X~!YZ5wPpM%%(C?h@5__qAF5QeqcOiO1!AD5#Jy7F@5p$5%47Hnp#JgYQhLa_n z*QoStjGm%!$e3R1RM2&K+=$bD5d;a3pzhh5SSF@%H~2n3@rTkomqM+K`yyc7H)?tn zf8`;+up8X-hX`KcK#Ubg29-B255vl<+}y~!kPEg2pBYk`jTUc|SLS)Vc7L#0aI{}y zRD4!|mT14`n|z%Merf!m(c^|}tmK9^!(D0fJqAw%GvCQqZ~{pHGm{`p3u&g1Mpx7@ z^6yN@2y0wE!g&!QUVwxV>i|OU_l`r}1%%lJxY#3%=6iuIgZIgcO*{Sm%`Iqy)*f77 z>6buhvja^YREjvxJT$rO6Q>c@p=9FnEQ;l=DDaG)QYVo8iwfJIDZ?7lL1!YiGuLHf zbrfmG;{yHpLf&4@QWuBFA74%zt7RVS-s4-GhZw~&4e=WwV^*6<+Ug8 zp+`h`^X~78q8H`4B&KtJegghE1)OF!hZFt&-&Q6y007&+Ra^cI_d7KpJrfR6zj#L{ zJQ?F@!FvHowB*?xFlq7w1qH>N=s@VOfpB3`#Tn>QLm81kxN1=0$1|K6tmJNFWOw2411vx}Q9vkK8too_VL=f__AG z+;aGu-zGu(^oY`UM#wh2%tvxyv)B#5az?eyP|yj%j5_oO^~;PNDq5{BH`?2!qOY=T zq>#}xw-67*&qeOEd9>`CY>BbhjK+ILVKdHC$S9aJ%A}ExmE5?NOs%5$vFBX+ zOQ-O0YNkjcoqSbl!6c1kt}%5d$&nlit6H<{fQwW>;>iMww5ku_oo8C{vO8{n2+)@o_V>2%z!{_le+(Un;B8owJ75F#}3WqnC&(5;#(Rf zs&Nx+y6)Dtd##LvbZJwvjr?}Dn1CDgmJPJ<)oe(@WuZw;tm{+8{ltFBXJErng*d`y)kViPo` zHx_=2%;w1L<}sZ-fJ+=}%v=}WsD7)zy=1HyT%zYhh9o|Os*{vRhPHB^@x>G-wmLmk z!-}9*wy_vD3+L@v$AdocaQ~HL1}DFbQH&3+zQ(!W29g!G_aS6F3T1;FVG%L3TDCY? z8UQ*Oo_5OG1j31wYbK<;h!{y!!Y{F1BQ^+vmJucKnxXa)pPBTarI$Ga6?ZehMu4@! z-Opn)qI|CuZmrF`#AF03Z>OV5hAn50NGzBz{G+am4u8^7r8Jr*+l6Gy)9+e)5z;}U z&4AuQl6u_LLb^Ts5=DyJm<8r3N*dTc*JUJ^Z$fOJ0E}22!K-V1UDOu_eisK&E8UnshrxM0!Ml1ew|qNUH6;o0s7r z$f@Owz&74qEJ;C6Icn(Q1s=y&5NnlXT?Vmu!8{n--B zUwPU%2vsAHpy=qii*j_RSCZ1?!7@SjN=XjtIa#Oel{|2{hyz{l+uTJ;Xu+tL7!vMA{5vfgj1US^NGbxx8@YIB8g8~VIcrw$aH9T98zzvM3(n9649wgX; zf|St-c+^otf*RqqX^?PaLUjU24erN^713?Cqimv%*UjZ>w8v%X1d*%De;*o#(U zm5GoabQ-M7@|mPXJ$f4QL4E<+=Zz%2sSEvAQrR5zEDq2H)laENV%9MEMhW; z1Rj-`!}l*?#}J5yt{d%M-2g9!1n4S)5Jtluz?en-N*q*S zLId|;okvbbO!{U`P$X11mry<`WUv}8*%w2DR6Po|ITBSJCEY5*g4uUu(z=*%w(qWJ z6GP2(1@AQ*gC+eEcU_ZyFkWN@TDnEmoZ?WvUesw_WR<)o-746W;!u44T_x2ad0iTh z?eUqzCt7b29x+G4z8e22wNCMpl;?#2>wQNqhb=QH?1Nm}Q}~kp05I{GA1VZ`b~xeZ zzP@4?MRdw-375&(-l~UyhwK=QqKoBSg6CvHwdGvpq>EcxjpYcV`?9IDn@kpKErRxa zOIcmrt{Xp;PQ^&>`Q8z7a-wqTEv%d0u|jukych-yvTOvLoDdX0tlLZicU^LGH2-zt zrL|uT`IeH#3$)-(OO|yVGlx3dBcfLi(D`mum1~}>b&cy~#%?LeWnU)=BE`-#4`ibh z8@s`l1&@SUn3K$U0hj!mhCq+tofNF>#wM`9$w4D(T`4n&~*uh<7 z=WHVBli0|j^JL(G6TcC&F-nVwfLn^2$%Lgq!s_v6sdvn7_D;ET;O~l?a!p$%0oi+K zMIEI~#hDz^y$OmNL@D-|b@7T1qc-*5i}8w-G7TOGOTM%ugxbbJ$DLm9z7t2{Zy`+J zLfy`-MNc17alh_L5Su9iYC(HRt5R26YpHCV1*X1Aky_H8WhS^ygc9LJ(6K6id&D_y z$?dXm>v?rjzE?lX3^lU|85AGAfo|@)r6{$fa?7w6bF=3_3V8&mbAb3+$MJH=&2-y?Q zmX`^cjjHf^i8Wu(VVL{P;8(ETIs;BCMyT1Vx59k)P?h9pK{lwQYPqxnypWy22fokVme0QMb!eKK6MRkMw?|7|?$Bvq&82`LS= zd}2Q3W+O}1V;+JEJ$DEmy8@bLZvj$^Sy9qc0*s9L!-*CRSZe~@XVB9*Qa)rPPXx`7 zw7d=vBRu0tz4G$YLEj)|1M4aFxhBmKgwDnR+*vle7)OA0R~$a-@`u*Ig{?W{&>m8e zOe%qzg9dBEgtLzw(wz*0E^ki-E^;H!m7~;*<9>|k))FOSRodkGG#bo{_iVJa4eiCf z7jN`cVsQWD%Gibw-TAD?pHKQqu>Lg!wB!8q%TR};p|=)+%FHvxXw+^ z)`1@kFXk#&#c|JJF+eXlKHB)`(ri4Qi?4gVWrMYPl1zwV3*HSvk{&h2Ue*xSs_=esn0->4F&jo-wJNzxfk4>~2?#(MNNFO)q?KiNq56n-S^QSIInnyQU z6Av8GqC0ZW--V&xnk99s&KKV_DIEsO3%!lrv=nt8>T&iJsBWLMRxU`EFpHIE5>B9( zu^SvV^f-mPo|B=I;vj#E%43gqN_?Pts*nw$oB00Kfj8PM9gNJSvW>7^&Bnyc8CzEn z<5GT%r{t(~YjUh0zR2$Q@)*u*R-B**tLD!i^2W{EDq~JqqN3l=$U=>{l-KIYFL2*dw4V#OLj5s+F2xSi{MxC+L69!G36b?A1)3m>L`W#cdhO4K0?Wo&F- zm^yHYzHpNiw@A8R3%|%zn$vdjZ8!JNWLo$@4+m$zgCNv%;N#fuhl)EdJOhW;sF;o#|g~%4HCDn z->H_|6-~FWfoAN51^3_^YoS+o-IdTcWA6ac<~iMv6n#_7g+#z=PQ0;I94GP# z-?wg;)>=>15ytJanXfbaj)Zl)`4_YEv>blQQawXd*^9anh<@Sp3?r+1t@H1=TpyRl z`1p0x8pv|!=g3nq=e@B&@w}b zConb(D4G%{Qzd!^iOb#60e!inlX|30$xP$9IyQ4#d`e^A+4Z4))o#~E zighPe;wG2qP6pAT2I?GrVZ(wEUplZ5ld=#ab)Fjmf+M+sjfRj$Hd`$m+WBNpzu^R2 zPxbR7p!UrVn1QXi?|25tJiTUZr)=0H6nMQL*uun>?3pwis&#g;Muzy>E~#wxK`nNb z``aS)wbBkVgt#5#I@oap9fbKeRS~^U##G)!d)HYJ!*32O-o!{L^(12$4B{d?B@yw6 z?3xmV0%JyrQt>$xF(Db2t-EmBy)11r`~nknZ3^FX`kRki=5Fv%jrM2NzhZelAqsUx zmS0$gZ|y;sy2YQUwjp`<$#(cDW|gGW6N~ZyaVC2NnSkNsp`q$hIF~e|vSE`O5bbaa zif#vF^*9TvD3g(*zR@d*j6%H=dw_|ID+p+l68^}b>g6ox>mZQ^5e2P;bb#!#^h*L8 zfteMvKOVJvPKWvVgAuzcdFQ%$Kc}Z2Y)BrLiZuYo#}sh#$>Yl!?ZcLiX;TO~Ad5Fb z0_PnBb|7Pgj@J^;>@64&J)tmrN)ewDGKzz}Suo#DUw9`-d>(bGzB9NjaU}?i;^-A-Q7cxO=j8F%qotLM5whgN^LfxApF5_|Snb8?~wm6L|r1(_miQ87y* z8jXa3y-VW`Jy(*c*6Dp%I zk3}Ia?5wXyE4ri+AWbo|f5W7^Mwukdpb3v{!a<8LO@C(H>}{8%+bV>)1q1#4I)>PK z>?0~?=iN_Kq9lA@pPp#5aSf^l#E8hjb!^JsWqWqOyJ2icqaJ$ZCzvCfdJ3{N{fUP2 zhj>|eGEuvtL?oV~rKjfLUu$3N%CDpNw+@arx+~*m6a|mTRp{0pi2b5x9*E;E{p`W+ z_2alW=+@9gwePSMW@TIh7MB1tNF-`9CaP-`FKuzej@tk#=0jv;i;p5&_!;Ic|KlB7YJ` z6(1*U)cL7DVs?B_r|xf5pw~N1}2!Z5rv+*~t1DEE5) zL3v+pwwYa&uem?;>#^1ecCc? zvNEe{h*xQ%(GJayi>2z4PsW@hJ)Wj*=X&A6R&OHnG^1KbdncPeA5%FJmkt@yY>=`Z zOt2D+xDr+BzzKZ#O^b@tE_6L|(1AA1*tCd&On~`}c|i=)=M(L#*cp|1wtOi9LGxj{9sOVNP)GcX4m>5Z3cx) zST*hpLyU+pIr*Vv>>vlEJAYo?lcVHXrxjf* zn}W@|C-p(4^A>;chJE@rT_vYS9M0@O3&BSN!Gtq)`dd}Q9fsd0ttsmze(_T4EiTEd zPaa-3_!Zt?cHV4gh9fL~zlQn#`%UG4Yv+yOKTljBU6mG4KCh_UY)NQ^zYC_~z>(Mvu`&WyR5tA@G%li^*~nMqEy5;?!=KIuskExbYtD zLb7`+^eQ^6&DFj5`_qnb>nhwBgX+p(D}zpxxvKDm!=5(bj$=MTaZ}4}b;{r^61G;P zM%Wo-`BpDUskyV5Vgb$6mfu157uXOJ$WvMp!FcEd2{osVsvxQN_yAeVHo#DfLSS!Z z)*;0@rzW7V7ydAw9&M_$jYAZ4=djj*l)!Gv)~H&nZkP--KN&>>`nyx+IjU^!@EI~o0!7Uun7R$E zdBLAS;*I^mnYlg#%-ei7;$+&T8G~Y!pqcj@l>B$);#c8m3{YKF+gMYf?E-oReIux< zNkvxT*nYx0X7|g2grpd)GIjY)@QDU;8-llD9+Q1$w`vMD63HR#dpT27DAL9 z*p*-~3Sn{ZVYddFjqa>rw|X5hcSFpdX}X3pGW9E)6|gGgVnIQ7j+j01XzAK9y?ybZ zq~iG@+3#UfQ-8&zj{dSDGyWNo>*Nw2jJGpPb5To|movxM1JD`4>+3BdG@+8r>oH$`FsXA?4VruHiKsWZwuVDUus1>ky zBbaet@o9`erWgG6v}=g!p1@j=1tD0SI7z5@#;Ec%Ipe?pc}q3fv>Uk_)Z9qGewK=q zT!`$RcR_YrAjeH_gd^%llEpp@_>>Qq2M8)}Qm8d_x*()Jf8I|_liUN5{xIkU<#x9r z=}vXF;gRGjKj4w_6(z`#ot+#1+gIb8h_N`$2gH5YS>!0(5&!5nNs=gbGTRn$dPd28 zKo^>iMk0S;JuYZq@=3U05bgWN-z)5@Alc~NIvh+T)kbg-Z$egO>n5;xh1WxX|J?kh8%M44M z1HYIDdogna+A|?ut&YJFYbG_!vW?(0JTP8ps4F)v0FCnC-0z8fS8hiKlH3lKCC=Cr1bd(+gs0x6Z!y~2+=0lRV(HPH;p1FG z{RD~D19~&%*NDSOeAF zf_V2^Xx17c@wgf7So#8dPHC4}#%C+U3yv#O_U&8^;qgFtnNcI;r6xe&tS}65 zbrjnV|A}Fl0{F^sIeljDJFNVWs-LY0#uf~?7sgiI$93zzVvFx|W4hx*#QjXAU#J_1 zjK!_ZV1qbD3+n?-(bQ5whXo9w6DK~iQ3O91e z8gg{)%E-KKURQ z*~Q(zreo1(ZRC!GzJ}ou!a|!J`*{OIa~K^k>57rOjiNk9?L{83Rd?QAq4qB;80T>630Sz?P{{sEVzrX4IxO);C5 z7T}i71hNOcaPN=+ZGoO5>DMM7u;wS)8+wlh=n>^}PEHD$)HupfJ;M9xt}`z5=n1C3 ze1_r=K*6JVJbSd>k$`&B`sL=8#_HOUfwdhJIOa{5LBYIM;49q0jH26P*C?_h3+zEi zPWwD)*4##>q&F<_T=|Bp0grXHdYlLDcDiQT>&+$vC$5*nE;kykpcigy54oi#B+?sD zkDpAdiw#K7`?Gyq9BbULxJ%X!tL%i6QR_{JQSs1hX;@r?)Zw^!s?g%K^~c4-_&RVT zwHtlgx{_bjgs@dd6Vesyto13I{~u}Z*qCXsb?e5qjgD>Gwr$&X^2D}ncZ`mmbZpyJ zhn+H48hqL$Ef1&EW=d7wZt}&#~HYfuqJZwqGZiwiv%~!AcOWV`Y&-|qY1S=sk zFY&SZNf0tI6c^S?M#H6uwHlvOCdUcF=?BjAPDukukadSlJ1ePz<2lE_EE|0>m+6nQ zWIa)vrKHPexy7=is<)!8VAxqMl81-nh2+vXH3mvG&vaqvF%J1Q2@jRDLeYZ1K>vAi zjJTqrtNBe}On%GimHwT{F$<}vnYodht?NH9K@~SgM_a3ZXcLv?6hN4e{J>3-m5|Wq zk|9loLTniCK;}S4hT2bo2Y+=fx=H;Z+0qM0&y(eS0sT-KITI#Tl4ZS{l|T92z2arH zvu&Uc+}x-qPH+K%1Hlf@iXElLaGRt8`0%$GQ#=hL=~ry&7St{8p_WQn;QYPgo!lh0UAyrX$;lZ9?>d2pF+hcVqXOI|` z*Ij_uVOxmiOB|PrGQjOGVp@B4zbAW#AL=m;Vn09EG6n3G9g=cOqFH%p?+`O*Q&;l+ zrb?yo#>``1&0(1-Bv)$)EDE9nR0p^YDQ3&Ln#6}CGva+d2WLvZ->?`#a=qa^mOUys zH;)mTLFCFt$&x_M7%FIWi25*rc4?OUVzv^*o@pa+_Ez z$5CgI=bK!X#8q7ygGf{SSAx-S!2#*`d;9#qx03(g+eR^a*Z)BnQxo{)2L+MBb_8uv zlM@7ofhh}&N@r(vkhFdj3Ks3G7N-_}Ms~BKXcX@P;lVVrAD0&xMZdB(-TYdb-guv+ z2?UQrl|`9?qKL{S)2TBXG&^>+p*8yY_(3r>uoPl*5$r(o+e<3LU*Vd1vKQT8+9{)^ z^la%YKGX4St>%#4Ww{M-Fzf399C|T;U6`YiB{rU|UO7R%=M$aCa~J-4Il}(L zLX5*XZucTqR{G}>`hi}@65IHiLx&z`VE-$A2*?O=D^lEu0Sh>2uFunu`L@7hHvT

&4ToPV(k$|gE7I%it)EOR)9Y+mQ#9$p;<>A4yLX#yXF^C3>781q6G$GK@7Zo<=;UP-K zMJ0M5=1H*5!eZCRw1L8q9pg83ofnx{s!>71ID@h2uF!$^@lh!T*9j>GW;q56GZfLl zxBwLm8#Y#sc!|#VNMGMr-w+T;3~dbD6dbJ}1}Z2`hN;Oe$h@u~dJNnpT#hZ?zhF7P zX>iVBp@4vLP=J6W{=JXyn=W?zwrTojRkNm!rs@j%Urd(_7C1rK(^hA*ztc_N-tW4?ptd%$m0CuKYD|FV9GP!L1`R5jg&mR6i zr3`k2NzLxHEEW)o+8a`@Jx$N+KJ~wrdzbZnuK0ZKXZ|<8dFhz1U5-9BvAfuq7 zU?w3Yp)nWjSD<=fB~KSq6SxSAsEWsNc^x{P@$U^$=Am6v5gVjMmWT0@9JVLaM~pSe z`=ZYr6=PDAytD1)VP2O+smO1JVVWH_N2PzO%4z1k)W%lSd

_U(%vjsHeI2gcpNW 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 f$L!KbT;g-A8S`b0%_4b2&=Vsi-7F% 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

FPw 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%0D31Snjk+ycXGgw2ln(VjZjT4=b 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

m(_ujW15?Y;g9#WkndkH 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≺r?3E>rqpoaXYQBSX4Yut|KWEAD6yP|Wdk5cU@* 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