From 6815c5909a390f07cb1a5655105034d86e2e250c Mon Sep 17 00:00:00 2001 From: photonstorm Date: Thu, 6 Mar 2014 09:48:42 +0000 Subject: [PATCH] New tiles and new map test. --- examples/assets/physics/ninja-test-level.json | 39 +++++ examples/assets/physics/ninja-test-level.tmx | 11 ++ .../{ninja-tiles.png => ninja-tiles128.png} | Bin examples/assets/physics/ninja-tiles32.png | Bin 0 -> 6085 bytes examples/assets/physics/ninja-tiles64.png | Bin 0 -> 12145 bytes examples/wip/ninja3.js | 108 +++++++++++++ .../{ => 128px}/0.png | Bin .../{ => 128px}/1.png | Bin .../{ => 128px}/10.png | Bin .../{ => 128px}/11.png | Bin .../{ => 128px}/12.png | Bin .../{ => 128px}/13.png | Bin .../{ => 128px}/14.png | Bin .../{ => 128px}/15.png | Bin .../{ => 128px}/16.png | Bin .../{ => 128px}/17.png | Bin .../{ => 128px}/18.png | Bin .../{ => 128px}/19.png | Bin .../{ => 128px}/2.png | Bin .../{ => 128px}/20.png | Bin .../{ => 128px}/21.png | Bin .../{ => 128px}/22.png | Bin .../{ => 128px}/23.png | Bin .../{ => 128px}/24.png | Bin .../{ => 128px}/25.png | Bin .../{ => 128px}/26.png | Bin .../{ => 128px}/27.png | Bin .../{ => 128px}/28.png | Bin .../{ => 128px}/29.png | Bin .../{ => 128px}/3.png | Bin .../{ => 128px}/30.png | Bin .../{ => 128px}/31.png | Bin .../{ => 128px}/32.png | Bin .../{ => 128px}/33.png | Bin .../{ => 128px}/4.png | Bin .../{ => 128px}/5.png | Bin .../{ => 128px}/6.png | Bin .../{ => 128px}/7.png | Bin .../{ => 128px}/8.png | Bin .../{ => 128px}/9.png | Bin .../ninja-tiles128.png} | Bin .../Ninja Physics Debug Tiles/32px/0.png | Bin 0 -> 14904 bytes .../Ninja Physics Debug Tiles/32px/1.png | Bin 0 -> 14549 bytes .../Ninja Physics Debug Tiles/32px/10.png | Bin 0 -> 14776 bytes .../Ninja Physics Debug Tiles/32px/11.png | Bin 0 -> 14791 bytes .../Ninja Physics Debug Tiles/32px/12.png | Bin 0 -> 14772 bytes .../Ninja Physics Debug Tiles/32px/13.png | Bin 0 -> 14777 bytes .../Ninja Physics Debug Tiles/32px/14.png | Bin 0 -> 14647 bytes .../Ninja Physics Debug Tiles/32px/15.png | Bin 0 -> 14631 bytes .../Ninja Physics Debug Tiles/32px/16.png | Bin 0 -> 14647 bytes .../Ninja Physics Debug Tiles/32px/17.png | Bin 0 -> 14632 bytes .../Ninja Physics Debug Tiles/32px/18.png | Bin 0 -> 14647 bytes .../Ninja Physics Debug Tiles/32px/19.png | Bin 0 -> 14624 bytes .../Ninja Physics Debug Tiles/32px/2.png | Bin 0 -> 14670 bytes .../Ninja Physics Debug Tiles/32px/20.png | Bin 0 -> 14637 bytes .../Ninja Physics Debug Tiles/32px/21.png | Bin 0 -> 14628 bytes .../Ninja Physics Debug Tiles/32px/22.png | Bin 0 -> 14687 bytes .../Ninja Physics Debug Tiles/32px/23.png | Bin 0 -> 14669 bytes .../Ninja Physics Debug Tiles/32px/24.png | Bin 0 -> 14685 bytes .../Ninja Physics Debug Tiles/32px/25.png | Bin 0 -> 14680 bytes .../Ninja Physics Debug Tiles/32px/26.png | Bin 0 -> 14671 bytes .../Ninja Physics Debug Tiles/32px/27.png | Bin 0 -> 14666 bytes .../Ninja Physics Debug Tiles/32px/28.png | Bin 0 -> 14683 bytes .../Ninja Physics Debug Tiles/32px/29.png | Bin 0 -> 14658 bytes .../Ninja Physics Debug Tiles/32px/3.png | Bin 0 -> 14651 bytes .../Ninja Physics Debug Tiles/32px/30.png | Bin 0 -> 14564 bytes .../Ninja Physics Debug Tiles/32px/31.png | Bin 0 -> 14563 bytes .../Ninja Physics Debug Tiles/32px/32.png | Bin 0 -> 14562 bytes .../Ninja Physics Debug Tiles/32px/33.png | Bin 0 -> 14570 bytes .../Ninja Physics Debug Tiles/32px/4.png | Bin 0 -> 14683 bytes .../Ninja Physics Debug Tiles/32px/5.png | Bin 0 -> 14662 bytes .../Ninja Physics Debug Tiles/32px/6.png | Bin 0 -> 14851 bytes .../Ninja Physics Debug Tiles/32px/7.png | Bin 0 -> 14824 bytes .../Ninja Physics Debug Tiles/32px/8.png | Bin 0 -> 14855 bytes .../Ninja Physics Debug Tiles/32px/9.png | Bin 0 -> 14859 bytes .../32px/ninja-tiles32.png | Bin 0 -> 6085 bytes .../Ninja Physics Debug Tiles/64px/0.png | Bin 0 -> 14958 bytes .../Ninja Physics Debug Tiles/64px/1.png | Bin 0 -> 14612 bytes .../Ninja Physics Debug Tiles/64px/10.png | Bin 0 -> 15144 bytes .../Ninja Physics Debug Tiles/64px/11.png | Bin 0 -> 15136 bytes .../Ninja Physics Debug Tiles/64px/12.png | Bin 0 -> 15134 bytes .../Ninja Physics Debug Tiles/64px/13.png | Bin 0 -> 15103 bytes .../Ninja Physics Debug Tiles/64px/14.png | Bin 0 -> 14780 bytes .../Ninja Physics Debug Tiles/64px/15.png | Bin 0 -> 14738 bytes .../Ninja Physics Debug Tiles/64px/16.png | Bin 0 -> 14771 bytes .../Ninja Physics Debug Tiles/64px/17.png | Bin 0 -> 14745 bytes .../Ninja Physics Debug Tiles/64px/18.png | Bin 0 -> 14770 bytes .../Ninja Physics Debug Tiles/64px/19.png | Bin 0 -> 14745 bytes .../Ninja Physics Debug Tiles/64px/2.png | Bin 0 -> 14828 bytes .../Ninja Physics Debug Tiles/64px/20.png | Bin 0 -> 14762 bytes .../Ninja Physics Debug Tiles/64px/21.png | Bin 0 -> 14736 bytes .../Ninja Physics Debug Tiles/64px/22.png | Bin 0 -> 14809 bytes .../Ninja Physics Debug Tiles/64px/23.png | Bin 0 -> 14795 bytes .../Ninja Physics Debug Tiles/64px/24.png | Bin 0 -> 14847 bytes .../Ninja Physics Debug Tiles/64px/25.png | Bin 0 -> 14838 bytes .../Ninja Physics Debug Tiles/64px/26.png | Bin 0 -> 14836 bytes .../Ninja Physics Debug Tiles/64px/27.png | Bin 0 -> 14816 bytes .../Ninja Physics Debug Tiles/64px/28.png | Bin 0 -> 14850 bytes .../Ninja Physics Debug Tiles/64px/29.png | Bin 0 -> 14793 bytes .../Ninja Physics Debug Tiles/64px/3.png | Bin 0 -> 14803 bytes .../Ninja Physics Debug Tiles/64px/30.png | Bin 0 -> 14618 bytes .../Ninja Physics Debug Tiles/64px/31.png | Bin 0 -> 14621 bytes .../Ninja Physics Debug Tiles/64px/32.png | Bin 0 -> 14617 bytes .../Ninja Physics Debug Tiles/64px/33.png | Bin 0 -> 14627 bytes .../Ninja Physics Debug Tiles/64px/4.png | Bin 0 -> 14844 bytes .../Ninja Physics Debug Tiles/64px/5.png | Bin 0 -> 14813 bytes .../Ninja Physics Debug Tiles/64px/6.png | Bin 0 -> 15271 bytes .../Ninja Physics Debug Tiles/64px/7.png | Bin 0 -> 15206 bytes .../Ninja Physics Debug Tiles/64px/8.png | Bin 0 -> 15274 bytes .../Ninja Physics Debug Tiles/64px/9.png | Bin 0 -> 15229 bytes .../64px/ninja-tiles64.png | Bin 0 -> 12145 bytes src/physics/Physics.js | 9 +- src/physics/ninja/AABB.js | 7 +- src/physics/ninja/Body.js | 55 +++++-- src/physics/ninja/Circle.js | 118 ++++++++++----- src/physics/ninja/Tile.js | 143 +++++++++++++----- src/physics/ninja/World.js | 34 ++++- 117 files changed, 429 insertions(+), 95 deletions(-) create mode 100644 examples/assets/physics/ninja-test-level.json create mode 100644 examples/assets/physics/ninja-test-level.tmx rename examples/assets/physics/{ninja-tiles.png => ninja-tiles128.png} (100%) create mode 100644 examples/assets/physics/ninja-tiles32.png create mode 100644 examples/assets/physics/ninja-tiles64.png create mode 100644 examples/wip/ninja3.js rename resources/Ninja Physics Debug Tiles/{ => 128px}/0.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/1.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/10.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/11.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/12.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/13.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/14.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/15.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/16.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/17.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/18.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/19.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/2.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/20.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/21.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/22.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/23.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/24.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/25.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/26.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/27.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/28.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/29.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/3.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/30.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/31.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/32.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/33.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/4.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/5.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/6.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/7.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/8.png (100%) rename resources/Ninja Physics Debug Tiles/{ => 128px}/9.png (100%) rename resources/Ninja Physics Debug Tiles/{ninja-tiles.png => 128px/ninja-tiles128.png} (100%) create mode 100644 resources/Ninja Physics Debug Tiles/32px/0.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/1.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/10.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/11.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/12.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/13.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/14.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/15.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/16.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/17.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/18.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/19.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/2.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/20.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/21.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/22.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/23.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/24.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/25.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/26.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/27.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/28.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/29.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/3.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/30.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/31.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/32.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/33.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/4.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/5.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/6.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/7.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/8.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/9.png create mode 100644 resources/Ninja Physics Debug Tiles/32px/ninja-tiles32.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/0.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/1.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/10.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/11.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/12.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/13.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/14.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/15.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/16.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/17.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/18.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/19.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/2.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/20.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/21.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/22.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/23.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/24.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/25.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/26.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/27.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/28.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/29.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/3.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/30.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/31.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/32.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/33.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/4.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/5.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/6.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/7.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/8.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/9.png create mode 100644 resources/Ninja Physics Debug Tiles/64px/ninja-tiles64.png diff --git a/examples/assets/physics/ninja-test-level.json b/examples/assets/physics/ninja-test-level.json new file mode 100644 index 00000000..4297c3f5 --- /dev/null +++ b/examples/assets/physics/ninja-test-level.json @@ -0,0 +1,39 @@ +{ "height":19, + "layers":[ + { + "data":[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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 11, 0, 0, 0, 0, 0, 12, 2, 2, 2, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 19, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 2, 2, 11, 0, 0, 0, 12, 2, 2, 2, 2, 2, 2, 11, 0, 0, 0, 0, 0, 0, 0, 12, 2, 2, 2, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 2, 2, 2, 2, 2, 11, 0, 13, 2, 2, 2, 2, 2, 2, 14, 0, 0, 0, 0, 0, 0, 0, 13, 2, 2, 2, 14, 0, 0, 0, 0, 0, 12, 1, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 2, 2, 2, 2, 2, 2, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 2, 14, 0, 0, 0, 0, 0, 12, 2, 1, 5, 11, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 10, 1, 1, 9, 2, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 2, 2, 2, 2, 2, 2, 14, 0, 0, 0, 0, 0, 8, 34, 0, 0, 0, 0, 32, 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 31, 31, 31, 34, 0, 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, 34, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 34, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 11, 0, 0, 0, 0, 31, 31, 0, 0, 31, 31, 0, 0, 0, 0, 9, 34, 0, 0, 0, 0, 0, 0, 0, 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, 2, 2, 23, 0, 0, 0, 5, 6, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 2, 2, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 28, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 16, 20, 2, 2, 7, 8, 11, 0, 0, 12, 11, 0, 1, 12, 2, 2, 2, 2, 2, 30, 1, 0, 0, 4, 3, 0, 4, 3, 0, 0, 16, 20, 11, 12, 2, 2, 2, 11, 12, 2, 2, 2, 11, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], + "height":19, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":50, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + + }, + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "image":"..\/..\/..\/resources\/Ninja Physics Debug Tiles\/32px\/ninja-tiles32.png", + "imageheight":96, + "imagewidth":512, + "margin":0, + "name":"ninja-tiles32", + "properties": + { + + }, + "spacing":0, + "tileheight":32, + "tilewidth":32 + }], + "tilewidth":32, + "version":1, + "width":50 +} \ No newline at end of file diff --git a/examples/assets/physics/ninja-test-level.tmx b/examples/assets/physics/ninja-test-level.tmx new file mode 100644 index 00000000..b6674a90 --- /dev/null +++ b/examples/assets/physics/ninja-test-level.tmx @@ -0,0 +1,11 @@ + + + + + + + + AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAATAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAACAAAAAgAAAAsAAAAAAAAAAAAAAAAAAAAMAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAgAAAAIAAAACAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAALAAAAAAAAAA0AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAACAAAAAgAAAAIAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAACAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAABAAAABQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAACgAAAAEAAAABAAAACQAAAAIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAhAAAAIQAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB8AAAAfAAAAHwAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACIAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAHwAAAAAAAAAAAAAAHwAAAB8AAAAAAAAAAAAAAAAAAAAAAAAACQAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAACAAAAFwAAAAAAAAAAAAAAAAAAAAUAAAAGAAAAAAAAAAAAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAHwAAAB8AAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAIAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAHwAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAQAAAAAAAAAcAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAAAAAAQAAAAFAAAAAIAAAACAAAABwAAAAgAAAALAAAAAAAAAAAAAAAMAAAACwAAAAAAAAABAAAADAAAAAIAAAACAAAAAgAAAAIAAAACAAAAHgAAAAEAAAAAAAAAAAAAAAQAAAADAAAAAAAAAAQAAAADAAAAAAAAAAAAAAAQAAAAFAAAAAsAAAAMAAAAAgAAAAIAAAACAAAACwAAAAwAAAACAAAAAgAAAAIAAAALAAAADAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAA= + + + diff --git a/examples/assets/physics/ninja-tiles.png b/examples/assets/physics/ninja-tiles128.png similarity index 100% rename from examples/assets/physics/ninja-tiles.png rename to examples/assets/physics/ninja-tiles128.png diff --git a/examples/assets/physics/ninja-tiles32.png b/examples/assets/physics/ninja-tiles32.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f8639cda0babe15db5b58d1283bf2d6f636684 GIT binary patch literal 6085 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 Q%{?R|JyUF{j`Owu0oeoWcK`qY literal 0 HcmV?d00001 diff --git a/examples/assets/physics/ninja-tiles64.png b/examples/assets/physics/ninja-tiles64.png new file mode 100644 index 0000000000000000000000000000000000000000..a99c246f9623c58315db3815b2fe29fb326ee1dc GIT binary patch literal 12145 zcmbt)cUTi!_wFQA0TDz%QKWbfrG+LAeS} zDM+^hDdKa{= z000y`g}@o57)l&sg9)6~UW+eqKs2SYTkFM4*fW(#IJlrKqR~laz)@ zON)aDao=E1zZ*f~p1!AkdC)@mI{3JF`MDrH`S(5Eut)m)sR)8h|4G5a>$h7^-=Ady z3kD0i;RTbDklat{7tp}q{|@!=_>K1UyMp+`_dh!JH3{}Yz^)*Ck^VjoVB?%l?T7MG z()2;x@I(5TAd&9Bs%U%@>4)^aiS**v)Z{;7?&9f)4D>zwH{8HLNzc>Q?}n!XLQhLY z5Og5n;^L^JC?l^eBdad2eoj(DN=jQsK}KFdTU$d*QcFu(@|=#wud!N42Y(NQr{Ax! zj(^4~{MWJjO7QRkBWodiTmle|IzC7b{=YL;a{2FE&iz+^KgT-$cP?`Obu0`d1KaQG zzxw>^5-6Vi)8DEE-~84+!V?s`52)%NiqseY5S`J}Qa1@2A*3~Ppj=gJ$x2zd%+FGdFG0V{byJ00@ITh-$W>D zxB%L0wr3t*xDb3Z;=%Vjv>HFs3jLi=e^7bi`y=>6C<=$|?R-8K+N)SLI4-kT^@T7z zwcEHXRyGuTsLQFee+GGk7&A1>YvK5C=z|xFJJ+bI7wP=%4k~7-wHPmakyar^v-xDY zFZO8D!56~tH!QK@oTFC>%6B5p_HYx6pOaJ+*$LuBy^>0lf;H`V;(GQnY|2=&>yv8O z#GSY*8+|w*S13%gnPvGPF|3>_tq?MA3(p+jhm-J-HH`x0h1?3V(7J0JMN+K6X2q9np`PkmAO8%djdTPhR4wO)lW$ zUiLCOfMMj{IR$m6M~{WOV=##7rbG79S^JkBsKxYl2O=0Bu@_qAU&g7IAK6+DQTeFA~IbLE0nG z*0c%|3?_;@qWw&m^*pW}eJ+zXtx}T#sZ4&Va;?M3^`>16NCeVG7 z#wVU3R!CCNA^=1DY9sE!CV@QJ>HPm?}D zUm`tJENWYW>%LSMxAm%>{1OV7Kp83f&&v}bZ-!pi`^05lEd0TZWwFRQFB&ix_yhJ! zB#e~q)KdX*w1wAVS+o2zw0bQRwB22&4%N^C!7+dY!%=36H~U2O3FD**K03Vby>xf; zPiu|mPG64vRTwtXl=@_E+YFZwbm7Df^V&Q%R)r4&#DEmR=HTNQcW#c~Dk-$Y;rZRy z8l$c#6ltr`@Pphy1T_`2X?1{=fw+spR}yE*A@O7>L4MthX0`P{1U)9{nkT<0dm1gu z^ThbnZWc{<#{beDE%jyG=Jes`v$}6a5jWCBw>yJ5XJM`JT0fP+zZ2MkP`rEa0`^`9 zk%kud85b>+E0<9FLu)&-$DL?!yw2hO_kNAmo?ZKL!5yQPx$^RE^LmlK5Z{^H2aCnsg2EXm$0M1YlAbNi6LKb zH_~x&B5>>l8CvmyJI&wA8GOa)_OLy5s$%ts(p)M{n`huzBG(_PuNeEpHodGL^61{p zsWq*X`AD(*6Y%K=#j=^9W!grVpL>)*d7k&{C0gEZEG* z-!Xe*dt*>s@_wzDA@f$%hnw7g`Xr+{Fc=urT;Rs=?Y_672Enl85Hfv1;sf<8)PZ zmKMr$7VIj6u{Ki?2hdRwe-O2T#l~`hom+19usqArPvxDfHr&c@x2F-q@_(3EDriRx zEL~?4L)52FJk^Ci_c?B)mkY!QVZ`97(nwqSkkmtW2@_;d&J1c7An$#!C{#T zr}<{+4ylBg3DG4l6JP0mviF8`Bt-=zGoDSi;c?-m(KDkRt#Z**C}p%(M_bQY$WwRWF7zSBvOSvCnOeKV zZ;?t0_n9!h3Dp^o#7m{dtlX%Pk`q+q4)svfa0}N9GV=1y^GQ0(myHz3SzKqNu@E}cE z<7|RGjyp7p+3AfcFVox2$y;UD4dV`VL5j^P-yrI&!UGcc!rJAs2~oQ7%avb$lrB}M zZABh8AAGUVM!^%v*WZRV(6?Q8WcuiiC!KDLS$4DK;L}!J(ho{-TSZMSZ&;{apx{#K z#|IA?I+cBQzS_bu{AnfivsAI6yAf^i*DaVoMa&0Y7lhodN>kW-yKaah-Av?m)O$p- zJKWxQ-I)G~5Eb1>qFylXAC+;9b1G8fs=MZXf8!&n6xGCBI%cp&6(5(0t>`@@4EMKy znl!&29Py(Q6|b20Nw0dxpb`t5(E^mam{0S$SYFY8TwDCE@x-$}2|+-)-Y#WF2y;^> zpFSpYrNZeh58Tru2r1{#n`=x0Q*Ji2BUO;&dkF_1?`{6p;342SMfr_?Qh_5^N zNCHeP^uD{%>c!%5?<5&ub;`%)`Anz6rq>sP+HWq3vNmO{VTEsEQngz8>3{6&|)S#4mw6men024_(vQg-lYvZDG6PJf6d{H30kYeMs5SIXtKqre{EeWNq9#M z%zRem@M>q~kw~(&*R_%Bil}8PYh<#nHw4NLD`#4<;%2+Q-Uem-X5p+TjAgtl40f@2V>72QXkuXUv z+MBpT4h4bb;?5-$0v5l0KLLKiZfXG16XDEbS>Z zcCUicf~`h&xnQXi+dvEQ690gZD~y|%{ATtqb&rop13j=hyWpi#+FQ1Dd&+F|N($V; z>UbJxhOF=lqXdQR!`#aCnVzmh){++_egN)kn8@+bh-7!-Q}(iLmd9FzUNJ&bI6~!J zu}p^ucm4(wBj$?tJ#Op6I|27eB*a0AMCu0pR2gol+kQDeMDuMOuP5uMiP^2St9PC& zh8qqubk6hxT2=Ug_j~I>G1-VB9s1eG_uCsVymh>EZeJnOo#~A#kXYo1`g~Bb_&7hr!s?58>XR+x0o}0piQHy zZv7bI>%twxrG!CL=5sSfSYi*ZwrP2ASv6}x81v4N1)U~f>Si*F;*f`b76o3+HRRhf zH+*Zf<#P#RXvr})^lN?*wLX)$QfJeakXa4xy!4yj)uyd?LwoPnY|t=bF1|=GAyb3V zxhIroYwgR7g6M5Lx8qLWmX{_2&C=;186=sO+)C?M<_u|QliSqxBtGozbf||uZt+op zi61HO%#!s^#L#*fYx3Jkdu-9Yk2*Z=LpA6}-3~0TM>08-(W(49-~=LzwbS(`+CFRv zoDZRW?X&VYaj`8RmbrK}U-R@`a)zfchJIA=S+CS%*A8KC$fqknt6$R_-<@>xfK%zY z(C-lv?Jx9o6C}Jo#`_B%sn1xGX)t7U8~9>W=h1s0g6H|s!Hdq}LM|k*D}I;jqX|}` zz!MdWwqg9e)*Ej|4)S;}I^<8cy=9-J__TVUQRm+)!Lf5eS?qj;oJ29r+>=nFot&YM zK{S=e`M|BL*O)v+CEvN!Y_xM;O`wa{#rW7NZk>ZZcX^=BNdoJCkJ)VcctWPv`Jr}a z*ZJ+pliO~e_Kt^5w1p3*OiVS>qZ4E|bZs@^`U@OtnF%d;6y>v z(um#X@-Op)u#YoBt?CfdPF#rWQ*m|q9Ru;DyMqBDfJZVF7P!ewanN#!P?6Y@(z#ku zhMsTnogOO_QliT8@B3zJ z1-3Pg_SVn~N%&aaq4*W|x3p>&@+chx^2de4@b7#!goRF?D*R`E60!MW?qFyEb>?{E z^#fj>$0qxZbaYl*jG1ROKh290yC|R;@(kNd*)@TdnpgFx=!S)T2}(gceNw+oKF3N~ zG66p6n(v;g+w5noy)e8vm3D3VsG?;=lR+uDlC*tu%q%qiOCu|h^j$*)&|B`7WGsKm zHY82+09B`9h!IAJhwZhma&ThOhxjQ^&n}I9xkG>T1jy40#WF&{z5Jt%a|(05cNw4cm0O1e zP-|32W&9VH(*8EZ69UG!o3PJ-73R(?4#Km-`<5l8xb04-;PI5RJm6RB1NS;Ovfn!R?-t@%uVoHQShY{dWz0*=!8Dv9f|Cm$NpeE zmBf6Eq1V+Ls%%1#R6a*35w9Pns~Xa1=6q5Nt4-tkyl4SuG?84Hy#iV3a<=twfTJ7c z2)I>N$OTxy`=bgKQ4>nXxcyrXgcpwp9=UBMO3hDM_lV766EMzf!af03x;(043p`7R zN|r0??N$ZBnhtWuuZhiXR=+;wcO^rjbW^hM9q;CDSc$N{8LtMT3IB?-AW&+Ye5}va zW*wQLgqpUya2x!_^-;koiaSQ-__p5%o>jd5i7JMfyL+{tRCO62pI><`0c0IpL04K@goVkNgQ9PW%NTF@ z&{It4FtZ|?H{VkOn)kNvliE$chn!Brq$>)9up7`nUL{J84RC-Ts;rZmOiVL5_ky%P z2Y@XpY{HiTH^VH9H)^4krgHLfgi;^W@EdOBj`J0d`lam8w|Y{a%|zrgg*f;h%?OVY zy)v7Ui8MDS4QVny=3jYj1<7ghr|KkkjHn5mNUh?oF~0oz%dCY`HN&gUAk^h@k!-$8 zuXviob60YPF5Amb#(t{49KU`_6aPg!@)|cZYM(d!^8*gb(xkr4mcKAcN=!}keT23c z@AKXRHycCS(J-wG*|Dl2yFn$eiP-dB(}fl~d!yY=W!8cNx317q(rMvgPex)#cyC=~MvS8klH|61bi1*?Z`WYVc$4-_!YYr;PQa?~p~9v?qHx$JCO zOTm^KvqAD5Snsm}$9khD;y+Zw+h@8^Uk2y2`qXk%ui`D=T>5Ox_*i-+@Gl@sUBUX) zBN{^CP;*7rH->}j5T#l8>Y%4I>(+z8(5d)K9kYkX8J%k?^-`WIxQnQ4RT)*MJPF#1 zygPMyfJr?8fAp^@b?P_|uY!N>fTIB}Znoyz>sci;>z>=XZTO^wF1<9R!-AEUDLB`cPD>7LO_hcsp}CWH$7sfjS`8nkAdl4b z7K?@p1SIZ7M2nb$gQZuhgn+E70@5uwFvDcd=b6&FL_)R1ny~#;R;;}tpBV4KD?rZCX_u-Whk3hRo z36s?)ZDd1qdvvp5jb}!Me56sYnFnWb1e6YalNo5&|Gw$qhf>mj8<0YxhN9M9jQTK= zoXr*Is%#)RiaZ;elR{{(W(NZ|OUMN4tz?3P9Ebel2;Gg=1%`EL)o-qTqZ#GSQA3AI zXl(lABG8-QD*SF|^e~Wq@S|mw6$O80OE&s}-o`QDs<&ot&;>$R+VitpTqQ*{6T7^o zn!Td>ZH8RWIGkQ5d~8VKfL5@O4CpY(cafX%v#HmdoXzn*zMq4w;`?Fu(q3?tkNL;Qq zvxwooIUshmtr6F8h`=Xwe)Q`httNJfpvv2-Qp=XdDs5%L8XV???F092ef^eaGa~Oz z>WFMQn8~&i-hzG3Mo*zjjz=#hz-^*+PNp#`4&NM=x8jN@*)r!Wn6Tk|nw8?a)xS&Q zBZxg7dyA~`arb0hO^IpmOUmFbJ({KW;CA#YjwrNvKRPPxho-%e56L`Hk7uGSK1pf~ zoEp`VE4cS`@(uH8%g^#pP{#$)8<`x=brX{uu@dp?M<5x=gfnsiVW_mBs7Wo+wES`w zamQGP>6cX&gltCsx}_9~S`TOSkv&8^(nPgv=$^JO{ad(K8T0AU95w|7uD=%I+t#*= zY%;=N=9$7R%T^_ieCrdqV%t8QGmNKtk5Z*NEQ&ijvg!cYslh0Pa`%A5On%AlgnW3w zwV^8Cmd5xzs9A50oht0-`tf0_TfJ+m*r9NCa*=PZ3A&keFXqRfPytPb{?#6t z)3jo=lwgVA;eIIxK)_CLMR-dkb$Y70$q8Gf1mUM$;N7_v!ItAc!4NYf@?>ICqWTfk z-Aij|_S)!saErVHRnx#U9eNexRF7sdPZd~LG)Q|4u>ZP#`e@o6iDQ$iCXf$~)DB$~ zzWW?J5|i1Kz{bCFyXFI1+=e&o5$3m>%{wBPTmsG+f?<<9y2B2o4bNZ#Hs?lVku(~N zN0~^B5U83l9cICa>cR{}Vw(T-M;04Bo3UMql~mW4h% z61c^e1BIX4lkUxi|7Kg)C4lFksIVfK%UJLy;r(bJM(kgh9PlR8FF(ou^7ASBPpqzg z#acN3n@=3#Uwk%?{pQ?W`iFDe9@Br!O9vJCn_3A0yi@fv_ZN-ozv)~25BmK7lRgF^ zFcGb@pUnU_BXCr9d`o?AJfAJ~@YCrg+jmD9Wya~AhkuR8Dn&05AtYqFZtLme9>jJp zw+8YT5vc3y7;z@_R&Ys?FKITmJw5Q=S345vjp~qCWkt*s&I?jJ6fFOK=1j>A2S|o3 zp+i3n{d}@{IrP?E!^fM%%@O?l(oLqZXu$+rDPu;LMwyl$<%u?{$;1Ikg{?}iO>z`7 z2K>@nQ&gQeYS-@pYd-qia%FpQ6ZR$>?m>JE#i5PcC+hYH*B2|pc3+Fl@+}?-rtpfj zoWO{ZzezV`_Qe{9kIabbPf#-jabqiS6Q`K!x44&yU_9wKvcSEAu>Rc+CGB`zW@92t zyD!U0%&g>AhvVDwCnbyorW>q1mcdMnn2!xV9b?l1INzf(N+r~A_FY|dVVH? zDIj1)fPJuWetA^fu+O!lWsXz~z|X9Xx=L4^M7~PLzYp$Al6#e$@lv+FJD!pevl=+RbO<-DWdl{^WEyNVRUdFP?*Z{DP+rbZndM@ zXo)1_ICNk0OUGqf1J*mfVqwCMML4KOJZCMMW-)+da?}Izvm)pNupK#?e>YkRY#!LR z4%$ZgpX|YRKP3`(8EpGIilW?#6hCmu8En@2zU7~073VzoTVamW6Q_2#*nlskY@e!j z_kH~{+QOvsCqAAtjENC&`$vJ8Ukwuzar%kxU}>bK#Z-vVZhAC=@-yPZ>}!K7NoHTM zAl`w24+?DpKQQgd*@7ziDbagOJU{XD_m%;Ooj9nppQ-ID4Wlh|{~x^Yqc&#@P@Ei< z(b#PcrjrY%PXler%F_7<|ET|)C>*fp0!0o^7{{L?x4Ufl;vf8b_f>X&ARqC+r(gUt zeaGq@dNx3(lub?cll-6hNWLr&WIDKMu%E#tZY%(8y1?awbr;TwD!Pmh_*bC03?h8M zP0|ufO?aw}+b$l`;z2#6xWc7dbdY$X&y};u*Hb-T5RT_IrdtUKwQ`v52tQCtRd-HN zpCU@$v;^jw10{I+R0QRQb9PXHJ0WF5X17&`ELK*xRoMajS#_c?_dHEJ`q>nYmV%!X zU;Em^g88Oom%HxFIS=%%hslEX+PlSWzM9-R#6t}S0LfTG=n3gDN@m2US}PkZfXM=P z18{%ZKLFq&4ld*S2l)O005=418{0o%_7C6`03ZDOhyNE8Q^GOoz;v_fN|9j^men#!76^wkIi?&;>U?qb=i8>dD}rYR*Xc!gjQ-p|>Y+Hb2bd6a_wnkTt3X z=U?C79qudo;TVNb#2tT?&Tw8G-ApWrQDZDo7rI9dll3X~tojsXSzn7Uu z9*i|3r%VUEAH`w-Okx>g$*O9GIOw^(zVjZnz#d)aZ0qwdbmyA+#`9y}cTs!C`VWW~ zZJk@2J1Ac(%on2IjW6A43?P?&OfT~p?e)aLmdTfV!{kPL&$LL`*FT;N0?YO|=Jl6+ ze^LDUc(QP0^K1`q#X&VHqE|Rl8E2&CD=V6YcK2LzbL`$O@^!NHE8|$}ax>ui+W3>}fq)!~efbC$)IF>;VX}DuOv)mP`wit8$^i5hc`1zpe%v198 z6G#9N6};@sJO9cGvisHp1L*YKwSw7HImMkzZbhccIn;d+55Z=YwY?bJtLoQl{7n4D zWg{aIn@4c2BXe868K&wjyAg1*#@KVCxPUE=8~}KnPDu-t*wB)jelV+;vO*3KH$y&i zYky^WsCrU3{pflbuk)oqj#ox}>oQ~(a(+AB<(Y8Lc;H5$5%TEBkM$SZ=duRFPx(R9 z!wm<-oq{hXk==NQE$jkoQP)V z73HehyJ`>!V9Y#HQy{9J=(#v>z)d>~qAdeI2t{a=Sr??XB5A~?!lC>CAOb&M<&V&- zs=AG^N$Oi@T1ebXqNlcx0$tTuK>Gkjy=7^z@{kk@!Fy*7F?xNm;)jA2mxsRrXQeLc z)jG|$a087u+#+@%4ZN3dFs2{uW%y0js_koreCvUW%k^#>$QS#4O41{C8%`4wN4QJY z-rjpA@no#fHt(C!1#>_doZvT!@;sh(E>;G{-?p-QE@NG4Q1y3hL*@k!QscvQTC^^t zJ?oF5&)?aeZopoozSPSNv%NwTJWZ%|(_PkI(>Em@n4jEjM2c0au6I4B_{yW}P3C7R}lX zt@Y5@@{7aygRm0~rf2tTUW=}AZZ>+(PZI|gq65ZL{D}iRu&;YUZs>sXJp&62Afb)8 z!tz&(IURadH4=NHH=`*1lxwu!96rz z05>Zy+Kn&im+^J>p*!(ehfFgSHz#1t#)sV8Fb;JDZ{1WQX+j+vJgzr zjQSnWt^6fdp0s*d!(8Qg)KcF9>cyk{r;lyxP`2aW z8?fDbM#S1ne&?@u$`+pI#Ucn`s+b!a>PjJL6%ThdebS7xg+G~9z4x%%#2gR*c2`R6 zBg6KkRMm#*ZQ%x3Bhm#2Lza&BP8vKLdqp(g97BK2I+X2wpsIO3b)lS^*sf3QIUg7n zdi~3kQZ6<2$9^IG;#89eg^|LK8vMRK^(YFo^&;g|)Eanx&c?ba&F6B0lRDZHpCWI$ z{F*-PrJhgPmTlEvn?+8wdc;rNLH*HVAC|JNJeaPQa8Lu6{)|%_k;IKV0#$prXD3K9W6L@U(yynBoC7F_n@1?rzz( ze>BWi&NKP7@Sd1w%2RS-V08oDC*<3*+4Z2+n`h;_x05RPHmpLFbA&34u*-$$E)Tce z`-@8VWx#CQHD%<}9)GHa8=kWI)-BTY(XGBawRo{G7gv-|?o)Uuk&6-m@+6lt4X0`i zr&#jt&k`G57{mg`>4#akHa0c&)6}y2AQQo=(GUQm5_Ccm`2X3^09yD63lG^7+(B6q rXaat)m%OJ#ZR?C30s!q5G?WD}amSDMzq7pyMgjD+4Ydk2>>~ab*Um>N literal 0 HcmV?d00001 diff --git a/examples/wip/ninja3.js b/examples/wip/ninja3.js new file mode 100644 index 00000000..06a3fa48 --- /dev/null +++ b/examples/wip/ninja3.js @@ -0,0 +1,108 @@ + +var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render }); +// var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render }); + +function preload() { + + game.load.spritesheet('ninja-tiles', 'assets/physics/ninja-tiles32.png', 32, 32, 34); + game.load.json('level', 'assets/physics/ninja-test-level.json'); + game.load.image('ball', 'assets/sprites/shinyball.png'); + game.load.image('sky', 'assets/skies/sky2.png'); + +} + +var sprite1; +var tiles; +var cursors; + + +function create() { + + var sky = game.add.image(0, 0, 'sky'); + sky.fixedToCamera = true; + + // Activate the Ninja physics system + game.physics.startSystem(Phaser.Physics.NINJA); + + sprite1 = game.add.sprite(100, 0, 'ball'); + + // Enable the physics body for the Ninja physics system + game.physics.ninja.enableCircle(sprite1, sprite1.width / 2); + + // A little more bounce + sprite1.body.bounce = 0.5; + + var layer = game.cache.getJSON('level').layers[0]; + var i = 0; + var data = layer.data; + var width = layer.width; + var height = layer.height; + + // Resize the world to match + game.world.setBounds(0, 0, width * 32, height * 32); + + tiles = game.add.group(); + + var tile; + + for (var y = 0; y < height; y++) + { + for (var x = 0; x < width; x++) + { + if (data[i] > 0) + { + tile = tiles.create(x * 32, y * 32, 'ninja-tiles', data[i] - 1); + game.physics.ninja.enableTile(tile, tile.frame); + } + + i++; + } + } + + cursors = game.input.keyboard.createCursorKeys(); + + game.camera.follow(sprite1); + +} + +function update() { + + game.physics.ninja.collide(sprite1, tiles); + + // sprite1.body.setZeroVelocity(); + + if (cursors.left.isDown) + { + sprite1.body.moveLeft(20); + } + else if (cursors.right.isDown) + { + sprite1.body.moveRight(20); + } + + if (cursors.up.isDown) + { + sprite1.body.moveUp(20); + } + else if (cursors.down.isDown) + { + sprite1.body.moveUp(20); + } + +} + +function render() { + + // game.debug.text(sprite1.body.shape.velocity.x, 32, 32); + // game.debug.text(sprite1.body.shape.velocity.y, 32, 64); + // game.debug.text(game.math.radToDeg(sprite1.body.angle), 32, 96); + + // tile1.render(game.context, 'ninja-tiles'); + // tile2.render(game.context, 'ninja-tiles'); + + // game.debug.geom(sprite1.body, 'rgba(0,255,0,0.4)', true, 1); + + // game.debug.geom(tile1, 'rgba(0,255,0,0.4)', true, 1); + // game.debug.geom(tile1, 'rgba(0,255,0,0.4)', true, 1); + +} diff --git a/resources/Ninja Physics Debug Tiles/0.png b/resources/Ninja Physics Debug Tiles/128px/0.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/0.png rename to resources/Ninja Physics Debug Tiles/128px/0.png diff --git a/resources/Ninja Physics Debug Tiles/1.png b/resources/Ninja Physics Debug Tiles/128px/1.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/1.png rename to resources/Ninja Physics Debug Tiles/128px/1.png diff --git a/resources/Ninja Physics Debug Tiles/10.png b/resources/Ninja Physics Debug Tiles/128px/10.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/10.png rename to resources/Ninja Physics Debug Tiles/128px/10.png diff --git a/resources/Ninja Physics Debug Tiles/11.png b/resources/Ninja Physics Debug Tiles/128px/11.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/11.png rename to resources/Ninja Physics Debug Tiles/128px/11.png diff --git a/resources/Ninja Physics Debug Tiles/12.png b/resources/Ninja Physics Debug Tiles/128px/12.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/12.png rename to resources/Ninja Physics Debug Tiles/128px/12.png diff --git a/resources/Ninja Physics Debug Tiles/13.png b/resources/Ninja Physics Debug Tiles/128px/13.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/13.png rename to resources/Ninja Physics Debug Tiles/128px/13.png diff --git a/resources/Ninja Physics Debug Tiles/14.png b/resources/Ninja Physics Debug Tiles/128px/14.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/14.png rename to resources/Ninja Physics Debug Tiles/128px/14.png diff --git a/resources/Ninja Physics Debug Tiles/15.png b/resources/Ninja Physics Debug Tiles/128px/15.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/15.png rename to resources/Ninja Physics Debug Tiles/128px/15.png diff --git a/resources/Ninja Physics Debug Tiles/16.png b/resources/Ninja Physics Debug Tiles/128px/16.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/16.png rename to resources/Ninja Physics Debug Tiles/128px/16.png diff --git a/resources/Ninja Physics Debug Tiles/17.png b/resources/Ninja Physics Debug Tiles/128px/17.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/17.png rename to resources/Ninja Physics Debug Tiles/128px/17.png diff --git a/resources/Ninja Physics Debug Tiles/18.png b/resources/Ninja Physics Debug Tiles/128px/18.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/18.png rename to resources/Ninja Physics Debug Tiles/128px/18.png diff --git a/resources/Ninja Physics Debug Tiles/19.png b/resources/Ninja Physics Debug Tiles/128px/19.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/19.png rename to resources/Ninja Physics Debug Tiles/128px/19.png diff --git a/resources/Ninja Physics Debug Tiles/2.png b/resources/Ninja Physics Debug Tiles/128px/2.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/2.png rename to resources/Ninja Physics Debug Tiles/128px/2.png diff --git a/resources/Ninja Physics Debug Tiles/20.png b/resources/Ninja Physics Debug Tiles/128px/20.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/20.png rename to resources/Ninja Physics Debug Tiles/128px/20.png diff --git a/resources/Ninja Physics Debug Tiles/21.png b/resources/Ninja Physics Debug Tiles/128px/21.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/21.png rename to resources/Ninja Physics Debug Tiles/128px/21.png diff --git a/resources/Ninja Physics Debug Tiles/22.png b/resources/Ninja Physics Debug Tiles/128px/22.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/22.png rename to resources/Ninja Physics Debug Tiles/128px/22.png diff --git a/resources/Ninja Physics Debug Tiles/23.png b/resources/Ninja Physics Debug Tiles/128px/23.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/23.png rename to resources/Ninja Physics Debug Tiles/128px/23.png diff --git a/resources/Ninja Physics Debug Tiles/24.png b/resources/Ninja Physics Debug Tiles/128px/24.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/24.png rename to resources/Ninja Physics Debug Tiles/128px/24.png diff --git a/resources/Ninja Physics Debug Tiles/25.png b/resources/Ninja Physics Debug Tiles/128px/25.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/25.png rename to resources/Ninja Physics Debug Tiles/128px/25.png diff --git a/resources/Ninja Physics Debug Tiles/26.png b/resources/Ninja Physics Debug Tiles/128px/26.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/26.png rename to resources/Ninja Physics Debug Tiles/128px/26.png diff --git a/resources/Ninja Physics Debug Tiles/27.png b/resources/Ninja Physics Debug Tiles/128px/27.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/27.png rename to resources/Ninja Physics Debug Tiles/128px/27.png diff --git a/resources/Ninja Physics Debug Tiles/28.png b/resources/Ninja Physics Debug Tiles/128px/28.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/28.png rename to resources/Ninja Physics Debug Tiles/128px/28.png diff --git a/resources/Ninja Physics Debug Tiles/29.png b/resources/Ninja Physics Debug Tiles/128px/29.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/29.png rename to resources/Ninja Physics Debug Tiles/128px/29.png diff --git a/resources/Ninja Physics Debug Tiles/3.png b/resources/Ninja Physics Debug Tiles/128px/3.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/3.png rename to resources/Ninja Physics Debug Tiles/128px/3.png diff --git a/resources/Ninja Physics Debug Tiles/30.png b/resources/Ninja Physics Debug Tiles/128px/30.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/30.png rename to resources/Ninja Physics Debug Tiles/128px/30.png diff --git a/resources/Ninja Physics Debug Tiles/31.png b/resources/Ninja Physics Debug Tiles/128px/31.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/31.png rename to resources/Ninja Physics Debug Tiles/128px/31.png diff --git a/resources/Ninja Physics Debug Tiles/32.png b/resources/Ninja Physics Debug Tiles/128px/32.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/32.png rename to resources/Ninja Physics Debug Tiles/128px/32.png diff --git a/resources/Ninja Physics Debug Tiles/33.png b/resources/Ninja Physics Debug Tiles/128px/33.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/33.png rename to resources/Ninja Physics Debug Tiles/128px/33.png diff --git a/resources/Ninja Physics Debug Tiles/4.png b/resources/Ninja Physics Debug Tiles/128px/4.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/4.png rename to resources/Ninja Physics Debug Tiles/128px/4.png diff --git a/resources/Ninja Physics Debug Tiles/5.png b/resources/Ninja Physics Debug Tiles/128px/5.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/5.png rename to resources/Ninja Physics Debug Tiles/128px/5.png diff --git a/resources/Ninja Physics Debug Tiles/6.png b/resources/Ninja Physics Debug Tiles/128px/6.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/6.png rename to resources/Ninja Physics Debug Tiles/128px/6.png diff --git a/resources/Ninja Physics Debug Tiles/7.png b/resources/Ninja Physics Debug Tiles/128px/7.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/7.png rename to resources/Ninja Physics Debug Tiles/128px/7.png diff --git a/resources/Ninja Physics Debug Tiles/8.png b/resources/Ninja Physics Debug Tiles/128px/8.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/8.png rename to resources/Ninja Physics Debug Tiles/128px/8.png diff --git a/resources/Ninja Physics Debug Tiles/9.png b/resources/Ninja Physics Debug Tiles/128px/9.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/9.png rename to resources/Ninja Physics Debug Tiles/128px/9.png diff --git a/resources/Ninja Physics Debug Tiles/ninja-tiles.png b/resources/Ninja Physics Debug Tiles/128px/ninja-tiles128.png similarity index 100% rename from resources/Ninja Physics Debug Tiles/ninja-tiles.png rename to resources/Ninja Physics Debug Tiles/128px/ninja-tiles128.png diff --git a/resources/Ninja Physics Debug Tiles/32px/0.png b/resources/Ninja Physics Debug Tiles/32px/0.png new file mode 100644 index 0000000000000000000000000000000000000000..7d174b9fed44d9c267d6fcf6b013ffb2c0e70049 GIT binary patch literal 14904 zcmeI3O>E;t6vt;-39*GeaR4D9Sy>?gBJo$8#+H++o3x}7DOH=*ws6>W>`7uZv5oCC zX-*ZKfEylA0Gqt+=U)B`&>k)eREqzSYqV>$~Z2u^zCqwNmEN-h@- zG`rGy4ZPVvPLQ%A6#22?@nS*X*O;2kt8Ih9N@oxr;`z*04j8n~J@^#IxNt2g7 zv^#59L_KS5cxYV2wd~IMD!Z&HLTU%1texyU%Lolx z0w`Nd(QImaP7oT7iTCPNGTDM{Tbd#l%O$a`G89~tH`R7L zwMF|<>bh$VqoPSuTO_qq+$>8{skB|(EsElfTvilyTfD2Nsvwl*^3F6Zur8;?zI}$R zUEdwV``I)607u)TlAG?6*#VF)dc4szdwHtq{mAR@XURIhACg>8x~;V{Ez&Xr>pb%e z!+ffl8Ybx9^lfs48-2hkTEYK=c|{6v6C@iMreOzUubhMNqj^UM=@EWsv31(fx39S{ zv*jVjmu8sJ5nT-ovbZ`QA8FIJ`AsE`XrM%}Vok4CzDxG?V~l#($?orTgC<#G!Fqq- zcEXY2SwapEu6O)Mux?R&)EVPmVBLm34kqGjK)cd{othk`b4JsPjv0S^aUe z=ljE0zbOgiB2O0NO0BRvYdyKz3cIt`x$~Z5hgB&ZEz=BK(LbXE#u0e{!_|_a$coNq zo3oAsdyMtTTd+)R>e4cvOljC21uOV&oZ+pFIRF7SU`+ zKIULPqsN>WrelLZ8q}EKq9TF8Ps4>GuMFa&5 z7oj z3(}y*3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YRqs^5kUdN z1!+)YhKq^_3K%X(gBmkjR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{FkFxZHD?!$Ng12s__&j0`b literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/1.png b/resources/Ninja Physics Debug Tiles/32px/1.png new file mode 100644 index 0000000000000000000000000000000000000000..521f07a1f5f72dd22c5fc5a3e3f6267ba07142e5 GIT binary patch literal 14549 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 BD~A98 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/12.png b/resources/Ninja Physics Debug Tiles/32px/12.png new file mode 100644 index 0000000000000000000000000000000000000000..797d249bf9c998b410becb0e9cfb6601a72d9b3c GIT binary patch literal 14772 zcmeI3Uu;uV9LLZ8uwZq9j4&i5UOOOLw7q}&XYEZ_80(-zieq$aGpO9%o^Cg^yW7a7ywtD671Le1M5XujasFUItZ=lXdI~l@T^S7C3zdvnL#+D#M;c)j~+8KN~q1; z=Lm3tcn2I-{9_5YX>3DK9@{3nL*|uUlP4{r1W~9l!EitVrn`9=B z4{CBkiR+3QV~o7gpqkX%%x0rd{>t4~G@dUM({k((MK&$PS>DRAr8T{CJ3^2{TGpurN8^y~ zfts33$gp!ex|ODKcdskq!sHZXGI}bG9j28EHlrtN%PfWL40+JKiX90k>1raVsu6E? zm37Y`WI8&S<~}7BQd3%shb>hXrn-;_`Xn8C(NeTqIGcrY2051~2C~%{^!l>~_Ht4%;0T$qqS-Q;;3J zlXD7ow>yI_5WwxTQu|anY3z(#>d-x=#_Y3FKb=s}sU}4*jWPOrEm0=TtWthOLu+vq zTcc>DX3nimaHP0(rX!+c&Y!rH(4euq+RQWCD}P|+&m+T=*`=Z+8z+}nHWoh&dDx=X z!m#qroK5+^6PV49*(=vb4Z~Q49hA+I5mfeTYFJN63D`b_mIGl+XA>4XN;7*{<9v@O z#rU(W#j`TAPG`@e$2hh`v;xqOqzrl9!_I0eRL<)AjhT!jGx}D6Ll^pfLs!mLatg#Gv+eR*6d-h2|WftuhZeMIXrA>bE%_SNyA9LPeHp@GuEOF zRmyluJIWddDjBhkoH099*cWzYCbO;RaR5Duu=z)k;z`ag|N9&i?&v-z#?#RvI1OS< zaS;*W0*VW#L5wLbA|hNsap5$GF~vnhgbOGxoCYzbxQK{w0mX&WAjT9I5fLt+xNsW8 znBpQL!UYr;PJar$LM9?9MMQ)PC@!1^F}^DN;7e17l(QAKr7`mUO9*LK!69`E%vHoiD9 z{{93rIj#pq*W{6h>lY;FAH22n@Ke((9=md7#p&1gzdFL7Rk!wRS%3NPyxLouXHNCy z^c!^-cU3RAaQ4xwyQ+l)H?!WyYviwj})weAJ_WkPVV<4nA+&tkrbn~U(Re90c$9G=)>hrG1 zibV_F`{|!+u=CDH?Qiq;ep&OvkyDGEpT0Hq@;e)Aya(WA_cy)_t~5?#(R}rof~`yR&O2u4=1Y@?f?J) literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/13.png b/resources/Ninja Physics Debug Tiles/32px/13.png new file mode 100644 index 0000000000000000000000000000000000000000..960c3b60d3b37658572b98a8f3aa77812d528818 GIT binary patch literal 14777 zcmeI3Z)_7~9LJwI1vf*)Fe0FkOF`lS?Op$FJ=@}3H@0cn*eZ0y;BI$Mw}bZX>|JSB z-yjg<5~C4BK^QME3I-A4pM*c^W}^544VoBGAp$YMpavx%2}Xm@wO#wHYk7j<<#XBA z-=63D{r#T%Jb!v`Zn$gN(rLAGY5@S#+S`KN=#w#j@1BDG>Y2<{^iiX=_38lJGsFC? z0&nb`1wi8zIUF$}p(l7zjoSoC?T5B>TtjLAd`r@rAg+Z5(+>w^#c%oJ=%|H}CBJ2* zJH&;wW;iIfWfHI_vn(uT){0)qvLsOJOYi<8Px~#|ygZ7{X4b-FCB|C6 zrO7PFL_%Fmvzma6+vc{4oWssEcx`sK%WJnUW*nT|$=W&A;kDZBysLq?dzk!X3Dly< zmyn`-cd#{I4*lo13>t>UvurArvZb6hH8H^2y6PsOprv|Pbv_T+5YrI4E;AG%k*IROPjO@vi77Rar# zu5pA+b2IbsN?DQAlwR*+OV!1xE+&FO!GHm@6kS%%Y2`d&u90^*(9bH&pA(hXL#iZ4 zhsxRAyt6TH$3&%ev|%K{5J(Ad8J0p4`KX$R3r0YW3j>hVlmQ=GY{Zm>6~s5IF*Sik z1OrYVTdo;%Wmgs7uIPrKh_F2vKn*romUvgA%h})P@>pG*fHp4YlB`~r2(41ILG(IY zUXS2x%%Tg0aQmdxK~+qeJ0qW3y2aF(eNyVqgp5u#A%( zx8mKU)}r%CMK%JCe6^Bh%w?Xfxx=6bJqEyl$L)5yeQarSsiR9y!&oFJqg|_;Yte}+ zWj&=GWsSX+j95qBn42o>3p+cLxmNTzfSyFy!lTHL`1lN;=*YVV~UH22p3RXI1OSar$LM&$d zL2vY>(5rh%e(C}A+8-mfb%y}RJOse{jR0J~fj%z+kmLaPwGRM(8vysKo1gxo6@V&h zd$1{-{_*ouor^Xtulw@yiIM0d>e#b?dLq5)sVla;x_|4|_di(LAOEFubN9)*2bM38 z>+0+37yZ0y+dJ(W&u`y;W#67lheu9d59~R6IN9Sq+SKym>f^Jf@9C&vp93Flj`&-u z&$L!Q6|CO*{2kJ@`Bn3@2Wt*izXJBvPd_*Nbk|FJcSZiW+Bf~tk;4~`)Nz?bhty;D z&E3{vZ5pk5d&bKfz?$J74(#~%>X>%)>rahyBbUD#svGMTFTDlUTf;k6D$15`9>4eZ zXzQvAqx&;=9o#j$WA1`$cl6DBb7Wy^CgU6)9^HBIwVF}>$C5)Ip9ZgQpSJki?zZzQ)}LK{?9}(iV+&6n@jKud5A&0D>V*??&Nf}( gX5RQ#{mTwKqrtIFcfR|b`Eq4@%d+5mkM(W%4~xktWdHyG literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/14.png b/resources/Ninja Physics Debug Tiles/32px/14.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5123c0a131606a5fc99e7ff3aea0bb725fe9b4 GIT binary patch literal 14647 zcmeI3U5Fc16vuC=RJ)}j-9n}GVN6?DtI2#M*-fTNYP;EO7R5C@xe%M6lkO$tEY+q?bw` zZ%8(0@BRPJx%0apnU`6b7(cwVZ)YDuXzN%mJ4wDd@AJ?m^4D2d_>+8XwsJELLRQG}g&!&T~G!`U4qS<92f zj%w?ctD6SrKIts$KSnrl~wG z;|exhhxo*kfj(43(>GJSP&AjB$4;?z#oV@?0HkuXXm@w z<8n0Kume%2oopCQaTQtuC<7@pRh~8NisEMUiZX|J%a}{?twx}1t{{2XESokN5za(Y ze79!c@>i8SW;m{5sCX=!Aq^2-*9aM`BokUJ9E}NLxEPP&a6%9g;W*jNQc{s(qB7{C z%jcneUFxi4)%6eI<&UEng>?%Jn}sLE|nG4JGnBdxA?J^;@etV!)iJkHvRuj zV2~f!d)KIyu+d`&1zCJSZ@**Cx;4ed2j|FgplsSu_cogK!&9FT1PW*d1q^I7)+7d0Gt_&$D{ES-`U*hn9%FEJe}3au64Y%7$uc_PiIG0<4i9j z=x7*&sRBRP{!9j~8Ps4>GuMFa&57oj3(}y*3>Os<6fj(n1~q25 zsED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YRqs^5kUdN1!+)YhKq^_3K%X(gBmkj zR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{FkFxZHNGpZzShHi*dR~z)ySiJx1>9l$zy+< znw!icw6GVUQ?DTO_Z{;6D?(KPq2G=pB%eiShxz79-;5IN2V>cTh58S-u70ug&|}*- zeYbIG>5V5pJN5SO7rsrL?!P`WQ__Fh^YD!auIt6(`PBzYpYFZ7`Gqg}i*J2@?)}@b zr#G&>uRnh2>kZfT4Lve_IC46ACVu|L=F>-R9^JWZ<*y5|n?G+mv*`Z2_~Y`*iW14K z?mD|uO1$>o;_KsIeYAY#-THubJMznxD@RA~9QybZWyhZ4a~Dq@Sl&Ol`p1j62VT9r fE1KKY|IanFWA{Ego!q{k3>%G&jAuVQbbRqY)9U1T literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/15.png b/resources/Ninja Physics Debug Tiles/32px/15.png new file mode 100644 index 0000000000000000000000000000000000000000..9905a28d7e53e052a19f9fcb6f8c556da9ec2cf9 GIT binary patch literal 14631 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 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/17.png b/resources/Ninja Physics Debug Tiles/32px/17.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3554ea4e34a28c2b6d3cff2249f93ca5c12b98 GIT binary patch literal 14632 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 HOE3NhdE?sN literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/2.png b/resources/Ninja Physics Debug Tiles/32px/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c37f2f98553bbeea5c26fd9df8810bc9a3b8cf78 GIT binary patch literal 14670 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 WpU+PJutWxnCJr6VeevSl>Hh$8TicTW literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/21.png b/resources/Ninja Physics Debug Tiles/32px/21.png new file mode 100644 index 0000000000000000000000000000000000000000..502d751d94874ccc890142864cb37c1a85205e55 GIT binary patch literal 14628 zcmeI3Pi)&%9LL|*E%Xl^hiPIUAz7KqI%$sW{Eu-mO4F?YQcC}@76i<-Us|h)ZESZ* zs~rjhBsfk&st^-!P4JohHAe$)1LGd{)!^^4|CR zd(WTudoQ{8t=X9?qr(pmBZNjv)5SUR&iSvw2>I`BZT(H&hV1EO7om~U{_7Ze_r0?S zWh2JIlDAZTTGp&uOx3Lw9Bb5UqDDx$)UZ`;9edmgUNy{o^v}<~h;oLWk6ulc#j-t# z*No{c2hVTKENENnT27B%Dhw+PnIx!TPvsi5s_Dv&d^E@_lh|(-qFf;H*7MN`e?V@j zJj+d54(3v^6t9VKiOb|-QYx8~q>Ef!loEm@3h^8-NpdnHOKGloMGM0uQXIV^&lN8> zha;cz(KXMrWkIOd>#=$wW;v^Zl*{D=F)qa8JW=rOrs=5--gM7}Ne=TAv8y?T?HQKI z`FYh9Ys1S&qy9jxt9f5FyETyMHrWx1LPNC$DJBZNOuE+c*c(nYn3}E$xQc7o^jzYT zdiv}&%d^}ytIv?F?!E()H7S={WA~hIt=4mB*PFUd5HykYbh-jJ$>hn8%7_S-xJz`QV3T_A@?dzI#~5AXTh?ng|NzI4-s;clic`K z!_=+1dqEMp)$OHjC&ES5!v#``NnT9wVtPT$%JDe)dmi{hQJ1}J=|*L0OzgmxoPwkk-Tw5pavW`qj~Md;NGTtQXI zCDZj(Q^TcVfi%PnLzi`&R2W@^VxV(=hdWC;Zu4dnb0z7I<92`bmcO%A4y%b zv<-h}G*jz$nHt!Sq<+RR$f>4QfySTx-44+s&5@y|4VTp7Ca6(TslmB5k6-C*J?y9& z!TDpWj*I=>m5&~7uhxOpI*)u$uuElC^G~jV<`+NK6``ZGJ*}3rX*2%s0*3j4z5f{X zHEj0TL1C6a(BJP`6|b&3cw&{517%Bx2|FF#nH9l5->XI^{;;)kRSxU)=qf7yu_coV zAX8EU@{%GPX={%h>X-bLtZoGQOk5-v`FTz9 zjTtT~A}C8Ps4>GuMFa&57oj3(}y*3>Os<6fj(n1~q25sED9|;es@% zF~dbg1O*Hiq(O}tE-E4@V7MR+YJ5jr!|jLrut}citCL6fPJCdVCy)Jc+Vor*p{+55 zwr?Wz&jES=6`>6gq2I0{B<~>fpmpozFE11APN_Jt(D?rM?;ac77SB%oIB;QTWbpCR zvUqdgqWI}2T;$}L*+*~9ynf}Y7yn(~yYU16=I*KF+Ru-C^Wh8g$6p%!YwV|oc2Pv! zKKAYQlcOKKvpxFD?Q!M!$oBjjU*{J0AK1m&^Lx)_@7sGeJGQr&J-Ii(Kf;yvM>%7E zhAd@;c7(mADu|LL7jTgvARGOM8e*DC>*Zu<` C(bI1L literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/22.png b/resources/Ninja Physics Debug Tiles/32px/22.png new file mode 100644 index 0000000000000000000000000000000000000000..2759e11c461a76d52e39f5a90b67b439a0666237 GIT binary patch literal 14687 zcmeI3Z)h839LJy3I=9R^!Qxy6IWso5vE=UZr)`cTvuj#gZEEN`*NL)S?w+)_CU@uE zWl0NSneK(}WQYuzB7^zD$wVB;P~4Eo_Cll}zL5zP#=s%^!omFWLZ7>&$uDWLhsj<( zN89}RJm2r{_uS|ClY4V-W+$KN@%Q-=LOtVS=_&Hbxxeezk-zrh;w|#A!5lkiBed}m z_t%HsJ@ptugX^^E8D}OlAt^>NB&$Xahbl#rs1Zu+shF}dj~ymY5aW@wh#0W16d^jEyMJYNUiTzyd3Z(ob zN?2-Mno5t>%8~z)fjP%9C7v&r%b{{4WLUGj7>~z!A1F+YWE zqhu*~Gwc5#sQDsM_C4e%JLRF-^VHIU3r4{8_%$xdbf^ReeWqk!n!$!fd$cS(% zlHl7l1DCg|q;cJLWL?4I=@e-QX__iUbAvIpKduHNLQW1wa?xl|R`6g@>CfeHBs>s~ ztJp)A$w2#>)M-O0xjUnlTD{BEz`iE+^Oi zom>0xE6uH|9R*>4+prz~4|XqGGo%9gGsY<9F}PVnyeUeKEHS6iEB zWp$mdoyCNEY)NDVkRiz)c`?DSX=_xj>Sx@UER;O`Kv*Cb`Fz zhI7BJIjL~1T1zuP18}N87K_9Zd~0*7Bdb+#VJ5ASU2D5*F+wVNp4N`G z#)F-VprdB2P8ImV_GYr$N*)KulL%jb6ltF1`trZWLF10@ablQ`6@fIUF~dbg1O*Hi zq(O}tE-E4@V7MR+YRqs^5kUdN1!+)YhKq^_3K%X(gBmkjR76m~a6uZ>nBk%#f&zvM z(xAo+7Zni{FkFxZHDIYL5&$MDk3OgxF8K`%y3Z=K>@=B zX;5Q^i;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0m zG^jDdMMVS!3>Tz9jTtT~A}CtFKu3qmCUp__*hl1?JD**J0Nn^B_uemp%iUHS3y@`au* z@!`>*uWZ^`eA@TM_3rHY`0P1k8C;=IeJ~$oqYA|{NV?_y!z6n zu5Hixq`r`E^UAgG(mVdHuP!|?c;5f#E&uHod^c}jdDQ>+p7Yt|m0!;Z51I#-ufBKo z>zSpq$F~3WQ}2ge*LtIW+&C?4UOD~2@v?pV46^SZ`S#?l%iSk;?XbR^c(VV}#L$M% zw)=Pbw)>ww^~t%n`m!$%ZF%jZUDvy(_h)ZhJmSCL`=PhHu(5aYjPLQ4_qKfcka^$x d+k6*&sBhw_-1^V061hDzJ~Ej;xA*X|{{W@c@;Cqh literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/23.png b/resources/Ninja Physics Debug Tiles/32px/23.png new file mode 100644 index 0000000000000000000000000000000000000000..b6af6c9e7953224fded57790d5c9188da31c2529 GIT binary patch literal 14669 zcmeI3PmB{)9LL{+VX;a!#Dn6+NpS@X?acJwZilvj?ZVdBb=@stff$*cdEJh*GvmyZ zc593T5)w`d(MX6f96Ue_gp1*zX2Cy+MiWH>F&>bkKnxx*5n`fmrrq|}Zp#aX?@#A4Mukt(C7*+KjX~gUXm1}9F$dK76)r(lc*6&Y_6HIvJX4lES}T!r2qD33w};hlm4C2 zoRBlqxTuZSEj(SH$Sd`IN?i4CPWciwi6kgvN9Jnfl5R`2q~FUck=SkK{hTLp_9gvW z-GbaqZjwtI7UrVCXh0D{A~zBbiqS}16gP4qK@9Vvz=z@iQIsMhk{IKfhd<>bQNmIS z(o|+!vmE&^=`T8tDe-)@S`AjiLBpEk#dti<3n4xf3J^uWp4T0@7SQdrjUJ~x!kj~?Tqaw2%1QHI_>2z zWBbXitnGF8j#g+7PDduUr|-4nn%2kW_B3qXRA`J)g50Z=wy^9NR^Bj5sm3guTtvvF z)7<)OnDQMa8e7*%#;S^_8oDO5!&7*<(!Qd(J_!@Q}_CHQtDP_|}}lr~C+MXm^^!U?`t zGjMscO3LcCBkKyzW>TafsA;Mcnk~d+MH~qTI4lQZBauj87OUiIR265VN~|y&iFxR9 zIcQ&!I%6mmcV#qFs}GnO*q5Y!+0w|aCYON5z4`|&(Id^0QsbIU=HfhqMvZNacJ00Db6TG{>m$Xj&jn>XlS)8X! zM={}UTN0T8@=BX;5Q^ zi;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0mG^jDd zMMVS!3>Tz9jTtT~A}C8Ps4>GuMFa&57o_ zZ{;tXNjH9FTXkX!_8NhzkcVVfgSbp2X=q4bIYgKhEI;&Uj5U@BSXb2 zdj=!7a?2z2@6r3$Hg5Ukyl=Gl*M&MhxqybQpBY_vdj)##tM%(PoSVBvZU$w?CNgJV H*n99lS-JHX literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/24.png b/resources/Ninja Physics Debug Tiles/32px/24.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fd1d551f5796dbca72ea2d84c227f47310142e GIT binary patch literal 14685 zcmeI3Z)h839LJxgI=gN~m`r6L92pZ$mfT&^q|2FP)~2-`rYrr!+QG1wyC?0jIV|%;%qz6r&uKRil8TZrLPigwh9HQ&x^+hb!PEP0s{xUil=*X=)~T zB#{^L<_KQa#;X>dsZP!+)#FM^4Ia$)r(KC8C}T(F+;T~`B{viF^GYQ4n)x8-OPu4G z;ILPao6k>iBZh^!L^KgmgqX+;rJ`bDFeQrnxtJivc~RhFsfZ{_gF}*-+*rLF`7aY(b{tdU`AVe{t;C~-wZx05REig3d@L3riio|cJF*+m?Y*@mn|X5B zRxHhQG(+dSymG- zWKT#!vTg^Wc01WHs_e+L1W*Q2sESlHtg`H6wX(c~c~f6X^UX$}Y^)$@#3&gS84=FL z(|o69;PO|MG@;v$tSfjTmn98RO;gD}P08^=H5pNHF%c=MgULvtm?%UFu|%YSmhcsrw>TD{BEz`iB*VM`;Ynp^@JZ}fLtqC=W3rN%Xzti@HZM#)O` z&#f7JqP2Ciqon!gk11O=_I6h$xVgO=2Ug=e@;v@7m1M;`xw4A4__3PiTUwjLYB=jQ z?f*_-EkCe#uTfdXdY2tk%i;^V`)#A>RAdVeFOlUy+0wOyt&aB0Y2G{EOIj=bT5Id9 zY_8L-vzYddEs3lEG9=k2FQ)k|ZOzIx{k%7mr4?U46cflrzTe1Ix5Dmr>%yI_u)E#b zbk6CTla1A@wKW5mced6JgBkJ|fV0U&BA!U|?al3uDb2;D`J6^}t?jMFIH}}&+B-TL z7rGfiN8MPPD)5Ev&t$EYJPwd25x(&#(mKhF<$sTZ<{jPR#4sHz0%=fVhKq^_3K%X( zgBmkjR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{FkFxZHDIY zL5&$MDk3OgxF8K`%y3Z=K>@=BX;5Q^i;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9H zpvDXr6%iCLT#yDeX1J(`pn&0mG^jDdMMVS!3>Tz9jTtT~A}C*S5T3VC(!jaT*$ zk=On>Wqdl1P<0gnnH_NVQjB&cYXENzUjW7&mQW#9^is+KTy4XDj(Rj_RlwN`P;7}j~z>$>$5NK{c%_6 z%;bq1(N|MvX4Wp;I`z@w?LB8+x^?+u#C`Dnjn~lWE0@=HKYi@8oo~LkxP59)xPLh` z-+MlMvG-8eMdw2s=upV*xfI^$vBGZPQfMP!h1}l9!yCQtgmP#sypFyM<$AV-*Lz+J zg2;4*Y4v?cL4pdF!t`z T-!A-4ZVpY1PUhZ!W^wI55)|!e literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/25.png b/resources/Ninja Physics Debug Tiles/32px/25.png new file mode 100644 index 0000000000000000000000000000000000000000..5682964f203847218cf6ab33bb15c28b7ca4ccb3 GIT binary patch literal 14680 zcmeI3Uu;uV9LLWl{~VTRApXIGTstM0*xo-~H+pG1M!UI13UidK2noBrJzH;R@4ei6 zOS?wMA_>MAU1DN1h7ezTAQ+7=`at3q)Cc1q2)q~)1s|0}UKj}wgXgwg`)k*7g5mMp zZ0m35e80cnxu5f=_vOAbzUNg>&*mP4kY{W(K0!V?_jlbI^4BhxZ;_A3&CvrkLhCoW zzg_5))6XKbeT|k(IjO{MSvB&0C1a$qzmzwL8lmuD$yC%M*x}N6M$;qSo97q2oR*1r zCxZzgVa9M)8!cOSUwKbbEgw-s8Sh}UCtQ+Af;@H6!M9p+&3VL{ao$xMtevU zwldT5M0})Hj{Fz#W*x_rdA?XI`ilX-Va@PjC=}uaiI*fFQTXgx-BC(D-R`X>SY~mB!`pm517lUqfO7Y zvj=4%P_qM3tDS6^jN&M?1W*Q2WK??=~o4YlCzj9TikhPi2?Nit3(RQPo}iI1}cZS{uWvJ8L%W z|4v{vKd^VMQOsh!!w#xusR%mzZDZOgDi$7^A9j%$eynDXqv}XL(*5+AR zUZ*Q(G3*{&GFbs+NJ@pg80J^BH7Zy2DR(Awg^GSa639iq-^f+7!tPeIaYv6hF-*sbKpNDT;i4jf0)`9H zpvDXr6%iCLT#yDeX1J(`pn&0mG^jDdMMVS!3>Tz9jTtT~A}C8P zs4>GuMFa&57oj3(}y*3>Os<6fj(n1~q25sED9|;es@%@dI)7G+yq*I(eh7NM7C3Hh-y* z*Zw$lbRvOJ`6YzrP9k*YKKc9$p@M+W-%|+5A0zaP@xkFAMu_(3vG`E3boKko=RCWH zo*en}yHl&4@LclzGBtE*?U^mYrn%Tt<;C%?Gef>p_kR0*$NaUux8MBn*RLzGOd*r^**zlhC7rUn3`VShr^xyyh literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/26.png b/resources/Ninja Physics Debug Tiles/32px/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6a305bcee32a7723725209d74ca0d01a77915020 GIT binary patch literal 14671 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 IzdH8*e=Q934*&oF literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/28.png b/resources/Ninja Physics Debug Tiles/32px/28.png new file mode 100644 index 0000000000000000000000000000000000000000..8172f9f7181db21bda586ca606178ac8b44ed474 GIT binary patch literal 14683 zcmeI3U2GIp6vr=U8(9LH*aG2cvPe>*yEC)fZP{^l0lUREvbD5ZY4ri7Gq>%8-I-x# zmfbdfAlgI|6BFYD0X0bcAdnCec~N6DjYh%?n21J$28}_17)>N3J{Y|-v)w(r-Q@VJUsO1s?honLTJ_CKxTw|a^CMf?c}dBH+O@4tgr?q9E4Wh z@BJ=Ahu>I-(B^hMH|~yScSx#Ph$@;niKFF$Mbrq%TgsNA?!_)QiKlfV75?MnPs5z9 zrNX-sSs`on;Te5k&c>s2LpgPBubR}tThbx9ERh5S>?&NjkT)EuoC^DSB@%nhe3vCBF?PgD&>gbYzUGp z=E-13wROwYO@s6DDwAf>O@+f=q3Tt+uYy%AWH=Regd$&7EMANXd^3}#Ry|hH&ig~t zR37JX0UNGEd}33dHDkJ_Gh?~!ro7WTA{G|}gkWB7X>a(%pns&}K^XXuf z4KE_(`ue!8UAm!}C1;b&H>zt>T}y;Bii^`^DRxJMctq&Q37e%@jQl(a{DG*!o;5Xn zYPOlZTS|x(I}kP6$%fGsSD__e>lhmXT>)xyikx5k%BU3%yYD7t3G14RSBzhG^ z!|@pQ(PgvHz9eYZF^)m!{nlli*V+OVq5 zicSB&6By(N_SQ8@GuUXcgMuu+ptavIr`(ca<89MqIZ(EAkg(p-m|5n%^F6QE;}2Tv zXJv7nE}cc$JGLaU0?3dQpS&pZOWJCc1O2!+llh{r?~MuMBHwT1s#sxnqjloeR@mKW ztvSaG-A%_T)f$?C%R5_x!(fy=2Hd}DK?V^}Za{CGwuyVmj6Vw_a+J&her zjT5bmprc|8rV4yv`!gA|lE(q^B*Ir8Md~NHy8Q2OP`jf$oEWBKMIa4o%y3Z=K>@=B zX;5Q^i;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0m zG^jDdMMVS!3>Tz9jTtT~A}C8Ps4>GuMFa&57oaPr_2H-G5(X8EO#GyAR_JKcHt*wHr~XZ{o9v~9d3jt#63#)f}R#pl09@iu%Z zvGeQ-VdwCbf3Af-Tz0WDCyb80{lL)^2SdM}*z|gPZuG+Q->nZlQ_`e`ji3E>_Wacn Zdg^+=CT@MNliV5_>>tXUdSuVR{{Xe(`pEzQ literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/29.png b/resources/Ninja Physics Debug Tiles/32px/29.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa75bacc8309b84265f7acd72fccc00759a2a23 GIT binary patch literal 14658 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 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/30.png b/resources/Ninja Physics Debug Tiles/32px/30.png new file mode 100644 index 0000000000000000000000000000000000000000..6394d7f514196cbc07d97a5cd75004eb05909705 GIT binary patch literal 14564 zcmeI3PiP}m9LL{oweH3(78X%FtivoT7M#qVByBTHveu+)3Z|AevZy(sEIZ+j9vtL!c!9u`CpFM{CWNnP+Fh#=NCGwI})G}*_>9^cS(etGZv z{rzS>?@#73Z*8nUKbLwUg%FxstCTm%nF~LsX32lQ-~W@GPP>(DAEAfOhMyDYgO46Z zXnEGE)q{HV1=VocY29>oak|%bi5em8V$ao$eH?JRc+av6{2!lR=Q+zP@RxH{sp^(+ z)2j46ywzW?8U1}DZ}Jz5DXpiH1Z^DXT(8}-eYIEMqr57K!)B4^B1y1c;8((eT)n!% zl^hRqxpYo2Bt_jBifgOm(?PS52 zdZ5!1Kp9A38fwGw+Imp5+WHcCI5iVvlaZ)pIMYBp>v;9D~ z4ZKz^l7_TpnQGox&dOPNQNT;OA}D577Iw2(7bG*A!x>$crHm1wt5%`?Sn9H4bi$P} zNNwI@YG6N>`bEzoyPDntn(*rHwZw!p$4XT!pUlMrFh|KujrOfA{K{zSQAf*)_8(XG zd>pQ>0)Mo;k_{`_k3vthN>$wmcdnulPJV1^;z;Z8vJ&UOX8qp*jPnEg^cvkJwx_J1 zI7=j$?)RNW(A7P>vPY%^Wl6^gM;+stH8I@ZTh=K4xOH??j^^p{QPje1OC>XaT#_D< zmo@QN+pu!1uZJVq>O}e_MIs0JeIv)f3cJUx+jqCZ?s4nT`I2n~MP*QJtQok%y*1tp zw#Z`uE-vPBnVcq$H;+3utR8OF%NAL+emEC1q*CM=@0e)Zo@N9c17kc?;0HSz$+(p~ z4v;4iF?kdj9pq&C-{)X>NB21~Ovj2q8q}EKq9TF8Ps4>GuMFa&57oj3(}y*3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(O}tE-E4@ zV7MR+YRqs^5kUdN1!+)YhKq^_3K%X(gBmkjR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{ zFkFxZHDPQIvwu6xRK0=Q_6Jm%9;s65)331`F^86>xFKM!;p&g&qHow02{r-N> zpZ6!e_`{v;*OnGvSVRadZEaR}>8B9>K6Qcq^@qcM=*LBO^T0>w(lg=j6X=tZ=Mh@H zVAUHzqxQOLINgkHI!%%pbX}@ONV__4b>oNxLX#X?c1ir}>r+v%%#yfYsAX$zg|w~B zp-1+H+jV1jWE4&DYI#u`s5C*B1iCQjc5GiAl*A~nO5?B@i$Wv`j!NQMSWsxxc7%%K z5uuPNNJdtXg_UAPF64`{d__>Qat_N`tP~|#R`V;WyeuS_SYD)&=9w*Zx4My(qyLq} zb`ZEK#{GUj)6Zob?-0wyVi9K*tSAyyNdB=M=mW|2FULtnd8))WJj)F%#}>l8dei9z zB~c6urB`xaT{kUc`w2Tr5f5}1%b6^mWipM_6F7d` znNu?Do?DpCNv)RFo;lubcV=lnSieCLBuHmE{ra&>@GkM4o@bEt8}wE#&$|1-YKu>;Yxoo*OY4|G-n zC<7@>Lv1-;R}acoS3e}!wGTBsZUoA71*sLM<9KvLq@2_6tY+YfR+YMC`+;s7WUE@H z4H?Ta)qIN-bFyBL^2<7r3^|{dnsh@;E5vLzo5~8^+N%+|S`FIIrLHg`Q}as=5)LTxBC%{KVAoMC*81sWY)z|91l8{J=iHM!!w$IXfuM5((z} zeWw-lb&sqa(&fO|(s9B`$8=^5hv$38n#3QsPR`0`ot~dXEj+eVx&r8s^oYEy;d5={ z%CWu?&Sa+-=~t92z3BHFy%HG5lDj>b6iYBP{46P8qApEVj_Y9jtkOY#vB(D5fpG-kOnj6 zxR{8bfa8KRm@&u2L<9vK7o@?AIW8t5DB!pt4Q9-7F%dxl#|3FHV~&f72nskZNP`)3 zTuekzz;Qtu%$Vb1B7y>r3({c592XN26mVRS1~cZkn24Z&Df6IiL Nt@Z8d7q4Fb;6E75yZ`_I literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/32.png b/resources/Ninja Physics Debug Tiles/32px/32.png new file mode 100644 index 0000000000000000000000000000000000000000..00c9b9590d32dba9bf762d69509faef2db6208fe GIT binary patch literal 14562 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 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/4.png b/resources/Ninja Physics Debug Tiles/32px/4.png new file mode 100644 index 0000000000000000000000000000000000000000..630942984fa5185b8146e105a3816637a7552068 GIT binary patch literal 14683 zcmeI3PmB{)9LFD+UDqWTHvCbM!!U%1$+k1oKP;VeyDn{U*U)8M3KR~yvoo*VVcSlb znWfzllLBiZAsRIp3>pImm1v?D4`b}F%5R*jrj(TpkVE#(SCjZk=~R8Z6zY;#jMqvr?tKhIy_Ib9p% z_XHDSq7cQ?`bgQtJIiB9wLGJSG=3=38!pKtK@QsrSITAcmRuU--Mli1oo0dOT!}q1 z$PYUOxm04Diy9{8g5ID<6@3yn5b{dFKuD7MIiD!`1xXZqA&(@V@)FjUAyVl$3%Xc}1a}NmJ{d!mOEfho-3l z&f*--+ZORjZGDAl!#1pGqeIDhcgMnHP7;ZF?Y861<=U3E?D#=~poX-q(@M@2urPrw zW7br0{2;lN4ejpU*3*s2Y0BjEbR0V_=^boNPu1owh3X82$-T-^6Dzi1CJiGSsjjl| z1%zBQ%5B=C=QX2fJslQW)s3lcB*HPp#u2g<10K=u5jQ8rEwax?e)a)>Rn%fn7@D4* zYiAG2!7VjA5VhLLhS3yTp(TJakU~@Cv|;8HJEG^53>FIcOju|%0%d&#$x$O~m}Epa z;tvb$nt{t*Rq|-wvX#7wM`IDv;MH|a9!LiV(rG2&38e=Do`4dVB2iHE_!XaD^!X)8 zkyIC5A_47-QpXH+*4Y`g)Y^Tf2KGg%cbGak)s!sIIHSMc5^d5fDm9{8WG&8tHA+^h zdv5K-2bxcoxIXu_cogK!&8az-9&Zc5I*|nCl7X74>>uK$1 zYuww(2s&!U>QsR*YkflJc$VPN0H`9t}p)w95n9e0Vjs(SP@8r8Z%r}L{PwR zK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0mG^jDdMMVS!3>Tz9jTtT~A}C8Ps4>GuMFa&57oj3(}y*3>Os<6fj(n1~tAXuHMGWeK=3v=qr*}_s(D5 z|0#Lxk5fk`5(t$yB2+nw(A|H@=kEy3iU?hwL`Z%cp~s9jU;Jtt(SA1?8%~yfzVzd_ z%fAp;ynJP7$CV?ozEvl0qpoLG-rm;t#<|0x_3=%|Pu?nx-Rb`!^V5y5FLs?3QqD)2r4WKh!_`&Gq0lUc39D zwc>-yy7>^d`uVQckDTp(C7$fM#C`P8ofY1SXa32_u3HDX`nlI`RG#>C$-45|c;(E| bYelsCZ2XU#egBZ#MQAiW7W-uDt!SH|~0vAM6m4`1{RArK&j9rDRmP>{sSCc_MuS{aEnGbTl#66M> z4toW;Ty~sGn>Oa6;b=$|B$127!(wzWE{czFk|0KSQQ)O`NEGG4m@E!)^(&a_BT>TE z^72GxU%edpFBvSlt|jw)rBVr3B4N`m@M1h3=LLzEq!3YroO#1lsv*PKSxd5-Cxac; z)-6{z4bID}%$Rd-G8psO|)6#1%R@nTruJDD`K;j!lIl0P&}<#7p@ zvEe$zCwBB%MbkB%qS>Wnqq}QiGAG$=qjtyfmdhPWJMPF)f}oDHqtlt1w=h3}9dpiB z@yJnfD?2;gy{qS&lhcyP>*+dnT-CeSyq=oPUkbGuN|1Y%(>7LI)1ETTQmVGf##a$? z=`=TRP&YKQ;yjYz+ttmfZYIJR#lBqR(?3Acy zQ!{Y+t4ba-99J<^JeEn3hOn+{a!gR8vHT#}v%8}C5RMJzLo9n!2RHL5#gEzW~AN>-|WZcXCZ z*4EXIlJ1{BmSQ{D+g-`v>h@|JSdH_@^Z2_|R#flgN~zxB$6A7KX>AUx;jG*A|2u)T z{J`G5Mx}_2E<31}#TRt&YQ{7oUe~b0=dZd8@cLM*xhbDbaN~0Znrj_2Mpa! zN%d-N&A{cIt+m5ok~{|B)KD}Ui6;2==61)pUd5$cMkl-0@z!F5RPsIT9UYB_x*0)7 z-B_C{@P+NqWUZAv4v;4izVRs1I?0XYf188m9o^={FdZubX;5Q^i;4&e7%oVI8Z%r} zL{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0mG^jDdMMVS!3>Tz9jTtT~ zA}C8Ps4>GuMFa&57oj3(}y*H^tT0e7O%B{=E)Z>?jzdI$1=lH)t|n;bnfosd$;WS z<&Td7zy65+8M`xwMvBLtnf|Un`{7dR>Ys(JFU8*b{>}OIu@@`7z0+T!o#L^4?yi-< z(%YN1?(Mr!h)+CtZTrfJW4$*ne$g{D`^Mt)m*tqGZm!Dhz!^&Ie!1U literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/6.png b/resources/Ninja Physics Debug Tiles/32px/6.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e60c84463a021b8a679526a95cb6bbaa7e2fc GIT binary patch literal 14851 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 T#vYrjy{cJST;@JhSljj=F?LJF literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/9.png b/resources/Ninja Physics Debug Tiles/32px/9.png new file mode 100644 index 0000000000000000000000000000000000000000..58a7bc8b3ae952c86ab56d849ed022e06cdaadc0 GIT binary patch literal 14859 zcmeI3ZERCj7{_n7ImRZ8L|%-{?5-2!t-XC&+wIa7u-)7Y-Ns&IEV6NXd%9iM_SW9J zwHt=v7CtN(W6*$*q46bw%sAwWq9cIv?gvN~38GO^K!inwWKj$s=DBUxo^>rJ7(Skx zZGCpm|NoqGf9E-;_sbout9gD-?o+uGMa`+Ma@505TKUb%hJU5r-U;|IJ5aSrqNuzl zlwTFKZ|F&iD$N!eo8@NbdX^V`TFx!HfHv$4Ks7~K*MtKc-w9;e1=C zB9S}G)$5c2>1JmgZ5M-pHfc>7UT4tLmNKp0R8pqbuc8e)y^+!D7(R{JHH^YftEVS^1?L2$FY-dJiW@mMq_Q0mecEhQxy z7jFg{-eA!I-euC47|juMPA6)gk=h~hUCPdgrFK7LYQ#Pxb!||9ryA!)G|KEBc8C;d zW(-v&NU#=rkQ#-R8acNbz$?>Rr#ies1e{~ zj^xZ%MmgWT!gT!6*6FJx5L0I-=&CZoy9BsV8J>Vz=x zHai5kYbB)?jc}xhC%Ge~aZ@@Y(h)O8mkRm9j;v&~6+RBYClMz8C^CJK2h=G6+fo8xveuM5ut^LTO-Qf(wfX6%bq~4QxzsVG*GMf(xaAjR`I+B2++dp){~D z!G%SH3J5Ng1~w+Ru!v9r!G+Sm#sn7@5h@_KP#V~n;KCw81q2sL0~-@uSVX9R;6iC& zV}c8d2o(@qC=F~(aA6Ul0)h*rfsF|+EFx4uaG^A?F~NmJgbD~Qlm<2?xUh&&0l|gR zz{Ug@77;2SxKJ9{nBc-9LIngDN&_1cTv$Y?fZ#%DU}J&{iwG4ETqq4}OmJZlp#p*n zrGbqfh$}boav$)+H~K>G)jgG~?KXVvkLIiDofOr(grc?&P}IMZ@beZ$b?GST_7;j_ z-=U~Q;;y#Sl@z7wt9Gnw41a&>a_tKR8|Iz8d$Duh+J&tr?ANodxVbEbZauO2v!Z8n zj(oG==yTuhD9v7)Wk0uKp6kscf#NGwj#GVC*8^^``&9MCiO&18oRjajUHW{y>C)Ey zyH6H*t~U%G2>p5JPTtn<&WZ)UtSDWsUwK?R@QI_a?eL<4C0S!Re+VNvS>uCENAt5Q zhsx)V6tv{O*uS5xkuqM*Z{?+y%!-f2U$MD-$^NDWV zp3&Cv-`3XVT^P@p7}(P?Hc4&!wPNhuGpd)aezDs$cZ=PrH_pwTx9ZaQ3mw1TE85?}>PKh* literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/32px/ninja-tiles32.png b/resources/Ninja Physics Debug Tiles/32px/ninja-tiles32.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f8639cda0babe15db5b58d1283bf2d6f636684 GIT binary patch literal 6085 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 Q%{?R|JyUF{j`Owu0oeoWcK`qY literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/0.png b/resources/Ninja Physics Debug Tiles/64px/0.png new file mode 100644 index 0000000000000000000000000000000000000000..295301d1e3b96db1cb28ca1e09477dd2beb2b9aa GIT binary patch literal 14958 zcmeI3&2QsG7{;e8pi)!`2?-D<%d3?@BJoF@G_jm?yGctcky5om+j3zYd(v1GfvirC{=O7nK+dEW8-=ADTz z{&;Wq_0^S^R}ez0JKK$Y@_je_EI&>DerY}Yk$gSlZXfvwJ^Ot4Swf$F_7Xys3#)Y) z95&xj4X2;iO{b0XqrOYj2x;phS2s>@z_szQWmoyXzP{u+%dGPEi%qfV)^XR`KKJm! z`EJWNKQSsMzg}C>Mk-0r$AQj``aRoMM^!$`tCBcu7I-d_1SeH~BOH)BZ0>P&$HQDP zU(6YzEOBd;5lb-%Hd3`hQ}^4%bC zRY4dIhxuV4?|8?8RH;-1Q5Ix5M-(~#%ntNX&h~G|Nyd2^*f%`O4J^mz!n}Ih83a|H z4+olD$-MgRWFXs5*b$1tNOuJ(FA57x&F1yCet)jh5B707v$+HMtuq%3``C8|o`H${ z_Pks0gUwSir3BFp5^bJhJD8iwG$wi6f!B*bn}&dUxKAuTp&-qji`#Vq$L~4|08Y9W zVhpU#0v2JR3tUTTdLvRe1B9ynghaeB45T=&Lz&(-VPEB7tibcX(` znvhkeHIpX74L!g$QqxLKEab#eODwChtSa)`z#oe;_NHT6owIrNwbTwoSv%QzrXJ|D z1W-1eqS;h;Y(LO#1Mf6yWU_h7GS!Y)RwP-$Ik{|_xq?ojwrrMjZKGZ8i0!h`R>Wv( z)ApIv4aXRSMU$j9NorYHE6Z}Jw4rP%lC)VU7mJk*>0Yr?5yf($yg5z_tg~scXPshm z%X9kCes*=w$Kf`q^5cCnIRKJHk2acW%}zDBpTgq%nX#t#Ly~K8x4Cep3N16RrkN)g z(y3-@n4o{tv&a#y_W-MK1^)}?IVr$RkZfd_ZObQnbCsn~ELbK(S!Xn%=B@XY7l|7fbP!60p;k09MW}~ay$Jne1V_xHitVI*T1?ySU>lL?7FXOoMW|v(v4YlKV zeLbjIef<~UYqCf#@?=4-#0tB!)}!mKusdr_op0GzP?M9IYL5&$MDk3OgxF8K`%y3Z=K>@=B zX;5Q^i;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0m zG^jDdMMVS!3>Tz9jTtT~A}C8Ps4>GuMFa&57orKu=K=}%g=FlFVO!9e*Weu egs!e`q4h_X?|pQ6`8gRA?QHHgzPk6|{eJ=6#vT9w literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/1.png b/resources/Ninja Physics Debug Tiles/64px/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6130251c29795b355da3cf2580ed225f9298e8 GIT binary patch literal 14612 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 Tst%OO@3NMzDzm=1vcCQQ&NR=) literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/11.png b/resources/Ninja Physics Debug Tiles/64px/11.png new file mode 100644 index 0000000000000000000000000000000000000000..f7658f445372fb7ef2fc4bcf4e107ac8f9f2246a GIT binary patch literal 15136 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 RzWfGj`I-vrv6A|o{|6kh*FXRO literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/13.png b/resources/Ninja Physics Debug Tiles/64px/13.png new file mode 100644 index 0000000000000000000000000000000000000000..dd99b22d2c4f0443f0c4a130c0a4d9162c0bce61 GIT binary patch literal 15103 zcmeI3eQ*=$>E!ZMnp;ZqLFSE4=)h3&yN!zSx+LBaTA+>KvDFwUTY}&QSZpdy) zia11>xuH`}?hd^{tYuD7kQZO^1#pgXro4g8>5kzqs-_R&G+85BQ=+-a}v6a*K-5#JO2y?05!>}EktZL=jc%g(G z*}IQa@s1L5kU{`jqCI?w+NjLjxkigB!jLPqJ2@>ruAwzj- z5G&0TsR~KtjuNt5DX40+*Ql(bms1%vMm4L|>r_Q1jm~H=>2&!jy;fI1>9myIq}J(Z zLlLbjR7Eb*k`5xX*Wsk=Y!61tf&WU#c3Jk&6y@{zG`<3j=xw8PCXM6Zm4HRmr zOOP4AT99(WNyhTnIEnT09+?*fm6Dff6+7h;l2i&sugHD5J<&pf6k!J_Qhvrm=`>m@ zk;%bEJ)TalD>O6*OK~pF%?Yvue7b}_PrE3KQoA@w$!Pbag~6QI?a|r^$Ln?{EG@|u zD*%EB(u7W_q07Tjb(|!2dReYw1-O-*M0YRq&e-IP%cS&7I(E*_PhwMg!nV*-2+xoi z+$(MMa*Ql`8${7%39qu6F@!3sRW)}JFE~V>lxL>m)v>9LCE{$1%vr!vG^n)&YHeYI zwwTuIX@kBA@`puncDv}{on49SMYN$HVuwWWcCcX_jLe`Cz%nR>gQcCK*UiWl-p#ae zlt*YYQ?W)!8C^lNRdk77Fe1)UV5Sl^L$1)OqN@Z+W(1b2vROcbhUXo0p+jHj)D{$} z*&@cEE@lh{waMw!su`o+ROIBeCRSG*LT9(b_6ezNBHO9#j7Vz7PfQKjC!~JF%Y##m zaX}ho^gp#kf;1CKRq_&8i(Swf1uHdlZq;+k$G47kxcJcd<6*oKr|hm0a%_7=53J~U zq4O|f`+#PRS{Nq-*JKh>|E);m#qK{OIYld9P*&03!>cL|GXDKuq z3yfwezB%4e!}~c`qm2i|dIg+v4kFfNz| zGRC-&h+qN61=B#r7#9)|EWo&68ps&qLL!0%7#Bj0>iLj4>`GB3OWN!8DLD#)U)#3otI21~SIDkceOb#s$+r#uyh85iG#C zU>e96<3b{W1sE4h0~!A)uJqW;eVhQ^=<|VB_x|#I)$z5PGcq%3nVj!u*ld4K>)v%@{;_S-bAwB`HwJdq zy)19wH+6kh)o1p7(|hsr-DfX9aIyLu$MN@FxAX*e-JbfFwH-ZsFIlvKD@$94wht43 zvrW-v&Ms3M0>Son;)S<|^DgD@Nlwd2*|6aBx@qTbUG`9#XHJej@FJOV=yZS_zIyi6 zywt4nS60tn|EKzM*W{ed$uqWW8OqG|%sfh_6zeWm7>Lf^-cy-7(|YHB^vsUHntdy5 zb^X?9Upz+Vqq(wk4-c=15(;1YA+o&%nJ mpVgeNxO!CjP=D%55+QxN@z`iLw_kZhwW^}p_Qt%Hr~eOoamlFw literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/14.png b/resources/Ninja Physics Debug Tiles/64px/14.png new file mode 100644 index 0000000000000000000000000000000000000000..d46041e3a7fa064c94465bb69e998deb9b036ef8 GIT binary patch literal 14780 zcmeI3Z)_7~9LFC90qmGm2=XT;-inf8Y_He9>v=63>&E8nSjNmc6Sdd7r`u(1uk>zf zHxjb2Flr1Y;u}E|fmenAK@$>{C}_r?cR+$h2vK~akq|M)M2H%EuI<{VUCR>;FP}@g z{`NfI@9+2A=lRonb8q$cZEG@ZFaZFXdb)!H=)2AMEMJQL9#eMyfWDqcbq{L*G_E#2 zi@>1|*8$MFR2dBG;m|9*q$X^ltVW?Nn@Axw0K%4RN|eT+&P3selJr~do;hn_6xnYX za)<1pR0kYYx~I}`$5h{-G&LsqWXqO-NyzdjK?3R`lTE~v8lUxB@_Bg_8_leR$xHMx zzop$M$b>`vOoy6=jN9h6N_Gdwczrg`?ecNli;Tn0Ia$umI($}+<6T~!^DxEB5-_1i zNXs#PAlOwbhyL?hMs+>Kvuq}lv1Ob#H9f*|KA(@ZJ6MOqiWF9DGO3GMYf{@-NHU)% z2sJ6Kq;y41GDco8s*dY^i^V8Zx{CLeNRT$rNM< zpr($eCD=KEZe?SwyVsRid2%W;89jB!4zo%fo6%FS<(EQXh6Hr4d`B9Jx|$wT)p($= z%KGOKG94XE%aD?k)r_`TV5`;TsV*miK~aYRv=m)dyVGj-4BA_Hhl6)HUc>waQI$QU z%1Ugqmfg#{oJBh(shro|R!OpR zo~To7jXK?VbfFM#UywSeO5?`PD5jPlF*Rmika~MsL8qD+$27+1AGJh{Gz&^~D;iph zlh_(XD>Z*^?SMNgTjx9CO8)#wiD?ZQyUTBx-(IByt8^Y2p8PK5Maek10+O-#p)9Z! zt>s~roJE`ReJ&*VLGv5!0}J1T6=`mM$c$bW~>+SmS(; zE0y>Qt(CJfzfKppn`U-W~@bz ztLUljsA(LoXT&;+#==x#KiK)1EVQD>0rVuomL5eaC%LrzA9GN?qsN>WPe+U3G>9?9 zMMQ)PC@!1^F{ZePh;RYLh0`F$6c-T@E}*z@8pN35A|k>C6cL`1lN;=*YVV~UH22p3RXI1OSJra7FWTbG!fj!28qe zwl{YDyuYzI^0{!K7c`is!4d{6THf}sFmmMPrqqg4%T8|EK0R}K-`g{*Po28gD1c{< z3pbCq-@Ci(+=jW!y;n?gKMoz9$X&P`IblBW_w)^h_ijDi_UCU)diSk6zQ(pD`up%< zSMKWUkpZUbqovxuoaf13Oi%e&UTU%oGY1-je*|0HLC?G47jkzTUw?1DK6~^N=F{za zFV41XdivSMqn~|w?uz-mt!s8q%WmhjwMP$q8y?Eto|s8AAA9{B&)$!Bzx2<_Zx(AS zt}UBeAO7mBx;PV=-G8WI^{w@{%#ptu0C@0VG1wLBy_hv0yl=c;+0)qx+tgoCC4eZ4j2=%!nO@2v}JxuoU zIY{&C^L)R*-*cbmPwvgVJvi{}2KPg5gwTfmzQhpu?s7isTFBqy+P*8~tJUZmwGdk0 z=6qb}$j6%y>TJ=5N9>X0^OB-xe6p&KV_!aF5H&*4?Ri61rm*c9#}isM#{Ki{8P21r zF>X&NDI|>^JgN1~nt0djz_2nqr9@P2d)yt(OC&)C+p;I0NoOr7ALEL7B@#Q$Jm)D& z?5P;n?G*HkBnLe`x`{m@U&yNne$f+-_{2~!B8ty={DK(ZMS=H6yrL)t!;;wHDPLUN zO`@o&rlg_7&T={OUyPfyZA0SuTrTI!1$??W!Hbbdgctn0-|r;~uQijk<-9j*Z7n5P z$&7g(_G1zA{FoP}VB5BNX|(Z1AE_;2W7#rQ$KB&2({S zs>0(m&fu(V5ue!5XH4q0ZcXY;j?7AA9&Ojc?)9B(Gmu(W0O?k5P!NE;TZ$- zL)g-%O$GPvC%3Y-(cRlxsyaC}nVg=cW5;=|iOuOL*@{b{G(%BxuTqbRWm`9gbv+#~ zt+K%tgr1%rPx~G%tLi!H$tYj1u1<9|5l+Z9j+3Pr^a=s5&@n7@N`Ai-^zQ}!lBmv} z)Kx7t)5so{g2A#Ki0bWR!>FK0%c_dNj-X6 zH_3=_JP_p@H3L_1RZ0C>%a*eW?oY%?gHO{`DW!%&<3eY|8&*34Ub!SEikvQBJMiW@=zxmHGu!Bd4021{!Ddw_Bn?npLIxG>fdo z8L&plN-dsSyYRl+)|HO5Ry=Mqt3A=`vx~LEP1#*$!H*%G&u)E$m zdTT4}uD4d5yR(`d_m`{HH3OG(ww4ZqUF0zU$2&ryKq$)BH`hA`wLDIbBs8*XEoUuu z1k0ZKj)un3W=7CaHkPIe{9qSnveZf*2gs8MUwIU%o#e{$zr#WGj_z<`n2r^JG^jDd zMMVS!3>Tz9jTtT~A}C8Ps4>GuMFa&57oj3(}y*3>Os<6fj(n1~q25 zsED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YRqs^5kUdN1!+*@TjFw8U+%+M@^6kv4j^=MnS5VGXj(w%&oP9g!w5a7fAH#eI}viV^e4K9 z^Oyd*^z?mey6^8jfAQR*PfobDw7TE@{{0i^rGXuWDt!3jL7`{)__fmyU*7uM?oDrY ze|qwR>n`U7L(27=y!88x*w~}wod~J<a8N6YZz&nLBgVyY{ixlk46KUf$Ss$XJg?7hY~@-*|=VI$t=1jvqXU21BPF?`m5L zp(Ad-^_-e-ojbZSPLMofxak9eRU3S;l z@hPSBK{vV2s3ofU6vtjD2SiI-l?tg;;u5J+I%_-j*s&Q=ah#PL zf0_CJzi;+85AS79_V;x!b3Ee!04(e6i4UOf9rkBw8~XdPa`YDZdQ$H>Xadl_%Ko%~ z$@6Of=xS4vL)K8@6+zN69#PgtpeLWvks5&T_Pj1iN1(-wz)?kwxc&Ufe$d{%N2E?C~U|n zVIaPzTn_ygagAA)F0gDam-FO0J(@Af@}W?O<-Dxd>qZKI%Gi0u5iM&)TrRs%Jskx7;+9zAQMi$jwo7N%ha zs+Ng-d_$i;rdgUfrZp*9>26vW%}F9rsoikAnM}jdrnUPRLQqE9&}k;eb;u4tQ_C6> z+M}mtiSnNl0l%Mzo?zMjVB#u8xM;Y9pqstRNw#r8NVM2u3@@ zY@=q(Ra{j4)r@OlOPwpqE1z`h7!J*@}19TMs_mig(vr ztImC@Vnw~>YIV(+%RXC6hru9v41m#q-{0vEv-QpOj(#N%(?f9u?OM}biveHRQ{U0h zc(9of>nIybQ-%Ft7iY56iXI2hlL%XR6seu$%JP5ALG_Lvb7DLlErQb^#uOJ35iX#( za2mvz;vyo#1r!%fgBVj>L`1lN;=*YVV~UH22p3RXI1OSar$LM=Q&0xtr4TXebWtG49nz5UO5e(3w{#8cbgapvyxhm6sct=-1z ze|KM5ga-zczF7+1aPRYn^GoKmOK@Gn<6d8*hX3>$%%of1JIR{r%30{PotU zwdQ8V`hN1#x(72iJ?kEP^Wi1NCu*ymlT&+sa!!7>|D1F9qtu{tc>35X=kQeb*wRmL zY~65T%Y%-^Q}2Em+p%fJ{fT4UuNNKh4HH|OD_Zuy`A)~QBi;^9?YjKL^wRh#@cFLG z9b9{SIXK4@TJw$z-4ky!g|;h8F38}@;(rRWFQ4aMnCW`&>;dNb+QVScniO|*18 jH0)V^e+d9{bBn;&AM6!}{v4h{ctP*(zWAkGhmZdU&K3#G literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/17.png b/resources/Ninja Physics Debug Tiles/64px/17.png new file mode 100644 index 0000000000000000000000000000000000000000..92387907a8b645b42bd754e0674bd83cc63ac8a9 GIT binary patch literal 14745 zcmeI3U5pb|6vuB{Tw!GuLHRIBCM6Isw$tgyc00CZaa(MoT{lY&T_2F?%Gtfs|Nl96e)psEGAG7HA0Oy{pdTSL5RXO1$@j4NS=~qeo>dReldm;}*o2PIT^r1g z1)ZAPjL=Y@noJp~#FL_|<(!hDrLnV|D-bn8!QJJ8Bp<>Cm&TK7K4ky>v(N3Es)X$O zeF;~hFoLJl*lZE+n;lKcvxnq>V&5I^50*ueAcqZ!E9bI#T`Y&}wY(yU&1T-t)g;ED zkbRF?kV_@TxDl<0IiJ(#kX>$p^9P)Q&l?bgM>w}j@bH3*cLyATAbS0xFvvA7d$^xO z!J?88$0K_i<;Z^_`;=i6M4m5|O3sqUsTC)AArJ`gE;sLXJBY%e&*TlM?8xie>PeRK zM6fOw)q zk$IfOIh;3i;uE_13R9Y)=~G&dlFja(g~^;G63yCO$D7M_Ev*~TBLqPMX;-J7oGD;_ z9P8S2QO40DO9=;fQ45Fj1OwfUT?z=M4fiBVHC-bXbGSUq)=orqZM2w6vKD8+ z8YL^Wc5dy%hud41JF;r+{3%F99h%1>9+{rnE)^x&Jh{TMx%jaXHTgOxybJuxf)j3-D#b; zxfOPIT3gPi^QsYcH>!0s1DAQW)(?Yyr(}Ouxm3}ZzYcddFP$BIB2)R^I- zB7y>j3(}y*3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YRqs^ z5kUdN1!+)YhKq^_3K%X(gBmkjR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{FkFxZHDIYL5&$MDk3OgxF8K`%y3Z=K>@=BX;5Q^i;4&e7%oVI8Z%r} zL{PwRK^oMU;i4jf0)`9HpvDXr6%iCLT#yDeX1J(`pn&0mG^p`SarL)e?!$TVMqi1% zy7&6V+;il$KTeK~ClH$5j!@+oLVquj@1GHxb|JKI5Fzm`gf?k!KKsR9ge(K`$ev{R zyI(J#yZ7SQx@dL74qM-%H|AH-S68RdD`!@Tr!Ds_NcMNq>;L@s`hkx=y!OKPU;knK z_{x>O)XD1un`f_9&V^pG4B6h@TDCoEtDY2YEbM;%{pv>a;>(|`b?rJItxQxMmK*oa zTQ8hhJY_k0{M*&*yytgRc2<2TGQe-);^h-4e(4G8m+KE$hrd~zL($_uqMZ*1w-3Kj z-GyGg`{bIjXnAer?8Omla?4ih>4nAZC~Exof7nn#t2ks?J&dgDZWgAlY(i*h$%cN)#LjyDdHXl><;i$-H1fe? H2ao;-Gt&Tr literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/18.png b/resources/Ninja Physics Debug Tiles/64px/18.png new file mode 100644 index 0000000000000000000000000000000000000000..bf89fb30c578d0b7c1e7d862f8e02c886ab0c797 GIT binary patch literal 14770 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 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/20.png b/resources/Ninja Physics Debug Tiles/64px/20.png new file mode 100644 index 0000000000000000000000000000000000000000..063711a54260aaf8a6318392566b044b622e19ba GIT binary patch literal 14762 zcmeI3Z)_7~9LJxrGT9IU0hE|XE(PL1+PmwYZN0Q*up4d(#buN*BvEd6Pq$<3UAeo_ zZqWc*0vLsa7lsg`iGdh>VR)elL=qP*ibe@94N>8R#9%ZSV`7XZ_*~nyzjZB7FuZ&& z>H6FAe80cnbD!r=@6DYU+VR|yj;A^hLQ4h*wXrsk-s142Yw`9?b(4nHbRS6 zxStku_S|ZOdfN2lh%=JdE~#e5uW05d_UAKMqDCmXIiFS33G8sAcuY59-g}>X>g9AT z=G`4m2#IVT9@ht^ExdDjM^c@hP$QambG##(mq>yPb`&n3NgKA5k9kXZB@(;Myq7CU zoQarsi(8NzNepp)riHn%KkQS5fXH=6{9-s15yeehKoEnxDDZ)ZPZXt4wmq@QqBGTJ>Znt#oN< zn#$ue&S1l_iBD|k%Z{6lX^)#tN>;m@7AA9&NK|V#9B(Gmu(a*;A0!AWNE=}aXq7qVLoe&MfqAIP*zuv)Mutm zi;M`zgHgUwGjNqwl{9GBj$){IP>z!ZzpiVN(u0+tm`eFnEfDneghPt2N7FQ)h{b@Q z38K)Gij>eL63{*`wQQ=B?#`&B)*do7u+K~Vyrq*frIMn$Cs$l`7eCgb{G8U> zu&U0AP5-|WSk4dZ&1>YwvC(7)m9vxt&Hc8Sa&n4=w~UeHK-tpegmWGBnWMaWzNhuM z_{*(xXJvMs&Y#7odu&N$1&|>rCGujFpVwBaT-J}cGnt+&>AM30xybJuxhhuJU2om< zU@Ppdx7M7y4Bd$bD%I+mfy+Hx%ZI^E@)&^QUEy#r9Odhq>m5US9;ZiSo$OlMU5j0z zil@G#p>a<$Bj~6Y%Ton@uuC&pZY7TcGu zMFa&57oj3(}y*3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YRqs^ z5kUdN1!+)YhKq^_3K%X(gBmkjR76m~a6uZ>nBk%#f&zvM(xAo+7Zni{FkFxZHDIYL5&$MDk3OgxF8K`%y3Z=K>@=BX;9+_;_9fq+=mVFMqiG+ zy5~Fn#b)x_AEyosClH!mkI>=Q5c>N*`M!(Lq=3*b`w)`OAoQep`lYMe5NcU7C~ryT zZ~l7o^77Ay9{1e%_}CH8HT`H8_b$pkmbuZsyGYhZS`&<4jqE{CGvHURdaHwTbFIupyafnvTy#4g;nWfp*-&1Y*mP-pR1-Jft z$n(w{%hW?H8;`$#i(6Pc7vn<3)BT<6if0qT%HmtQdOY&$duPJ(*Xp(P^2v!CtK{qU zcMIhc(V39^Rc~>f{HAfBKHdH<$%xnN{h$mcC*m0UcSUoQVN{qhr@&;L2R;rNleM~bV9m+!V+yx!XT gS1UsI@3*2md$$?S{I=BVzD+sUzeE0T>%Le20~*H)$^ZZW literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/21.png b/resources/Ninja Physics Debug Tiles/64px/21.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd159d69027fb262e44ba304e7c4ef06e5d7c73 GIT binary patch literal 14736 zcmeI3TWs4@7{^b$C>w=ItB@GCRhGB0A(1$ClXNjjc4@k`(o(9nunrKLW1qBUiS5Pi z;+Bh|fe_c0i_peEf=A#1-eA%M+YpyYynr;20I`?8j4`o+kN_dA94Be=B~5lTw8vv9 z&DV4O|L;5golE@U=SGHit?s(L3n8?6XfQQOzPEXwRetjKef{7$@^ynXxYtJL#+$uQ z2RioFtq5)L>*Ev7M0&TZn)#rjnHd~(^A=Gf6yNGvih2M$Tn10-MuNX|;v~=MT7usb zNr%!_Kc3PDXA5|2c6eN!J)p)kervKT?#d)V9y=5vNEy9vIWS0=I7Ebv@e;v7iu z+r5I^M0$klHw&1H1S0`8B#B&KEGS08F;TpSlR{#zAch1f77#@_+$W1su6pswE)vBH zT2>xS?W~p~|0Vb-$FXEVC>D#sVsFqaObTKw7862}AV~qD2-q`*qqqUXUSCPFlqZF4 zwV+#$ZW^4ISIL;uPJ-vXLba=UUwNxm$gr#I2t~nFEI|y0gjOa^t$D2JLasbCO%-qs z=dt0~#3#1&SyQHC+EZqmlC|!(g~^h2vqTc4bUOkPjhv13r-7%gj0%xlVmA|1EJnPC^{b6B1@7SmL3HDim1t+HZ?sv z)5_i_ha*)x5H;J$hS3y9p(TJakU~@CtXaq_PEyY+lUT5f$+%E&1j^b9lKah^Ss)|A z$=OC34AeEwKU!N%V1O7KhDt9D@3&LhuL-lejldM8&>^%g(Y;zC1feONVT z)u#X739RG?_VzW3Q`l&;gDP3dg7$vf%sNG-fVWSQTz9jTtT~A}C8Ps4>GuMFa&5 z7oj z3(}y*3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(P0ZimR*savwIx8+}FZ)xDle zcaYcqICXF|jnM2ygi22#^v@#s{sp1w5JDIBBP1V1Xs!9`zAttn)ZrUSZ69}ky!g$D z)t`;5Nqu{I_OS2FdoT2yf5yML^dkT4`KSH64SvI}GjIR(!_RO0bUN|o*QLHvV#~i9 z(5B0W&Z9p+M^CK$!^feHRohVKni6Uo&V6(d-J30~E!q6KlbtTwmRYy>`oveap(}H{ z{71t*-TS|HHdVEufU+6*4&pqUSS2DWaxo~`A>8^!a(6PCX zeIfB&=c%)98ojmkE`FN~ob^Yb14 uFMk(Ly>jsJn=bpT71l~+AAz;FxB^}IWapzO`J|8hi-rblKhYW literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/22.png b/resources/Ninja Physics Debug Tiles/64px/22.png new file mode 100644 index 0000000000000000000000000000000000000000..46a97c9b806a49d323a1076cfcfcb23f0acfedba GIT binary patch literal 14809 zcmeI3Z)_7~9LJw+Fmz`{gNh-%I17jZ?e+R^>v=7Vc4ISiE@QY2jqG~&v^{C>O7BLy zWlF~o!fpKH7JY1i@u!^`KA z?S9Yme80cvxzF>b_vYRj9N1>-Sk(alu=V#vhR}VB_4hzK`v0lA_ZM_~Fw-|?0KlxU z{#wAH51#~}t6d!)HAkb{1zAr!B}I=xXFi=lY5>H|`HUp*fhHS+2~`W)uYdWqomG{f zeZ&`aMKfWTRQsl~aL3fZuspR#4k-4`p$;)Gpaf}XN^Cxz(hMOVv={RVD7LCOJ6n{P zdxG|Et3!4)I>?6gEM$F7pF?)JdA2j)9<6$yQtnr5O^@vkKuXluSK4tm~;z zX_XBwAY{W~_L&h?Q}mqitjN`?t5aP~1S66OLue^_9WIZ<r-IkPy~W zdKQfchCCwIs2Xz>SC!DO8K$Jkus;$)6;4%EgjhiK!a#s`@ZNab(FMJ6N5CDE9dXI; z^2Iu3zu)aHqKigx`=ZnlU7oOZMme=|kEt>HqSP;BRdlLJDNJLH{$9IikY-U=eX4=h z;v}|4(Mm0zTRY(1+S-MNlv+H0GE&xn*6s@07q(aBz^a@_mZ!K&1xdC}u8?dkeyE6C zO>K2p6=&I|{@)2K<;U#J`^Y7s)?^2jvJ?f){e~Vlb5a&|C(v>rZ0S06h9niq^CGvXuG(`+KWfcnYNDv`bi2@ne&5hlw&Kn8 z*0H-=@#cDK)wxqs%@Eps#evpUV=n7#Egc3s&}#q;`F%c*Pvq*W>m7q?9;QYkD%!P% zwHE!}vZubGp>eF45o;(LOH+mYU>9eyREu5*(3=QXc@?Rhar$LM9?9MMQ)PC@!1^F{ZePh;RYLh0`F$cg59F z{kRWm=!?D_`gCvb&`aN;&;D4sZzu}D)H(p(*bl(JchLQJ047`j{4oxI@BsiT^@F?5 z^#afm?T>U1=YRg~;Q44<_hXR@>)v_#;rXt%O^<^9jNSI`hSv3AHZu3n^ww9Mp{JhU zJU?Cd^TH1|Z|`0gJbT6X@uQ>5cM8uvenoum=7t-44}82f7;9O5SXaQ|p40Dtaiq0t z^{?Tj#}6L02On|Vn7uyJf^N%m-EA{tbGzsFw{Q8p@cM0L6*$*==kLu)u!NcZcKapJ zJ6l+Paj9)wVWz)Nq2j4R;^H#fc!Zh$W&jmW7FN!q*0s#^ISmz06h`Jz>k>xn?!5%2 zW(zB>F0sud7*To=6;BmbTw7|J*~W~bC^SVT5sj#Zknr15c?A?(&8&?{ zNz6@tTfJ3~=?=9s4Vn%ax5I6hoIJk1Q4DaNsS!Fqz91 zs6>%Zm%~Cwa80Hh`p<9cH_e#9vhjG_5wCV=dLPSqyb@`}CMfa$l{tU}oshG{MM|*gVxn$9Yj^o=Q`;+hU}euE%ahurf+$%hS3t5BKa_oJ zUTbbxS!c$k{ND*o=f~`&YsCAZT4D#Kv!n#2{e~7c{yVkJQ zqQ{l-6m}Ff_LMSW9T{VKs<0pI)J&#Z(c=Jm5@EBCBKeb?UH*4D$lcLhPK>9cMQ|F# znBpQL!UYr;PJar$LM9?9MMQ)PC@!1^F{ZePh;RYL zh0`F$6c-T@E}*z@8pN35A|k>C6cIQ_x`w)Y(ua8F;a6!2!Np_01Uqf!1yinJqo~p6M)Mb01);9Fjw3C-1ln$ zD64G=)^{b&UVO7<<9Bs)f~_wd4K$4t^gaz#Ckqh-5540`V z{@1Pj7yPHXo_O-)?~R=&|9$+m$>Y1quI#w6cILsi7Oxn7#r8|9&{1~r#!ctxo4<{2 z<$wPA)my^{#&&_fC%=&=Twr|klsvH*j9>j$o|ps1|NK#&r~u;{>ieL4#M`j+++*|W zet6V%=H`b$PaaH;HC60voxAo(ZPoCzpUH~IY&!t>zP-t@tra_um4}Y}x?p(agBuS`z6a!wHtf0j&kUyZ<$aM8 z_kx};koA-Dk*Xz2&uR1Pep-R7`@x~`+sUzKDs~>8g{)P>rm?E ndRDCh*H?@(quuXMOd6n3XsTb{pImIcZrRefF8Jx{4KMr$O3XMq literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/24.png b/resources/Ninja Physics Debug Tiles/64px/24.png new file mode 100644 index 0000000000000000000000000000000000000000..546273d27c18feaaf3b1bc7926f516b08d0350be GIT binary patch literal 14847 zcmeI3Z)h839LJxeTQ_eGhnq|%lOuJy)h3r*lD0Y1EN!#eux6`mM_Vnd*UPm%n%v!T z*Cnk(w+aJsZ`4la9}r|h+qL!2DnkT42ZIR(C+pt0GMEf>GAt@8iZY)|(&TBH>|wH( z&q11BpXdAi{hs?ge{yf`mDYXFY^1hP0Dz6*=1?2_4w|3!8?mC-KZo)+UxMz1t;sGYkUru*W+`!s%X~fax*R`!}{zl7w4(rT-9{; zvIQs@`4iE8t}WD*EeHRrvkmIH$}vnbnRF!G4kaZ#?wTp*Vwk~(Xr1bft@(E2ecUPTld3)s!tlW8IdeXa;;|25N z3JB)n7o&b=MQeUoIcL@;{oe`9}SmLJtnQhpJ`n=E6eM2^(^|$V~c|;01k;ylXv-rD{Do&3$5LEwxZpI*1Yq8Ea?F@TdklOahYdp<}hf7j{#z!+Us?D{Y+tVp`%qw ziLtJb1b3}wuElCk)>GI~)Yx6hh;(F)nW;j4u+uY{X@!pi@JWQpJ<HcO7fJ&g6I@tCsDR)?X<%c53yTO95L_q?Y)o)r5upNt3#EaL2`(%mR6uZ{ zG_Wzjg++u42riTcHYT{Rh)@B+h0?&r1Q!+&Dj>K}8rYcN!XiQi1Q$vJ8xveuM5ut^ zLTO;*JL019FZYQue4{T3U){UVdGlBJ+8-@6w?zOL-2uSSmjU?eHvGN`z_1g5pLzk{ zP64o0dHvvpCIBp2I8@(}`tHWU)o|mpo0_hlq`%sFHN5xmChMF0*0EjJyN+!?{ptJ&CpikeX0ReP12Nci#iYHXXpow zX{y08KS^&hZcyhfEi<&uI88NJTPEpB<45Ye^~4O#8WU7Q*@;P-GkVuvw;Zp$2-I_9 zTfm={7p>~qF%LLbd2!99=j$tvenEX=`R5G1-FT0Byuw(b9&5KA=~UNLcUv~4zW%%H j#Xp|7B$fwzZ+pSs%g3+H%v=teuV{w%>H6FAe80cnbD!r=@6Em5*|BMPRZSHDV0n9+uM2%Q>z@afqQ4W;&{gzRskH4>0jOT7 ze+=Ng4^{)PeyJ1)YC-=NPLRW9UX=TwIUZJ!8URmIT;YY?P-FVwfD~yo{`vWok&(nk zW4F_9@hh!xP-+{C!tG-n0by*n;1-Qd-YQR=LkYrA8kw|2 z+udkv(F-y`e<#x_Mgan(0`4_K}}OQmW{7UD^8zE4e}uHOmfBWaGTTTFn-=m`N0J9%VQh zN)JsGSQvs~7|~SZvljI!gR&;8gK~+Ix$csM(VY1Gx!Og?8x9vOt!f)a5P~eyqE0n1 zszA02s`7ADfEz~8t*j|__nOq7pPU7m^q!JqhjFQdP4CIr(n}#TLmqUmTx%5anj8(t za>$!mWu5Z~nbuZjUAGhw<(OLUVGGsysm>>YK3;=fv=kjCi``^#1uW}1n~ihWpT+zc zQGwkri&Fn+F?$2&aAob7sL+l!jL2&|DFH6SQiuZAFGs_?=9R+y0A!WOfQQXDV#?eK z;#%d997Q97Ub}}a){ME*tBPxns2U#;V7t$Y8qAU;at$ugWp|^ECfF=}Cb!e!F!hNR ztH~lXxE=ivx0t|-3mu(O9EO5E z3GG@{UyCkB)>GI~)VQ;h5$nhrGgF2AV5es?(~2Gk(31$8dlXqX$+_i!pM(4z-RH!3 zI$8v$L5wLbA|hNsap5$GF~vnhgbOGxoCYzbxQK{w0mX&WAjT9I5fLt+xNsW8nBpQL z!UYr;PJar$LM9?9MMQ)PC@!1^F{ZePh;RYLh0`F$ zcg0nef4L7v&>MX*^y=QWC0FLqYk!Q;*5wCaY%KtZy#U<4gT8+QVAujcvKIjET>u`H z-|qQlBLIdM+kGv8_>~)%zF%%=S^e#;?;aVtn20()taxkPSMAjgZSG9?miij^`fm@InH9j6>Dr2$op)*zw^Lt& zUC9-OvmalpyncMVHt~L{30zIa3}+{()t%xdVkq^ g$S|UO@i*AF@0C9;tZ}W<-^^^^(BYeWy7%S(0G3WVFaQ7m literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/26.png b/resources/Ninja Physics Debug Tiles/64px/26.png new file mode 100644 index 0000000000000000000000000000000000000000..ba094432372c263d14b9ce918f952fe472b891d2 GIT binary patch literal 14836 zcmeI3ZERCj7{^a94q3@$>QEz+T#Aq~*52FKZ8u%nTnAmWbB+x*qtd(E)Af$FxAfl8 zZo#BOO#owJK*NH5Sd2quN*0U+HGzg`g7Jfk@r4L6nD7Dp!V*mkCcd28cI{c$a)ROG zxk=Y&=luWAbMEiF^nSUAdwX`&86PzQ0P4E^zCQHbu76goM1N1o`+i1WwF&=_3c%_I z^^XCZc>56mT2{*agW6!=DM3>yCHq*_|FPK<4 z)Mnc43h;qMCydDci6q=P(bF$Y?3G$WrfpuMCoP}^F{p`bIu?zqLb}bA%PXK*Z{|#F zPNMB?Gj-?%*}*_B+o>cW>$18m5^uM$&8=3O%h_tPHL-Ty=HP5RXK%IGY=W~{u({d7 zW%3$PQ&f z8}msP^Z1}DCFO)BD{)rOD-J7TTARtF7b;$b`-&xsh2m;~9iqsk#RO-w@?0fTNGf^~ zW65Z4Xd#J%Q5b`9O+`LiMPDMKXo?z9s+25tS1pX@BoHXpt~lOUtYT?Z>)MYH6p&VQ zs{P{$$n`;08B0pAYd^Y`jg{_Rlf$LSS&~WbsXBI;maEwGp1du$6!J6VLH88{ONpRQ)SwqFMW=;#Sa^3o-y+!Ug46LV z=Ff}D>;WYthsP_~n+2!4V8=w|cC=waq9&3O;4&;lND{(IGA3$XIVO%kE)gH`aHU2} zSzJLvrxI0?XhhKK@NkuyF;{L?3Egp36XO!>_IXi*RhB~nZyRnAhr?luv)L|M+|bEe zT6h<4fo|CBa)d*UX1+CtE)c-&%ToIkX-wZ4h18)tOpV!>rG7doqf5A z^!tXcf)(#Bw+`Ljig%Y=OU{9~taL`1lN;=*YVV~UH22p3RXI1OS< zaS;*W0*VW#L5wLbA|hNsap5$GF~vnhgbOGxoCYzbxQK{w0mX&WAjT9I5fLt+xNsW8 znBpQL!UYr;PJar$LM`eA3c&O$ilQ7S1&OA5yDfrIVWMl_|b}+-t zGM5^r>e^?rXTSqBCs*{E=d9C%lefT((X-0jcg@s(nBkZ+YtPlbKASz3X{tHRTsJRl z4t~s}3}+h`%)w*Kal={jLL)mgc?Eo6^sM&xT@%`mFgKZ9YtOBjJINl*bk%HNnzkG= z1$T8!0o7=#o$9Y|%)W6j!u-?l^6G_I_MHq@vth-7#zT$QKANtXTl3-cO>lL?pD(_U eT%Y+`1r`dY5F?9llRe_Sht!3vfY6o+pNYR>$1CSGVc&rx5qBHYCVGR6zkvxCnxZn!($T!vDPgLb!`5! z`l?anjfeZi4*&N2aOl4V>!4w1BF80@Nqf?1SK|Ym;PH4k-oZH>Hl(oW!!bij*<$*} zT$1@beyGcFMKcsN#+rGhJ~d%9Sgqzjg)4twQLQjgOwY4J6uFe7ae|%a%9+A)!J{SO zk?hpMG6y3t3S)+jd_q~DHmDk^KB!h0vd~>|V6-NIKw<2%^NmK!4y_y8_9Fy&q-C9Y zXjp?>2h`O>T!!2Bqg&Zn?(PkxzqmLHGMPOU=MGa!1)JHEvt>&mw?bZYuVQl?N`@K_ zscOWRtFqucLbkb?eWFW=h1I0K*~^uxi%VTh1pSf$eW(;`ZM@UQ*M<0c(cutlozG$Z zoT$VeP{T_9a5=jh6?5K>iAwEg!-OS6A|=3OScGE==&83c@l7f+L zzk+tHZq{O5ZQfJbQP#Mpk`e338*@vA{a|NTGS`Y82hfuUS9lazxX6X_zso`Kj_z_| zJRKbbr$LM9?9 zMMQ)PC@!1^F{ZePh;RYLh0`F$6c-T@E}*z@8pN35A|k>C6cw$okTRH*&jBEm6>?HvHnM2>x03>(-W_ke-j{)$I z`sUuRw*$b0TK!u?sqe2|zPS8+aLp^fymd4hxp4m{YrE?DcGXS%y#3WDAA5O)`q}k2 zPQAEf?#d63xBTH{+QIQ}<_?Vg{wQcWG$(Us4n9zo`ulw5*V!erhpU1oxthi!Uxk1x z^B@zNe#R1BKa%KI5`fk|&j-!mGwDRWyabZf^p)W}_Xw%yS7mfpLy z8^J6LqQoF%qE5vSlZj$4zuZ0E4Ud#+mTCY1r49A&X7pX9eCEzUf8Q3ieTTm0MeExo07@1q z9~F4z;1U2T=Lr5bxy|z^7ZAfnJ}7oTVY;|70S8}*d;`q`l*v2>vclV zsc*G;SWmPTb_@0WG3e{x;1Bd~4cLSFbuNt~!J!0UDD%2RI24h%gj1i)%b{3lX7swG zMBeJuS1SYR+B{xetr&wko6%+nux694!frI#tag)Wjn2%PER2a|%yxsx#91piQ@JjE z>0KHWIby+1uGw9e9uEEI)OX8rlw+89JZ_9zjAE>dG1={QhBY&0vjHg#QeQ;o6NZSi zJe6cRj~hyXm=Ki(F``rQ@*QH2?9}U(fihS6zQWPWKoKd;4pC$he3UU6Stg$;7|3{{ zJ+V-7YQX>lLof^@vV?r5yuN6+D2r0JSYXIZcfo z#h70dL#|Ynd8ZNTYHM|?T7^hZj7zH>Os+b+)Y(MP&CAe*O3`XyEe5vS&sK6~GiSAI z#{4N!j@=^$h0eZw_6k(YX*(v$wWAFamGC4~7d$V4Mu4kp`( zDKizs)rui8hGqm^76+5B8FMA8iff2SG9L-R2Db|}7zH871zEctc6366#iB4{tu{l4 zwbN!`gC+=}1$A4@Npv0$Zl9IfEe3j&osmu*yu;L(eOBs?F#(-wdqmO3IBBgQ~5D_;W6UfFj8O#rLrUih5eG)DaZL3tnNbPK-ki$gfktv znH`LBzK4XF_*1PjS7o|RXRo3|Ikq@d0cc8mlDx^m%xcSyoYJ=`D;erZ>MP7Fy3p?% zy3$s>JJ;HNdn?|ZYt1@aB7*EfyDvG>oMz0WoUN(Dz=s|KpsUDZcTe~JMtRa3mLJFv@x|**bjDcB~z{FaR5DuFqub@nTwn$|NlA2-qHV@ z7*9tB!D$dL`1lN;=*YVV~UH22p3RXI1OS< zaS;*W0*VW#L5wLbA|hNsap5$GF~vnhgbOGxoCYzbxQK{w0mX&WAjT9I5fLt+xNsW8 znBpQL!UYr;PJar$LMql59sv4R0x&QLz#sph?`r_`umJqL1psas zfW_j_lV|DxQ1v#rtNn>@ew_R){E1gvcjeIX_m4k6G^rAHardk)T~X#O4GmsgIB(gU z1>)FX#lWv|hP$u)U`*)a+3ULovv4b55j(z!$L zX#Or9X&L|O<^j!U@rZx?iz!(XDIW2Szqb8|_S=&Ejj9E|z1ehqRn=0pqwmFdz|| zHBKA^uWQ*Gk1tV6#k-oucOF}&T{CZCjjH6_$=3I*1KZWw;VYY~_khtdZ})SLsoy9X zYpI%OH5z$GoP=FV2}5 zS@N2;IYZV^JOI1ord}0p>D?3-d%H!qWLoR1_M~`}APRMXNktX_VR z@>QeAqe>loYjAyTIP{;_)TQfjo@JBCq$O#$C~7Cmx!rEoYGZ9SGg6qfo|rDA%rR|w zHpxt$Ak;)vj_a}#V~o7QZY806O(tWY{FS?}XgohqOv|xD6xoyzXE}?NEoYL%yeFPe zBblj5A`2rh3S+v4d|X*yyi3s)txKseWWKxNz-UcEq5Rlo=NpZd9a_^H_aX#2q-C92 zxF-(TR;VcnRfLUu(XA{mclWy7QCOU!Oh!+|xxhXmb#D#1_d4ZP$@dhR=e3+7q-^(HXHA-KZp6V zq7r*Zk>rk^a&{Lg=A0c9mD>jpUGv>-v72h1wbRj0f=AaKXSY%n^-L4L+U9j8DE~`y4Lx-cz?6ygw zS+Y9oIl<|WZ1rLWT_}XxXQd7*V#3%Nxzy5qrpD~EQg2pebgBsvOk>RceupTNX4X(m zvW9B02dhz3shM+Y3*1xOI@1x6Gv`lSP&H`mF0W~3d*u(T{CQ+}GP{%)MC0W0iAM25 z$-@@47N(VV=4|r+UBGO9%wBnnWEYH8*g@GW89`;grgZ2@L4^&Ss2m7eI-9WAQJUGq z8s~dNF2|{7&)tNGgdN^$mm@*E4t9{8@h5< zyt~xees3$@U1}{jx5i}MXUmON(u}!`vo(7dY(b9!&{yYl+MOP@w7JyLBBx-aEhwX1 zs~NRe=g4_VJIWf{D;cqloH4sp*bjDQC9|#QaR5Duu=z)k;ziDv{{s#Rcl3Z0ar$LM9?9MMQ)PC@!1^F}^3R z>cY!?FoxdfOQKizE?in2K(GBVVpD4ffZmk=^zR4Y?|;$vEdUZ$0Dj#C0Dl;OCzQdR zU#|zC%G(@l2&YDG9=QnArfE60v^He5cWr;jiA<3``D7cPGE!Bk)Ep!Dfo`%?eD zcS5H&&m9<_tQlMN(D1l-XyONObM)-UR5SQ<{H>9xTA==RRhpgyPP@eP-5;x@;iDr{ z+vg3u_gT%Dve^I4cSj=U8o|=O^V0Oms^K^LQ0sjEiEGX)`&I+n&nVA!FmQTl&DbZ) z{0E1*EBh{hbok)NRQKG0mA5yZ+PS=c%`rKBcN9pkJwG&Yc@EPJQNqVTyM0`mc7oy2 zWi?~$GXJSxkaYy4w;mdqdUo!Bc^X+w{gI!L^&*g7-!U|CXb#ht*nV-*rL!v%gTBvi kOx`|oC;fi^WEF@$y?^ny-~W|1Ubbv*+!XwH-L9AZ1EC*1R{#J2 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/3.png b/resources/Ninja Physics Debug Tiles/64px/3.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ca235fc2cf3da8e51193b90916105353b3b940 GIT binary patch literal 14803 zcmeI3Z)_7~9LJv)7~2FwKmrcMODF1d?cH_lww~9rxsGi}=NwZ87}@Ra*>@- z<{#=GUI<1E8iU4=A!v*d@tqhkEVALBkVs+-#25rL8chr=F#!#V&$V6qtZR9K;pKBl z*WaG!`~5x7eV*U*^xoWy9qldi%PYzO0Q1{ggPrKR!TOYzpug{{ThF4evS{lD1Ato= zTOS*E^Q~n7)R(AT-DY=atsv_Wm!#;u(3OZpks1JTRU#_MgV1DpVZW;R9Tz`6=3rFC z?^y2*aiM4v98gI)SfcGM6Jz zjv_Ip^a-88)tTYYe}2b+X+{N>jmP7zc#TVs^|QRs=VLiH>vlVl!f6a^rj&4MMrAt5 zRGuI-Qd#KkO|>t#IMXs&Jw@jZ6KWBg)swcRN+G>MBDzszG9^+1T!y7kWT8)wMI__E5*wX2Q(;fMlMbDKA1GF7KDS5dT%Edf;knv#?v&x`Dgw%o{ReYdre;h~hi&ds3<{l1|qW5v7k ztsAay#k=#ZIp?FAY6jey(ej!xmvy$L4}*2+F#rZ?z1|wH$mTcaJ37<^40i`rv}+Bk z7Hd5jPku*1C6cL`1lN;=*YVV~UH22p3RXI1OS>6i0r=}0`u+`oAr64wdjJsj0yGmW9@_Fobwm4-Pv)F?ch4&?B^#=0zV$!-(V3k>Ju%cr*>RkF}nPs50sr91n#3>fP)F$_T}V0`$y+K zo85E#$q5G1hXSV?U=mdB>F=!i~eBJ)uxkIx%j&CX*-FbS!=*y?)_1F(D z8JqV+WwPq135>*7;O@yz+sO+n?R!rcbGhBW&O2xSX35z6eU-`k#UT(+d<|TaUA7-C zRN0T5xLgw5eX(qz{g|g=+0{K@|D{8=&(CkNzc7Bfq;%KevV|3^mNMcq_cfGX?M`~G zY`1lu-#+W$@$GZ#`^RUU`M?&o-3~+`zB=c~u@dlifAgQqA3wRqdhN2Uxjp#dgFVmv E2k~Ac$p8QV literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/30.png b/resources/Ninja Physics Debug Tiles/64px/30.png new file mode 100644 index 0000000000000000000000000000000000000000..15900f255584cd6340049a7c475a644ce12086b0 GIT binary patch literal 14618 zcmeI3?`tDP7{}*0I5bia1QlN`dkP9B`y;=aWs|lhtu2_gw2@1F<85~*>C$9pZ+CM^ z`^MtE(ic^#FGTzc1O*X9P!JJcD)>%CJV6AN13^&nRh|9ONexzUbyQ@1sLJvF?elDT6-+2_F z`73s#88qw9X(s7r42$gI%%JO1HA4Erz%|T$907Xx2A{ zD)F$8&*amltSUmWlu`1zlA=5_9YWryIsH z0)v$R%0LRs)LO*r8bQVG8f`4OPFt5ojX*i9AgxL|#G^C9m8>pJYX+{Us|nTWZPa?0im5@2V|IFIOxT3Pp^uDM#q)b!b1Ax<<@ixHFQ} z)?KCs_H(H>Je!_sMh9rZ+28FDQ_`FpYSs2>EgpaxrIi|;Tif`?cr3({c57vf5dUhcyVeWR~WU)_7{_CFuf*Zu@^b*qlh;S&fQ-9qT!Q~LcI zLOmIw->)O2y@k*ti!yg}Hw dsP6RiGD_b`eVhII^W)IAw!B_@|C#GA{|8da!vFvP literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/31.png b/resources/Ninja Physics Debug Tiles/64px/31.png new file mode 100644 index 0000000000000000000000000000000000000000..1d55e3a8285c59f1d81cd90ed565d2c393fac5e9 GIT binary patch literal 14621 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 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/4.png b/resources/Ninja Physics Debug Tiles/64px/4.png new file mode 100644 index 0000000000000000000000000000000000000000..d13e31a3847d10c00899a717979b461d64e094f2 GIT binary patch literal 14844 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 N+gm#PCpYx(`VXW3C_exI literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/6.png b/resources/Ninja Physics Debug Tiles/64px/6.png new file mode 100644 index 0000000000000000000000000000000000000000..a805134e1a36782f2b20c365cdb369f7ec677cdf GIT binary patch literal 15271 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 C^BC^{ literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/9.png b/resources/Ninja Physics Debug Tiles/64px/9.png new file mode 100644 index 0000000000000000000000000000000000000000..734ae2db874ccc88aafcf573312e76f1e9599839 GIT binary patch literal 15229 zcmeI3e^gWF8OL7`P=d_%v{;H@vnZ||gqwsUB)3U`0S=}S1X`d~+sn-jTuE|6?u7*A ziq$!*+c?MSs>foxQHz~JbPmud8`xqU9m-aidVo`_M`bb*(Dlp?&*^S{5MF-uJ>BV_ z_ns5-@V?*g^St--{>c63?#fyB!*EfQ2mlbCm6@K)f2X)Vi$eInN9pp<_^(iVW)TZO z*c0wg0616|34kVq&M)K&jcaj|u_h2ErkF}_S?#5b0bvpTJ6SgxF=Z*jU`9mw58xeC%$< zBw~+*E7MC--37&k#vE}P$>;RhOBs$~OPP5}`n%^X%+HC@=&wEJc&*ksOS4=? zC6B;|bWSImUuCDTT#98X93+)d$=}L~x$d5$%~O*zEt9)v-mz0IdLEm*$7}N}1@8>$ z_fIpzSO2~m>ROrN}cVX z`BROsKpOYxziEj%(#$HANwfS~tb*1kzfwKtRvuM8y>+s~LVM01JKGRC&nA2D^pAqWt8NE{l{a|}$(%Z^E z4)9MRnEz2^`Xu|8|F;}W-O;z47)~b?foULP0T&VxED&(PG?1}?3yBC82)JMx$XLLI zL<9>2Trdq}EZ{;Sf&~IDm1=B#r z0xl#XSRmknX&_?(7ZMRH5OBdXkg0T)aI84I|Oh+u($3#NgL1zbo(ut2~C(?G@oE+isYAmD;&AY%a+5)mvA zaKSW?v49JS2o?yqU>e9+z=cEv3j|y+4P^YaxI|Mg_faR#K%zHt7vKQWn^ zYXqP=7J#kW0r>JO{`(F96*2&ZUj+a^0Kikso3ET-4M5;{R(fi_tN-S}?|&Zi!jl)q zdk)3KW;|N(sG#%v)}wv>L8j-AJ!#!`OkErokVQ1hB_Tv`%fPcy%IEg2jLNECPj2|d znNT?~RM>XvWKn&QbF_PK;&#XOg&%bfKG3(b_x{M1eCl}k_{2ZTmJrw4qtEV29*etN z9#eC%r|6>|>GGDy%7yPaw{Lkr#!K}d#Lk|9W`_h^ldp@Zf8H+G{=aRBc z)D(2;yCZkEybU(*9uvKY8#1@-S8Ql@fpeR0Xg&*TYUsX#J>Ah&`_wo!JiaP6P_w*k zcQ4(rblv z7MxxdpA^03lM|IGT{X404zwISe>Dfx2JhT^zwv4D{hr{RYeri8-#L{0Q|B66%S51k zh31XCG>&~g;9=-Od(+Qi%{EXl9@*4)^5aWIL086H#!Dp&9&0=we}8|zSqmC_sG8Ir zZ@m{1o%t)gy(Bnj=WS_IS3qW4PW9g25>eZZ{k=5{&J5MW?+)B{d_28y@qkejJ!nkn zl^jkf){Z!uvRf?|`WA@`Lu>DqUw$}Lux#rVP~ zkEkM!?|Zz%aP@=59WTblQy&DhUoSqES9EuMfW3A7@sV3u4_0jriux1H}ez)`Gb;($@`vuvo NjCJWvKX`T9{{UTn2c-Z2 literal 0 HcmV?d00001 diff --git a/resources/Ninja Physics Debug Tiles/64px/ninja-tiles64.png b/resources/Ninja Physics Debug Tiles/64px/ninja-tiles64.png new file mode 100644 index 0000000000000000000000000000000000000000..a99c246f9623c58315db3815b2fe29fb326ee1dc GIT binary patch literal 12145 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 literal 0 HcmV?d00001 diff --git a/src/physics/Physics.js b/src/physics/Physics.js index d346bf01..16a9b981 100644 --- a/src/physics/Physics.js +++ b/src/physics/Physics.js @@ -94,7 +94,7 @@ Phaser.Physics.prototype = { * Phaser.Physics.Arcade is running by default, but all others need activating directly. * You can start the following physics systems: * Phaser.Physics.P2 - A full-body advanced physics system by Stefan Hedman. - * Phaser.Physics.NINJA - A port of the metanet N+ physics system. + * Phaser.Physics.NINJA - A port of Metanet Softwares N+ physics system. * Phaser.Physics.BOX2D and Phaser.Physics.CHIPMUNK are still in development. * * @method Phaser.Physics#startSystem @@ -132,7 +132,7 @@ Phaser.Physics.prototype = { * * Phaser.Physics.Arcade - A light weight AABB based collision system with basic separation. * Phaser.Physics.P2 - A full-body advanced physics system supporting multiple object shapes, polygon loading, contact materials, springs and constraints. - * Phaser.Physics.NINJA - A port of the metanet N+ physics system. Advanced AABB and Circle vs. Tile collision. + * Phaser.Physics.NINJA - A port of Metanet Softwares N+ physics system. Advanced AABB and Circle vs. Tile collision. * Phaser.Physics.BOX2D and Phaser.Physics.CHIPMUNK are still in development. * * @method Phaser.Physics#enable @@ -203,6 +203,11 @@ Phaser.Physics.prototype = { */ setBoundsToWorld: function () { + if (this.ninja) + { + this.ninja.setBoundsToWorld(); + } + }, /** diff --git a/src/physics/ninja/AABB.js b/src/physics/ninja/AABB.js index eec3189a..6010ebf0 100644 --- a/src/physics/ninja/AABB.js +++ b/src/physics/ninja/AABB.js @@ -6,11 +6,16 @@ /** * Ninja Physics AABB constructor. +* Note: This class could be massively optimised and reduced in size. I leave that challenge up to you. * * @class Phaser.Physics.Ninja.AABB * @classdesc Arcade Physics Constructor * @constructor -* @param {Phaser.Game} game reference to the current game instance. +* @param {Phaser.Physics.Ninja} system - A reference to the physics system. +* @param {number} x - The x coordinate to create this shape at. +* @param {number} y - The y coordinate to create this shape at. +* @param {number} width - The width of this AABB. +* @param {number} height - The height of this AABB. */ Phaser.Physics.Ninja.AABB = function (system, x, y, width, height) { diff --git a/src/physics/ninja/Body.js b/src/physics/ninja/Body.js index 18362e49..75e2ab33 100644 --- a/src/physics/ninja/Body.js +++ b/src/physics/ninja/Body.js @@ -63,37 +63,66 @@ Phaser.Physics.Ninja.Body = function (system, sprite, type, id, radius) { */ this.shape = null; + var sx = sprite.x; + var sy = sprite.y; + + if (sprite.anchor.x === 0) + { + sx += (sprite.width * 0.5); + } + + if (sprite.anchor.y === 0) + { + sy += (sprite.height * 0.5); + } + if (type === 1) { - this.aabb = new Phaser.Physics.Ninja.AABB(system, sprite.x, sprite.y, sprite.width, sprite.height); + this.aabb = new Phaser.Physics.Ninja.AABB(this, sx, sy, sprite.width, sprite.height); this.shape = this.aabb; } else if (type === 2) { - this.circle = new Phaser.Physics.Ninja.Circle(system, sprite.x, sprite.y, radius); + this.circle = new Phaser.Physics.Ninja.Circle(this, sx, sy, radius); this.shape = this.circle; } else if (type === 3) { - this.tile = new Phaser.Physics.Ninja.Tile(system, sprite.x, sprite.y, sprite.width, sprite.height, id); + this.tile = new Phaser.Physics.Ninja.Tile(this, sx, sy, sprite.width, sprite.height, id); this.shape = this.tile; } + // Setting drag to 0 and friction to 0 means you get a normalised speed (px psec) + + /** + * @property {number} drag - The drag applied to this object as it moves. + * @default + */ + this.drag = 1; + + /** + * @property {number} friction - The friction applied to this object as it moves. + * @default + */ + this.friction = 0.05; + + /** + * @property {number} gravityScale - How much of the world gravity should be applied to this object? 1 = all of it, 0.5 = 50%, etc. + * @default + */ + this.gravityScale = 1; + + /** + * @property {number} bounce - The bounciness of this object when it collides. A value between 0 and 1. We recommend setting it to 0.999 to avoid jittering. + * @default + */ + this.bounce = 0.3; + /** * @property {Phaser.Point} velocity - The velocity in pixels per second sq. of the Body. */ this.velocity = new Phaser.Point(); - /** - * @property {Phaser.Point} drag - The drag applied to the motion of the Body. - */ - this.drag = new Phaser.Point(); - - /** - * @property {Phaser.Point} bounce - The elasticitiy of the Body when colliding. bounce.x/y = 1 means full rebound, bounce.x/y = 0.5 means 50% rebound velocity. - */ - this.bounce = new Phaser.Point(); - /** * @property {boolean} skipQuadTree - If the Body is an irregular shape you can set this to true to avoid it being added to any QuadTrees. * @default diff --git a/src/physics/ninja/Circle.js b/src/physics/ninja/Circle.js index 0c6ac3cf..9c31a257 100644 --- a/src/physics/ninja/Circle.js +++ b/src/physics/ninja/Circle.js @@ -6,33 +6,77 @@ /** * Ninja Physics Circle constructor. +* Note: This class could be massively optimised and reduced in size. I leave that challenge up to you. * * @class Phaser.Physics.Ninja.Circle * @classdesc Arcade Physics Constructor * @constructor -* @param {Phaser.Game} game reference to the current game instance. +* @param {Phaser.Physics.Ninja.Body} body - The body that owns this shape. +* @param {number} x - The x coordinate to create this shape at. +* @param {number} y - The y coordinate to create this shape at. +* @param {number} radius - The radius of this Circle. */ -Phaser.Physics.Ninja.Circle = function (system, x, y, radius) { +Phaser.Physics.Ninja.Circle = function (body, x, y, radius) { - this.system = system; + /** + * @property {Phaser.Physics.Ninja.Body} system - A reference to the body that owns this shape. + */ + this.body = body; + + /** + * @property {Phaser.Physics.Ninja} system - A reference to the physics system. + */ + this.system = body.system; + + /** + * @property {Phaser.Point} pos - The position of this object. + */ this.pos = new Phaser.Point(x, y); + + /** + * @property {Phaser.Point} oldpos - The position of this object in the previous update. + */ this.oldpos = new Phaser.Point(x, y); + + /** + * @property {number} radius - The radius of this circle shape. + */ this.radius = radius; + /** + * @property {number} width - The width. + * @readonly + */ this.width = radius * 2; + + /** + * @property {number} height - The height. + * @readonly + */ this.height = radius * 2; + /** + * @property {number} oH - Internal var. + * @private + */ this.oH = 0; + + /** + * @property {number} oV - Internal var. + * @private + */ this.oV = 0; - // Setting drag to 0 and friction to 0 means you get a normalised speed (px psec) - this.drag = 1; - this.friction = 0.05; - this.gravityScale = 1; - this.bounce = 0.3; + /** + * @property {Phaser.Point} velocity - The velocity of this object. + */ this.velocity = new Phaser.Point(); + /** + * @property {object} circleTileProjections - All of the collision response handlers. + */ this.circleTileProjections = {}; + this.circleTileProjections[Phaser.Physics.Ninja.Tile.TYPE_FULL] = this.projCircle_Full; this.circleTileProjections[Phaser.Physics.Ninja.Tile.TYPE_45DEG] = this.projCircle_45Deg; this.circleTileProjections[Phaser.Physics.Ninja.Tile.TYPE_CONCAVE] = this.projCircle_Concave; @@ -64,8 +108,8 @@ Phaser.Physics.Ninja.Circle.prototype = { var py = this.pos.y; // integrate - this.pos.x += (this.drag * this.pos.x) - (this.drag * this.oldpos.x); - this.pos.y += (this.drag * this.pos.y) - (this.drag * this.oldpos.y) + (this.system.gravity * this.gravityScale); + this.pos.x += (this.body.drag * this.pos.x) - (this.body.drag * this.oldpos.x); + this.pos.y += (this.body.drag * this.pos.y) - (this.body.drag * this.oldpos.y) + (this.system.gravity * this.body.gravityScale); // store this.velocity.set(this.pos.x - px, this.pos.y - py); @@ -88,29 +132,28 @@ Phaser.Physics.Ninja.Circle.prototype = { var p = this.pos; var o = this.oldpos; - //calc velocity + // Calc velocity var vx = p.x - o.x; var vy = p.y - o.y; - //find component of velocity parallel to collision normal + // Find component of velocity parallel to collision normal var dp = (vx * dx + vy * dy); - var nx = dp * dx;//project velocity onto collision normal + var nx = dp * dx; //project velocity onto collision normal - var ny = dp * dy;//nx,ny is normal velocity + var ny = dp * dy; //nx,ny is normal velocity - var tx = vx - nx;//px,py is tangent velocity + var tx = vx - nx; //px,py is tangent velocity var ty = vy - ny; - //we only want to apply collision response forces if the object is travelling into, and not out of, the collision - var b, bx, by, f, fx, fy; + // We only want to apply collision response forces if the object is travelling into, and not out of, the collision + var b, bx, by, fx, fy; if (dp < 0) { - //f = FRICTION; - fx = tx * this.friction; - fy = ty * this.friction; + fx = tx * this.body.friction; + fy = ty * this.body.friction; - b = 1 + this.bounce; + b = 1 + this.body.bounce; bx = (nx * b); by = (ny * b); @@ -118,14 +161,16 @@ Phaser.Physics.Ninja.Circle.prototype = { } else { - //moving out of collision, do not apply forces + // Moving out of collision, do not apply forces bx = by = fx = fy = 0; } - p.x += px;//project object out of collision + // Project object out of collision + p.x += px; p.y += py; - o.x += px + bx + fx;//apply bounce+friction impulses which alter velocity + // Apply bounce+friction impulses which alter velocity + o.x += px + bx + fx; o.y += py + by + fy; }, @@ -197,40 +242,41 @@ Phaser.Physics.Ninja.Circle.prototype = { var txw = c.xw; var tyw = c.yw; - var dx = pos.x - tx;//tile->obj delta - var px = (txw + r) - Math.abs(dx);//penetration depth in x + var dx = pos.x - tx; // tile->obj delta + var px = (txw + r) - Math.abs(dx); // penetration depth in x if (0 < px) { - var dy = pos.y - ty;//tile->obj delta - var py = (tyw + r) - Math.abs(dy);//pen depth in y + var dy = pos.y - ty; // tile->obj delta + var py = (tyw + r) - Math.abs(dy); // pen depth in y if (0 < py) { - //object may be colliding with tile + // object may be colliding with tile - //determine grid/voronoi region of circle center + // determine grid/voronoi region of circle center this.oH = 0; this.oV = 0; + if (dx < -txw) { - //circle is on left side of tile + // circle is on left side of tile this.oH = -1; } else if (txw < dx) { - //circle is on right side of tile + // circle is on right side of tile this.oH = 1; } if (dy < -tyw) { - //circle is on top side of tile + // circle is on top side of tile this.oV = -1; } else if (tyw < dy) { - //circle is on bottom side of tile + // circle is on bottom side of tile this.oV = 1; } @@ -260,7 +306,7 @@ Phaser.Physics.Ninja.Circle.prototype = { } else { - console.log("ResolveCircleTile() was called with an empty (or unknown) tile!: ID=" + t.id + ")"); + // console.log("ResolveCircleTile() was called with an empty (or unknown) tile!: ID=" + t.id + ")"); return false; } @@ -352,6 +398,7 @@ Phaser.Physics.Ninja.Circle.prototype = { var len = Math.sqrt(dx * dx + dy * dy); var pen = obj.radius - len; + if (0 < pen) { //vertex is in the circle; project outward @@ -417,6 +464,7 @@ Phaser.Physics.Ninja.Circle.prototype = { //if the dotprod of (ox,oy) and (sx,sy) is negative, the innermost point is in the slope //and we need toproject it out by the magnitude of the projection of (ox,oy) onto (sx,sy) var dp = (ox * sx) + (oy * sy); + if (dp < 0) { //collision; project delta onto slope and use this as the slope penetration vector diff --git a/src/physics/ninja/Tile.js b/src/physics/ninja/Tile.js index 4312115b..12a0d628 100644 --- a/src/physics/ninja/Tile.js +++ b/src/physics/ninja/Tile.js @@ -6,22 +6,53 @@ /** * Ninja Physics Tile constructor. +* +* Note: This class could be massively optimised and reduced in size. I leave that challenge up to you. * * @class Phaser.Physics.Ninja.Tile -* @classdesc Arcade Physics Constructor +* @classdesc The Ninja Physics Tile class. Based on code by Metanet Software. * @constructor -* @param {Phaser.Game} game reference to the current game instance. +* @param {Phaser.Physics.Ninja.Body} body - The body that owns this shape. +* @param {number} x - The x coordinate to create this shape at. +* @param {number} y - The y coordinate to create this shape at. +* @param {number} width - The width of this AABB. +* @param {number} height - The height of this AABB. +* @param {number} [type=1] - The type of Ninja shape to create. 1 = AABB, 2 = Circle or 3 = Tile. */ -Phaser.Physics.Ninja.Tile = function (system, x, y, width, height, type) { +Phaser.Physics.Ninja.Tile = function (body, x, y, width, height, type) { if (typeof type === 'undefined') { type = Phaser.Physics.Ninja.Tile.EMPTY; } - this.system = system; + /** + * @property {Phaser.Physics.Ninja.Body} system - A reference to the body that owns this shape. + */ + this.body = body; + /** + * @property {Phaser.Physics.Ninja} system - A reference to the physics system. + */ + this.system = body.system; + + /** + * @property {number} id - The ID of this Tile. + * @readonly + */ this.id = type; + + /** + * @property {number} type - The type of this Tile. + * @readonly + */ this.type = Phaser.Physics.Ninja.Tile.TYPE_EMPTY; + /** + * @property {Phaser.Point} pos - The position of this object. + */ this.pos = new Phaser.Point(x, y); + + /** + * @property {Phaser.Point} oldpos - The position of this object in the previous update. + */ this.oldpos = new Phaser.Point(x, y); if (this.id > 1 && this.id < 30) @@ -30,22 +61,57 @@ Phaser.Physics.Ninja.Tile = function (system, x, y, width, height, type) { height = width; } + /** + * @property {number} xw - Half the width. + * @readonly + */ this.xw = Math.abs(width / 2); + + /** + * @property {number} xw - Half the height. + * @readonly + */ this.yw = Math.abs(height / 2); + /** + * @property {number} width - The width. + * @readonly + */ this.width = width; + + /** + * @property {number} height - The height. + * @readonly + */ this.height = height; - this.drag = 1; - this.friction = 0.05; - this.gravityScale = 1; - this.bounce = 0.3; + /** + * @property {Phaser.Point} velocity - The velocity of this object. + */ this.velocity = new Phaser.Point(); - // This stores tile-specific collision information + /** + * @property {number} signx - Internal var. + * @private + */ this.signx = 0; + + /** + * @property {number} signy - Internal var. + * @private + */ this.signy = 0; + + /** + * @property {number} sx - Internal var. + * @private + */ this.sx = 0; + + /** + * @property {number} sy - Internal var. + * @private + */ this.sy = 0; if (this.id > 0) @@ -60,29 +126,37 @@ Phaser.Physics.Ninja.Tile.prototype.constructor = Phaser.Physics.Ninja.Tile; Phaser.Physics.Ninja.Tile.prototype = { /** - * Updates this AABBs position. + * Updates this objects position. * - * @method Phaser.Physics.Ninja.AABB#integrate + * @method Phaser.Physics.Ninja.Tile#integrate */ integrate: function () { var px = this.pos.x; var py = this.pos.y; - this.pos.x += (this.drag * this.pos.x) - (this.drag * this.oldpos.x); - this.pos.y += (this.drag * this.pos.y) - (this.drag * this.oldpos.y); + this.pos.x += (this.body.drag * this.pos.x) - (this.body.drag * this.oldpos.x); + this.pos.y += (this.body.drag * this.pos.y) - (this.body.drag * this.oldpos.y); this.velocity.set(this.pos.x - px, this.pos.y - py); this.oldpos.set(px, py); }, + /** + * Tiles cannot collide with the world bounds, it's up to you to keep them where you want them. But we need this API stub to satisfy the Body. + * + * @method Phaser.Physics.Ninja.Tile#collideWorldBounds + */ collideWorldBounds: function () { }, - //these functions are used to update the cell - //note: id is assumed to NOT be "empty" state.. - //if it IS the empty state, the tile clears itself + /** + * Tiles cannot collide with the world bounds, it's up to you to keep them where you want them. But we need this API stub to satisfy the Body. + * + * @method Phaser.Physics.Ninja.Tile#setType + * @param {number} id - The type of Tile this will use, i.e. Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn, Phaser.Physics.Ninja.Tile.CONVEXpp, etc. + */ setType: function (id) { if (id === Phaser.Physics.Ninja.Tile.EMPTY) @@ -91,7 +165,6 @@ Phaser.Physics.Ninja.Tile.prototype = { } else { - //set tile state to a non-emtpy value, and update it's edges and those of the neighbors this.id = id; this.updateType(); } @@ -100,6 +173,11 @@ Phaser.Physics.Ninja.Tile.prototype = { }, + /** + * Sets this tile to be empty. + * + * @method Phaser.Physics.Ninja.Tile#clear + */ clear: function () { this.id = Phaser.Physics.Ninja.Tile.EMPTY; @@ -107,28 +185,13 @@ Phaser.Physics.Ninja.Tile.prototype = { }, - render: function (context, key) { - - if (this.id === 0) - { - return; - } - - var image = this.system.game.cache.getImage(key); - var data = this.system.game.cache.getFrameData(key); - var frame = data._frames[this.id - 1]; - - context.drawImage(image, frame.x, frame.y, frame.width, frame.height, this.x, this.y, this.width, this.height); - - // context.beginPath(); - // context.strokeStyle = 'rgb(255,255,0)'; - // context.strokeRect(this.x, this.y, this.width, this.height); - // context.strokeRect(this.pos.x, this.pos.y, 2, 2); // center point - // context.closePath(); - - }, - - //this converts a tile from implicitly-defined (via id), to explicit (via properties) + /** + * This converts a tile from implicitly-defined (via id), to explicit (via properties). + * Don't call directly, instead of setType. + * + * @method Phaser.Physics.Ninja.Tile#updateType + * @private + */ updateType: function () { if (this.id === 0) @@ -567,7 +630,6 @@ Object.defineProperty(Phaser.Physics.Ninja.Tile.prototype, "right", { }); -// TILETYPE ENUMERATION Phaser.Physics.Ninja.Tile.EMPTY = 0; Phaser.Physics.Ninja.Tile.FULL = 1;//fullAABB tile Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn = 2;//45-degree triangle, whose normal is (+ve,-ve) @@ -603,7 +665,6 @@ Phaser.Physics.Ninja.Tile.HALFr = 31; Phaser.Physics.Ninja.Tile.HALFu = 32; Phaser.Physics.Ninja.Tile.HALFl = 33; -//collision shape "types" Phaser.Physics.Ninja.Tile.TYPE_EMPTY = 0; Phaser.Physics.Ninja.Tile.TYPE_FULL = 1; Phaser.Physics.Ninja.Tile.TYPE_45DEG = 2; diff --git a/src/physics/ninja/World.js b/src/physics/ninja/World.js index 34d951ec..0a10d537 100644 --- a/src/physics/ninja/World.js +++ b/src/physics/ninja/World.js @@ -7,8 +7,10 @@ /** * Ninja Physics constructor. * +* The Ninja Physics system was created in Flash by Metanet Software and ported to JavaScript by Richard Davey. +* * @class Phaser.Physics.Ninja -* @classdesc Arcade Physics Constructor +* @classdesc Ninja Physics Constructor * @constructor * @param {Phaser.Game} game reference to the current game instance. */ @@ -83,7 +85,7 @@ Phaser.Physics.Ninja.prototype = { * * @method Phaser.Physics.Ninja#enableTile * @param {object|array} object - The game object to create the physics body on. Can also be an array of objects, a body will be created on every object in the array. - * @param {number} radius - The radius of the Circle. + * @param {number} [id=1] - The type of Tile this will use, i.e. Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn, Phaser.Physics.Ninja.Tile.CONVEXpp, etc. */ enableTile: function (object, id) { @@ -131,14 +133,40 @@ Phaser.Physics.Ninja.prototype = { }, + /** + * Updates the size of this physics world. + * + * @method Phaser.Physics.Ninja#setBounds + * @param {number} x - Top left most corner of the world. + * @param {number} y - Top left most corner of the world. + * @param {number} width - New width of the world. Can never be smaller than the Game.width. + * @param {number} height - New height of the world. Can never be smaller than the Game.height. + */ + setBounds: function (x, y, width, height) { + + this.bounds.setTo(x, y, width, height); + + }, + + /** + * Updates the size of this physics world to match the size of the game world. + * + * @method Phaser.Physics.Ninja#setBoundsToWorld + */ + setBoundsToWorld: function () { + + this.bounds.setTo(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height); + + }, + /** * Called automatically by a Physics body, it updates all motion related values on the Body. * * @method Phaser.Physics.Ninja#updateMotion * @param {Phaser.Physics.Ninja.Body} The Body object to be updated. - */ update: function () { }, + */ /** * Checks for overlaps between two game objects. The objects can be Sprites, Groups or Emitters.