├── .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 | 
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 | Action | Keys |
13 |
14 |
15 | Left | Q, A, LEFT ARROW |
16 |
17 |
18 | Right | D, RIGHT ARROW |
19 |
20 |
21 | Jump | Z, W, UP ARROW, SPACE |
22 |
23 |
24 | Select transformation | 1-6 (numpad or top) or CLICK |
25 |
26 |
27 | Transform | E |
28 |
29 |
30 | Restart | R |
31 |
32 |
33 | Next level | N, ENTER |
34 |
35 |
36 |
37 | 
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 | Browser | Comments |
58 |
59 |
60 | Google Chrome | Used during development, no known issues. |
61 |
62 |
63 | Mozilla Firefox | Slight delay on sounds - Font vertical aligns are off |
64 |
65 |
66 | Internet Explorer 10+ | Font vertical aligns are off |
67 |
68 |
69 | Safari | Performance issues, not tested on Mac OSX tho. |
70 |
71 |
72 | Opera | Untested |
73 |
74 |
75 |
76 |
77 | ## Credits
78 |
79 |  
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 Seconds
Restarts
Transforms
"Deaths"
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 |
--------------------------------------------------------------------------------