entityjs 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. data/.gitignore +1 -0
  2. data/bin/entityjs +1 -1
  3. data/entityjs.gemspec +3 -2
  4. data/lib/entityjs.rb +13 -1
  5. data/lib/entityjs/command.rb +22 -16
  6. data/lib/entityjs/commands/build.rb +96 -48
  7. data/lib/entityjs/commands/eunit.rb +1 -1
  8. data/lib/entityjs/commands/html.rb +31 -0
  9. data/lib/entityjs/commands/min.rb +37 -0
  10. data/lib/entityjs/commands/new.rb +3 -0
  11. data/lib/entityjs/commands/server.rb +9 -3
  12. data/lib/entityjs/config.rb +163 -59
  13. data/lib/entityjs/dirc.rb +28 -0
  14. data/lib/entityjs/page.rb +73 -34
  15. data/lib/entityjs/version.rb +1 -1
  16. data/public/favicon.ico +0 -0
  17. data/public/play.html +33 -28
  18. data/public/qunit/qunit.entity.js +56 -6
  19. data/public/qunit/qunit.input.js +5 -5
  20. data/public/test.html +49 -0
  21. data/spec/javascripts/src/core/comp_spec.js +17 -6
  22. data/spec/javascripts/src/core/entity_spec.js +4 -5
  23. data/spec/javascripts/src/core/query_spec.js +25 -0
  24. data/spec/javascripts/src/core/re_spec.js +3 -3
  25. data/spec/javascripts/src/cycle/update_spec.js +8 -8
  26. data/spec/javascripts/src/display/align_spec.js +2 -2
  27. data/spec/javascripts/src/display/el_spec.js +17 -0
  28. data/spec/javascripts/src/input/keyboard_spec.js +4 -4
  29. data/spec/javascripts/src/input/mouse_spec.js +8 -7
  30. data/spec/javascripts/src/math/random_spec.js +8 -0
  31. data/spec/javascripts/src/util/clone_spec.js +20 -0
  32. data/spec/lib/entityjs/commands/build_spec.rb +3 -8
  33. data/spec/lib/entityjs/commands/html_spec.rb +27 -0
  34. data/spec/lib/entityjs/commands/min_spec.rb +30 -0
  35. data/spec/lib/entityjs/config_spec.rb +6 -0
  36. data/spec/lib/entityjs/page_spec.rb +4 -4
  37. data/src/core/comp.js +87 -31
  38. data/src/core/entity.js +38 -43
  39. data/src/core/load.js +2 -8
  40. data/src/core/query.js +17 -5
  41. data/src/core/re.js +1 -1
  42. data/src/core/system.js +8 -11
  43. data/src/cycle/drawlist.js +11 -11
  44. data/src/cycle/update.js +5 -5
  45. data/src/display/align.js +10 -3
  46. data/src/display/animate.js +26 -12
  47. data/src/display/el.js +99 -0
  48. data/src/input/keyboard.js +5 -5
  49. data/src/input/mouse.js +16 -11
  50. data/src/math/bisect.js +1 -1
  51. data/src/math/force.js +4 -4
  52. data/src/math/hitmap.js +2 -1
  53. data/src/math/iso.js +1 -1
  54. data/src/math/random.js +17 -2
  55. data/src/math/tile.js +1 -1
  56. data/src/media/sound.js +1 -1
  57. data/src/pattern/pathfind.js +2 -4
  58. data/src/save/storage.js +1 -1
  59. data/src/util/clone.js +12 -0
  60. data/src/util/scene.js +21 -16
  61. data/templates/circle/game.json +16 -0
  62. data/templates/circle/scripts/displays/circle.js +40 -0
  63. data/templates/circle/scripts/scenes/home.js +8 -17
  64. data/templates/circle/tests/scenes/home_test.js +3 -11
  65. data/templates/dom/game.json +6 -0
  66. data/templates/dom/scripts/els/btn.js +5 -0
  67. data/templates/dom/scripts/els/contain.js +5 -0
  68. data/templates/dom/scripts/els/header.js +5 -0
  69. data/templates/{animation → dom}/scripts/init.js +0 -0
  70. data/templates/dom/scripts/scenes/home.js +22 -0
  71. data/templates/{animation → dom}/scripts/scenes/load.js +0 -0
  72. data/templates/dom/tests/scenes/home_test.js +9 -0
  73. data/templates/{animation → dom}/tests/scenes/load_test.js +0 -0
  74. data/templates/isometric/game.json +16 -0
  75. data/templates/platform/game.json +18 -0
  76. data/templates/platform/scripts/displays/hero.js +1 -1
  77. data/templates/platform/scripts/items/coin.js +1 -1
  78. data/templates/platform/scripts/items/spring.js +1 -1
  79. data/templates/platform/tests/displays/hero_test.js +4 -4
  80. data/templates/platform/tests/factories.js +1 -1
  81. data/templates/platform/tests/items/coin_test.js +1 -1
  82. data/templates/pong/game.json +16 -0
  83. data/templates/tiltmaze/game.json +16 -0
  84. data/templates/tiltmaze/scripts/structs/level.js +1 -1
  85. data/templates/tiltmaze/scripts/tiles/walltile.js +1 -1
  86. metadata +45 -32
  87. data/.rspec +0 -2
  88. data/public/tests.html +0 -31
  89. data/src/cycle/worker.js +0 -9
  90. data/templates/animation/assets/images/hero.png +0 -0
  91. data/templates/animation/scripts/scenes/home.js +0 -41
  92. data/templates/animation/tests/init_test.js +0 -4
  93. data/templates/animation/tests/scenes/home_test.js +0 -15
  94. data/templates/arrow_keys/assets/images/arrow.png +0 -0
  95. data/templates/arrow_keys/config.yml +0 -22
  96. data/templates/arrow_keys/readme.txt +0 -9
  97. data/templates/arrow_keys/scripts/displays/arrow.js +0 -69
  98. data/templates/arrow_keys/scripts/init.js +0 -10
  99. data/templates/arrow_keys/scripts/inputs/controls.js +0 -35
  100. data/templates/arrow_keys/scripts/scenes/home.js +0 -20
  101. data/templates/arrow_keys/scripts/scenes/load.js +0 -57
  102. data/templates/arrow_keys/tests/displays/arrow_test.js +0 -29
  103. data/templates/arrow_keys/tests/init_test.js +0 -4
  104. data/templates/arrow_keys/tests/inputs/controls_test.js +0 -32
  105. data/templates/arrow_keys/tests/scenes/home_test.js +0 -0
  106. data/templates/arrow_keys/tests/scenes/load_test.js +0 -18
  107. data/templates/circle/config.yml +0 -22
  108. data/templates/isometric/config.yml +0 -22
  109. data/templates/platform/config.yml +0 -23
  110. data/templates/pong/config.yml +0 -22
  111. data/templates/tiltmaze/config.yml +0 -25
