├── .gitignore ├── Gruntfile.coffee ├── README.md ├── dev ├── css │ ├── main.less │ └── reset.less ├── index.jade ├── js │ ├── analytics.js │ ├── config.js │ ├── data │ │ └── media.js │ ├── engine │ │ ├── animation.js │ │ ├── assets.js │ │ ├── camera.js │ │ ├── collision-layer.js │ │ ├── debug.js │ │ ├── engine.js │ │ ├── graphic.js │ │ ├── image-layer.js │ │ ├── input.js │ │ ├── keys.js │ │ ├── layer.js │ │ ├── message.js │ │ ├── perspective-layer.js │ │ ├── physics.js │ │ └── tilesheet.js │ ├── entities │ │ ├── actions │ │ │ ├── changespawn.js │ │ │ ├── endlevel.js │ │ │ └── intro.js │ │ ├── control │ │ │ └── test.js │ │ ├── entities.js │ │ ├── entity.js │ │ ├── player.js │ │ ├── scenery │ │ │ ├── button.js │ │ │ ├── door.js │ │ │ ├── laser.js │ │ │ ├── laserblock.js │ │ │ ├── lava.js │ │ │ └── platform.js │ │ └── spawn │ │ │ ├── bouncy.js │ │ │ ├── floater.js │ │ │ ├── immovable.js │ │ │ ├── movable.js │ │ │ ├── test.js │ │ │ └── upfloater.js │ ├── game.js │ ├── level.js │ ├── lib │ │ ├── box2dweb.js │ │ ├── box_2d_separator.js │ │ ├── class.js │ │ ├── dat.gui.js │ │ ├── jquery-1.10.1.min.js │ │ ├── jquery.color-2.1.2.min.js │ │ ├── requestAnimFrame.js │ │ ├── soundmanager2-nodebug-jsmin.js │ │ └── stats.js │ └── main.js └── media │ ├── data │ └── levels │ │ ├── 0.json │ │ ├── 1.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 2.json │ │ ├── 3.json │ │ ├── 4.json │ │ ├── 5.json │ │ ├── 6.json │ │ ├── 7.json │ │ ├── 8.json │ │ ├── 9.json │ │ ├── _test.json │ │ ├── end.json │ │ ├── intro.json │ │ ├── t_0.json │ │ ├── t_1.json │ │ ├── t_2.json │ │ ├── t_3.json │ │ ├── t_4.json │ │ ├── t_5.json │ │ ├── t_6.json │ │ ├── t_7.json │ │ └── t_8.json │ ├── fonts │ ├── visitor2-webfont.eot │ ├── visitor2-webfont.svg │ ├── visitor2-webfont.ttf │ └── visitor2-webfont.woff │ ├── img │ ├── UI.png │ ├── cube.png │ ├── debug │ │ ├── tileset_16_16.jpg │ │ ├── tileset_32_32.jpg │ │ └── tileset_8_8.jpg │ ├── gh_logo.png │ ├── gh_screen.png │ ├── info.png │ ├── morphs.png │ ├── sprites │ │ ├── button.png │ │ ├── door.png │ │ ├── laser.png │ │ ├── platform.png │ │ ├── player.png │ │ └── spawn.png │ └── tilesets │ │ ├── definitions.png │ │ └── main_tileset.png │ ├── music │ ├── bg.mp3 │ ├── bg_alt.mp3 │ └── bg_alt_2.mp3 │ ├── sounds │ ├── correct.mp3 │ ├── fail.mp3 │ ├── fall.mp3 │ ├── jump.mp3 │ ├── off.mp3 │ ├── on.mp3 │ ├── sparkle.mp3 │ ├── success.mp3 │ ├── transform.mp3 │ ├── ui_click.mp3 │ └── wrong.mp3 │ └── swf │ ├── soundmanager2.swf │ ├── soundmanager2_debug.swf │ ├── soundmanager2_flash9.swf │ ├── soundmanager2_flash9_debug.swf │ └── soundmanager2_flash_xdomain.zip ├── dist ├── css │ └── main.css ├── index.html ├── js │ ├── jquery-1.10.1.min.js │ ├── jquery.color-2.1.2.min.js │ ├── main.min.js │ └── soundmanager2-nodebug-jsmin.js └── media │ ├── data │ └── levels │ │ ├── 0.json │ │ ├── 1.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 2.json │ │ ├── 3.json │ │ ├── 4.json │ │ ├── 5.json │ │ ├── 6.json │ │ ├── 7.json │ │ ├── 8.json │ │ ├── 9.json │ │ ├── _test.json │ │ ├── end.json │ │ ├── first.json │ │ ├── intro.json │ │ ├── t_0.json │ │ ├── t_1.json │ │ ├── t_2.json │ │ ├── t_3.json │ │ ├── t_4.json │ │ ├── t_5.json │ │ ├── t_6.json │ │ ├── t_7.json │ │ └── t_8.json │ ├── fonts │ ├── visitor2-webfont.eot │ ├── visitor2-webfont.svg │ ├── visitor2-webfont.ttf │ └── visitor2-webfont.woff │ ├── img │ ├── UI.png │ ├── cube.png │ ├── debug │ │ ├── tileset_16_16.jpg │ │ ├── tileset_32_32.jpg │ │ └── tileset_8_8.jpg │ ├── gh_logo.png │ ├── gh_screen.png │ ├── info.png │ ├── morphs.png │ ├── sprites │ │ ├── button.png │ │ ├── door.png │ │ ├── laser.png │ │ ├── platform.png │ │ ├── player.png │ │ └── spawn.png │ └── tilesets │ │ ├── definitions.png │ │ └── main_tileset.png │ ├── music │ ├── bg.mp3 │ ├── bg_alt.mp3 │ └── bg_alt_2.mp3 │ ├── sounds │ ├── correct.mp3 │ ├── fail.mp3 │ ├── fall.mp3 │ ├── jump.mp3 │ ├── off.mp3 │ ├── on.mp3 │ ├── sparkle.mp3 │ ├── success.mp3 │ ├── transform.mp3 │ ├── ui_click.mp3 │ └── wrong.mp3 │ └── swf │ ├── soundmanager2.swf │ ├── soundmanager2_debug.swf │ ├── soundmanager2_flash9.swf │ ├── soundmanager2_flash9_debug.swf │ └── soundmanager2_flash_xdomain.zip └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | tasks 4 | # dist 5 | dev/js/lib/physicsjs 6 | *.psd 7 | temp 8 | *.pickle 9 | *.bak 10 | *.txt 11 | *.rar 12 | *.tmx 13 | *.tsx 14 | rules.txt 15 | *.sublime-workspace 16 | *.sublime-project 17 | tools 18 | _ -------------------------------------------------------------------------------- /Gruntfile.coffee: -------------------------------------------------------------------------------- 1 | module.exports = (grunt) -> 2 | grunt.initConfig 3 | pkg: grunt.file.readJSON("package.json") 4 | 5 | jade: 6 | build: 7 | options: 8 | pretty: true 9 | data: 10 | debug: true 11 | files: 12 | "./build/index.html": ["./dev/index.jade"] 13 | release: 14 | options: 15 | pretty: false 16 | data: 17 | debug: false 18 | files: 19 | "./dist/index.html": ["./dev/index.jade"] 20 | 21 | less: 22 | options: 23 | paths: ["./dev/css"] 24 | build: 25 | options: 26 | dumpLineNumbers: true 27 | sourceMap: true 28 | sourceMapRootpath: "/game-off-2013/" 29 | files: 30 | "./build/css/main.css": "./dev/css/main.less" 31 | 32 | release: 33 | options: 34 | compress: true 35 | cleancss: true 36 | relativeUrls: true 37 | files: 38 | "./dist/css/main.css": "./dev/css/main.less" 39 | 40 | browserify2: 41 | build: 42 | debug: true 43 | entry: "./dev/js/main.js" 44 | compile: "./build/js/main.js" 45 | 46 | uglify: 47 | options: 48 | banner: "/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today('yyyy-mm-dd') %> */\n" 49 | 50 | release: 51 | src: "./build/js/main.js" 52 | dest: "./dist/js/main.min.js" 53 | 54 | copy: 55 | build: 56 | files: [ 57 | expand: true 58 | cwd: "./dev/media/" 59 | src: ["**/*.jpg","**/*.json","**/*.png","sounds/*.mp3","music/*.mp3","fonts/*","swf/*"] 60 | dest: "./build/media/" 61 | ] 62 | release: 63 | files: [ 64 | expand: true 65 | cwd: "./build/media/" 66 | src: ["**/*.jpg","**/*.json","**/*.png","sounds/*.mp3","music/*.mp3","fonts/*","swf/*"] 67 | dest: "./dist/media/" 68 | ] 69 | libs: 70 | files: [ 71 | expand: true 72 | cwd: "./dev/js/lib/" 73 | src: ["./soundmanager2-nodebug-jsmin.js", "./jquery.color-2.1.2.min.js", "./jquery-1.10.1.min.js"] 74 | dest: "./build/js/" 75 | ] 76 | libsrelease: 77 | files: [ 78 | expand: true 79 | cwd: "./dev/js/lib/" 80 | src: ["./soundmanager2-nodebug-jsmin.js", "./jquery.color-2.1.2.min.js", "./jquery-1.10.1.min.js"] 81 | dest: "./dist/js/" 82 | ] 83 | 84 | clean: 85 | build: ["./build/media"] 86 | release: ["./dist"] 87 | 88 | cleanlevel: 89 | all: 90 | src: ["./dev/media/data/levels/*.json"] 91 | dest: "./build/media/data/levels" 92 | 93 | watch: 94 | build: 95 | options: 96 | livereload: true 97 | files: ["./build/**"] 98 | cleanlevel: 99 | files: ["./dev/media/data/levels/*.json"] 100 | tasks: ["cleanlevel"] 101 | css: 102 | files: ["./dev/css/**/*.less"] 103 | tasks: ["less:build"] 104 | 105 | jade: 106 | files: ["./dev/*.jade"] 107 | tasks: ["jade:build"] 108 | 109 | js: 110 | files: ["./dev/js/**/*.js"] 111 | tasks: ["browserify2", "copy:libs"] 112 | 113 | media: 114 | files: ["./dev/media/**/*"] 115 | tasks: ["copy:build", "cleanlevel:all"] 116 | 117 | # jshint: 118 | # compile: ["./dev/js/**/*.js"] 119 | 120 | 121 | grunt.loadNpmTasks "grunt-contrib-less" 122 | grunt.loadNpmTasks "grunt-contrib-jade" 123 | grunt.loadNpmTasks "grunt-contrib-watch" 124 | grunt.loadNpmTasks "grunt-contrib-uglify" 125 | grunt.loadNpmTasks "grunt-contrib-copy" 126 | grunt.loadNpmTasks "grunt-contrib-clean" 127 | grunt.loadNpmTasks "grunt-browserify2" 128 | # grunt.loadNpmTasks "grunt-contrib-jshint" 129 | 130 | grunt.loadTasks "./tasks" 131 | 132 | grunt.registerTask "release", ["clean:release", "jade:release", "less:release", "browserify2", "uglify", "copy:release", "copy:libsrelease", "cleanlevel:all"] 133 | grunt.registerTask "default", ["clean:build", "jade:build", "less:build", "browserify2", "copy:build", "copy:libs", "cleanlevel:all"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![TransCube](http://jeroenverfallie.github.io/ggo13-transcube/media/img/gh_logo.png) 2 | 3 | # TransCube 4 | 5 | A 2d puzzle platformer based on the concept of transforming into different "blocks", with their unique properties, and making you way to the end of the level with the provided transformations. 6 | There are 22 levels in the Compo version. More levels, and level elements to follow in a fork of this repo. 7 | 8 | ## Input 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
ActionKeys
LeftQ, A, LEFT ARROW
RightD, RIGHT ARROW
JumpZ, W, UP ARROW, SPACE
Select transformation1-6 (numpad or top) or CLICK
TransformE
RestartR
Next levelN, ENTER
36 | 37 | ![Screenshot](http://jeroenverfallie.github.io/ggo13-transcube/media/img/gh_screen.png) 38 | 39 | ## Spoiler alert 40 | 41 | Here's a walkthrough/speedrun of all the level [On vimeo](https://vimeo.com/80929591) 42 | 43 | ## Tools, code 44 | 45 | * Sublime Text 3: code 46 | * Grunt: build 47 | * Photoshop: art 48 | * Pickle: animations 49 | * Audactiy: sound edits 50 | * Bxfr: sound creation 51 | * Tiled: levels 52 | 53 | ## Compatibility 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 |
BrowserComments
Google ChromeUsed during development, no known issues.
Mozilla FirefoxSlight delay on sounds - Font vertical aligns are off
Internet Explorer 10+Font vertical aligns are off
SafariPerformance issues, not tested on Mac OSX tho.
OperaUntested
75 | 76 | 77 | ## Credits 78 | 79 | ![Code](http://i.imgur.com/tgqFxva.png) ![Art](http://i.creativecommons.org/l/by-sa/3.0/88x31.png) 80 | 81 | * Code and art by me. 82 | * External libraries, such as Box2dweb, Google Analytics, jQuery and SoundManager2. 83 | * FreeSound.org for most of the sounds, modified or not. 84 | * Incompetech.com for music. 85 | -------------------------------------------------------------------------------- /dev/index.jade: -------------------------------------------------------------------------------- 1 | !!! 5 2 | html 3 | head 4 | title Trans♦cube 5 | link(rel="stylesheet", type="text/css", href="css/main.css") 6 | body 7 | #container 8 | canvas#canvas 9 | #ui 10 | #levelselect 11 | .title Level select 12 | #levels 13 | #menu 14 | .menu Title 15 | .restart Restart 16 | .play Resume 17 | #intro 18 | #title Transcube 19 | #slug a game by jeroen verfallie 20 | #play Play 21 | #github Github 22 | 23 | #end 24 | #stats 25 | div 26 | span#time 27 | span.right Seconds 28 | div 29 | span#restarts 30 | span.right Restarts 31 | div 32 | span#transforms 33 | span.right Transforms 34 | div 35 | span#deaths 36 | span.right "Deaths" 37 | #btns 38 | .menu Menu 39 | .retry Restart 40 | .next >> Next level (N) >> 41 | #leveltitle.message.top Loading the loader! 42 | #icons-top 43 | .left 44 | .menu 45 | .pause 46 | .restart 47 | .right 48 | .music 49 | .mute 50 | #footer 51 | #morphs 52 | span Spawns a movable block you can stand on. 53 | div 54 | 55 | 56 | script(type="text/javascript", src="js/soundmanager2-nodebug-jsmin.js") 57 | script(type="text/javascript", src="js/jquery-1.10.1.min.js") 58 | script(type="text/javascript", src="js/jquery.color-2.1.2.min.js") 59 | if debug 60 | script(type="text/javascript", src="js/main.js") 61 | script(type="text/javascript", src="//localhost:35729/livereload.js") 62 | else 63 | script(type="text/javascript", src="js/main.min.js") -------------------------------------------------------------------------------- /dev/js/analytics.js: -------------------------------------------------------------------------------- 1 | (function(i, s, o, g, r, a, m) { 2 | i['GoogleAnalyticsObject'] = r; 3 | i[r] = i[r] || function() { 4 | (i[r].q = i[r].q || []).push(arguments) 5 | }, i[r].l = 1 * new Date(); 6 | a = s.createElement(o), 7 | m = s.getElementsByTagName(o)[0]; 8 | a.async = 1; 9 | a.src = g; 10 | m.parentNode.insertBefore(a, m) 11 | })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 12 | 13 | ga('create', 'UA-46133472-1', 'auto'); 14 | ga('send', 'pageview'); -------------------------------------------------------------------------------- /dev/js/config.js: -------------------------------------------------------------------------------- 1 | var Config = { 2 | 3 | // debug: { 4 | // level: 'end' 5 | // }, 6 | 7 | tick: 0, 8 | 9 | assetsPath: 'media/', 10 | defaultExt: { 11 | img: 'png', 12 | data: 'json' 13 | }, 14 | 15 | message: { 16 | top: 0, 17 | }, 18 | 19 | perspective: { 20 | flip: false, 21 | pWidth: 22, 22 | pHeight: 21, 23 | asset: 'tilesets.main', 24 | align: 'b-r', 25 | depth: 0, 26 | tilesPerRow: 7 27 | }, 28 | 29 | image: { 30 | asset: 'info', 31 | firstgid: 36 32 | }, 33 | 34 | physics: { 35 | debug: false 36 | }, 37 | 38 | fog: { 39 | enabled: true, 40 | pos: { 41 | x: 0, 42 | y: 0 43 | }, 44 | area: { 45 | x: 30, 46 | y: 0 47 | } 48 | }, 49 | 50 | display: { 51 | clearColor: 'rgba(38,28,37,1)', 52 | 53 | offset: { 54 | x: 0, 55 | y: 0 56 | }, 57 | 58 | shake: { 59 | x: 0, 60 | y: 0 61 | }, 62 | 63 | fullscreen: false, 64 | 65 | realwidth: 1, 66 | realheight: 1, 67 | scale: 1, 68 | 69 | width: 420, 70 | height: 200 71 | } 72 | 73 | }; 74 | 75 | module.exports = Config; 76 | -------------------------------------------------------------------------------- /dev/js/engine/animation.js: -------------------------------------------------------------------------------- 1 | var Animation = Class.extend({ 2 | tilesheet: null, 3 | scale: null, 4 | frametime: null, 5 | sequence: null, 6 | loop: null, 7 | 8 | looped: false, 9 | 10 | frame: 0, 11 | tile: 0, 12 | 13 | flip: { 14 | x: false, 15 | y: false 16 | }, 17 | 18 | alpha: 1, 19 | 20 | offset: { 21 | x: 0, 22 | y: 0 23 | }, 24 | 25 | init: function(tilesheet, scale, frametime, sequence, loop) { 26 | if (!tilesheet) throw ("Tilesheet not found!"); 27 | 28 | 29 | this.flip = { 30 | x: false, 31 | y: false 32 | } 33 | this.offset = { 34 | x: 0, 35 | y: 0 36 | }; 37 | 38 | this.scale = scale; 39 | this.tilesheet = tilesheet; 40 | this.frameTime = frametime; 41 | this.sequence = sequence; 42 | 43 | this.loop = loop == undefined ? true : false; 44 | 45 | this._initTime = (new Date()).getTime(); 46 | 47 | this.tile = this.sequence[0]; 48 | }, 49 | 50 | reset: function() { 51 | this._initTime = (new Date()).getTime(); 52 | this.tile = this.sequence[0]; 53 | this.looped = false; 54 | }, 55 | 56 | update: function() { 57 | var time = (new Date()).getTime(); 58 | var currentFrame = ~~ (((time - this._initTime) / 1000) / this.frameTime); 59 | if (!this.loop && currentFrame > this.sequence.length - 1) { 60 | this.frame = this.sequence.length - 1; 61 | this.looped = true; 62 | } else { 63 | this.frame = currentFrame % this.sequence.length; 64 | } 65 | 66 | this.tile = this.sequence[this.frame]; 67 | }, 68 | 69 | forceNextFrame: function() { 70 | this.frame = (this.frame + 1) % sequence.length; 71 | this.tile = this.sequence[this.frame]; 72 | }, 73 | 74 | draw: function(ctx, x, y, angle) { 75 | this.tilesheet.drawTile(ctx, x+this.offset.x, y+this.offset.y, this.tile, this.scale, this.flip, angle, this.alpha); 76 | } 77 | 78 | }); 79 | 80 | 81 | module.exports = Animation; 82 | -------------------------------------------------------------------------------- /dev/js/engine/assets.js: -------------------------------------------------------------------------------- 1 | var config = require('../config'); 2 | var Graphic = require('./graphic'); 3 | var Tilesheet = require('./tilesheet'); 4 | 5 | var Assets = { 6 | Graphics: {}, 7 | Sounds: {}, 8 | Data: {}, 9 | 10 | _sounds: [], 11 | 12 | callback: null, 13 | callbackscope: null, 14 | 15 | _stack: { 16 | unloaded: 0, 17 | items: {}, 18 | total: 0 19 | }, 20 | 21 | get ready() { 22 | return this._stack.unloaded <= 0; 23 | }, 24 | 25 | get completion() { 26 | return 100 - (~~((this._stack.unloaded / this._stack.total) * 100)); 27 | }, 28 | 29 | _doneLoading: function(path) { 30 | this._stack.unloaded--; 31 | 32 | if (this._stack.unloaded <= 0) { 33 | this._stack.unloaded = 0; 34 | this._stack.items = {}; 35 | this._stack.total = 0; 36 | } 37 | 38 | $('#leveltitle').text(this.completion != 100 ? 'Loading.. ' + this.completion + '% done!' : ''); 39 | console.info(path + ' loaded - Completion: %c' + this.completion + ' %', 'color: green; font-size: 14px;'); 40 | 41 | }, 42 | 43 | _errorLoading: function(path) { 44 | console.warn(path + 'could not be loaded!'); 45 | }, 46 | 47 | _getPath: function(path, file) { 48 | path = path.split('.'); 49 | path.pop(); 50 | path = path.join('/'); 51 | path = config.assetsPath + path + '/' + file; 52 | 53 | return path; 54 | }, 55 | 56 | _loadImage: function(path, resource) { 57 | if (resource.file.indexOf('.') == -1) { 58 | resource.file += '.' + config.defaultExt.img; 59 | } 60 | 61 | var p = path.replace('img.', ''); 62 | path = this._getPath(path, resource.file); 63 | 64 | var obj; 65 | if (resource.tilesize || (resource.tileheight && resource.tilewidth)) { 66 | obj = new Tilesheet(path, resource, this._doneLoading.bind(this)); 67 | } else { 68 | obj = new Graphic(path, resource, this._doneLoading.bind(this)); 69 | } 70 | 71 | Object.$set(Assets.Graphics, p, obj); 72 | 73 | window.Assets = Assets; 74 | }, 75 | 76 | loadSounds: function() { 77 | var self = this; 78 | for (var i = 0; i < this._sounds.length; i++) { 79 | var s = this._sounds[i]; 80 | var sound = soundManager.createSound({ 81 | id: s.path, 82 | url: 'media/sounds/' + s.res.file, 83 | autoLoad: !!!s.res.stream, 84 | 85 | volume: s.res.volume || 100, 86 | stream: !!s.res.stream, 87 | multiShot: true, 88 | 89 | onload: function() { 90 | if(!this.stream) self._doneLoading(this.url); 91 | } 92 | }); 93 | 94 | if(s.res.stream) { 95 | self._doneLoading(sound.url); 96 | } 97 | 98 | Object.$set(Assets.Sounds, s.path.replace('sfx.', ''), sound); 99 | } 100 | 101 | this._sounds = null; 102 | }, 103 | 104 | _loadSound: function(path, resource) { 105 | this._sounds.push({ 106 | path: path, 107 | res: resource 108 | }); 109 | }, 110 | 111 | _loadData: function(path, resource) { 112 | var self = this; 113 | if (resource.file.indexOf('.') == -1) { 114 | resource.file += '.' + config.defaultExt.data; 115 | } 116 | 117 | var p = path.replace('data.', ''); 118 | path = this._getPath(path, resource.file); 119 | 120 | try { 121 | var req = new XMLHttpRequest(); 122 | req.onreadystatechange = function() { 123 | if (req.readyState == 4) { 124 | var data = JSON.parse(req.responseText); 125 | Object.$merge(data, resource); 126 | Object.$set(Assets.Data, p, data); 127 | self._doneLoading(path); 128 | } 129 | }; 130 | req.open('GET', path, true); 131 | req.send(null); 132 | } catch (e) { 133 | throw (e); 134 | } 135 | }, 136 | 137 | _load: function(obj, path) { 138 | if (!path || !obj) return; 139 | 140 | var self = Assets; 141 | var resource = Object.$get(obj, path); 142 | 143 | if (!resource) return; 144 | 145 | var type = path.split('.')[0]; 146 | switch (type) { 147 | case 'sfx': 148 | self._loadSound(path, resource); 149 | break; 150 | case 'img': 151 | self._loadImage(path, resource); 152 | break; 153 | case 'data': 154 | self._loadData(path, resource); 155 | break; 156 | } 157 | }, 158 | 159 | loadAll: function(data, path) { 160 | var self = Assets; 161 | 162 | var obj = Object.$get(data, path); 163 | for (var o in obj) { 164 | var p = (path) ? path + '.' + o : o; 165 | 166 | if (obj[o].file) { 167 | this._stack.items[p] = obj[o]; 168 | this._stack.unloaded++; 169 | this._stack.total++; 170 | } else if (typeof obj[o] == 'object') { 171 | self.loadAll(data, p); 172 | } 173 | } 174 | 175 | if (!path) { 176 | for (var a in this._stack.items) { 177 | this._load(data, a); 178 | } 179 | } 180 | }, 181 | 182 | resizeAll: function(path) { 183 | var self = Assets; 184 | 185 | var obj = Object.$get(Assets.Graphics, path); 186 | for (var o in obj) { 187 | var p = (path) ? path + '.' + o : o; 188 | 189 | if (obj[o] instanceof Graphic) { 190 | obj[o].resizeAll(); 191 | } else { 192 | self.resizeAll(p); 193 | } 194 | } 195 | }, 196 | 197 | onReady: function(callback, scope) { 198 | this.callback = callback; 199 | this.callbackscope = scope; 200 | this.tick(); 201 | }, 202 | 203 | tick: function() { 204 | if (this.ready) { 205 | this.callback.call(this.callbackscope); 206 | return; 207 | } 208 | 209 | requestAnimFrame(this.tick.bind(this)); 210 | } 211 | }; 212 | 213 | module.exports = Assets; 214 | -------------------------------------------------------------------------------- /dev/js/engine/camera.js: -------------------------------------------------------------------------------- 1 | var config = require('../config'); 2 | 3 | Number.prototype.limit = function(min, max) { 4 | return Math.min(max, Math.max(min, this)); 5 | }; 6 | 7 | /* A camera implemenation by DOMINIC SZABLEWSKI., based on SHAUN INMAN's example trap based viewport */ 8 | 9 | var Camera = Class.extend({ 10 | trap: { 11 | pos: { 12 | x: 0, 13 | y: 0 14 | }, 15 | size: { 16 | x: 128, 17 | y: 16 18 | } 19 | }, 20 | max: { 21 | x: 0, 22 | y: 0 23 | }, 24 | min: { 25 | x: 0, 26 | y: 0 27 | }, 28 | offset: { 29 | x: 0, 30 | y: 0 31 | }, 32 | pos: { 33 | x: 0, 34 | y: 0 35 | }, 36 | damping: 5, 37 | lookAhead: { 38 | x: 0, 39 | y: 0 40 | }, 41 | currentLookAhead: { 42 | x: 0, 43 | y: 0 44 | }, 45 | 46 | 47 | init: function(offsetX, offsetY, damping) { 48 | this.offset.x = offsetX; 49 | this.offset.y = offsetY; 50 | this.damping = damping; 51 | }, 52 | 53 | 54 | set: function(entity) { 55 | this.pos.x = entity.pos.x - this.offset.x; 56 | this.pos.y = entity.pos.y - this.offset.y; 57 | 58 | this.trap.pos.x = entity.pos.x - this.trap.size.x / 2; 59 | this.trap.pos.y = entity.pos.y - this.trap.size.y; 60 | }, 61 | 62 | 63 | follow: function(entity) { 64 | this.pos.x = this.move('x', entity.pos.x, entity.width); 65 | this.pos.y = this.move('y', entity.pos.y, entity.height); 66 | 67 | config.display.offset.x = -this.pos.x * config.display.scale + config.display.shake.x; 68 | config.display.offset.y = -this.pos.y * config.display.scale + config.display.shake.y; 69 | }, 70 | 71 | 72 | move: function(axis, pos, size) { 73 | var lookAhead = 0; 74 | if (pos < this.trap.pos[axis]) { 75 | this.trap.pos[axis] = pos; 76 | this.currentLookAhead[axis] = this.lookAhead[axis]; 77 | } else if (pos + size > this.trap.pos[axis] + this.trap.size[axis]) { 78 | this.trap.pos[axis] = pos + size - this.trap.size[axis]; 79 | this.currentLookAhead[axis] = -this.lookAhead[axis]; 80 | } 81 | 82 | return ( 83 | this.pos[axis] - ( 84 | this.pos[axis] - this.trap.pos[axis] + this.offset[axis] + this.currentLookAhead[axis] 85 | ) * 0.16 * this.damping 86 | ).limit(this.min[axis], this.max[axis]); 87 | }, 88 | 89 | 90 | draw: function(ctx) { 91 | ctx.fillStyle = 'rgba(255,0,255,0.3)'; 92 | ctx.fillRect( 93 | (this.trap.pos.x - this.pos.x) * config.display.scale, (this.trap.pos.y - this.pos.y) * config.display.scale, 94 | this.trap.size.x * config.display.scale, 95 | this.trap.size.y * config.display.scale 96 | ); 97 | } 98 | }); 99 | 100 | module.exports = Camera; -------------------------------------------------------------------------------- /dev/js/engine/collision-layer.js: -------------------------------------------------------------------------------- 1 | var p = require('./physics'); 2 | 3 | var CollisionLayer = Class.extend({ 4 | 5 | name: null, 6 | bodies: [], 7 | 8 | init: function(data) { 9 | this.name = data.name; 10 | 11 | data = data.data; 12 | for (var i = 0; i < data.length; i++) { 13 | var obj = data[i]; 14 | 15 | if (obj.polygon) { 16 | this.bodies.push(p.createCollisionPolygon(obj.polygon, obj.x, obj.y, obj.properties)); 17 | } else if (obj.polyline) { 18 | this.addPolyLine(obj); 19 | } else if (obj.ellipse) { 20 | 21 | } else { 22 | this.bodies.push(p.createCollisionBox(obj.x, obj.y, obj.width, obj.height, obj.properties)); 23 | } 24 | } 25 | }, 26 | 27 | addPolyLine: function(obj) { 28 | var sy = obj.y; 29 | for (var i = 0, n = obj.polyline.length; i < n; i++) { 30 | var y = obj.polyline[i].y, 31 | ty = sy + y, 32 | s = 0, 33 | m = ty % 15; 34 | 35 | if (m === 0) continue; 36 | if (m === 13 || m === 5) s = -1; 37 | if (m === 11 || m === 3) s = 1; 38 | 39 | obj.polyline[i].y = y + s; 40 | } 41 | 42 | this.bodies.push(p.createCollisionPolyline(obj.polyline, obj.x, obj.y, obj.properties)); 43 | }, 44 | 45 | update: function() {}, 46 | 47 | draw: function() {} 48 | 49 | }) 50 | 51 | module.exports = CollisionLayer; 52 | -------------------------------------------------------------------------------- /dev/js/engine/debug.js: -------------------------------------------------------------------------------- 1 | var Debug = {}; 2 | 3 | -------------------------------------------------------------------------------- /dev/js/engine/engine.js: -------------------------------------------------------------------------------- 1 | var config = require('../config'); 2 | var Input = require('./input'); 3 | var p = require('./physics'); 4 | var media = require('../data/media'); 5 | var Assets = require('./assets'); 6 | var game = require('../game'); 7 | 8 | var Engine = Class.extend({ 9 | game: null, 10 | 11 | canvas: null, 12 | context: null, 13 | ui: null, 14 | 15 | draws: 0, 16 | 17 | lastUpdate: 16, 18 | 19 | profiles: 0, 20 | 21 | init: function(gameConst) { 22 | this.initCanvas(); 23 | 24 | if (!this.game) { 25 | Assets.loadAll(media); 26 | Assets.onReady(function() { 27 | if (!this.game) { 28 | this.game = new game(this.context); 29 | } 30 | 31 | }, this); 32 | } 33 | 34 | this.initSounds(); 35 | 36 | p.initDebug(this.context, config.display.scale); 37 | p.dragNDrop(window); 38 | 39 | this.tick(); 40 | }, 41 | 42 | initSounds: function() { 43 | soundManager.setup({ 44 | url: 'media/swf/', 45 | flashVersion: 9, 46 | preferFlash: true, 47 | useHTML5Audio: true, 48 | useHighPerformance: false, 49 | onready: function() { 50 | Assets.loadSounds(); 51 | } 52 | }); 53 | }, 54 | 55 | initCanvas: function() { 56 | this.canvas = document.getElementById('canvas'); 57 | 58 | this.canvas.style.imageRendering = '-moz-crisp-edges'; 59 | this.canvas.style.imageRendering = '-o-crisp-edges'; 60 | this.canvas.style.imageRendering = '-webkit-optimize-contrast'; 61 | this.canvas.style.imageRendering = 'crisp-edges'; 62 | this.canvas.style.msInterpolationMode = 'nearest-neighbor'; 63 | 64 | this.context = this.canvas.getContext('2d'); 65 | this.context.imageSmoothingEnabled = false; 66 | this.context.webkitImageSmoothingEnabled = false; 67 | this.context.mozImageSmoothingEnabled = false; 68 | 69 | this.resize(); 70 | }, 71 | 72 | resize: function() { 73 | var w = window.innerWidth, 74 | h = window.innerHeight, 75 | s = (w > 1260 && h > 700) ? 3 : 2; 76 | 77 | this.canvas.width = config.display.width * s; 78 | this.canvas.height = config.display.height * s; 79 | config.display.realwidth = this.canvas.width; 80 | config.display.realheight = this.canvas.height; 81 | 82 | $('#ui').css('width', this.canvas.width); 83 | var uh = $('#ui').css('height').replace('px', ''); 84 | $('#ui').css('padding-top', ~~ (h / 2 - uh / 2)); 85 | $('#canvas').css('left', ~~ (w / 2 - this.canvas.width / 2) + "px").css('top', ~~ (h / 2 - this.canvas.height / 2) + "px"); 86 | config.message.top = ~~ (h / 2 - 50); 87 | 88 | if (this.game && config.display.scale != s) { 89 | p.resizeDebug(s); 90 | config.display.scale = s; 91 | Assets.resizeAll(); 92 | } 93 | 94 | config.display.scale = s; 95 | }, 96 | 97 | update: function() { 98 | p.step(); 99 | this.game.update(); 100 | }, 101 | 102 | clear: function() { 103 | if (!config.display.clearColor) { 104 | this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); 105 | } else { 106 | this.context.fillStyle = config.display.clearColor; 107 | this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); 108 | } 109 | }, 110 | 111 | draw: function() { 112 | this.clear(); 113 | 114 | this.game.draw(); 115 | if (config.physics.debug) { 116 | p.draw(); 117 | } 118 | }, 119 | 120 | togglePause: function() { 121 | this.game.paused = !this.game.paused; 122 | 123 | if (!this.game.paused) { 124 | this.tick(); 125 | } 126 | }, 127 | 128 | tick: function() { 129 | if (!this.game || this.game.paused) { 130 | if (this.game) this.draw(); 131 | return requestAnimFrame(this.tick.bind(this)); 132 | } 133 | 134 | // Stats.begin(); 135 | 136 | config.tick = (new Date()).getTime() - this.lastUpdate; 137 | this.lastUpdate = this.lastUpdate + config.tick; 138 | this.update(); 139 | Input.update(); 140 | 141 | requestAnimFrame(this.tick.bind(this)); 142 | this.draw(); 143 | 144 | // Stats.end(); 145 | } 146 | }); 147 | 148 | 149 | module.exports = Engine; 150 | -------------------------------------------------------------------------------- /dev/js/engine/graphic.js: -------------------------------------------------------------------------------- 1 | var config = require('../config'); 2 | 3 | var Graphic = Class.extend({ 4 | 5 | loaded: false, 6 | path: '', 7 | 8 | width: 0, 9 | height: 0, 10 | 11 | image: null, 12 | 13 | scaled: {}, 14 | scale: [], 15 | 16 | _onloadCallback: null, 17 | 18 | 19 | init: function(path, options, callback) { 20 | this.path = path; 21 | this.scale = (options && options.scale) ? options.scale : [1]; 22 | this.scaled = {}; 23 | 24 | this._onloadCallback = callback; 25 | this._load(); 26 | }, 27 | 28 | applyScale: function(p) { 29 | return Math.round(p * config.display.scale); 30 | }, 31 | 32 | drawArea: function(ctx, data, x, y, xs, ys, w, h, sx, sy, ignoreoffscreen) { 33 | var rw = config.display.realwidth; 34 | var rh = config.display.realheight; 35 | 36 | if (!ignoreoffscreen) { 37 | 38 | if (x + w < 0 || x > rw || y + h < 0 || y > rh) return; 39 | if (config.fog.enabled && 40 | (x < config.fog.area.x || x + w > rw - config.fog.area.x || 41 | y < config.fog.area.y || y + h > rh - config.fog.area.y)) 42 | return; 43 | 44 | if (x < 0 && x + w > 0) { 45 | w = w + x; 46 | xs = xs - x; 47 | x = 0; 48 | } 49 | 50 | if (x < rw && x + w > rw) { 51 | w = w - (x + w - rw); 52 | } 53 | 54 | if (y < 0 && y + h > 0) { 55 | h = h + y; 56 | ys = ys - y; 57 | y = 0; 58 | } 59 | 60 | if (y < rh && y + h > rh) { 61 | h = h - (y + h - rh); 62 | } 63 | 64 | } 65 | 66 | if (sx) x = x * sx - (sx < 0 ? w : 0); 67 | if (sy) y = y * sy - (sy < 0 ? h : 0); 68 | 69 | // debug.draws++; 70 | ctx.drawImage( 71 | data, 72 | xs, ys, w, h, 73 | x, y, w, h 74 | ); 75 | }, 76 | 77 | draw: function(ctx, x, y, scale) { 78 | if (!this.loaded) return; 79 | 80 | var data = this.scaled[scale] || this.image; 81 | 82 | this.drawArea(ctx, data, this.applyScale(x), this.applyScale(y), 0, 0, data.width, data.height); 83 | }, 84 | 85 | _load: function() { 86 | if (this.loaded) return; 87 | 88 | this.image = new Image(); 89 | this.image.onload = this._onload.bind(this); 90 | this.image.onerror = this._onerror.bind(this); 91 | 92 | this.image.src = this.path; 93 | }, 94 | 95 | _onload: function() { 96 | this.loaded = true; 97 | 98 | this.width = this.image.width; 99 | this.height = this.image.height; 100 | 101 | this.resizeAll(); 102 | 103 | this._onloadCallback(this.path); 104 | }, 105 | 106 | resizeAll: function() { 107 | for (var i = 0; i < this.scale.length; i++) { 108 | this.scaled[this.scale[i]] = this.resize(this.image, this.scale[i]); 109 | } 110 | }, 111 | 112 | _onerror: function() { 113 | throw ('An error happened while loading ' + this.path); 114 | }, 115 | 116 | resize: function(img, scale) { 117 | if (this.scale === 1 && config.display.scale === 1) { 118 | return img; 119 | } 120 | 121 | scale = this.applyScale(scale); 122 | 123 | var sCanvas = document.createElement('canvas'); 124 | sCanvas.width = img.width; 125 | sCanvas.height = img.height; 126 | 127 | var sCtx = sCanvas.getContext('2d'); 128 | sCtx.drawImage(img, 0, 0); 129 | var sData = sCtx.getImageData(0, 0, img.width, img.height).data; 130 | 131 | var dw = img.width * scale; 132 | var dh = img.height * scale; 133 | 134 | var dCanvas = document.createElement('canvas'); 135 | dCanvas.width = dw; 136 | dCanvas.height = dh; 137 | 138 | var dCtx = dCanvas.getContext('2d'); 139 | 140 | var dImgData = dCtx.getImageData(0, 0, dw, dh); 141 | var dData = dImgData.data; 142 | 143 | var src_p = 0; 144 | var dst_p = 0; 145 | for (var y = 0; y < this.height; ++y) { 146 | for (var i = 0; i < scale; ++i) { 147 | for (var x = 0; x < this.width; ++x) { 148 | src_p = 4 * (y * this.width + x); 149 | for (var j = 0; j < scale; ++j) { 150 | var tmp = src_p; 151 | dData[dst_p++] = sData[tmp++]; 152 | dData[dst_p++] = sData[tmp++]; 153 | dData[dst_p++] = sData[tmp++]; 154 | dData[dst_p++] = sData[tmp++]; 155 | } 156 | } 157 | } 158 | } 159 | 160 | dCtx.putImageData(dImgData, 0, 0); 161 | 162 | return dCanvas; 163 | } 164 | 165 | }); 166 | 167 | 168 | module.exports = Graphic; 169 | -------------------------------------------------------------------------------- /dev/js/engine/image-layer.js: -------------------------------------------------------------------------------- 1 | var Layer = require('./layer'); 2 | var config = require('../config'); 3 | var Assets = require('./assets'); 4 | 5 | var ImageLayer = Layer.extend({ 6 | asset: null, 7 | 8 | images: [], 9 | 10 | needDeaths: 0, 11 | 12 | 13 | init: function(data, w, h, tw, th) { 14 | this.images = []; 15 | 16 | this.parent(data, w, h, tw, th); 17 | 18 | Object.$merge(data.properties, config.image); 19 | 20 | this.needDeaths = data.properties.needDeaths || 0; 21 | 22 | this.asset = Object.$get(Assets.Graphics, data.properties.asset); 23 | 24 | var fgid = data.properties.firstgid; 25 | for(var i = 0; i < data.data.length; i++) { 26 | var img = data.data[i]; 27 | this.images.push({ 28 | tile: (img.gid - fgid), 29 | x: img.x, 30 | y: img.y-this.asset.tileheight, 31 | angle: img.rotation, 32 | ignoreoffscreen: img.igos || false, 33 | alpha: img.alpha, 34 | flip: img.flip 35 | }); 36 | } 37 | }, 38 | 39 | draw: function(ctx, stats) { 40 | if(stats.deaths < this.needDeaths) return; 41 | for(var i = 0; i < this.images.length; i++) { 42 | var img = this.images[i]; 43 | 44 | this.asset.drawTile(ctx, img.x, img.y, img.tile, this.scale, img.flip, img.angle, img.alpha, img.ignoreoffscreen); 45 | } 46 | } 47 | }); 48 | 49 | 50 | module.exports = ImageLayer; 51 | -------------------------------------------------------------------------------- /dev/js/engine/input.js: -------------------------------------------------------------------------------- 1 | var Input = Input || { 2 | 3 | down: {}, 4 | pressed: {}, 5 | 6 | reset: function() { 7 | this.pressed = {}; 8 | this.down = {}; 9 | }, 10 | 11 | update: function() { 12 | this.pressed = {}; 13 | }, 14 | 15 | _down: function(e) { 16 | var kc = e.keyCode || 0; 17 | 18 | if (!this.down[kc]) { 19 | this.down[kc] = true; 20 | this.pressed[kc] = true; 21 | } 22 | 23 | //e.stopPropagation(); 24 | //e.preventDefault(); 25 | }, 26 | 27 | _up: function(e) { 28 | var kc = e.keyCode || 0; 29 | if (this.down[kc]) { 30 | this.down[kc] = false; 31 | } 32 | }, 33 | 34 | isPressed: function(k) { 35 | if (isNaN(k)) { 36 | var keys = this.bind[k]; 37 | if(!keys) return; 38 | for (var i = keys.length; i--;) { 39 | if (this.pressed[keys[i]]) return true; 40 | } 41 | return false; 42 | } 43 | return this.pressed[k]; 44 | }, 45 | 46 | isDown: function(k) { 47 | if (isNaN(k)) { 48 | var keys = this.bind[k]; 49 | if(!keys) return; 50 | for (var i = keys.length; i--;) { 51 | if (this.down[keys[i]]) return true; 52 | } 53 | return false; 54 | } 55 | return this.down[k]; 56 | }, 57 | 58 | bind: function(name, keys) { 59 | this.bind[name] = keys; 60 | } 61 | 62 | }; 63 | 64 | module.exports = Input; 65 | -------------------------------------------------------------------------------- /dev/js/engine/keys.js: -------------------------------------------------------------------------------- 1 | var Key = { 2 | 'MOUSE': 0, 3 | 'BACKSPACE': 8, 4 | 'TAB': 9, 5 | 'ENTER': 13, 6 | 'SHIFT': 16, 7 | 'CTRL': 17, 8 | 'ALT': 18, 9 | 'PAUSE': 19, 10 | 'CAPS': 20, 11 | 'ESC': 27, 12 | 'SPACE': 32, 13 | 'PAGE_UP': 33, 14 | 'PAGE_DOWN': 34, 15 | 'END': 35, 16 | 'HOME': 36, 17 | 'LEFT_ARROW': 37, 18 | 'UP_ARROW': 38, 19 | 'RIGHT_ARROW': 39, 20 | 'DOWN_ARROW': 40, 21 | 'INSERT': 45, 22 | 'DELETE': 46, 23 | '_0': 48, 24 | '_1': 49, 25 | '_2': 50, 26 | '_3': 51, 27 | '_4': 52, 28 | '_5': 53, 29 | '_6': 54, 30 | '_7': 55, 31 | '_8': 56, 32 | '_9': 57, 33 | 'A': 65, 34 | 'B': 66, 35 | 'C': 67, 36 | 'D': 68, 37 | 'E': 69, 38 | 'F': 70, 39 | 'G': 71, 40 | 'H': 72, 41 | 'I': 73, 42 | 'J': 74, 43 | 'K': 75, 44 | 'L': 76, 45 | 'M': 77, 46 | 'N': 78, 47 | 'O': 79, 48 | 'P': 80, 49 | 'Q': 81, 50 | 'R': 82, 51 | 'S': 83, 52 | 'T': 84, 53 | 'U': 85, 54 | 'V': 86, 55 | 'W': 87, 56 | 'X': 88, 57 | 'Y': 89, 58 | 'Z': 90, 59 | 'NUMPAD_0': 96, 60 | 'NUMPAD_1': 97, 61 | 'NUMPAD_2': 98, 62 | 'NUMPAD_3': 99, 63 | 'NUMPAD_4': 100, 64 | 'NUMPAD_5': 101, 65 | 'NUMPAD_6': 102, 66 | 'NUMPAD_7': 103, 67 | 'NUMPAD_8': 104, 68 | 'NUMPAD_9': 105, 69 | 'MULTIPLY': 106, 70 | 'F1': 112, 71 | 'F2': 113, 72 | 'F3': 114, 73 | 'F4': 115, 74 | 'F5': 116, 75 | 'F6': 117, 76 | 'F7': 118, 77 | 'F8': 119, 78 | 'F9': 120, 79 | 'F10': 121, 80 | 'F11': 122, 81 | 'F12': 123 82 | } 83 | 84 | module.exports = Key; -------------------------------------------------------------------------------- /dev/js/engine/layer.js: -------------------------------------------------------------------------------- 1 | var Layer = Class.extend({ 2 | name: null, 3 | data: [], 4 | 5 | width: 1, 6 | height: 1, 7 | 8 | tilewidth: 1, 9 | tileheight: 1, 10 | 11 | scale: 1, 12 | 13 | foreground: false, 14 | 15 | init: function(data, w, h, tw, th) { 16 | this.name = data.name; 17 | this.data = data.data; 18 | this.width = w; 19 | this.height = h; 20 | this.tilewidth = tw; 21 | this.tileheight = th; 22 | 23 | this.foreground = (data.properties && data.properties.foreground); 24 | }, 25 | 26 | preRender: function() { 27 | 28 | }, 29 | 30 | }); 31 | 32 | module.exports = Layer; -------------------------------------------------------------------------------- /dev/js/engine/message.js: -------------------------------------------------------------------------------- 1 | var config = require('../config').message; 2 | 3 | var Message = { 4 | 5 | spawn: function(message, color, duration, options, nofade, callback) { 6 | var element = $('
'); 7 | var e = "#container"; 8 | if(options && options.el) e = options.el; 9 | $(e).append(element); 10 | 11 | element.text(message); 12 | element.css('top', config.top); 13 | element.css('color', color); 14 | 15 | if(!duration) return element; 16 | 17 | if (options !== false) { 18 | if (options) { 19 | if(!nofade) options.opacity = options.opacity || 0; 20 | element.animate(options, duration, function() { 21 | if(!nofade) $(this).remove(); 22 | if(callback) callback(); 23 | }); 24 | } else { 25 | element.fadeOut(duration, function() { 26 | $(this).remove(); 27 | }); 28 | } 29 | } 30 | 31 | return element; 32 | 33 | } 34 | 35 | 36 | } 37 | 38 | module.exports = Message; 39 | -------------------------------------------------------------------------------- /dev/js/engine/perspective-layer.js: -------------------------------------------------------------------------------- 1 | var Layer = require('./layer'); 2 | var config = require('../config'); 3 | var Assets = require('./assets'); 4 | 5 | var PerspectiveLayer = Layer.extend({ 6 | asset: null, 7 | 8 | pWidth: 1, 9 | pHeight: 1, 10 | 11 | offsetX: 0, 12 | offsetY: 0, 13 | 14 | orrX: 0, 15 | orrY: 0, 16 | 17 | depth: 0, 18 | 19 | // drawRegion: null, 20 | 21 | tilesPerRow: 0, 22 | 23 | init: function(data, w, h, tw, th) { 24 | this.parent(data, w, h, tw, th); 25 | 26 | Object.$merge(data.properties, config.perspective); 27 | 28 | this.tilesPerRow = config.perspective.tilesPerRow; 29 | 30 | var d = []; 31 | for (var i = 0; i < this.data.length; i++) { 32 | var n = this.data[i] - 1; 33 | if(n < 0) { 34 | d[i] = -1; 35 | } else { 36 | d[i] = ~~(n / this.tilesPerRow) * this.tilesPerRow * 2 + (n % this.tilesPerRow); 37 | } 38 | } 39 | 40 | // this.drawRegion = data.properties.onlybase ? data.properties.base : null; 41 | // console.log(this.drawRegion); 42 | 43 | this.data = d; 44 | 45 | this.asset = Object.$get(Assets.Graphics, data.properties.asset); 46 | this.definition = data.properties.definition; 47 | 48 | this.pWidth = parseInt(data.properties.pWidth); 49 | this.pHeight = parseInt(data.properties.pHeight); 50 | 51 | this.depth = parseInt(data.properties.depth); 52 | 53 | var a = data.properties.align; 54 | if (a) { 55 | a = a.split('-'); 56 | this.orrX = (a[1] == 'l') ? 0 : tw - this.pWidth + 1; 57 | this.orrY = (a[0] == 't') ? 0 : th - this.pHeight + 1; 58 | } 59 | 60 | this.offsetX = this.orrX + this.orrX * this.depth; 61 | this.offsetY = this.orrY + this.orrY * this.depth; 62 | 63 | var pre = data.properties.prerendered; 64 | if (pre == undefined || pre) { 65 | this.preRender(); 66 | } 67 | }, 68 | 69 | draw: function(ctx) { 70 | var f = config.perspective.flip; 71 | 72 | var rtw = this.tilewidth * this.scale; 73 | var rth = this.tileheight * this.scale; 74 | 75 | var sx = ((config.display.offset.x / (rtw * config.display.scale)) << 0), 76 | sy = ((config.display.offset.y / (rth * config.display.scale)) << 0), 77 | ew = (((config.display.width + this.orrX * 2) / rtw) << 0) - sx, 78 | eh = (((config.display.height + this.orrY * 2) / rth) << 0) - sy; 79 | 80 | 81 | sx = Math.max(0, -sx); 82 | sy = Math.max(0, -sy); 83 | ew = Math.min(this.width - 1, ew); 84 | eh = Math.min(this.height - 1, eh); 85 | 86 | // if (this.drawRegion) { 87 | // this.asset.drawRegion = { 88 | // x: this.drawRegion.x, 89 | // y: this.drawRegion.y, 90 | // w: this.drawRegion.w, 91 | // h: this.drawRegion.h 92 | // }; 93 | // if (f) { 94 | // this.asset.drawRegion.x = 0; 95 | // } 96 | // } 97 | 98 | var xf, xx, yy, tile; 99 | for (var x = ew; x >= sx; x--) { 100 | for (var y = eh; y >= sy; y--) { 101 | xf = f ? ew - (x - sx) : x; 102 | 103 | tile = this.data[xf + y * this.width]; 104 | if (tile < 0) continue; 105 | 106 | xx = (xf * this.tilewidth + (f ? -this.orrX * this.depth : this.offsetX)) * this.scale; 107 | yy = (y * this.tileheight + this.offsetY) * this.scale; 108 | 109 | // if (this.drawRegion) { 110 | // xx = xx + this.drawRegion.x; 111 | // yy = yy + this.drawRegion.y; 112 | // } 113 | 114 | 115 | tile += f ? this.tilesPerRow : 0; 116 | 117 | this.asset.drawTile(ctx, xx, yy, tile, this.scale); 118 | } 119 | } 120 | 121 | this.asset.drawRegion = null; 122 | } 123 | }); 124 | 125 | 126 | module.exports = PerspectiveLayer; 127 | -------------------------------------------------------------------------------- /dev/js/engine/tilesheet.js: -------------------------------------------------------------------------------- 1 | var Graphic = require('./graphic'); 2 | var config = require('../config'); 3 | 4 | var Tilesheet = Graphic.extend({ 5 | 6 | tileheight: 0, 7 | tilewidth: 0, 8 | 9 | pivot: { 10 | x: 0, 11 | y: 0 12 | }, 13 | 14 | // drawRegion: null, 15 | 16 | r: 360 * Math.PI / 180, 17 | 18 | init: function(path, options, callback) { 19 | this.parent(path, options, callback); 20 | 21 | this.tileheight = options.tileheight || options.tilesize; 22 | this.tilewidth = options.tilewidth || options.tilesize; 23 | 24 | 25 | this.pivot = {}; 26 | this.pivot.x = this.tilewidth / 2; 27 | this.pivot.y = this.tileheight / 2; 28 | }, 29 | 30 | drawTile: function(ctx, x, y, tile, scale, flip, angle, alpha, ignoreoffscreen) { 31 | if (!this.loaded || alpha <= 0) return; 32 | 33 | var rect = this.getRect(tile || 0, scale); 34 | var data = this.scaled[scale] || this.image; 35 | 36 | flip = flip || {}; 37 | 38 | var sx = flip.x ? -1 : 1; 39 | var sy = flip.y ? -1 : 1; 40 | 41 | x = this.applyScale(x) + ~~config.display.offset.x; 42 | y = this.applyScale(y) + ~~config.display.offset.y; 43 | 44 | if (angle) { 45 | // TODO -> FIX 46 | var rw = config.display.realwidth; 47 | var rh = config.display.realheight; 48 | 49 | var a = angle % this.r; 50 | var xx = (a > 2.35) ? x - this.applyScale(rect.width) : x; 51 | var yy = (a > 0.78 && a < 2.35) ? y - this.applyScale(rect.height) : y; 52 | var w = rect.width; 53 | var h = rect.height; 54 | 55 | if (xx + w < 0 || xx > rw || yy + h < 0 || yy > rh) return; 56 | if (config.fog.enabled && 57 | (xx < config.fog.area.x || xx + w > rw - config.fog.area.x || 58 | yy < config.fog.area.y || yy + h > rh - config.fog.area.y)) return; 59 | } 60 | 61 | ctx.save(); 62 | 63 | 64 | if (alpha !== undefined && alpha < 1) { 65 | ctx.globalAlpha = Math.max(0, Math.min(alpha, 1)); 66 | } 67 | 68 | if (flip) ctx.scale(sx, sy); 69 | if (angle) { 70 | ctx.translate(x, y); 71 | ctx.rotate(angle); 72 | x = 0; 73 | y = 0; 74 | ignoreoffscreen = true; 75 | } 76 | 77 | this.drawArea(ctx, data, x, y, rect.x, rect.y, rect.width, rect.height, sx, sy, ignoreoffscreen); 78 | 79 | ctx.restore(); 80 | }, 81 | 82 | getRect: function(tile, scale) { 83 | scale = scale || 1; 84 | 85 | var w = (tile >= 0) ? this.tilewidth : this.width; 86 | var h = (tile >= 0) ? this.tileheight : this.height; 87 | 88 | if (tile <= 0) tile = 0; 89 | 90 | var x = ~~ (tile * this.tilewidth) % this.width; 91 | var y = ~~ (tile * this.tilewidth / this.width) * this.tileheight; 92 | 93 | // if(this.drawRegion) { 94 | // x = x+this.drawRegion.x; 95 | // y = y+this.drawRegion.y; 96 | // w = this.drawRegion.w; 97 | // h = this.drawRegion.h; 98 | // } 99 | 100 | return { 101 | x: this.applyScale(x * scale), 102 | y: this.applyScale(y * scale), 103 | width: this.applyScale(w * scale), 104 | height: this.applyScale(h * scale) 105 | }; 106 | } 107 | }); 108 | 109 | 110 | module.exports = Tilesheet; 111 | -------------------------------------------------------------------------------- /dev/js/entities/actions/changespawn.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var ChangeSpawn = Entity.extend({ 4 | done: 0, 5 | 6 | 7 | init: function(x, y, options) { 8 | this.parent(x, y, 1, { 9 | width: options.width, 10 | height: options.height, 11 | isSensor: true, 12 | bodytype: 'b2_staticBody' 13 | }); 14 | }, 15 | 16 | update: function(game) { 17 | if(!this.done && this.body.m_userData.playerCollision && !game.level.player.killed) { 18 | game.level.setSpawn(this.pos.x, this.pos.y); 19 | this.done = true; 20 | game.playSound('sparkle'); 21 | game.showMessage('Spawnpoint set!', '#95FBAE', 1000, {top: "-=50"}); 22 | } 23 | }, 24 | 25 | draw: function(ctx) { } 26 | 27 | 28 | }); 29 | 30 | module.exports = ChangeSpawn; 31 | -------------------------------------------------------------------------------- /dev/js/entities/actions/endlevel.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var EndLevel = Entity.extend({ 4 | done: false, 5 | 6 | flip: false, 7 | 8 | init: function(x, y, options) { 9 | this.parent(x, y, 1, { 10 | width: options.width, 11 | height: options.height, 12 | isSensor: true, 13 | bodytype: 'b2_staticBody' 14 | }); 15 | 16 | this.flip = options.properties && options.properties.flip; 17 | }, 18 | 19 | update: function(game) { 20 | if (!this.done && this.body.m_userData.playerCollision) { 21 | game.playSound('pabam'); 22 | game.endLevel(this.flip); 23 | this.done = true; 24 | } 25 | }, 26 | 27 | draw: function(ctx) { 28 | this.parent(ctx); 29 | 30 | } 31 | }); 32 | 33 | module.exports = EndLevel; 34 | -------------------------------------------------------------------------------- /dev/js/entities/actions/intro.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Intro = Entity.extend({ 4 | done: false, 5 | 6 | 7 | init: function(x, y, options) { 8 | this.parent(x, y, 1, { 9 | width: options.width, 10 | height: options.height, 11 | isSensor: true, 12 | bodytype: 'b2_staticBody' 13 | }); 14 | }, 15 | 16 | update: function(game) { 17 | if (!this.done && this.body.m_userData.playerCollision) { 18 | $('#morphs').fadeIn(500); 19 | $('#morphs div:first-child').addClass('flash'); 20 | this.done = true; 21 | } 22 | }, 23 | 24 | draw: function(ctx) {} 25 | 26 | 27 | }); 28 | 29 | module.exports = Intro; 30 | -------------------------------------------------------------------------------- /dev/js/entities/control/test.js: -------------------------------------------------------------------------------- 1 | var Player = require('../player'); 2 | 3 | var Test = Player.extend({ 4 | width: 16, 5 | height: 16, 6 | 7 | offset: { 8 | x: 0, 9 | y: 0 10 | }, 11 | 12 | init: function(x, y) { 13 | this.parent(x, y, 'debug.placeholder'); 14 | } 15 | }); 16 | 17 | Test.control = true; 18 | Test.pauseWhileMorph = false; 19 | 20 | module.exports = Test; -------------------------------------------------------------------------------- /dev/js/entities/entities.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | Intro: require('./actions/intro'), 3 | ChangeSpawn: require('./actions/changespawn'), 4 | EndLevel: require('./actions/endlevel'), 5 | 6 | Button: require('./scenery/button'), 7 | Door: require('./scenery/door'), 8 | 9 | Lava: require('./scenery/lava'), 10 | 11 | Laser: require('./scenery/laser'), 12 | LaserBlock: require('./scenery/laserblock'), 13 | 14 | Platform: require('./scenery/platform'), 15 | 16 | Player: require('./player'), 17 | 18 | Control: { 19 | Test: require('./control/test') 20 | }, 21 | 22 | Spawn: { 23 | Test: require('./spawn/test'), 24 | Movable: require('./spawn/movable'), 25 | Immovable: require('./spawn/immovable'), 26 | Floater: require('./spawn/floater'), 27 | Upfloater: require('./spawn/upfloater'), 28 | Bouncer: require('./spawn/bouncy') 29 | //Float: require('./spawn/float'), 30 | //Spring: require('./spawn/spring') 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /dev/js/entities/entity.js: -------------------------------------------------------------------------------- 1 | var Assets = require('../engine/assets'); 2 | var Animation = require('../engine/animation'); 3 | var config = require('../config'); 4 | 5 | var Input = require('../engine/input'); 6 | var p = require('../engine/physics'); 7 | 8 | var b2Vec2 = Box2D.Common.Math.b2Vec2; 9 | 10 | var hashnum = 0; 11 | 12 | var Entity = Class.extend({ 13 | width: 16, 14 | height: 16, 15 | 16 | foreground: false, 17 | background: false, 18 | 19 | pos: { 20 | x: 100, 21 | y: 100 22 | }, 23 | 24 | offset: { 25 | x: 0, 26 | y: 0 27 | }, 28 | 29 | body: null, 30 | joint: null, 31 | 32 | scale: 1, 33 | 34 | animations: {}, 35 | animation: null, 36 | 37 | angle: 0, 38 | 39 | bodyType: 'Box', 40 | 41 | targets: null, 42 | 43 | hash: null, 44 | 45 | physicsInfo: null, 46 | 47 | activatesButton: true, 48 | 49 | init: function(x, y, scale, bodyoptions) { 50 | this.hash = hashnum++; 51 | 52 | this.pos = { 53 | x: x, 54 | y: y 55 | }; 56 | 57 | // this.offset = { 58 | // x: 0, 59 | // y: 0 60 | // }; 61 | 62 | this.scale = scale; 63 | 64 | this.animations = {}; 65 | this.initBody(bodyoptions); 66 | }, 67 | 68 | applyScale: function(n) { 69 | return Math.round(n*config.display.scale); 70 | }, 71 | 72 | setPos: function(x, y) { 73 | this.body.SetPosition(new b2Vec2(x, y)); 74 | this.body.SetAwake(true); 75 | this.body.SetLinearVelocity(new b2Vec2(0, 0)); 76 | }, 77 | 78 | initBody: function(bodyoptions) { 79 | if(bodyoptions) { 80 | bodyoptions.ent = this; 81 | } 82 | 83 | var b = p['add'+this.bodyType+'Entity'](this.pos.x+this.offset.x, this.pos.y+this.offset.y, this.width*this.scale, this.height*this.scale, bodyoptions); 84 | 85 | if (b && b.body && b.joint) { 86 | this.body = b.body; 87 | this.joint = b.joint; 88 | } else { 89 | this.body = b; 90 | } 91 | 92 | 93 | if (bodyoptions && bodyoptions.isSensor) { 94 | this.physicsInfo = this.body.m_userData 95 | } 96 | }, 97 | 98 | removeBody: function() { 99 | p.removeBody(this.body); 100 | }, 101 | 102 | addAnimation: function(name, tilesheet, scale, frametime, sequence, loop) { 103 | if(typeof(tilesheet) !== "object") { 104 | tilesheet = Object.$get(Assets.Graphics, tilesheet) 105 | } 106 | this.animations[name] = new Animation(tilesheet, scale, frametime, sequence, loop); 107 | this.animation = this.animations[name]; 108 | }, 109 | 110 | triggered: function(by, game) { }, 111 | 112 | untriggered: function(by, game) { }, 113 | 114 | trigger: function(by, game) { 115 | if(!this.targets) return; 116 | for(var i = 0; i < this.targets.length; i++) 117 | this.targets[i].triggered(by || this, game); 118 | }, 119 | 120 | untrigger: function(game) { 121 | if(!this.targets) return; 122 | for(var i = 0; i < this.targets.length; i++) 123 | this.targets[i].untriggered(this, game); 124 | }, 125 | 126 | update: function(game) { 127 | if(this.animation) { 128 | this.animation.update(); 129 | } 130 | 131 | if(this.body) { 132 | var pos = this.body.GetPosition(); 133 | this.pos.x = pos.x; 134 | this.pos.y = pos.y; 135 | 136 | this.angle = this.body.GetAngle(); 137 | } 138 | }, 139 | 140 | draw: function(ctx) { 141 | if(this.animation) { 142 | this.animation.draw(ctx, this.pos.x-this.offset.x, this.pos.y-this.offset.y, this.angle); 143 | } 144 | } 145 | 146 | 147 | }); 148 | 149 | module.exports = Entity; 150 | -------------------------------------------------------------------------------- /dev/js/entities/player.js: -------------------------------------------------------------------------------- 1 | var Entity = require('./entity'); 2 | 3 | var Input = require('../engine/input'); 4 | var config = require('../config'); 5 | 6 | var b2Vec2 = Box2D.Common.Math.b2Vec2; 7 | 8 | var SPEED = 18; 9 | var JUMP = 110; 10 | 11 | var Player = Entity.extend({ 12 | canJump: false, 13 | wentUp: false, 14 | 15 | width: 16, 16 | height: 18, 17 | 18 | morphing: false, 19 | 20 | offset: { 21 | x: 2, 22 | y: 1 23 | }, 24 | 25 | bodyType: 'Player', 26 | 27 | couldJump: false, 28 | 29 | hitTime: 0, 30 | 31 | killed: false, 32 | 33 | init: function(x, y, sheet) { 34 | this.parent(x, y, 1); 35 | 36 | this.initAnim(sheet || 'sprites.player'); 37 | }, 38 | initAnim: function(sheet) { 39 | this.addAnimation('stand', sheet, this.scale, .1, [0]); 40 | this.addAnimation('walk', sheet, this.scale, .1, [1, 2, 3]); 41 | this.addAnimation('jump', sheet, this.scale, .15, [4, 5]); 42 | this.addAnimation('morph', sheet, this.scale, .06, [9, 10, 11, 12, 13, 14, 15, 14, 13], false); 43 | this.addAnimation('endlevel', sheet, this.scale, .15, [16, 17, 18]); 44 | this.addAnimation('hit', sheet, this.scale, .02, [19, 20]); 45 | this.animation = this.animations['stand']; 46 | this.animations['walk'].flip.x = true; 47 | }, 48 | 49 | endLevel: function(level, flip) { 50 | this.animation = this.animations['endlevel']; 51 | this.animation.flip.x = !flip; 52 | 53 | 54 | var pos = this.body.GetPosition(); 55 | pos.y -= this.height/2; 56 | 57 | 58 | var n = flip ? -1 : 1; 59 | 60 | this.body.SetPosition(pos); 61 | 62 | this.body.SetType(1); 63 | this.body.SetLinearVelocity(new b2Vec2(n*30, -15)); 64 | }, 65 | 66 | kill: function(game, time) { 67 | if(this.animation === this.animations['endlevel']) return; 68 | if(this.animation !== this.animations['hit']) { 69 | this.killed = true; 70 | this.morphing = false; 71 | game.level.morphing = false; 72 | this.animation = this.animations['hit']; 73 | this.animation.flip.x = true; 74 | this.hitTime = time || 300; 75 | game.shake(time || 300, 20); 76 | game.playSound('fail'); 77 | } 78 | 79 | this.hitTime = this.hitTime - config.tick; 80 | if(this.hitTime < 0) { 81 | game.level.respawnPlayer(true); 82 | } 83 | }, 84 | 85 | respawn: function(x, y) { 86 | this.setPos(x, y); 87 | this.animation = this.animations['stand']; 88 | //this.killed = false; 89 | }, 90 | 91 | update: function(game) { 92 | if (this.hitTime > 0) { 93 | this.kill(game); 94 | } 95 | 96 | 97 | this.parent(); 98 | 99 | if (this.morphing) { 100 | if (this.animation != this.animations['morph']) { 101 | this.animation = this.animations['morph']; 102 | this.animation.flip.x = this.animations['walk'].flip.x; 103 | this.animation.reset(); 104 | } else { 105 | if (this.animation.looped) { 106 | this.morphing = false; 107 | } 108 | } 109 | } 110 | 111 | if(this.animation == this.animations['endlevel']) { 112 | this.animation.alpha -= 0.008; 113 | } 114 | 115 | if (!this.morphing && this.animation != this.animations['endlevel'] && this.animation != this.animations['hit']) { 116 | if (!Input.isDown(0)) this.handleMovement(game); 117 | } 118 | 119 | if(!this.couldJump && this.canJump()) { 120 | game.playSound('fall', true); 121 | // config.display.clearColor = 'rgba(38,28,37,1)'; 122 | } 123 | this.couldJump = this.canJump(); 124 | }, 125 | 126 | initMorph: function() { 127 | if(this.animation != this.animations['endlevel'] && this.animation != this.animations['hit']) this.morphing = true; 128 | return this.morphing; 129 | }, 130 | 131 | isMorphing: function() { 132 | return this.morphing; 133 | }, 134 | 135 | canJump: function() { 136 | return this.body.m_userData.footContacts > 0; 137 | }, 138 | 139 | handleMovement: function(game) { 140 | var vel = this.body.GetLinearVelocity(), 141 | l = Input.isDown('left'), 142 | r = Input.isDown('right'), 143 | u = Input.isDown('up'); 144 | 145 | this.animation = this.animations['stand']; 146 | 147 | var speed = 0, 148 | impulse = 0, 149 | change; 150 | if (l ^ r || vel.x != 0) { 151 | this.animation = this.animations['walk']; 152 | if (l) { 153 | speed = speed - SPEED; 154 | config.perspective.flip = true; 155 | this.animation.flip.x = false; 156 | } 157 | if (r) { 158 | speed = speed + SPEED; 159 | config.perspective.flip = false; 160 | this.animation.flip.x = true; 161 | } 162 | 163 | change = speed - vel.x; 164 | impulse = this.body.GetMass() * change; 165 | this.body.ApplyImpulse(new b2Vec2(impulse, 0), this.body.GetWorldCenter()); 166 | } 167 | 168 | if (!this.canJump()) { 169 | this.animation = this.animations['jump']; 170 | } else { 171 | this.killed = false; 172 | } 173 | 174 | if (u && this.canJump()) { 175 | // config.display.clearColor = 'rgba(38,28,37,.4)'; 176 | game.playSound('jump', true); 177 | impulse = this.body.GetMass() * JUMP; 178 | this.body.ApplyImpulse(new b2Vec2(0, impulse), this.body.GetWorldCenter()); 179 | } 180 | 181 | 182 | this.animation.flip = this.animations['walk'].flip; 183 | 184 | } 185 | 186 | }); 187 | 188 | module.exports = Player; 189 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/button.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Btn = Entity.extend({ 4 | 5 | triggered: false, 6 | width: 17, 7 | height: 16, 8 | 9 | align: null, 10 | 11 | init: function(x, y, options) { 12 | this.offset = {x: 0, y: 0} 13 | 14 | this.align = options.properties.align || 't'; 15 | this.axis = options.properties.axis || "y"; 16 | 17 | if(this.align === 't' || this.align.substr(0,1) === "t") this.offset.y = this.height - options.height; 18 | if(this.align === 'l' || this.align.substr(1) === "l") this.offset.x = this.width - options.width; 19 | 20 | this.parent(x, y, 1, { 21 | x: x, 22 | y: y, 23 | width: options.width, 24 | height: options.height, 25 | isSensor: true, 26 | bodytype: 'b2_staticBody' 27 | }); 28 | 29 | 30 | 31 | 32 | 33 | var n = this.axis === "x" ? 2 : 0; 34 | this.addAnimation('pressed', 'sprites.button', 1, .1, [1+n]); 35 | this.addAnimation('unpressed', 'sprites.button', 1, .1, [0+n]); 36 | 37 | 38 | if(this.align === 'b' || this.align.substr(0,1) === 'b') { 39 | for(var anim in this.animations) { 40 | this.animations[anim].flip.y = true; 41 | } 42 | } 43 | 44 | if(this.align === 'r' || this.align.substr(1) === 'r') { 45 | for(var anim in this.animations) { 46 | this.animations[anim].flip.x = true; 47 | } 48 | } 49 | }, 50 | 51 | countValid: function(cols) { 52 | var c = 0; 53 | for(var i = 0, n = cols.length; i < n; i++) { 54 | if (cols[i] && cols[i].activatesButton) c++; 55 | } 56 | return c; 57 | }, 58 | 59 | update: function(game) { 60 | if(this.animation) this.animation.update(); 61 | 62 | var t; 63 | if (this.body.m_userData.playerCollision) { 64 | t = [{ent: game.level.player}]; 65 | } else { 66 | if (this.body.m_userData.collisions && this.countValid(this.body.m_userData.collisions) > 0) { 67 | 68 | t = this.body.m_userData.collisions; 69 | } 70 | } 71 | 72 | if (!this.triggered && t) { 73 | this.trigger(t, game); 74 | game.playSound('on'); 75 | this.animation = this.animations['pressed']; 76 | } 77 | 78 | if (this.triggered && !t) { 79 | this.untrigger(game); 80 | game.playSound('off'); 81 | this.animation = this.animations['unpressed']; 82 | } 83 | 84 | this.triggered = !!t; 85 | }, 86 | 87 | 88 | 89 | }); 90 | 91 | module.exports = Btn; 92 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/door.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | var config = require('../../config'); 3 | 4 | var Door = Entity.extend({ 5 | 6 | width: 17, 7 | height: 32, 8 | 9 | background: true, 10 | 11 | offset: { 12 | y: 6, 13 | x: 0 14 | }, 15 | 16 | open: false, 17 | triggerCount: 0, 18 | 19 | speed: 10, 20 | 21 | activatesButton: false, 22 | 23 | init: function(x, y, options) { 24 | this.parent(x, y, 1, { 25 | fixed: 'y', 26 | motor: { 27 | speed: -this.speed, 28 | maxForce: 100000 29 | } 30 | }); 31 | 32 | this.neededTriggers = (options.properties && options.properties.neededTriggers) ? parseInt(options.properties.neededTriggers) : 1; 33 | 34 | this.addAnimation('closed', 'sprites.door', 1, .1, [0]); 35 | this.addAnimation('open', 'sprites.door', 1, .1, [1]); 36 | this.addAnimation('closed_0_2', 'sprites.door', 1, .1, [2]); 37 | this.addAnimation('closed_1_2', 'sprites.door', 1, .1, [3]); 38 | this.addAnimation('open_2_2', 'sprites.door', 1, .1, [4]); 39 | 40 | this.animflip = { 41 | x: false, 42 | y: false 43 | }; 44 | 45 | this.animoffset = { 46 | x: 0, 47 | y: 0 48 | }; 49 | 50 | for (var anim in this.animations) { 51 | this.animations[anim].flip = this.animflip; 52 | this.animations[anim].offset = this.animoffset; 53 | } 54 | 55 | this.animation = this.animations['closed' + this.getTriggerAnim()]; 56 | }, 57 | 58 | update: function(game) { 59 | this.parent(game); 60 | 61 | this.animflip.x = !config.perspective.flip; 62 | this.animoffset.x = !config.perspective.flip ? -5 : 0; 63 | this.angle = 0; 64 | 65 | }, 66 | 67 | getTriggerAnim: function() { 68 | if (this.neededTriggers !== 2) return ''; 69 | return '_' + Math.max(0, Math.min(this.triggerCount, 2)) + '_2'; 70 | }, 71 | 72 | 73 | triggered: function(by, game) { 74 | if (++this.triggerCount === this.neededTriggers) { 75 | this.trigger(by, game); 76 | if (!this.open) game.playSound('correct'); 77 | this.open = true; 78 | this.joint.SetMotorSpeed(this.speed); 79 | this.animation = this.animations['open' + this.getTriggerAnim()]; 80 | } else { 81 | this.animation = this.animations['closed' + this.getTriggerAnim()]; 82 | } 83 | }, 84 | 85 | untriggered: function(by, game) { 86 | if (--this.triggerCount < this.neededTriggers) { 87 | this.untrigger(game); 88 | if (this.open) game.playSound('wrong'); 89 | this.open = false; 90 | this.joint.SetMotorSpeed(-this.speed); 91 | this.animation = this.animations['closed' + this.getTriggerAnim()]; 92 | } else { 93 | this.animation = this.animations['open' + this.getTriggerAnim()]; 94 | } 95 | }, 96 | 97 | 98 | }); 99 | 100 | module.exports = Door; 101 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/laser.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | var config = require('../../config'); 3 | var Assets = require('../../engine/assets'); 4 | 5 | var Laser = Entity.extend({ 6 | 7 | active: true, 8 | 9 | background: true, 10 | 11 | axis: 'x', 12 | direction: 1, 13 | 14 | collisions: null, 15 | 16 | distance: 0, 17 | currentDistance: 0, 18 | 19 | delay: 0, 20 | 21 | color: '#ff0000', 22 | 23 | alpha: 1, 24 | ticks: 0, 25 | 26 | init: function(x, y, options) { 27 | var prop = options.properties || {}; 28 | this.direction = prop.flip ? -1 : 1; 29 | this.color = prop.color || "#ff0000"; 30 | 31 | x++; 32 | options.width--; 33 | 34 | this.axis = options.width > options.height ? 'x' : 'y'; 35 | if (this.direction < 0) { 36 | x = this.axis === "x" ? x + options.width : x; 37 | y = this.axis === "y" ? y + options.height : y; 38 | } 39 | 40 | if(this.axis === "x") { 41 | options.height = 4; 42 | } else { 43 | options.width = 4; 44 | } 45 | 46 | this.parent(x, y, 1, { 47 | isSensor: true, 48 | width: options.width * (this.axis === "x" ? this.direction : 1), 49 | height: options.height * (this.axis === "y" ? this.direction : 1), 50 | bodytype: 'b2_staticBody' 51 | }); 52 | 53 | 54 | this.width = options.width; 55 | this.height = options.height; 56 | 57 | 58 | this.distance = (this.axis === 'x' ? options.width : options.height) * this.direction; 59 | 60 | this.active = !(options.properties && options.properties.inactive); 61 | }, 62 | 63 | triggered: function(by) { 64 | this.active = false; 65 | }, 66 | 67 | untriggered: function(by) { 68 | this.active = true; 69 | }, 70 | 71 | update: function(game) { 72 | if(!this.active) return; 73 | 74 | 75 | if (this.physicsInfo.collisions.length > 0) { 76 | var d = this.distance + this.pos[this.axis]; 77 | for (var i = 0, n = this.physicsInfo.collisions.length; i < n; i++) { 78 | var ent = this.physicsInfo.collisions[i]; 79 | if (this.direction > 0) { 80 | d = Math.max(this.pos[this.axis], Math.min(ent.pos[this.axis], d)); 81 | } else { 82 | d = Math.min(this.pos[this.axis], Math.max(ent.pos[this.axis] + ent[this.axis === "y" ? "height" : "width"], d)); 83 | } 84 | } 85 | this.currentDistance = d - this.pos[this.axis]; 86 | } else { 87 | this.currentDistance = this.distance; 88 | } 89 | 90 | if (this.physicsInfo.playerCollision) { 91 | var player = game.level.player; 92 | var hit = false; 93 | if (this.direction > 0) { 94 | if (this.pos[this.axis] + this.currentDistance > player.pos[this.axis]) { 95 | this.currentDistance = (player.pos[this.axis] - this.pos[this.axis]); 96 | hit = true; 97 | } 98 | } else { 99 | if (this.pos[this.axis] + this.currentDistance < player.pos[this.axis] + player[this.axis === "y" ? "height" : "width"]) { 100 | this.currentDistance = (player.pos[this.axis] + player[this.axis === "y" ? "height" : "width"] - this.pos[this.axis]); 101 | hit = true; 102 | } 103 | } 104 | 105 | if (hit && player.hitTime <= 0) { 106 | player.kill(game); 107 | } 108 | } 109 | 110 | }, 111 | 112 | draw: function(ctx) { 113 | if(!this.active) return; 114 | 115 | this.ticks = config.tick + this.ticks; 116 | if(this.ticks > Math.random()*40+20) { 117 | this.alpha = Math.random()*0.8+0.2; 118 | this.ticks = 0; 119 | } 120 | 121 | var w = (this.axis == "x") ? this.currentDistance : this.width; 122 | var h = (this.axis == "y") ? this.currentDistance : this.height; 123 | 124 | this.fillRect(ctx, this.pos.x, this.pos.y, w, h); 125 | }, 126 | 127 | fillRect: function(ctx, x, y, w, h) { 128 | var rw = config.display.realwidth; 129 | var rh = config.display.realheight; 130 | 131 | x = this.applyScale(x) + ~~config.display.offset.x; 132 | y = this.applyScale(y) + ~~config.display.offset.y; 133 | w = this.applyScale(w); 134 | h = this.applyScale(h); 135 | 136 | var t; 137 | if (h < 0) { 138 | t = y; 139 | y = t + h; 140 | h = -h; 141 | } 142 | 143 | if (w < 0) { 144 | t = x; 145 | x = t + w; 146 | w = -w; 147 | } 148 | 149 | // if (x + w < 0 || x > rw || y + h < 0 || y > rh) return; 150 | 151 | // if (x + w > rw - config.fog.area.x) { 152 | // w = (x + w - rw - config.fog.area.x) 153 | // } 154 | 155 | // if (y + h > rh - config.fog.area.y) { 156 | // h = (y + h - rh - config.fog.area.y) 157 | // // } 158 | 159 | // if (x < config.fog.area.x) { 160 | // t = config.fog.area.x - x; 161 | // x = config.fog.area.x; 162 | // w = w - t; 163 | // } 164 | 165 | // if (y < 0) { 166 | // t = config.fog.area.y - y; 167 | // y = config.fog.area.y; 168 | // h = h - t; 169 | // } 170 | 171 | 172 | ctx.save(); 173 | ctx.globalAlpha = this.alpha; 174 | 175 | var one = this.applyScale(1); 176 | var two = this.applyScale(2); 177 | var three = this.applyScale(3); 178 | 179 | ctx.fillStyle = this.color; 180 | ctx.fillRect(x, y, w, h); 181 | ctx.fillStyle = 'rgba(255, 255, 255, 0.4)'; 182 | ctx.fillRect(x, y, (this.axis == "x" ? w : one), (this.axis == "y" ? h : one)); 183 | ctx.fillStyle = 'rgba(0, 0, 0, 0.7)'; 184 | ctx.fillRect(x + (this.axis == "x" ? 0 : three), y + (this.axis == "y" ? 0 : three), (this.axis == "x" ? w : one), (this.axis == "y" ? h : one)); 185 | 186 | // ctx.globalAlpha = 1; 187 | // if(this.axis == "x") { 188 | // ctx.fillStyle = "#000000"; 189 | // ctx.fillRect(x, y-one, two, h+two); 190 | // ctx.fillStyle = "#000000"; 191 | // ctx.fillRect(x+w-two, y-one, two, h+two); 192 | // } else { 193 | // ctx.fillStyle = "#000000"; 194 | // ctx.fillRect(x-one, y, w+two, two); 195 | // ctx.fillStyle = "#000000"; 196 | // ctx.fillRect(x-one, y+h-twodz, w+two, two); 197 | // } 198 | 199 | ctx.restore(); 200 | } 201 | 202 | 203 | }); 204 | 205 | module.exports = Laser; 206 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/laserblock.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var LB = Entity.extend({ 4 | 5 | active: true, 6 | neededTriggers: 1, 7 | triggerCount: 0, 8 | 9 | width: 22, 10 | height: 21, 11 | 12 | offset: { 13 | x: 0, 14 | y: 0 15 | }, 16 | 17 | reverse: false, 18 | 19 | init: function(x, y, options) { 20 | this.parent(x, y, 1); 21 | 22 | this.addAnimation('inactive', 'sprites.laser', 1, .1, [1]); 23 | this.addAnimation('active', 'sprites.laser', 1, .1, [0]); 24 | this.addAnimation('inactive_0_2', 'sprites.laser', 1, .1, [4]); 25 | this.addAnimation('inactive_1_2', 'sprites.laser', 1, .1, [3]); 26 | this.addAnimation('inactive_2_2', 'sprites.laser', 1, .1, [4]); 27 | this.addAnimation('active_0_2', 'sprites.laser', 1, .1, [2]); 28 | this.addAnimation('active_1_2', 'sprites.laser', 1, .1, [3]); 29 | this.addAnimation('active_2_2', 'sprites.laser', 1, .1, [2]); 30 | 31 | this.neededTriggers = (options.properties && options.properties.neededTriggers) ? parseInt(options.properties.neededTriggers) : 1; 32 | 33 | this.reverse = options.properties && options.properties.reverse == "true"; 34 | this.animation = this.animations[(this.reverse ? 'in' : '') + 'active' + this.getTriggerAnim()]; 35 | 36 | }, 37 | 38 | getTriggerAnim: function() { 39 | if (this.neededTriggers !== 2) return ''; 40 | return '_' + Math.max(0, Math.min(2 - this.triggerCount, 2)) + '_2'; 41 | }, 42 | 43 | initBody: function() {}, 44 | 45 | triggered: function(by, game) { 46 | if (++this.triggerCount === this.neededTriggers) { 47 | this.reverse ? this.untrigger(by, game) : this.trigger(by, game); 48 | if (this.active) game.playSound('correct'); 49 | this.active = false; 50 | this.animation = this.animations[(this.reverse ? '' : 'in') + 'active' + this.getTriggerAnim()]; 51 | } else { 52 | this.animation = this.animations[(this.reverse ? 'in' : '') + 'active' + this.getTriggerAnim()]; 53 | } 54 | }, 55 | 56 | untriggered: function(by, game) { 57 | if (--this.triggerCount < this.neededTriggers) { 58 | this.reverse ? this.trigger(by, game) : this.untrigger(game); 59 | if (!this.active) game.playSound('wrong'); 60 | this.active = true; 61 | this.animation = this.animations[(this.reverse ? 'in' : '') + 'active' + this.getTriggerAnim()]; 62 | } else { 63 | this.animation = this.animations[(this.reverse ? '' : 'in') + 'active' + this.getTriggerAnim()]; 64 | } 65 | }, 66 | 67 | update: function(game) { 68 | if (this.animation) this.animation.update(); 69 | } 70 | }); 71 | 72 | module.exports = LB; 73 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/lava.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Lava = Entity.extend({ 4 | init: function(x, y, options) { 5 | this.parent(x, y, 1, { 6 | width: options.width, 7 | height: options.height, 8 | isSensor: true, 9 | bodytype: 'b2_staticBody' 10 | }); 11 | }, 12 | 13 | update: function(game) { 14 | if (this.body.m_userData.playerCollision) game.level.player.kill(game, 500); 15 | }, 16 | 17 | draw: function(ctx) {} 18 | 19 | 20 | }); 21 | 22 | module.exports = Lava; 23 | -------------------------------------------------------------------------------- /dev/js/entities/scenery/platform.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | var config = require('../../config'); 3 | 4 | var Platform = Entity.extend({ 5 | width: 33, 6 | height: 6, 7 | 8 | background: true, 9 | 10 | offset: { 11 | y: 3, 12 | x: 0 13 | }, 14 | 15 | active: true, 16 | 17 | axis: 'x', 18 | loop: true, 19 | 20 | direction: 1, 21 | 22 | speed: 10, 23 | 24 | triggerCount: 0, 25 | neededTriggers: 0, 26 | 27 | activatesButton: false, 28 | 29 | 30 | init: function(x, y, options) { 31 | y = y + options.height - 10; 32 | 33 | var prop = options.properties || {}; 34 | this.axis = options.width > options.height ? 'x' : 'y'; 35 | 36 | if (prop.inactive) this.active = false; 37 | 38 | var limit = (this.axis === "x" ? options.width : options.height); 39 | 40 | this.parent(x, y, 1, { 41 | density: 100, 42 | top: { 43 | friction: 10000 44 | }, 45 | motor: { 46 | speed: this.direction * this.speed, 47 | maxForce: 100000 48 | }, 49 | fixed: this.axis, 50 | limit: { 51 | upper: limit, 52 | lower: 0 53 | } 54 | }); 55 | 56 | this.neededTriggers = (options.properties && options.properties.neededTriggers) ? parseInt(options.properties.neededTriggers) : 1; 57 | 58 | 59 | this.addAnimation('inactive', 'sprites.platform', 1, .1, [0]); 60 | this.addAnimation('active', 'sprites.platform', 1, .1, [1]); 61 | this.addAnimation('active_2_2', 'sprites.platform', 1, .1, [2]); 62 | this.addAnimation('inactive_1_2', 'sprites.platform', 1, .1, [3]); 63 | this.addAnimation('inactive_0_2', 'sprites.platform', 1, .1, [4]); 64 | 65 | 66 | this.animflip = { 67 | x: false, 68 | y: false 69 | }; 70 | 71 | this.animoffset = { 72 | x: 0, 73 | y: 0 74 | }; 75 | 76 | for (var anim in this.animations) { 77 | this.animations[anim].flip = this.animflip; 78 | this.animations[anim].offset = this.animoffset; 79 | } 80 | 81 | this.animation = this.animations[(this.active ? '' : 'in') + 'active' + this.getTriggerAnim()]; 82 | }, 83 | 84 | getTriggerAnim: function() { 85 | if (this.neededTriggers !== 2) return ''; 86 | return '_' + Math.max(0, Math.min(this.triggerCount, 2)) + '_2'; 87 | }, 88 | 89 | triggered: function(by, game) { 90 | if (++this.triggerCount === this.neededTriggers) { 91 | this.trigger(by, game); 92 | this.active = true; 93 | this.animation = this.animations['active' + this.getTriggerAnim()]; 94 | } else { 95 | this.animation = this.animations['inactive' + this.getTriggerAnim()]; 96 | } 97 | }, 98 | 99 | untriggered: function(game) { 100 | if (--this.triggerCount < this.neededTriggers) { 101 | this.untrigger(game); 102 | this.active = false; 103 | this.animation = this.animations['inactive' + this.getTriggerAnim()]; 104 | } else { 105 | this.animation = this.animations['active' + this.getTriggerAnim()]; 106 | } 107 | }, 108 | 109 | update: function(game) { 110 | this.animflip.x = config.perspective.flip; 111 | this.animoffset.x = config.perspective.flip ? 0 : -5; 112 | 113 | this.parent(game); 114 | 115 | var vel = this.body.GetLinearVelocity()[this.axis], 116 | trans = this.joint.GetJointTranslation(); 117 | 118 | if (trans - 1 <= this.joint.GetLowerLimit() || (this.direction === -1 && vel > -0.001)) { 119 | this.direction = 1; 120 | } else if (trans + 2 >= this.joint.GetUpperLimit() || (this.direction === 1 && vel < 0.001)) { 121 | this.direction = -1 122 | }; 123 | this.joint.SetMotorSpeed(this.active ? this.direction * this.speed : 0); 124 | 125 | 126 | this.angle = 0; 127 | 128 | } 129 | 130 | }); 131 | 132 | module.exports = Platform; 133 | -------------------------------------------------------------------------------- /dev/js/entities/spawn/bouncy.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Ent = Entity.extend({ 4 | width: 15, 5 | height: 15, 6 | 7 | offset: { 8 | x: 0.5, 9 | y: 1 10 | }, 11 | 12 | init: function(x, y) { 13 | var bodyoptions = { 14 | density: 40, 15 | bottom: { 16 | friction: 0.2, 17 | restitution: 0, 18 | }, 19 | restitution: 0.8 20 | }; 21 | 22 | this.parent(x, y, 1, bodyoptions); 23 | 24 | this.addAnimation('stand', 'sprites.spawn', this.scale, .1, [4]); 25 | } 26 | }); 27 | 28 | Ent.control = false; 29 | Ent.pauseWhileMorph = false; 30 | Ent.bgpos = {x: 60*4, y: 0}; 31 | Ent.info = "Kill yourself, leaving a bounceable entity behind."; 32 | 33 | module.exports = Ent; -------------------------------------------------------------------------------- /dev/js/entities/spawn/floater.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Ent = Entity.extend({ 4 | width: 15, 5 | height: 15, 6 | 7 | offset: { 8 | x: 0.5, 9 | y: 1 10 | }, 11 | 12 | init: function(x, y) { 13 | var bodyoptions = { 14 | fixed: "y", 15 | density: 1000, 16 | top: { 17 | friction: 0.2 18 | }, 19 | limit: { 20 | lower: 0, 21 | upper: 0 22 | } 23 | }; 24 | 25 | this.parent(x, y, 1, bodyoptions); 26 | 27 | this.addAnimation('stand', 'sprites.spawn', this.scale, .1, [3]); 28 | } 29 | }); 30 | 31 | Ent.control = false; 32 | Ent.pauseWhileMorph = true; 33 | Ent.bgpos = {x: 60*3, y: 0}; 34 | Ent.info = "Spawns a floating block - paused while transforming"; 35 | 36 | module.exports = Ent; -------------------------------------------------------------------------------- /dev/js/entities/spawn/immovable.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Ent = Entity.extend({ 4 | width: 15, 5 | height: 15, 6 | 7 | offset: { 8 | x: 0.5, 9 | y: 1 10 | }, 11 | 12 | init: function(x, y) { 13 | var bodyoptions = { 14 | fixed: "y", 15 | density: 40 16 | }; 17 | 18 | this.parent(x, y, 1, bodyoptions); 19 | 20 | this.addAnimation('stand', 'sprites.spawn', this.scale, .1, [1]); 21 | } 22 | }); 23 | 24 | Ent.control = false; 25 | Ent.pauseWhileMorph = false; 26 | Ent.bgpos = {x: 60*1, y: 0}; 27 | Ent.info = "Spawns a static block you can jump on"; 28 | 29 | module.exports = Ent; -------------------------------------------------------------------------------- /dev/js/entities/spawn/movable.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Ent = Entity.extend({ 4 | width: 15, 5 | height: 15, 6 | 7 | offset: { 8 | x: 0.5, 9 | y: 1 10 | }, 11 | 12 | init: function(x, y) { 13 | var bodyoptions = { 14 | density: 40, 15 | bottom: { 16 | friction: 0.2 17 | }, 18 | top: { 19 | friction: 0.2 20 | } 21 | }; 22 | 23 | this.parent(x, y, 1, bodyoptions); 24 | 25 | this.addAnimation('stand', 'sprites.spawn', this.scale, .1, [2]); 26 | } 27 | }); 28 | 29 | Ent.control = false; 30 | Ent.pauseWhileMorph = false; 31 | Ent.bgpos = {x: 60*2, y: 0}; 32 | Ent.info = "Kill yourself, leaving a pushable entity behind."; 33 | 34 | module.exports = Ent; -------------------------------------------------------------------------------- /dev/js/entities/spawn/test.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Test = Entity.extend({ 4 | width: 16, 5 | height: 16, 6 | 7 | offset: { 8 | x: 0, 9 | y: 0 10 | }, 11 | 12 | init: function(x, y) { 13 | this.parent(x, y, 1); 14 | 15 | this.addAnimation('stand', 'debug.placeholder', this.scale, .1, [0]); 16 | }, 17 | }); 18 | 19 | Test.control = false; 20 | Test.pauseWhileMorph = false; 21 | 22 | module.exports = Test; -------------------------------------------------------------------------------- /dev/js/entities/spawn/upfloater.js: -------------------------------------------------------------------------------- 1 | var Entity = require('../entity'); 2 | 3 | var Ent = Entity.extend({ 4 | width: 15, 5 | height: 15, 6 | 7 | offset: { 8 | x: 0.5, 9 | y: 1 10 | }, 11 | 12 | speed: 3, 13 | 14 | //activatesButton: false, 15 | 16 | init: function(x, y) { 17 | x+=2; 18 | var bodyoptions = { 19 | fixed: "y", 20 | density: 400, 21 | top: { 22 | friction: 0.2 23 | }, 24 | motor: { 25 | speed: this.speed, 26 | maxForce: 10000000 27 | } 28 | }; 29 | 30 | this.parent(x, y, 1, bodyoptions); 31 | 32 | this.addAnimation('stand', 'sprites.spawn', this.scale, .1, [5]); 33 | } 34 | }); 35 | 36 | Ent.control = false; 37 | Ent.pauseWhileMorph = false; 38 | Ent.bgpos = {x: 60*5, y: 0}; 39 | Ent.info = "Spawns a block that rises"; 40 | 41 | module.exports = Ent; -------------------------------------------------------------------------------- /dev/js/lib/class.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var initializing = false, 3 | fnTest = /xyz/.test(function() { 4 | xyz 5 | }) ? /\bparent\b/ : /.*/; 6 | this.Class = function() {}; 7 | Class.extend = function(e) { 8 | function i() { 9 | if (!initializing && this.init) this.init.apply(this, arguments) 10 | } 11 | var t = this.prototype; 12 | initializing = true; 13 | var n = new this; 14 | initializing = false; 15 | for (var r in e) { 16 | n[r] = typeof e[r] == "function" && typeof t[r] == "function" && fnTest.test(e[r]) ? function(e, n) { 17 | return function() { 18 | var r = this.parent; 19 | this.parent = t[e]; 20 | var i = n.apply(this, arguments); 21 | this.parent = r; 22 | return i 23 | } 24 | }(r, e[r]) : e[r] 25 | } 26 | i.prototype = n; 27 | i.prototype.constructor = i; 28 | i.extend = arguments.callee; 29 | return i 30 | } 31 | 32 | Object.$get = function(o, path) { 33 | if (!path) return o; 34 | 35 | var a = path.split('.'); 36 | while (a.length) { 37 | var n = a.shift(); 38 | if (n in o) { 39 | o = o[n]; 40 | } else { 41 | return; 42 | } 43 | } 44 | return o; 45 | }; 46 | 47 | Object.$set = function(o, path, val) { 48 | if (!path) return; 49 | 50 | var a = path.split('.'); 51 | while (a.length) { 52 | var n = a.shift(); 53 | if (a.length > 0) { 54 | o[n] = o[n] || {}; 55 | o = o[n]; 56 | } else { 57 | o[n] = val; 58 | } 59 | } 60 | }; 61 | 62 | Object.$merge = function(obj, other, override) { 63 | if (!obj || !other) return; 64 | 65 | for (var prop in other) { 66 | if (!obj[prop] || override) obj[prop] = other[prop]; 67 | } 68 | }; 69 | 70 | Array.prototype.indexOf = function(v) { 71 | for (var i = 0, l = this.length; i < l; i++) { 72 | if (this[i] === v) { 73 | return i; 74 | } 75 | } 76 | return -1; 77 | } 78 | })(); 79 | -------------------------------------------------------------------------------- /dev/js/lib/requestAnimFrame.js: -------------------------------------------------------------------------------- 1 | window.requestAnimFrame = (function(){ 2 | return window.requestAnimationFrame || 3 | window.webkitRequestAnimationFrame || 4 | window.mozRequestAnimationFrame || 5 | function( callback ){ 6 | window.setTimeout(callback, 1000 / 60); 7 | }; 8 | })(); -------------------------------------------------------------------------------- /dev/js/lib/stats.js: -------------------------------------------------------------------------------- 1 | var Stats = function() { 2 | var l = Date.now(), 3 | m = l, 4 | g = 0, 5 | n = Infinity, 6 | o = 0, 7 | h = 0, 8 | p = Infinity, 9 | q = 0, 10 | r = 0, 11 | s = 0, 12 | f = document.createElement("div"); 13 | f.id = "stats"; 14 | f.addEventListener("mousedown", function(b) { 15 | b.preventDefault(); 16 | t(++s % 2) 17 | }, !1); 18 | f.style.cssText = "width:80px;opacity:0.9;cursor:pointer"; 19 | var a = document.createElement("div"); 20 | a.id = "fps"; 21 | a.style.cssText = "padding:0 0 3px 3px;text-align:left;background-color:#002"; 22 | f.appendChild(a); 23 | var i = document.createElement("div"); 24 | i.id = "fpsText"; 25 | i.style.cssText = "color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px"; 26 | i.innerHTML = "FPS"; 27 | a.appendChild(i); 28 | var c = document.createElement("div"); 29 | c.id = "fpsGraph"; 30 | c.style.cssText = "position:relative;width:74px;height:30px;background-color:#0ff"; 31 | for (a.appendChild(c); 74 > c.children.length;) { 32 | var j = document.createElement("span"); 33 | j.style.cssText = "width:1px;height:30px;float:left;background-color:#113"; 34 | c.appendChild(j) 35 | } 36 | var d = document.createElement("div"); 37 | d.id = "ms"; 38 | d.style.cssText = "padding:0 0 3px 3px;text-align:left;background-color:#020;display:none"; 39 | f.appendChild(d); 40 | var k = document.createElement("div"); 41 | k.id = "msText"; 42 | k.style.cssText = "color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px"; 43 | k.innerHTML = "MS"; 44 | d.appendChild(k); 45 | var e = document.createElement("div"); 46 | e.id = "msGraph"; 47 | e.style.cssText = "position:relative;width:74px;height:30px;background-color:#0f0"; 48 | for (d.appendChild(e); 74 > e.children.length;) j = document.createElement("span"), j.style.cssText = "width:1px;height:30px;float:left;background-color:#131", e.appendChild(j); 49 | var t = function(b) { 50 | s = b; 51 | switch (s) { 52 | case 0: 53 | a.style.display = 54 | "block"; 55 | d.style.display = "none"; 56 | break; 57 | case 1: 58 | a.style.display = "none", d.style.display = "block" 59 | } 60 | }; 61 | return { 62 | REVISION: 11, 63 | domElement: f, 64 | setMode: t, 65 | begin: function() { 66 | l = Date.now() 67 | }, 68 | end: function() { 69 | var b = Date.now(); 70 | g = b - l; 71 | n = Math.min(n, g); 72 | o = Math.max(o, g); 73 | k.textContent = g + " MS (" + n + "-" + o + ")"; 74 | var a = Math.min(30, 30 - 30 * (g / 200)); 75 | e.appendChild(e.firstChild).style.height = a + "px"; 76 | r++; 77 | b > m + 1E3 && (h = Math.round(1E3 * r / (b - m)), p = Math.min(p, h), q = Math.max(q, h), i.textContent = h + " FPS (" + p + "-" + q + ")", a = Math.min(30, 30 - 30 * (h / 100)), c.appendChild(c.firstChild).style.height = 78 | a + "px", m = b, r = 0); 79 | return b 80 | }, 81 | update: function() { 82 | l = this.end() 83 | } 84 | } 85 | }; 86 | 87 | var stats = new Stats(); 88 | 89 | stats.domElement.style.position = 'absolute'; 90 | stats.domElement.style.bottom = '0px'; 91 | stats.domElement.style.left = '0px'; 92 | 93 | document.body.appendChild( stats.domElement ); 94 | 95 | module.exports = stats; -------------------------------------------------------------------------------- /dev/js/main.js: -------------------------------------------------------------------------------- 1 | require('./lib/class.js'); 2 | require('./lib/requestAnimFrame'); 3 | require('./analytics'); 4 | 5 | var Input = require('./engine/input'); 6 | 7 | var engine; 8 | 9 | $(function() { 10 | engine = new(require('./engine/engine'))(); 11 | }); 12 | 13 | $(window).resize(function() { 14 | if (engine) engine.resize.call(engine); 15 | }); 16 | 17 | $(document).keydown(Input._down.bind(Input)); 18 | $(document).keyup(Input._up.bind(Input)); 19 | $(document).mousedown(Input._down.bind(Input)); 20 | $(document).mouseup(Input._up.bind(Input)); 21 | $(document).bind('contextmenu', function() { 22 | return false; 23 | }); 24 | 25 | 26 | $('#github').click(function() { 27 | window.location = 'https://github.com/jeroenverfallie/game-off-2013'; 28 | }); 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /dev/media/data/levels/intro.json: -------------------------------------------------------------------------------- 1 | { "height":14, 2 | "layers":[ 3 | { 4 | "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, 3, 0, 0, 0, 0, 0, 3, 3, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 5 | "height":14, 6 | "name":"bg", 7 | "opacity":1, 8 | "properties": 9 | { 10 | "depth":"1", 11 | "type":"perspective" 12 | }, 13 | "type":"tilelayer", 14 | "visible":true, 15 | "width":26, 16 | "x":0, 17 | "y":0 18 | }, 19 | { 20 | "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 21 | "height":14, 22 | "name":"main", 23 | "opacity":1, 24 | "properties": 25 | { 26 | "type":"perspective" 27 | }, 28 | "type":"tilelayer", 29 | "visible":true, 30 | "width":26, 31 | "x":0, 32 | "y":0 33 | }, 34 | { 35 | "draworder":"topdown", 36 | "height":14, 37 | "name":"collision", 38 | "objects":[ 39 | { 40 | "height":0, 41 | "name":"", 42 | "polyline":[ 43 | { 44 | "x":0, 45 | "y":0 46 | }, 47 | { 48 | "x":0, 49 | "y":42 50 | }, 51 | { 52 | "x":48, 53 | "y":42 54 | }, 55 | { 56 | "x":48, 57 | "y":58 58 | }, 59 | { 60 | "x":288, 61 | "y":58 62 | }, 63 | { 64 | "x":288, 65 | "y":70 66 | }, 67 | { 68 | "x":288, 69 | "y":73 70 | }, 71 | { 72 | "x":320, 73 | "y":73 74 | }, 75 | { 76 | "x":320, 77 | "y":27 78 | }, 79 | { 80 | "x":368, 81 | "y":27 82 | }], 83 | "properties": 84 | { 85 | 86 | }, 87 | "rotation":0, 88 | "type":"", 89 | "visible":true, 90 | "width":0, 91 | "x":32, 92 | "y":75 93 | }], 94 | "opacity":1, 95 | "properties": 96 | { 97 | "type":"collision" 98 | }, 99 | "type":"objectgroup", 100 | "visible":true, 101 | "width":26, 102 | "x":0, 103 | "y":0 104 | }, 105 | { 106 | "draworder":"topdown", 107 | "height":14, 108 | "name":"entities", 109 | "objects":[ 110 | { 111 | "height":12, 112 | "name":"Spawn", 113 | "properties": 114 | { 115 | 116 | }, 117 | "rotation":0, 118 | "type":"region", 119 | "visible":true, 120 | "width":21, 121 | "x":61, 122 | "y":90 123 | }], 124 | "opacity":1, 125 | "properties": 126 | { 127 | "type":"entity" 128 | }, 129 | "type":"objectgroup", 130 | "visible":true, 131 | "width":26, 132 | "x":0, 133 | "y":0 134 | }], 135 | "orientation":"orthogonal", 136 | "properties": 137 | { 138 | 139 | }, 140 | "tileheight":15, 141 | "tilesets":[ 142 | { 143 | "firstgid":1, 144 | "image":"R:\/games\/jam\/game-off-2013\/dev\/media\/img\/tilesets\/definitions.png", 145 | "imageheight":45, 146 | "imagewidth":112, 147 | "margin":0, 148 | "name":"definitions", 149 | "properties": 150 | { 151 | 152 | }, 153 | "spacing":0, 154 | "tileheight":15, 155 | "tilewidth":16 156 | }, 157 | { 158 | "firstgid":22, 159 | "image":"R:\/games\/jam\/game-off-2013\/dev\/media\/img\/Untitled-2.png", 160 | "imageheight":80, 161 | "imagewidth":160, 162 | "margin":0, 163 | "name":"Untitled-2", 164 | "properties": 165 | { 166 | 167 | }, 168 | "spacing":0, 169 | "tileheight":40, 170 | "tilewidth":40 171 | }], 172 | "tilewidth":16, 173 | "version":1, 174 | "width":26 175 | } -------------------------------------------------------------------------------- /dev/media/fonts/visitor2-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/fonts/visitor2-webfont.eot -------------------------------------------------------------------------------- /dev/media/fonts/visitor2-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/fonts/visitor2-webfont.ttf -------------------------------------------------------------------------------- /dev/media/fonts/visitor2-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/fonts/visitor2-webfont.woff -------------------------------------------------------------------------------- /dev/media/img/UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/UI.png -------------------------------------------------------------------------------- /dev/media/img/cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/cube.png -------------------------------------------------------------------------------- /dev/media/img/debug/tileset_16_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/debug/tileset_16_16.jpg -------------------------------------------------------------------------------- /dev/media/img/debug/tileset_32_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/debug/tileset_32_32.jpg -------------------------------------------------------------------------------- /dev/media/img/debug/tileset_8_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/debug/tileset_8_8.jpg -------------------------------------------------------------------------------- /dev/media/img/gh_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/gh_logo.png -------------------------------------------------------------------------------- /dev/media/img/gh_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/gh_screen.png -------------------------------------------------------------------------------- /dev/media/img/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/info.png -------------------------------------------------------------------------------- /dev/media/img/morphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/morphs.png -------------------------------------------------------------------------------- /dev/media/img/sprites/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/button.png -------------------------------------------------------------------------------- /dev/media/img/sprites/door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/door.png -------------------------------------------------------------------------------- /dev/media/img/sprites/laser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/laser.png -------------------------------------------------------------------------------- /dev/media/img/sprites/platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/platform.png -------------------------------------------------------------------------------- /dev/media/img/sprites/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/player.png -------------------------------------------------------------------------------- /dev/media/img/sprites/spawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/sprites/spawn.png -------------------------------------------------------------------------------- /dev/media/img/tilesets/definitions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/tilesets/definitions.png -------------------------------------------------------------------------------- /dev/media/img/tilesets/main_tileset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/img/tilesets/main_tileset.png -------------------------------------------------------------------------------- /dev/media/music/bg.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/music/bg.mp3 -------------------------------------------------------------------------------- /dev/media/music/bg_alt.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/music/bg_alt.mp3 -------------------------------------------------------------------------------- /dev/media/music/bg_alt_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/music/bg_alt_2.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/correct.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/correct.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/fail.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/fail.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/fall.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/fall.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/jump.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/jump.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/off.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/off.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/on.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/on.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/sparkle.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/sparkle.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/success.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/success.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/transform.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/transform.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/ui_click.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/ui_click.mp3 -------------------------------------------------------------------------------- /dev/media/sounds/wrong.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/sounds/wrong.mp3 -------------------------------------------------------------------------------- /dev/media/swf/soundmanager2.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/swf/soundmanager2.swf -------------------------------------------------------------------------------- /dev/media/swf/soundmanager2_debug.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/swf/soundmanager2_debug.swf -------------------------------------------------------------------------------- /dev/media/swf/soundmanager2_flash9.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/swf/soundmanager2_flash9.swf -------------------------------------------------------------------------------- /dev/media/swf/soundmanager2_flash9_debug.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/swf/soundmanager2_flash9_debug.swf -------------------------------------------------------------------------------- /dev/media/swf/soundmanager2_flash_xdomain.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dev/media/swf/soundmanager2_flash_xdomain.zip -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | Trans♦cube
Level select
Transcube
a game by jerev
Play
Github
Seconds
Restarts
Transforms
"Deaths"
Restart
Loading the loader!
-------------------------------------------------------------------------------- /dist/media/data/levels/1.json: -------------------------------------------------------------------------------- 1 | {"name":"1","tileheight":15,"tilewidth":16,"height":10,"width":26,"properties":{},"layers":{"bg":{"data":[0,0,0,3,3,3,3,0,0,0,0,3,0,0,3,0,0,0,0,0,3,0,0,0,0,0,0,0,0,3,3,0,0,3,0,0,3,3,0,0,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,3,0,3,3,3,3,3,0,0,0,3,0,0,0,4,0,3,3,3,3,3,0,3,3,3,0,0,3,0,3,3,3,0,0,3,3,3,3,0,0,4,0,0,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4,0,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,0,0,4,0,3,3,3,3,0,3,3,3,0,3,3,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":30},{"x":-16,"y":30},{"x":-16,"y":105},{"x":-16,"y":103},{"x":64,"y":103},{"x":64,"y":118},{"x":176,"y":118},{"x":176,"y":73},{"x":384,"y":73},{"x":384,"y":45},{"x":368,"y":45},{"x":368,"y":15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":32,"y":0}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"entities":{"data":[{"height":33,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":411,"y":40},{"height":20,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":19,"x":27,"y":78}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[{"gid":46,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":172,"y":125},{"gid":46,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":182,"y":110},{"gid":56,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":199,"y":80},{"gid":56,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":176,"y":90},{"gid":59,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":376,"y":128},{"gid":60,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":405,"y":128},{"gid":61,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":427,"y":128},{"gid":65,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":183,"y":162},{"gid":64,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":152,"y":162},{"gid":52,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":112,"y":162},{"gid":37,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":88,"y":161},{"gid":63,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":125,"y":162}],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/10.json: -------------------------------------------------------------------------------- 1 | {"name":"10","tileheight":15,"tilewidth":16,"height":10,"width":56,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,3,3,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,3,3,0,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,0,0,0,0,0,0,0,3,3,3,0,3,3,3,3,0,0,0,0,0,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,0,0,4,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,3,3,4,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,4,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":30},{"x":64,"y":30},{"x":64,"y":45},{"x":112,"y":45},{"x":112,"y":62},{"x":48,"y":62},{"x":48,"y":48},{"x":16,"y":48},{"x":16,"y":33},{"x":0,"y":33},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":42},{"height":0,"name":"","polyline":[{"x":80,"y":-17},{"x":80,"y":0},{"x":-16,"y":0},{"x":-16,"y":-18},{"x":80,"y":-17}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":288,"y":105},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":64,"y":0},{"x":64,"y":15},{"x":96,"y":15},{"x":96,"y":30},{"x":128,"y":30}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":528,"y":27},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":75},{"x":160,"y":75},{"x":160,"y":60},{"x":176,"y":60}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":656,"y":58},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":48,"y":0},{"x":48,"y":17},{"x":0,"y":17},{"x":0,"y":2},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":432,"y":58},{"height":0,"name":"","polyline":[{"x":0,"y":30},{"x":0,"y":-17},{"x":16,"y":-17},{"x":16,"y":-60},{"x":16,"y":-63},{"x":32,"y":-63},{"x":32,"y":-77},{"x":80,"y":-77},{"x":85,"y":-82}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":688,"y":75},{"height":0,"name":"","polyline":[{"x":0,"y":30},{"x":16,"y":30},{"x":16,"y":15},{"x":32,"y":15},{"x":32,"y":-60},{"x":80,"y":-60}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":688,"y":75},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":15},{"x":64,"y":15},{"x":64,"y":30},{"x":96,"y":30},{"x":96,"y":45},{"x":112,"y":45},{"x":112,"y":120}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":528,"y":30},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-15},{"x":64,"y":-15},{"x":64,"y":-42},{"x":48,"y":-42},{"x":48,"y":-72},{"x":64,"y":-72},{"x":64,"y":18},{"x":48,"y":18},{"x":48,"y":3},{"x":16,"y":5},{"x":5,"y":33}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":832,"y":118}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":28,"name":"ChangeSpawn","properties":{},"rotation":0,"type":"action","visible":true,"width":32,"x":544,"y":0},{"height":38,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":5,"x":893,"y":68},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":29,"y":45},{"height":3,"name":"Laser","properties":{"name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":531,"x":109,"y":111},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":96,"y":105},{"height":15,"name":"Button","properties":{"align":"bl","axis":"x","target":"laserblock2"},"rotation":0,"type":"toggles","visible":true,"width":24,"x":697,"y":15},{"height":38,"name":"ChangeSpawn","properties":{},"rotation":0,"type":"action","visible":true,"width":32,"x":304,"y":50},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","target":"laser2"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":704,"y":75},{"height":43,"name":"Laser","properties":{"name":"laser2"},"rotation":0,"type":"scenery","visible":true,"width":5,"x":710,"y":90}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/12.json: -------------------------------------------------------------------------------- 1 | {"name":"12","tileheight":15,"tilewidth":16,"height":8,"width":29,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,4,0,0,3,3,3,3,3,0,3,0,3,3,3,3,0,3,3,3,3,0,3,3,3,3,3,3,0,0,4,0,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,0,3,3,3,3,0,4,0,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,0,4,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,0,0,0,0,0,0,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":-2},{"x":80,"y":-2},{"x":80,"y":45},{"x":64,"y":45},{"x":64,"y":15},{"x":16,"y":15},{"x":16,"y":30},{"x":-48,"y":30},{"x":-48,"y":45},{"x":-64,"y":45},{"x":-64,"y":88},{"x":-48,"y":88},{"x":-48,"y":103},{"x":112,"y":103},{"x":112,"y":88},{"x":144,"y":88},{"x":144,"y":73},{"x":176,"y":73},{"x":176,"y":57},{"x":208,"y":57},{"x":208,"y":75},{"x":176,"y":75},{"x":176,"y":90},{"x":160,"y":90},{"x":160,"y":103},{"x":144,"y":105},{"x":144,"y":120},{"x":-64,"y":120}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":80,"y":0},{"height":0,"name":"","polyline":[{"x":0,"y":15},{"x":0,"y":-3},{"x":48,"y":-3},{"x":48,"y":-30},{"x":32,"y":-30},{"x":32,"y":-62},{"x":48,"y":-62},{"x":48,"y":15},{"x":0,"y":15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":416,"y":60}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":35,"name":"ChangeSpawn","properties":{},"rotation":0,"type":"action","visible":true,"width":24,"x":261,"y":23},{"height":33,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":461,"y":27},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":45,"y":77},{"height":3,"name":"Laser","properties":{"color":"#1AFF6D","name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":275,"x":13,"y":52},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":0,"y":45},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":208,"y":105},{"height":2,"name":"Laser","properties":{"color":"#FA24FF","name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":243,"x":221,"y":112}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/2.json: -------------------------------------------------------------------------------- 1 | {"name":"2","tileheight":15,"tilewidth":16,"height":11,"width":29,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3,0,3,3,0,0,0,3,3,3,0,3,0,0,3,3,0,3,0,0,0,0,0,3,3,0,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,0,3,3,0,3,0,0,4,3,3,3,3,0,0,3,0,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,4,0,0,3,0,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,0,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,3,3,3,3,0,3,3,3,3,3,0,0,3,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3,3,3,3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,6,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,4,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":48,"y":0},{"x":48,"y":15},{"x":80,"y":15},{"x":80,"y":30},{"x":144,"y":30},{"x":144,"y":-15},{"x":272,"y":-15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":192,"y":88},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":15},{"x":32,"y":15},{"x":32,"y":60},{"x":144,"y":60},{"x":144,"y":48}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":57},{"height":0,"name":"","polyline":[{"x":-16,"y":12},{"x":32,"y":12},{"x":32,"y":-2}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":160,"y":90},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":30},{"x":16,"y":30},{"x":16,"y":60}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":448,"y":15}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":43,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":461,"y":33},{"height":5,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":35,"x":48,"y":88}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/3.json: -------------------------------------------------------------------------------- 1 | {"name":"3","tileheight":15,"tilewidth":16,"height":10,"width":34,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,3,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,0,0,3,3,0,0,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,0,0,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,0,0,3,3,3,3,3,3,3,3,3,0,0,0,4,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,3,0,0,0,3,3,3,3,3,3,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,3,0,0,3,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,3,3,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,6,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-29,"y":0},{"x":-29,"y":15},{"x":-45,"y":15},{"x":-45,"y":57},{"x":-13,"y":57},{"x":-13,"y":73},{"x":115,"y":73},{"x":115,"y":88},{"x":179,"y":88},{"x":179,"y":27},{"x":259,"y":27},{"x":259,"y":73},{"x":387,"y":73}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":61,"y":45},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-30},{"x":80,"y":-30},{"x":80,"y":-57},{"x":64,"y":-57},{"x":64,"y":-92}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":448,"y":118}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":37,"name":"ChangeSpawn","properties":{"target":"end"},"rotation":0,"type":"action","visible":true,"width":3,"x":240,"y":33},{"height":38,"name":"EndLevel","properties":{"name":"end"},"rotation":0,"type":"action","visible":true,"width":3,"x":523,"y":50},{"height":10,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":8,"x":32,"y":75}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[{"gid":75,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":112,"y":158},{"gid":72,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":29,"y":158},{"gid":73,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":60,"y":158},{"gid":74,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":85,"y":158}],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/6.json: -------------------------------------------------------------------------------- 1 | {"name":"6","tileheight":15,"tilewidth":16,"height":8,"width":33,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,3,3,3,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,3,3,0,0,3,3,3,3,3,3,0,3,0,0,3,6,0,6,0,0,3,3,0,0,0,3,3,3,0,0,0,4,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,6,0,6,0,3,3,3,3,0,3,3,3,3,3,3,0,4,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,0,0,0,0,4,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,4,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,1,1,6,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":33},{"x":16,"y":30},{"x":32,"y":30},{"x":32,"y":44},{"x":112,"y":44},{"x":112,"y":59},{"x":240,"y":59},{"x":240,"y":44},{"x":400,"y":44},{"x":400,"y":29},{"x":448,"y":29},{"x":448,"y":15},{"x":528,"y":15},{"x":528,"y":-13},{"x":512,"y":-13},{"x":512,"y":-42},{"x":528,"y":-42},{"x":528,"y":-13}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":43},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":45,"y":0},{"x":45,"y":-30},{"x":67,"y":-30},{"x":67,"y":0},{"x":77,"y":0},{"x":77,"y":-30},{"x":99,"y":-30},{"x":99,"y":0},{"x":112,"y":0},{"x":112,"y":-15},{"x":144,"y":-15},{"x":144,"y":-33},{"x":112,"y":-33},{"x":112,"y":-47},{"x":32,"y":-47},{"x":32,"y":-17},{"x":0,"y":-17},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":208,"y":60}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":42,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":526,"y":18},{"height":5,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":35,"x":45,"y":55},{"height":30,"name":"Door","properties":{"name":"door"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":256,"y":45},{"height":23,"name":"Button","properties":{"target":"door1"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":192,"y":98},{"height":23,"name":"Button","properties":{"target":"door,door1"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":144,"y":98},{"height":30,"name":"Door","properties":{"name":"door1","neededTriggers":"2"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":288,"y":46}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[{"gid":37,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":211,"y":158},{"gid":47,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":189,"y":148},{"gid":37,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":109,"y":158},{"gid":48,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":133,"y":148},{"gid":80,"height":0,"name":"","properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":158,"y":158}],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/7.json: -------------------------------------------------------------------------------- 1 | {"name":"7","tileheight":15,"tilewidth":16,"height":15,"width":16,"properties":{},"layers":{"bg":{"data":[0,0,3,3,0,3,3,3,3,3,0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,3,0,0,0,0,0,0,3,3,3,3,3,3,3,6,0,3,0,0,0,0,0,0,3,3,3,3,0,3,3,6,6,0,0,4,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,4,0,0,0,0,0,0,0,3,3,3,0,0,0,6,0,4,0,0,0,0,0,0,0,3,3,0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,0,3,3,3,3,0,0,0,0,0,0,0,3,0,3,3,0,0,0,3,3,3,0,0,3,3,0,0,3,3,3,3,3,3,3,3,0,3,3,3,3,3,0,3,3,3,3,3,0,3,3,3,3,3,0,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,4,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,6,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,20,20,20,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":32,"y":-13},{"x":16,"y":-13},{"x":16,"y":29},{"x":48,"y":29},{"x":48,"y":62},{"x":32,"y":62},{"x":32,"y":48},{"x":16,"y":48},{"x":16,"y":32},{"x":0,"y":32},{"x":0,"y":-28}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":58},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-15},{"x":112,"y":-15},{"x":112,"y":-42},{"x":96,"y":-42},{"x":96,"y":-72},{"x":112,"y":-72},{"x":112,"y":-42},{"x":147,"y":-45},{"x":141,"y":-97},{"x":91,"y":-82},{"x":64,"y":-87},{"x":64,"y":-42},{"x":51,"y":-42},{"x":51,"y":-72},{"x":29,"y":-72},{"x":16,"y":-72},{"x":16,"y":-90},{"x":64,"y":-90}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":80,"y":103},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":48},{"x":64,"y":48},{"x":64,"y":62},{"x":80,"y":62},{"x":80,"y":45},{"x":64,"y":45},{"x":64,"y":30},{"x":16,"y":30},{"x":16,"y":3},{"x":96,"y":3},{"x":96,"y":18},{"x":112,"y":18},{"x":112,"y":-15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":80,"y":103},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-17},{"x":-16,"y":-17},{"x":-16,"y":-2},{"x":-48,"y":-2},{"x":-48,"y":13},{"x":-96,"y":13},{"x":-96,"y":-2},{"x":-192,"y":-2},{"x":-192,"y":15},{"x":-96,"y":15},{"x":-96,"y":30},{"x":-16,"y":30},{"x":-16,"y":0},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":224,"y":195},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-15},{"x":64,"y":-15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":32,"y":45},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-80,"y":0},{"x":-80,"y":15},{"x":-96,"y":15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":96,"y":13}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":30,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":5,"x":187,"y":60},{"height":15,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":19,"x":29,"y":63},{"height":23,"name":"Button","properties":{"target":"door"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":112,"y":128},{"height":43,"name":"Door","properties":{"name":"door"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":112,"y":43},{"height":8,"name":"Lava","properties":{},"rotation":0,"type":"scenery","visible":true,"width":48,"x":128,"y":200}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/8.json: -------------------------------------------------------------------------------- 1 | {"name":"8","tileheight":15,"tilewidth":16,"height":11,"width":31,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,0,3,3,0,3,3,0,0,0,0,4,0,0,3,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,4,0,3,3,3,3,0,3,3,0,0,3,3,0,0,0,3,0,0,3,3,3,3,3,3,3,3,3,3,3,0,4,0,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,3,3,3,3,3,3,3,0,0,0,0,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,1,0,0,0,0,0,0,0,0,0,1,1,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,27,27,27,27,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":3},{"x":16,"y":3},{"x":16,"y":17},{"x":32,"y":17},{"x":32,"y":48},{"x":96,"y":48},{"x":96,"y":62},{"x":128,"y":62},{"x":128,"y":78},{"x":192,"y":78},{"x":192,"y":62},{"x":288,"y":62},{"x":288,"y":48},{"x":304,"y":48},{"x":304,"y":33},{"x":320,"y":33},{"x":320,"y":17},{"x":336,"y":17},{"x":336,"y":33},{"x":352,"y":33},{"x":352,"y":17},{"x":384,"y":17},{"x":384,"y":3},{"x":480,"y":3},{"x":480,"y":-25},{"x":464,"y":-25},{"x":464,"y":-55},{"x":480,"y":-55},{"x":480,"y":58},{"x":323,"y":105},{"x":11,"y":108},{"x":0,"y":20},{"x":0,"y":5}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":55}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":27,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":477,"y":30},{"height":8,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":24,"x":48,"y":63},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"","visible":true,"width":16,"x":80,"y":105},{"height":3,"name":"Laser","properties":{},"rotation":0,"type":"","visible":true,"width":192,"x":96,"y":110},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"","visible":true,"width":16,"x":336,"y":90},{"height":98,"name":"Laser","properties":{"flip":"true"},"rotation":0,"type":"","visible":true,"width":3,"x":342,"y":-10},{"height":8,"name":"Lava","properties":{},"rotation":0,"type":"","visible":true,"width":64,"x":128,"y":125}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/_test.json: -------------------------------------------------------------------------------- 1 | {"name":"_test","tileheight":15,"tilewidth":16,"height":10,"width":20,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,0,6,0,3,3,3,3,0,0,0,3,0,3,3,3,3,3,0,0,0,0,6,0,0,0,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,9,0,0,0,0,0,0,0,0,1,1,1,1,1,6,1,1,1,1,1,1,1,1,6,1,1,1,1,1],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","onlybase":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":-2},{"x":320,"y":-2}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":135},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":29,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":187,"y":75}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":5,"name":"ChangeSpawn","properties":{},"rotation":0,"type":"action","visible":true,"width":75,"x":213,"y":20},{"height":42,"name":"EndLevel","properties":{"flip":"true"},"rotation":0,"type":"action","visible":true,"width":56,"x":243,"y":43},{"height":20,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":27,"x":27,"y":20},{"height":23,"name":"Button","properties":{"target":"door,laserblock"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":80,"y":128},{"height":35,"name":"Door","properties":{"name":"door","neededTriggers":"2"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":192,"y":90},{"height":23,"name":"Button","properties":{"target":"door"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":224,"y":128},{"height":8,"name":"Laser","properties":{"color":"#37dec4","name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":64,"x":112,"y":125},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock","target":"laser"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":96,"y":120}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/first.json: -------------------------------------------------------------------------------- 1 | {"name":"first","tileheight":15,"tilewidth":16,"height":14,"width":26,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,3,0,0,3,3,0,0,0,0,0,3,3,0,0,3,3,3,3,3,0,0,0,0,3,3,0,3,0,0,3,0,0,0,0,0,3,3,3,3,0,3,3,3,3,0,0,3,3,3,3,3,3,3,0,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,3,3,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,4,4,4,4,4,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,4,4,0,0,0,0,2,0,0,0,0,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,2,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":42},{"x":48,"y":42},{"x":48,"y":58},{"x":288,"y":58},{"x":288,"y":70},{"x":288,"y":73},{"x":320,"y":73},{"x":320,"y":27},{"x":368,"y":27}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":32,"y":75}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"entities":{"data":[{"height":12,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":21,"x":61,"y":90}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/intro.json: -------------------------------------------------------------------------------- 1 | {"name":"intro","tileheight":15,"tilewidth":16,"height":14,"width":26,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,3,0,0,3,3,0,0,0,0,0,3,3,0,0,3,3,3,3,3,0,0,0,0,3,3,0,3,0,0,3,0,0,0,0,0,3,3,3,3,0,3,3,3,3,0,0,3,3,3,3,3,3,3,0,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,3,3,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,4,4,4,4,4,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,4,4,0,0,0,0,2,0,0,0,0,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,2,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":42},{"x":48,"y":42},{"x":48,"y":58},{"x":288,"y":58},{"x":288,"y":70},{"x":288,"y":73},{"x":320,"y":73},{"x":320,"y":27},{"x":368,"y":27}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":32,"y":75}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"entities":{"data":[{"height":12,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":21,"x":61,"y":90}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_0.json: -------------------------------------------------------------------------------- 1 | {"name":"t_0","tileheight":15,"tilewidth":16,"height":12,"width":35,"properties":{},"layers":{"bg":{"data":[0,0,3,3,0,0,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,3,3,3,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,3,3,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,3,3,0,3,3,3,3,0,3,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,0,3,0,0,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,0,3,3,0,0,4,0,0,0,0,0,0,0,0,3,3,3,0,0,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,3,3,3,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,15,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fix":{"data":[0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":15},{"x":32,"y":15},{"x":32,"y":45},{"x":64,"y":45},{"x":64,"y":60},{"x":128,"y":60},{"x":128,"y":90},{"x":144,"y":90},{"x":144,"y":107},{"x":112,"y":108},{"x":112,"y":150},{"x":128,"y":150},{"x":128,"y":135},{"x":176,"y":135},{"x":176,"y":127},{"x":192,"y":127},{"x":192,"y":165},{"x":352,"y":165},{"x":352,"y":180},{"x":432,"y":180},{"x":432,"y":165},{"x":480,"y":165},{"x":480,"y":150},{"x":544,"y":150},{"x":544,"y":122},{"x":528,"y":122},{"x":528,"y":93},{"x":544,"y":93},{"x":544,"y":147},{"x":544,"y":168},{"x":499,"y":168}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":-17},{"height":0,"name":"","polyline":[{"x":-64,"y":-15},{"x":-64,"y":-105},{"x":-144,"y":-105},{"x":-144,"y":-120},{"x":-160,"y":-120},{"x":-160,"y":-150},{"x":-176,"y":-150},{"x":-176,"y":-180},{"x":-160,"y":-180},{"x":-160,"y":-165},{"x":-128,"y":-165},{"x":-128,"y":-137},{"x":-112,"y":-137},{"x":-112,"y":-122},{"x":-64,"y":-122},{"x":-64,"y":-107},{"x":-16,"y":-107},{"x":-48,"y":-90},{"x":-48,"y":-15},{"x":-64,"y":-15}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":400,"y":135},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":45},{"x":48,"y":45},{"x":48,"y":60},{"x":112,"y":60},{"x":112,"y":88},{"x":96,"y":88},{"x":80,"y":88},{"x":80,"y":118},{"x":80,"y":135},{"x":96,"y":135},{"x":96,"y":148},{"x":125,"y":150},{"x":128,"y":165},{"x":269,"y":165},{"x":269,"y":180}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":16,"y":0},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-13,"y":0},{"x":-13,"y":-17}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":13,"y":0},{"height":0,"name":"","polyline":[{"x":0,"y":-3},{"x":32,"y":-3},{"x":32,"y":15},{"x":0,"y":15},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":304,"y":30},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":-15},{"x":32,"y":-15},{"x":32,"y":-30},{"x":48,"y":-30},{"x":48,"y":2},{"x":32,"y":2},{"x":32,"y":17},{"x":0,"y":17},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":368,"y":103},{"height":0,"name":"","polyline":[{"x":0,"y":-18},{"x":0,"y":30},{"x":-16,"y":30},{"x":-16,"y":3}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":384,"y":45}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":28,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":541,"y":108},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":21,"x":48,"y":5},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","neededTriggers":"2","target":"laser1"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":352,"y":45},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock1","target":"laser2"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":272,"y":15},{"height":117,"name":"Laser","properties":{"name":"laser2"},"rotation":0,"type":"","visible":true,"width":5,"x":277,"y":30},{"height":23,"name":"Button","properties":{"target":"mover"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":96,"y":38},{"height":23,"name":"Button","properties":{"target":"laserblock2"},"rotation":0,"type":"scenery","visible":true,"width":16,"x":112,"y":128},{"height":10,"name":"Platform","properties":{"inactive":"true","name":"mover"},"rotation":0,"type":"scenery","visible":true,"width":192,"x":144,"y":76},{"height":102,"name":"Laser","properties":{"name":"laser1"},"rotation":0,"type":"","visible":true,"width":3,"x":357,"y":60},{"height":15,"name":"Button","properties":{"align":"bl","axis":"x","target":"laserblock2"},"rotation":0,"type":"scenery","visible":true,"width":29,"x":324,"y":60}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_1.json: -------------------------------------------------------------------------------- 1 | {"name":"t_1","tileheight":15,"tilewidth":16,"height":14,"width":21,"properties":{},"layers":{"bg":{"data":[3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,3,0,0,3,3,3,3,3,0,0,0,0,3,3,3,3,3,0,0,0,3,3,3,0,0,3,3,3,0,0,0,0,0,0,0,3,3,0,0,0,3,3,3,3,0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,3,0,3,3,0,0,0,3,3,3,3,3,0,0,0,0,0,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,0,0,0,0,0,3,3,3,3,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,3,0,0,0,0,4,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,4,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,3,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,1,1,9,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,9,1,0,0,0,0,0,0,0,0,0,9,0,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,6,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,4,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":30},{"x":32,"y":30},{"x":32,"y":60},{"x":64,"y":60},{"x":64,"y":78},{"x":48,"y":78},{"x":48,"y":93},{"x":48,"y":90},{"x":128,"y":90},{"x":128,"y":108},{"x":32,"y":108},{"x":32,"y":93},{"x":0,"y":75},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":28},{"height":0,"name":"","polyline":[{"x":96,"y":17},{"x":96,"y":-75},{"x":112,"y":-75},{"x":112,"y":-90},{"x":144,"y":-90},{"x":144,"y":-43},{"x":112,"y":-43},{"x":112,"y":17}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":176,"y":133},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":-17},{"x":0,"y":-17},{"x":0,"y":-2}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":176,"y":15},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":-15},{"x":-48,"y":-15},{"x":-48,"y":-2},{"x":-13,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":192,"y":15},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":48,"y":0},{"x":48,"y":60},{"x":32,"y":58},{"x":32,"y":15},{"x":0,"y":15},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":288,"y":0},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":43},{"x":32,"y":43},{"x":32,"y":58},{"x":112,"y":58},{"x":112,"y":43},{"x":192,"y":43},{"x":192,"y":15},{"x":176,"y":15},{"x":176,"y":-15},{"x":192,"y":-15},{"x":192,"y":60},{"x":147,"y":77}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":128,"y":135},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-16,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":288,"y":150}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":28,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":315,"y":150},{"height":5,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":35,"x":32,"y":33},{"height":8,"name":"Platform","properties":{"inactive":"true","name":"mover"},"rotation":0,"type":"","visible":true,"width":237,"x":33,"y":77},{"height":2,"name":"Laser","properties":{"color":"#86E646","flip":"true","name":"laser2"},"rotation":0,"type":"","visible":true,"width":147,"x":128,"y":125},{"height":3,"name":"Laser","properties":{},"rotation":0,"type":"","visible":true,"width":227,"x":48,"y":109},{"height":178,"name":"Laser","properties":{"color":"#ED78E1","name":"laser"},"rotation":0,"type":"","visible":true,"width":3,"x":182,"y":15},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"","visible":true,"width":16,"x":32,"y":105},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock","target":"laser"},"rotation":0,"type":"","visible":true,"width":16,"x":176,"y":0},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","target":"laser2"},"rotation":0,"type":"","visible":true,"width":16,"x":272,"y":120},{"height":22,"name":"Button","properties":{"target":"mover"},"rotation":0,"type":"","visible":true,"width":16,"x":96,"y":114},{"height":15,"name":"Button","properties":{"align":"l","axis":"x","target":"laserblock"},"rotation":0,"type":"","visible":true,"width":27,"x":262,"y":60},{"height":22,"name":"Button","properties":{"target":"laserblock2"},"rotation":0,"type":"","visible":true,"width":16,"x":304,"y":39}],"name":"entities","type":"objectgroup","properties":{"name":"mover","type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_2.json: -------------------------------------------------------------------------------- 1 | {"name":"t_2","tileheight":15,"tilewidth":16,"height":16,"width":17,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,4,0,0,0,3,3,3,3,3,3,3,0,0,3,3,0,0,4,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,4,0,3,0,0,0,3,3,3,3,3,3,3,3,3,0,3,4,0,3,3,0,0,0,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":30},{"x":96,"y":30},{"x":96,"y":45},{"x":112,"y":45},{"x":112,"y":60},{"x":144,"y":60},{"x":144,"y":30},{"x":176,"y":30},{"x":176,"y":47},{"x":160,"y":47},{"x":160,"y":62},{"x":144,"y":62},{"x":144,"y":77},{"x":112,"y":77}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":48,"y":163},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":32},{"x":16,"y":32},{"x":16,"y":47},{"x":93,"y":47}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":48,"y":163},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-16,"y":0},{"x":-16,"y":-33},{"x":0,"y":-33},{"x":0,"y":-47},{"x":96,"y":-47},{"x":96,"y":-63},{"x":144,"y":-63},{"x":144,"y":-45},{"x":96,"y":-45},{"x":96,"y":-30},{"x":16,"y":-30},{"x":16,"y":-15},{"x":0,"y":-15},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":64,"y":60},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-45},{"x":32,"y":-45},{"x":32,"y":-90},{"x":16,"y":-90},{"x":16,"y":-120},{"x":32,"y":-120},{"x":32,"y":-90},{"x":32,"y":-63},{"x":-32,"y":-63},{"x":-32,"y":-45},{"x":-16,"y":-45},{"x":-16,"y":0},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":240,"y":165},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":32,"y":0},{"x":32,"y":18},{"x":0,"y":18},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":128,"y":102}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":30,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":269,"y":75},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":123,"y":170},{"height":105,"name":"Laser","properties":{"color":"#6110E3"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":56,"y":58},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":224,"y":150},{"height":3,"name":"Laser","properties":{"flip":"true"},"rotation":0,"type":"scenery","visible":true,"width":195,"x":32,"y":125},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":48,"y":45},{"height":80,"name":"Laser","properties":{"color":"#FFFA01"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":230,"y":160},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":224,"y":120}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_3.json: -------------------------------------------------------------------------------- 1 | {"name":"t_3","tileheight":15,"tilewidth":16,"height":8,"width":22,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,4,0,0,3,0,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,0,0,4,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,0,3,3,3,0,4,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,3,3,3,0,0,3,4,0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,1,6,0,1,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,9,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":45},{"x":80,"y":45},{"x":80,"y":75},{"x":96,"y":75},{"x":96,"y":92},{"x":64,"y":92},{"x":64,"y":62},{"x":16,"y":62},{"x":16,"y":48},{"x":0,"y":48},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":0,"y":28},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-32,"y":0},{"x":-32,"y":45},{"x":-48,"y":45},{"x":-48,"y":-18},{"x":16,"y":-18},{"x":16,"y":-45},{"x":0,"y":-45},{"x":0,"y":-75},{"x":16,"y":-75},{"x":16,"y":0},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":336,"y":75}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":30,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":349,"y":30},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":29,"y":45},{"height":3,"name":"Laser","properties":{"color":"#FF8700","flip":"true","inactive":"true","name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":275,"x":16,"y":66},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock","reverse":"true","target":"laser"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":288,"y":60},{"height":10,"name":"Platform","properties":{"inactive":"true","name":"mover"},"rotation":0,"type":"toggles","visible":true,"width":208,"x":80,"y":75},{"height":23,"name":"Button","properties":{"target":"mover,laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":64,"y":68},{"height":3,"name":"Laser","properties":{},"rotation":0,"type":"scenery","visible":true,"width":192,"x":96,"y":111},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":80,"y":105}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_5.json: -------------------------------------------------------------------------------- 1 | {"name":"t_5","tileheight":15,"tilewidth":16,"height":11,"width":26,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,4,0,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,4,0,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,0,3,0,4,0,3,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,4,0,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,9,1,1,0,0,0,0,0,0,1,1,0,0,1,1,9,0,0,0,0,0,1,1,1,0,0,0,0,1,9,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,9,1,1,9,1,1,0,4,1,1,27,27,27,27,27,27,27,27,27,27,27,27,27,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,28,28,28,28,28,28,28,28,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":32,"y":0},{"x":32,"y":18},{"x":0,"y":18},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":64,"y":73},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-48,"y":0},{"x":-48,"y":-15},{"x":-80,"y":-15},{"x":-80,"y":0},{"x":-112,"y":0},{"x":-112,"y":88},{"x":-96,"y":88},{"x":-96,"y":103},{"x":112,"y":103},{"x":112,"y":88},{"x":128,"y":88},{"x":128,"y":73},{"x":208,"y":73}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":128,"y":30},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":32,"y":0},{"x":32,"y":-15},{"x":80,"y":-15},{"x":80,"y":-42},{"x":64,"y":-42},{"x":64,"y":-72},{"x":80,"y":-72},{"x":80,"y":18},{"x":64,"y":18},{"x":64,"y":3},{"x":48,"y":3},{"x":48,"y":15},{"x":-5,"y":63}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":336,"y":103},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":15},{"x":-80,"y":15},{"x":-80,"y":30},{"x":-128,"y":30},{"x":-128,"y":45},{"x":-144,"y":45},{"x":-144,"y":30},{"x":-128,"y":30},{"x":-128,"y":15},{"x":-96,"y":15},{"x":-96,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":336,"y":0},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":15},{"x":48,"y":15},{"x":48,"y":0},{"x":16,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":320,"y":15}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":45,"name":"ChangeSpawn","properties":{},"rotation":0,"type":"action","visible":true,"width":13,"x":259,"y":58},{"height":25,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":413,"y":63},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":19,"x":75,"y":48},{"height":105,"name":"Laser","properties":{"name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":118,"y":28},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":112,"y":15},{"height":23,"name":"Button","properties":{"target":"laserblock1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":288,"y":98},{"height":8,"name":"Lava","properties":{},"rotation":0,"type":"scenery","visible":true,"width":208,"x":32,"y":125},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock1","target":"laser1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":288,"y":0},{"height":88,"name":"Laser","properties":{"name":"laser1"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":293,"y":15},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","target":"laser2"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":336,"y":15},{"height":23,"name":"Button","properties":{"target":"laserblock2"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":336,"y":98},{"height":73,"name":"Laser","properties":{"name":"laser2"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":342,"y":30}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_6.json: -------------------------------------------------------------------------------- 1 | {"name":"t_6","tileheight":15,"tilewidth":16,"height":12,"width":19,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,4,0,0,0,0,3,0,0,0,0,0,3,3,3,3,3,3,0,0,4,0,0,3,3,3,3,0,0,0,3,0,3,3,3,3,3,3,0,4,0,6,0,3,3,0,0,3,0,3,3,3,3,3,3,0,0,0,4,0,6,3,3,0,0,3,3,3,3,3,3,3,0,3,3,0,0,0,0,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,6,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,6,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,6,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,9,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,4,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,9,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":16,"y":0},{"x":32,"y":0},{"x":32,"y":18},{"x":16,"y":18},{"x":16,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":128,"y":88},{"height":0,"name":"","polyline":[{"x":-16,"y":-13},{"x":16,"y":-13},{"x":16,"y":33},{"x":3,"y":33},{"x":3,"y":17},{"x":-16,"y":17},{"x":-16,"y":105},{"x":0,"y":105},{"x":0,"y":120},{"x":64,"y":120},{"x":64,"y":105},{"x":144,"y":105},{"x":144,"y":90},{"x":176,"y":90},{"x":176,"y":60},{"x":224,"y":60},{"x":224,"y":33},{"x":208,"y":33},{"x":208,"y":17},{"x":176,"y":17},{"x":176,"y":0},{"x":208,"y":0},{"x":208,"y":15},{"x":272,"y":15},{"x":272,"y":-13},{"x":256,"y":-13},{"x":256,"y":-45},{"x":272,"y":-45},{"x":272,"y":48},{"x":256,"y":48},{"x":256,"y":33},{"x":219,"y":132}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":32,"y":43}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":30,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":301,"y":30},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":53,"y":130},{"height":2,"name":"Laser","properties":{"name":"laser"},"rotation":0,"type":"scenery","visible":true,"width":192,"x":16,"y":109},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":0,"y":105},{"height":23,"name":"Button","properties":{"target":"door,laserblock1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":96,"y":143},{"height":40,"name":"Door","properties":{"name":"door"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":16,"y":110},{"height":43,"name":"Laser","properties":{"inactive":"true","name":"laser1"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":214,"y":60},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock1","reverse":"true","target":"laser1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":208,"y":45}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}},"info":{"data":[],"name":"info","type":"objectgroup","properties":{"type":"image"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_7.json: -------------------------------------------------------------------------------- 1 | {"name":"t_7","tileheight":15,"tilewidth":16,"height":16,"width":19,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,3,3,0,0,3,0,0,0,0,0,4,0,0,3,3,3,0,3,3,3,3,0,3,3,3,3,3,0,0,4,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,3,0,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,4,0,1,0,0,9,0,0,1,1,0,0,0,0,0,0,0,0,0,4,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,6,1,0,0,0,0,0,0,9,1,1,1,1,1,1,1,1,0,0,4,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,1,9,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":-32,"y":0},{"x":-32,"y":17},{"x":0,"y":17},{"x":0,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":144,"y":178},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":64,"y":0},{"x":64,"y":15},{"x":80,"y":15},{"x":80,"y":30},{"x":96,"y":30},{"x":96,"y":43},{"x":80,"y":43},{"x":80,"y":73},{"x":64,"y":73},{"x":64,"y":88},{"x":32,"y":88},{"x":32,"y":75},{"x":-16,"y":75},{"x":-16,"y":88},{"x":-48,"y":88},{"x":-48,"y":58},{"x":-80,"y":58},{"x":-80,"y":43},{"x":-96,"y":43},{"x":-96,"y":-45},{"x":-80,"y":-45},{"x":-80,"y":-90},{"x":-48,"y":-90},{"x":-48,"y":-60},{"x":-32,"y":-60},{"x":-32,"y":-75},{"x":0,"y":-75}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":112,"y":120},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-18},{"x":128,"y":-18},{"x":128,"y":-33},{"x":192,"y":-33},{"x":192,"y":0},{"x":176,"y":0},{"x":176,"y":-15},{"x":104,"y":92}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":112,"y":120},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":15},{"x":16,"y":15},{"x":16,"y":30},{"x":32,"y":30},{"x":32,"y":-2},{"x":16,"y":-2},{"x":16,"y":-17},{"x":-32,"y":-17},{"x":-32,"y":-30}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":112,"y":45},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":0,"y":-27},{"x":-16,"y":-27},{"x":-16,"y":-57},{"x":0,"y":-57},{"x":0,"y":-27}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":304,"y":88}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":28,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":5,"x":301,"y":60},{"height":17,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":32,"x":107,"y":153},{"height":3,"name":"Laser","properties":{"name":"laser2"},"rotation":0,"type":"scenery","visible":true,"width":224,"x":16,"y":95},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","target":"laser2"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":0,"y":90},{"height":23,"name":"Button","properties":{"target":"laserblock3,laserblock1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":128,"y":173},{"height":3,"name":"Laser","properties":{"flip":"true","inactive":"true","name":"laser3"},"rotation":0,"type":"scenery","visible":true,"width":99,"x":16,"y":111},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock3","reverse":"true","target":"laser3"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":112,"y":105},{"height":148,"name":"Laser","properties":{"name":"laser1"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":70,"y":60},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock1","target":"laser1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":64,"y":45}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/data/levels/t_8.json: -------------------------------------------------------------------------------- 1 | {"name":"t_8","tileheight":15,"tilewidth":16,"height":12,"width":27,"properties":{},"layers":{"bg":{"data":[0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0,3,0,3,0,0,0,4,0,0,0,0,0,0,0,0,3,3,3,0,0,3,3,0,0,0,0,3,3,0,3,0,0,0,4,0,0,0,0,0,0,0,6,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,4,0,0,0,0,0,0,0,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4,0,0,0,0,0,0,0,6,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,6,3,3,0,3,3,3,3,3,3,3,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"bg","type":"tilelayer","properties":{"depth":"1","type":"perspective"}},"main":{"data":[0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,4,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,9,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,6,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,4,0,0,0,0,0,0,1,0,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,20,20,20,20,20,20,20,20,20,20,20,20,20,20,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,9,1,9,1,1,9,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main","type":"tilelayer","properties":{"type":"perspective"}},"main_fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fg","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"main_fix":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"main_fix","type":"tilelayer","properties":{"foreground":"true","type":"perspective"}},"collision":{"data":[{"height":0,"name":"","polyline":[{"x":-16,"y":45},{"x":-16,"y":15},{"x":-32,"y":15},{"x":-32,"y":30},{"x":-48,"y":30},{"x":-48,"y":45},{"x":-112,"y":45},{"x":-112,"y":30},{"x":-128,"y":30},{"x":-128,"y":15},{"x":-160,"y":15},{"x":-160,"y":0},{"x":-208,"y":0},{"x":-208,"y":15},{"x":-224,"y":15},{"x":-224,"y":45},{"x":-240,"y":45},{"x":-240,"y":103},{"x":-208,"y":103},{"x":-208,"y":133},{"x":0,"y":133},{"x":0,"y":118},{"x":16,"y":118},{"x":16,"y":103},{"x":32,"y":103},{"x":32,"y":58}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":288,"y":0},{"height":0,"name":"","polyline":[{"x":16,"y":0},{"x":64,"y":0},{"x":64,"y":18},{"x":16,"y":17},{"x":16,"y":0}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":48,"y":88},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":16,"y":0},{"x":16,"y":-45},{"x":-16,"y":-45}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":272,"y":45},{"height":0,"name":"","polyline":[{"x":0,"y":0},{"x":48,"y":0},{"x":48,"y":-28},{"x":32,"y":-28},{"x":32,"y":-60},{"x":48,"y":-60},{"x":48,"y":33},{"x":0,"y":110}],"properties":{},"rotation":0,"type":"","visible":true,"width":0,"x":320,"y":58}],"name":"collision","type":"objectgroup","properties":{"type":"collision"}},"fg":{"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"name":"fg","type":"tilelayer","properties":{"depth":"-1","foreground":"true","type":"perspective"}},"entities":{"data":[{"height":27,"name":"EndLevel","properties":{},"rotation":0,"type":"action","visible":true,"width":3,"x":365,"y":30},{"height":15,"name":"Spawn","properties":{},"rotation":0,"type":"region","visible":true,"width":21,"x":69,"y":58},{"height":3,"name":"Laser","properties":{"color":"#C7FF37","flip":"true","inactive":"true","name":"laser2"},"rotation":0,"type":"scenery","visible":true,"width":304,"x":16,"y":68},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock1","reverse":"true","target":"laser1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":32,"y":60},{"height":5,"name":"Platform","properties":{"inactive":"true","name":"mover"},"rotation":0,"type":"toggles","visible":true,"width":208,"x":112,"y":80},{"height":23,"name":"Button","properties":{"target":"laserblock2,mover"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":96,"y":83},{"height":8,"name":"Lava","properties":{},"rotation":0,"type":"scenery","visible":true,"width":224,"x":64,"y":125},{"height":35,"name":"Door","properties":{"name":"door"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":48,"y":60},{"height":3,"name":"Laser","properties":{"inactive":"true","name":"laser1"},"rotation":0,"type":"scenery","visible":true,"width":304,"x":16,"y":65},{"height":32,"name":"Button","properties":{"align":"bl","target":"laserblock1"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":273,"y":30},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":176,"y":135},{"height":15,"name":"LaserBlock","properties":{"name":"laserblock2","reverse":"true","target":"laser2"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":320,"y":60},{"height":15,"name":"LaserBlock","properties":{},"rotation":0,"type":"toggles","visible":true,"width":16,"x":256,"y":135},{"height":23,"name":"Button","properties":{"target":"door"},"rotation":0,"type":"toggles","visible":true,"width":16,"x":208,"y":128},{"height":87,"name":"Laser","properties":{"color":"#A087FF","flip":"true"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":182,"y":45},{"height":117,"name":"Laser","properties":{"color":"#A087FF","flip":"true"},"rotation":0,"type":"scenery","visible":true,"width":3,"x":262,"y":15}],"name":"entities","type":"objectgroup","properties":{"type":"entity"}}}} -------------------------------------------------------------------------------- /dist/media/fonts/visitor2-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/fonts/visitor2-webfont.eot -------------------------------------------------------------------------------- /dist/media/fonts/visitor2-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/fonts/visitor2-webfont.ttf -------------------------------------------------------------------------------- /dist/media/fonts/visitor2-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/fonts/visitor2-webfont.woff -------------------------------------------------------------------------------- /dist/media/img/UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/UI.png -------------------------------------------------------------------------------- /dist/media/img/cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/cube.png -------------------------------------------------------------------------------- /dist/media/img/debug/tileset_16_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/debug/tileset_16_16.jpg -------------------------------------------------------------------------------- /dist/media/img/debug/tileset_32_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/debug/tileset_32_32.jpg -------------------------------------------------------------------------------- /dist/media/img/debug/tileset_8_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/debug/tileset_8_8.jpg -------------------------------------------------------------------------------- /dist/media/img/gh_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/gh_logo.png -------------------------------------------------------------------------------- /dist/media/img/gh_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/gh_screen.png -------------------------------------------------------------------------------- /dist/media/img/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/info.png -------------------------------------------------------------------------------- /dist/media/img/morphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/morphs.png -------------------------------------------------------------------------------- /dist/media/img/sprites/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/button.png -------------------------------------------------------------------------------- /dist/media/img/sprites/door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/door.png -------------------------------------------------------------------------------- /dist/media/img/sprites/laser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/laser.png -------------------------------------------------------------------------------- /dist/media/img/sprites/platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/platform.png -------------------------------------------------------------------------------- /dist/media/img/sprites/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/player.png -------------------------------------------------------------------------------- /dist/media/img/sprites/spawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/sprites/spawn.png -------------------------------------------------------------------------------- /dist/media/img/tilesets/definitions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/tilesets/definitions.png -------------------------------------------------------------------------------- /dist/media/img/tilesets/main_tileset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/img/tilesets/main_tileset.png -------------------------------------------------------------------------------- /dist/media/music/bg.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/music/bg.mp3 -------------------------------------------------------------------------------- /dist/media/music/bg_alt.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/music/bg_alt.mp3 -------------------------------------------------------------------------------- /dist/media/music/bg_alt_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/music/bg_alt_2.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/correct.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/correct.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/fail.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/fail.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/fall.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/fall.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/jump.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/jump.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/off.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/off.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/on.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/on.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/sparkle.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/sparkle.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/success.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/success.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/transform.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/transform.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/ui_click.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/ui_click.mp3 -------------------------------------------------------------------------------- /dist/media/sounds/wrong.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/sounds/wrong.mp3 -------------------------------------------------------------------------------- /dist/media/swf/soundmanager2.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/swf/soundmanager2.swf -------------------------------------------------------------------------------- /dist/media/swf/soundmanager2_debug.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/swf/soundmanager2_debug.swf -------------------------------------------------------------------------------- /dist/media/swf/soundmanager2_flash9.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/swf/soundmanager2_flash9.swf -------------------------------------------------------------------------------- /dist/media/swf/soundmanager2_flash9_debug.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/swf/soundmanager2_flash9_debug.swf -------------------------------------------------------------------------------- /dist/media/swf/soundmanager2_flash_xdomain.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeroenverfallie/ggo13-transcube/af96faec9eaf31c7640b2e16967ad223a9a36161/dist/media/swf/soundmanager2_flash_xdomain.zip -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "transcube", 3 | "description": "A puzzle platformer", 4 | "version": "0.1.0", 5 | "author": { 6 | "name": "Jeroen Verfallie" 7 | }, 8 | "devDependencies": { 9 | "grunt-contrib-jshint": "~0.7.1", 10 | "grunt-contrib-uglify": "~0.2.5", 11 | "grunt-browserify2": "~0.1.8", 12 | "grunt-contrib-watch": "~0.5.3", 13 | "grunt-contrib-jade": "~0.8.0", 14 | "grunt-contrib-less": "~0.8.1", 15 | "grunt-contrib-copy": "~0.4.1", 16 | "grunt-contrib-clean": "~0.5.0", 17 | "grunt-gh-pages": "~0.8.1" 18 | }, 19 | "keywords": [] 20 | } 21 | --------------------------------------------------------------------------------