@@ -4,26 +4,17 @@ re.scene('home')
4
4
  //stop the browser from moving around
5
5
  re.preventDefault('left right up down');
6
6
 
7
+ var radius = 10;
8
+ var color = '#FF0000';
9
+
7
10
  //create new circle on canvas
8
- re.e('circle align update')
9
- .attr({
10
- radius:10,
11
- speed:15,
12
- color:'#ff0000'
13
- })
11
+ re.circle(radius, color)
14
12
  //from align component
15
13
  .alignHor()
16
- .alignVer()
17
- .on('update', function(){
18
-
19
- //move on keypressed
20
- if(re.pressed('a', 'left')) this.posX -= this.speed;
21
- if(re.pressed('d', 'right')) this.posX += this.speed;
22
-
23
- if(re.pressed('w', 'up')) this.posY -= this.speed;
24
- if(re.pressed('s', 'down')) this.posY += this.speed;
25
-
26
- });
14
+ .alignVer();
15
+
16
+ //find circle and change speed
17
+ re('circle').first().attr('speed', 15);
27
18
 
28
19
  //add help text
29
20
  re.e('text align')
@@ -1,8 +1,4 @@
1
- module('scenes/home', {
2
- setup:function(){
3
- re.scene('home').enter();
4
- }
5
- });
1
+ module('scenes/home', lazyScene('home'));
6
2
 
7
3
  test('entities should exist', function(){
8
4
 
@@ -12,18 +8,14 @@ test('entities should exist', function(){
12
8
 
13
9
  //has update listener
14
10
  expectEvent(circle, 'update');
15
-
16
- var xBefore = circle.posX;
17
-
11
+ expectValueDown(circle, 'posX');
12
+
18
13
  //moves upon keypress
19
14
  keypress('a', function(){
20
15
  //key is currently down, so call update method
21
16
  circle.trigger('update');
22
17
  });
23
18
 
24
- //check if the circle moved
25
- ok(xBefore != circle.posX);
26
-
27
19
  //text exists
28
20
  is(re('text')[0]);
29
21
  });
@@ -0,0 +1,6 @@
1
+ {
2
+ "build-scripts-ignore":"plugins/*",
3
+ "title":"DOM Elements",
4
+ "ver":"1.0",
5
+ "order":"plugins/*"
6
+ }
@@ -0,0 +1,5 @@
1
+ re.c('btn')
2
+ .requires('el:button')
3
+ .factory(function(text, click){
4
+ this.click(click).text(text);
5
+ })
@@ -0,0 +1,5 @@
1
+ //Adds el to root container automatically
2
+ re.c('contain')
3
+ .init(function(){
4
+ $(".RE_CANVAS-CONTAINER").append(this.el);
5
+ });
@@ -0,0 +1,5 @@
1
+ re.c('header')
2
+ .factory(function(type, text){
3
+ this.comp('el:h'+type+' contain');
4
+ this.$el.text(text);
5
+ });
@@ -0,0 +1,22 @@
1
+ re.scene('home')
2
+ .enter(function(){
3
+
4
+ re.header(1, "Some Header")
5
+ .alignLeft(10).alignTop(10);
6
+
7
+ //some text..
8
+ re.e('el:span contain')
9
+ .text("RE_VER")
10
+ .alignBottom(-10)
11
+ .alignRight(-10);
12
+
13
+ re.btn('Click Me', function(){
14
+ alert('Clicked!');
15
+ }).align(0,0);
16
+
17
+ })
18
+ .exit(function(){
19
+
20
+ //built in to remove everything
21
+ this.clear();
22
+ });
@@ -0,0 +1,9 @@
1
+ module('home');
2
+
3
+ test('enter home', function(){
4
+
5
+ re.scene('home').enter();
6
+
7
+ //check if one button exists
8
+ eq(re("btn").length, 1);
9
+ });
@@ -0,0 +1,16 @@
1
+ {
2
+ //configure game settings
3
+ "width": 500,
4
+ "height": 400,
5
+ "canvas-id": "game-canvas",
6
+
7
+ //ignore entity scripts
8
+ "entity-ignore": "socket wait group",
9
+
10
+ "tests-ignore": null,
11
+ "scripts-ignore": null,
12
+ "tests-scripts-ignore":"init.js",
13
+
14
+ //order scripts
15
+ "order": null
16
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ //configure game settings
3
+ "width": 500,
4
+ "height": 400,
5
+ "canvas-id": "game-canvas",
6
+
7
+ //ignore entity scripts
8
+ "entity-ignore": "wait group",
9
+
10
+ "tests-ignore": null,
11
+ "scripts-ignore": null,
12
+
13
+ //ignores scripts on the test page
14
+ "tests-scripts-ignore":"init.js",
15
+
16
+ //this makes all .tmx files last
17
+ "order":".*/.js"
18
+ }
@@ -62,7 +62,7 @@ re.c('hero')
62
62
  .init(function(){
63
63
 
64
64
  //add animations
65
- this.anis = {
65
+ this.animates = {
66
66
  idle:[800, [0, 1], -1],
67
67
  run:[800, [2, 3], 1],
68
68
  jump:[500, [4, 5, 4], 1],
@@ -21,7 +21,7 @@ re.c('coin')
21
21
  this.sfx = re.e('sound coin.sfx');
22
22
 
23
23
  //setup animations to play
24
- this.anis = {
24
+ this.animates = {
25
25
  glow:[1800, [14, 15, 15], -1]
26
26
  };
27
27
 
@@ -14,7 +14,7 @@ re.c('spring')
14
14
  })
15
15
  .init(function(){
16
16
  //add animation, can also send a string instead of an array
17
- this.anis = {
17
+ this.animates = {
18
18
  bounce:[300, [13, 12], 1]
19
19
  };
20
20
 
@@ -3,10 +3,10 @@ module('hero', lazy('hero'));
3
3
  test('has animations', function(){
4
4
 
5
5
  //these where manually put in
6
- is(hero.anis.idle);
7
- is(hero.anis.run);
8
- is(hero.anis.jump);
9
- is(hero.anis.ladder);
6
+ is(hero.animates.idle);
7
+ is(hero.animates.run);
8
+ is(hero.animates.jump);
9
+ is(hero.animates.ladder);
10
10
 
11
11
  });
12
12
 
@@ -30,6 +30,6 @@ hero.health = 100;
30
30
  */
31
31
 
32
32
  //re.ready() is DISABLED during testing
33
- addEventListener('load', function(){
33
+ re.listener('load', function(){
34
34
  re.sys.init(re.canvas).start();
35
35
  });
@@ -4,7 +4,7 @@ test('valid', function(){
4
4
 
5
5
  expectEvent(coin, 'update');
6
6
 
7
- is(coin.anis.glow);
7
+ is(coin.animates.glow);
8
8
 
9
9
  });
10
10
 
@@ -0,0 +1,16 @@
1
+ {
2
+ //configure game settings
3
+ "width": 400,
4
+ "height": 300,
5
+ "canvas-id": "game-canvas",
6
+
7
+ //ignore entity scripts
8
+ "entity-ignore": "socket wait group",
9
+
10
+ "tests-ignore": null,
11
+ "scripts-ignore": null,
12
+ "tests-scripts-ignore":"init.js",
13
+
14
+ //order scripts
15
+ "order": null
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ //configure game settings
3
+ "width": 180,
4
+ "height": 180,
5
+ "canvas-id": "game-canvas",
6
+
7
+ //ignore entity scripts
8
+ "entity-ignore": "socket wait group",
9
+
10
+ "tests-ignore": null,
11
+ "scripts-ignore": null,
12
+ "tests-scripts-ignore":"init.js",
13
+
14
+ //order scripts
15
+ "order": "/tile.js$"
16
+ }
@@ -1,4 +1,4 @@
1
- re.level = re.c('level')
1
+ re.c('level')
2
2
  .requires('automap')
3
3
  .statics({
4
4
  get:function(num){
@@ -1,4 +1,4 @@
1
- re.walltile = re.c('walltile')
1
+ re.c('walltile')
2
2
  .statics({
3
3
  factory:function(num){
4
4
  var e = re.e('walltile');
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entityjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-20 00:00:00.000000000 Z
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ! '>='
52
52
  - !ruby/object:Gem::Version
53
- version: 1.3.0
53
+ version: '1.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3.0
61
+ version: '1.0'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: coffee-script
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +123,22 @@ dependencies:
123
123
  - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: cssmin
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
126
142
  description: HTML5 Javascript game engine, quickly create robust, flexible and reusable
127
143
  games.
128
144
  email:
@@ -133,7 +149,6 @@ extensions: []
133
149
  extra_rdoc_files: []
134
150
  files:
135
151
  - .gitignore
136
- - .rspec
137
152
  - Gemfile
138
153
  - README.md
139
154
  - Rakefile
@@ -146,6 +161,8 @@ files:
146
161
  - lib/entityjs/commands/comp.rb
147
162
  - lib/entityjs/commands/eunit.rb
148
163
  - lib/entityjs/commands/font.rb
164
+ - lib/entityjs/commands/html.rb
165
+ - lib/entityjs/commands/min.rb
149
166
  - lib/entityjs/commands/new.rb
150
167
  - lib/entityjs/commands/release.rb
151
168
  - lib/entityjs/commands/server.rb
@@ -160,13 +177,14 @@ files:
160
177
  - lib/entityjs/parsers/parse_xml.rb
161
178
  - lib/entityjs/version.rb
162
179
  - license.txt
180
+ - public/favicon.ico
163
181
  - public/play.html
164
182
  - public/qunit/qunit.css
165
183
  - public/qunit/qunit.entity.js
166
184
  - public/qunit/qunit.input.js
167
185
  - public/qunit/qunit.js
168
186
  - public/qunit/qunit.mock.js
169
- - public/tests.html
187
+ - public/test.html
170
188
  - spec/javascripts/helpers/accept.png
171
189
  - spec/javascripts/helpers/alligator.mp3
172
190
  - spec/javascripts/helpers/alligator.ogg
@@ -194,6 +212,7 @@ files:
194
212
  - spec/javascripts/src/display/animate_spec.js
195
213
  - spec/javascripts/src/display/circle_spec.js
196
214
  - spec/javascripts/src/display/draw_spec.js
215
+ - spec/javascripts/src/display/el_spec.js
197
216
  - spec/javascripts/src/display/group_spec.js
198
217
  - spec/javascripts/src/display/image_spec.js
199
218
  - spec/javascripts/src/display/imgtext_spec.js
@@ -224,6 +243,7 @@ files:
224
243
  - spec/javascripts/src/pattern/pathfind_spec.js
225
244
  - spec/javascripts/src/pattern/timestep_spec.js
226
245
  - spec/javascripts/src/save/storage_spec.js
246
+ - spec/javascripts/src/util/clone_spec.js
227
247
  - spec/javascripts/src/util/log_spec.js
228
248
  - spec/javascripts/src/util/polyfill_spec.js
229
249
  - spec/javascripts/src/util/scene_spec.js
@@ -238,6 +258,8 @@ files:
238
258
  - spec/lib/entityjs/commands/comp_spec.rb
239
259
  - spec/lib/entityjs/commands/eunit_spec.rb
240
260
  - spec/lib/entityjs/commands/font_spec.rb
261
+ - spec/lib/entityjs/commands/html_spec.rb
262
+ - spec/lib/entityjs/commands/min_spec.rb
241
263
  - spec/lib/entityjs/commands/new_spec.rb
242
264
  - spec/lib/entityjs/commands/release_spec.rb
243
265
  - spec/lib/entityjs/commands/templates_spec.rb
@@ -261,11 +283,11 @@ files:
261
283
  - src/cycle/tween.js
262
284
  - src/cycle/update.js
263
285
  - src/cycle/wait.js
264
- - src/cycle/worker.js
265
286
  - src/display/align.js
266
287
  - src/display/animate.js
267
288
  - src/display/circle.js
268
289
  - src/display/draw.js
290
+ - src/display/el.js
269
291
  - src/display/group.js
270
292
  - src/display/image.js
271
293
  - src/display/imgtext.js
@@ -300,40 +322,31 @@ files:
300
322
  - src/pattern/timestep.js
301
323
  - src/save/database.js
302
324
  - src/save/storage.js
325
+ - src/util/clone.js
303
326
  - src/util/log.js
304
327
  - src/util/polyfill.js
305
328
  - src/util/scene.js
306
329
  - src/util/sheet.js
307
330
  - src/util/support.js
308
- - templates/animation/assets/images/hero.png
309
- - templates/animation/scripts/init.js
310
- - templates/animation/scripts/scenes/home.js
311
- - templates/animation/scripts/scenes/load.js
312
- - templates/animation/tests/init_test.js
313
- - templates/animation/tests/scenes/home_test.js
314
- - templates/animation/tests/scenes/load_test.js
315
- - templates/arrow_keys/assets/images/arrow.png
316
- - templates/arrow_keys/config.yml
317
- - templates/arrow_keys/readme.txt
318
- - templates/arrow_keys/scripts/displays/arrow.js
319
- - templates/arrow_keys/scripts/init.js
320
- - templates/arrow_keys/scripts/inputs/controls.js
321
- - templates/arrow_keys/scripts/scenes/home.js
322
- - templates/arrow_keys/scripts/scenes/load.js
323
- - templates/arrow_keys/tests/displays/arrow_test.js
324
- - templates/arrow_keys/tests/init_test.js
325
- - templates/arrow_keys/tests/inputs/controls_test.js
326
- - templates/arrow_keys/tests/scenes/home_test.js
327
- - templates/arrow_keys/tests/scenes/load_test.js
328
- - templates/circle/config.yml
331
+ - templates/circle/game.json
329
332
  - templates/circle/readme.txt
333
+ - templates/circle/scripts/displays/circle.js
330
334
  - templates/circle/scripts/init.js
331
335
  - templates/circle/scripts/scenes/home.js
332
336
  - templates/circle/scripts/scenes/load.js
333
337
  - templates/circle/tests/scenes/home_test.js
334
338
  - templates/circle/tests/scenes/load_test.js
339
+ - templates/dom/game.json
340
+ - templates/dom/scripts/els/btn.js
341
+ - templates/dom/scripts/els/contain.js
342
+ - templates/dom/scripts/els/header.js
343
+ - templates/dom/scripts/init.js
344
+ - templates/dom/scripts/scenes/home.js
345
+ - templates/dom/scripts/scenes/load.js
346
+ - templates/dom/tests/scenes/home_test.js
347
+ - templates/dom/tests/scenes/load_test.js
335
348
  - templates/isometric/assets/images/isotiles.png
336
- - templates/isometric/config.yml
349
+ - templates/isometric/game.json
337
350
  - templates/isometric/readme.txt
338
351
  - templates/isometric/scripts/displays/cursor.js
339
352
  - templates/isometric/scripts/displays/isoimage.js
@@ -349,7 +362,7 @@ files:
349
362
  - templates/platform/assets/images/tiles.png
350
363
  - templates/platform/assets/sounds/coin.mp3
351
364
  - templates/platform/assets/sounds/coin.ogg
352
- - templates/platform/config.yml
365
+ - templates/platform/game.json
353
366
  - templates/platform/readme.txt
354
367
  - templates/platform/scripts/displays/bit.js
355
368
  - templates/platform/scripts/displays/hero.js
@@ -378,7 +391,7 @@ files:
378
391
  - templates/platform/tests/scenes/play_test.js
379
392
  - templates/platform/tests/utils/counter_test.js
380
393
  - templates/platform/tests/utils/level_test.js
381
- - templates/pong/config.yml
394
+ - templates/pong/game.json
382
395
  - templates/pong/readme.txt
383
396
  - templates/pong/scripts/controls/ai.js
384
397
  - templates/pong/scripts/controls/arena.js
@@ -403,7 +416,7 @@ files:
403
416
  - templates/pong/tests/scenes/game_test.js
404
417
  - templates/pong/tests/scenes/home_test.js
405
418
  - templates/pong/tests/scenes/over_test.js
406
- - templates/tiltmaze/config.yml
419
+ - templates/tiltmaze/game.json
407
420
  - templates/tiltmaze/readme.txt
408
421
  - templates/tiltmaze/scripts/displays/ball.js
409
422
  - templates/tiltmaze/scripts/displays/target.js