├── sounds ├── pop.m4a ├── click.m4a ├── drop.m4a ├── fail.m4a ├── jump.m4a ├── remove.m4a ├── no_spike.m4a ├── rollover.m4a └── success.m4a ├── textures ├── in_0.png ├── in_1.png ├── in_2.png ├── left.png ├── loop.png ├── next.png ├── play.png ├── loop_2.png ├── loop_3.png ├── loop_4.png ├── remove.png ├── retry.png ├── right.png ├── congrats.png ├── end_loop.png ├── forward.png ├── loop_off.png ├── left_block.png ├── locked_big.png ├── right_block.png ├── end_loop_block.png ├── end_loop_off.png ├── forward_block.png ├── locked_small.png ├── loop_2_block.png ├── loop_3_block.png ├── loop_4_block.png ├── frame_00_delay-0.1s.png ├── frame_01_delay-0.1s.png ├── frame_02_delay-0.1s.png ├── frame_03_delay-0.1s.png ├── frame_04_delay-0.1s.png ├── frame_05_delay-0.1s.png ├── frame_06_delay-0.1s.png ├── frame_07_delay-0.1s.png ├── frame_08_delay-0.1s.png ├── frame_09_delay-0.1s.png ├── frame_10_delay-0.1s.png ├── frame_11_delay-0.1s.png ├── frame_12_delay-0.1s.png ├── frame_13_delay-0.1s.png ├── frame_14_delay-0.1s.png ├── frame_15_delay-0.1s.png ├── frame_16_delay-0.1s.png ├── frame_17_delay-0.1s.png ├── frame_18_delay-0.1s.png ├── frame_19_delay-0.1s.png ├── frame_20_delay-0.1s.png ├── frame_21_delay-0.1s.png ├── frame_22_delay-0.1s.png ├── frame_23_delay-0.1s.png ├── frame_24_delay-0.1s.png ├── frame_25_delay-0.1s.png ├── frame_26_delay-0.1s.png ├── frame_27_delay-0.1s.png ├── frame_28_delay-0.1s.png ├── frame_29_delay-0.1s.png ├── frame_30_delay-0.1s.png └── frame_31_delay-0.1s.png ├── Rabbit Coder.arproj ├── Rabbit Coder.arprojbk ├── objects ├── bunny │ ├── bunny.png │ ├── bunny.mtl │ └── bunny.obj ├── switch │ └── switch.glb ├── carrot │ ├── carrot.mtl │ └── carrot.obj ├── tile │ ├── tile.mtl │ └── tile.obj ├── spikes │ ├── spikes.mtl │ └── spikes.obj └── wall │ ├── wall.mtl │ └── wall.obj ├── README.md └── scripts ├── tsconfig.json ├── levels.js └── script.js /sounds/pop.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/pop.m4a -------------------------------------------------------------------------------- /sounds/click.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/click.m4a -------------------------------------------------------------------------------- /sounds/drop.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/drop.m4a -------------------------------------------------------------------------------- /sounds/fail.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/fail.m4a -------------------------------------------------------------------------------- /sounds/jump.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/jump.m4a -------------------------------------------------------------------------------- /sounds/remove.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/remove.m4a -------------------------------------------------------------------------------- /textures/in_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/in_0.png -------------------------------------------------------------------------------- /textures/in_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/in_1.png -------------------------------------------------------------------------------- /textures/in_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/in_2.png -------------------------------------------------------------------------------- /textures/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/left.png -------------------------------------------------------------------------------- /textures/loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop.png -------------------------------------------------------------------------------- /textures/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/next.png -------------------------------------------------------------------------------- /textures/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/play.png -------------------------------------------------------------------------------- /Rabbit Coder.arproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/Rabbit Coder.arproj -------------------------------------------------------------------------------- /sounds/no_spike.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/no_spike.m4a -------------------------------------------------------------------------------- /sounds/rollover.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/rollover.m4a -------------------------------------------------------------------------------- /sounds/success.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/sounds/success.m4a -------------------------------------------------------------------------------- /textures/loop_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_2.png -------------------------------------------------------------------------------- /textures/loop_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_3.png -------------------------------------------------------------------------------- /textures/loop_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_4.png -------------------------------------------------------------------------------- /textures/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/remove.png -------------------------------------------------------------------------------- /textures/retry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/retry.png -------------------------------------------------------------------------------- /textures/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/right.png -------------------------------------------------------------------------------- /Rabbit Coder.arprojbk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/Rabbit Coder.arprojbk -------------------------------------------------------------------------------- /textures/congrats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/congrats.png -------------------------------------------------------------------------------- /textures/end_loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/end_loop.png -------------------------------------------------------------------------------- /textures/forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/forward.png -------------------------------------------------------------------------------- /textures/loop_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_off.png -------------------------------------------------------------------------------- /objects/bunny/bunny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/objects/bunny/bunny.png -------------------------------------------------------------------------------- /textures/left_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/left_block.png -------------------------------------------------------------------------------- /textures/locked_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/locked_big.png -------------------------------------------------------------------------------- /textures/right_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/right_block.png -------------------------------------------------------------------------------- /objects/switch/switch.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/objects/switch/switch.glb -------------------------------------------------------------------------------- /textures/end_loop_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/end_loop_block.png -------------------------------------------------------------------------------- /textures/end_loop_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/end_loop_off.png -------------------------------------------------------------------------------- /textures/forward_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/forward_block.png -------------------------------------------------------------------------------- /textures/locked_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/locked_small.png -------------------------------------------------------------------------------- /textures/loop_2_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_2_block.png -------------------------------------------------------------------------------- /textures/loop_3_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_3_block.png -------------------------------------------------------------------------------- /textures/loop_4_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/loop_4_block.png -------------------------------------------------------------------------------- /textures/frame_00_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_00_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_01_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_01_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_02_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_02_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_03_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_03_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_04_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_04_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_05_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_05_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_06_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_06_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_07_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_07_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_08_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_08_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_09_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_09_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_10_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_10_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_11_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_11_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_12_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_12_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_13_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_13_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_14_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_14_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_15_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_15_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_16_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_16_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_17_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_17_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_18_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_18_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_19_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_19_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_20_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_20_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_21_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_21_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_22_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_22_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_23_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_23_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_24_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_24_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_25_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_25_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_26_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_26_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_27_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_27_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_28_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_28_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_29_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_29_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_30_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_30_delay-0.1s.png -------------------------------------------------------------------------------- /textures/frame_31_delay-0.1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harrybanda/Rabbit-Coder/HEAD/textures/frame_31_delay-0.1s.png -------------------------------------------------------------------------------- /objects/carrot/carrot.mtl: -------------------------------------------------------------------------------- 1 | # Created by Kenney (www.kenney.nl) 2 | 3 | newmtl orange 4 | Kd 1 0.4509804 0.227451 5 | 6 | newmtl green 7 | Kd 0.3411765 0.7372549 0.5921569 8 | 9 | -------------------------------------------------------------------------------- /objects/tile/tile.mtl: -------------------------------------------------------------------------------- 1 | # Created by Kenney (www.kenney.nl) 2 | 3 | newmtl dirt 4 | Kd 0.9764706 0.7137255 0.4509804 5 | 6 | newmtl foliage 7 | Kd 0.2666667 0.7098039 0.5529412 8 | 9 | -------------------------------------------------------------------------------- /objects/spikes/spikes.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl metal 5 | Ns 0.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.784314 0.807843 0.890196 8 | Ks 0.330000 0.330000 0.330000 9 | Ke 0.0 0.0 0.0 10 | Ni 1.450000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /objects/wall/wall.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl Material 5 | Ns 323.999994 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.800000 0.800000 0.800000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.0 0.0 0.0 10 | Ni 1.450000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /objects/bunny/bunny.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl palette 5 | Ns 0.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.000000 0.000000 0.000000 9 | Ke 0.0 0.0 0.0 10 | Ni 1.450000 11 | d 1.000000 12 | illum 1 13 | map_Kd bunny.png 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rabbit Coder 2 | > Rabbit Coder is an augemnted reality puzzle game based on coding, built with Spark AR Studio 3 | 4 | ## Installation 5 | 6 | ```sh 7 | git clone https://github.com/harrybanda/Rabbit-Coder.git 8 | ``` 9 | 10 | ```sh 11 | Open project with Spark AR Studio 12 | ``` 13 | 14 | ## Try out the effect on facebook camera 15 | ```sh 16 | https://www.facebook.com/fbcameraeffects/tryit/208527660353698/ 17 | ``` 18 | -------------------------------------------------------------------------------- /scripts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "baseUrl": "/Users/harrybanda/Library/Caches/Facebook/Spark AR Studio/Scripting", 5 | "checkJs": false, 6 | "esModuleInterop": true, 7 | "lib": [ 8 | "ES2019" 9 | ], 10 | "outDir": "/Users/harrybanda/Library/Caches/Facebook/Spark AR Studio/Scripting/out-dir", 11 | "paths": { 12 | "*": [ 13 | "skylight-typedefs/7442203516ddf4dd/*", 14 | "skylight-node_modules/*" 15 | ] 16 | }, 17 | "typeRoots": [ 18 | "/Users/harrybanda/Library/Caches/Facebook/Spark AR Studio/Scripting/skylight-node_modules/@types" 19 | ], 20 | "types": [ 21 | "node" 22 | ] 23 | }, 24 | "include": [ 25 | "./**/*.js", 26 | "./**/*.ts" 27 | ] 28 | } -------------------------------------------------------------------------------- /objects/tile/tile.obj: -------------------------------------------------------------------------------- 1 | # Created by Kenney (www.kenney.nl) 2 | 3 | mtllib tile.mtl 4 | 5 | g tile 6 | 7 | v 0.5 0 0.5 8 | v 0.5 0 -0.5 9 | v -0.5 0 0.5 10 | v -0.5 0 -0.5 11 | v 0.5 0.1 -0.5 12 | v 0.5 0.1 0.5 13 | v -0.5 0.1 0.5 14 | v -0.5 0.1 -0.5 15 | v 0.5 0.2 -0.5 16 | v 0.5 0.2 0.5 17 | v -0.5 0.2 -0.5 18 | v -0.5 0.2 0.5 19 | 20 | vn 0 -1 0 21 | vn 1 0 0 22 | vn 0 0 1 23 | vn -1 0 0 24 | vn 0 0 -1 25 | vn 0 1 0 26 | 27 | vt 19.68504 19.68504 28 | vt 19.68504 -19.68504 29 | vt -19.68504 19.68504 30 | vt -19.68504 -19.68504 31 | vt 19.68504 3.937008 32 | vt 19.68504 0 33 | vt -19.68504 3.937008 34 | vt -19.68504 0 35 | vt 19.68504 7.874016 36 | vt -19.68504 7.874016 37 | 38 | usemtl dirt 39 | 40 | f 3/3/1 2/2/1 1/1/1 41 | f 2/2/1 3/3/1 4/4/1 42 | f 6/7/2 2/6/2 5/5/2 43 | f 2/6/2 6/7/2 1/8/2 44 | f 6/5/3 3/8/3 1/6/3 45 | f 3/8/3 6/5/3 7/7/3 46 | f 3/6/4 8/7/4 4/8/4 47 | f 8/7/4 3/6/4 7/5/4 48 | f 8/5/5 2/8/5 4/6/5 49 | f 2/8/5 8/5/5 5/7/5 50 | 51 | usemtl foliage 52 | 53 | f 11/2/6 10/3/6 9/4/6 54 | f 10/3/6 11/2/6 12/1/6 55 | f 10/10/2 5/5/2 9/9/2 56 | f 5/5/2 10/10/2 6/7/2 57 | f 11/9/5 5/7/5 8/5/5 58 | f 5/7/5 11/9/5 9/10/5 59 | f 7/5/4 11/10/4 8/7/4 60 | f 11/10/4 7/5/4 12/9/4 61 | f 10/9/3 7/7/3 6/5/3 62 | f 7/7/3 10/9/3 12/10/3 63 | 64 | -------------------------------------------------------------------------------- /objects/wall/wall.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | mtllib wall.mtl 4 | o Cube 5 | v 2.000000 0.100000 -2.000000 6 | v 2.000000 -0.100000 -2.000000 7 | v 2.000000 0.100000 2.000000 8 | v 2.000000 -0.100000 2.000000 9 | v -2.000000 0.100000 -2.000000 10 | v -2.000000 -0.100000 -2.000000 11 | v -2.000000 0.100000 2.000000 12 | v -2.000000 -0.100000 2.000000 13 | v -1.800000 0.100000 -1.800000 14 | v -1.800000 -0.100000 -1.800000 15 | v 1.800000 0.100000 1.800000 16 | v 1.800000 -0.100000 1.800000 17 | v 1.800000 0.100000 -1.800000 18 | v 1.800000 -0.100000 -1.800000 19 | v -1.800000 0.100000 1.800000 20 | v -1.800000 -0.100000 1.800000 21 | vt 0.375000 0.000000 22 | vt 0.625000 0.000000 23 | vt 0.625000 0.250000 24 | vt 0.612500 0.237500 25 | vt 0.612500 0.012500 26 | vt 0.387500 0.012500 27 | vt 0.375000 0.250000 28 | vt 0.625000 0.250000 29 | vt 0.625000 0.500000 30 | vt 0.375000 0.500000 31 | vt 0.625000 0.750000 32 | vt 0.375000 0.750000 33 | vt 0.625000 0.750000 34 | vt 0.625000 1.000000 35 | vt 0.612500 0.987500 36 | vt 0.612500 0.762500 37 | vt 0.387500 0.762500 38 | vt 0.125000 0.500000 39 | vt 0.375000 0.500000 40 | vt 0.375000 0.750000 41 | vt 0.125000 0.750000 42 | vt 0.625000 0.500000 43 | vt 0.875000 0.500000 44 | vt 0.875000 0.750000 45 | vt 0.487500 0.750000 46 | vt 0.512500 0.750000 47 | vt 0.512500 0.500000 48 | vt 0.487500 0.500000 49 | vt 0.512500 0.250000 50 | vt 0.487500 0.250000 51 | vt 0.387500 0.987500 52 | vt 0.375000 1.000000 53 | vt 0.387500 0.237500 54 | vt 0.375000 0.250000 55 | vt 0.237500 0.750000 56 | vt 0.262500 0.750000 57 | vt 0.262500 0.500000 58 | vt 0.237500 0.500000 59 | vt 0.737500 0.750000 60 | vt 0.762500 0.750000 61 | vt 0.762500 0.500000 62 | vt 0.737500 0.500000 63 | vn 0.0000 1.0000 0.0000 64 | vn 0.0000 0.0000 1.0000 65 | vn -1.0000 0.0000 0.0000 66 | vn 0.0000 -1.0000 0.0000 67 | vn 1.0000 0.0000 0.0000 68 | vn 0.0000 0.0000 -1.0000 69 | usemtl Material 70 | s off 71 | f 1/1/1 5/2/1 7/3/1 15/4/1 9/5/1 13/6/1 72 | f 4/7/2 3/8/2 7/9/2 8/10/2 73 | f 8/10/3 7/9/3 5/11/3 6/12/3 74 | f 6/12/4 2/13/4 4/14/4 12/15/4 14/16/4 10/17/4 75 | f 2/18/5 1/19/5 3/20/5 4/21/5 76 | f 6/22/6 5/23/6 1/24/6 2/13/6 77 | f 10/25/5 9/26/5 15/27/5 16/28/5 78 | f 16/28/6 15/27/6 11/29/6 12/30/6 79 | f 10/17/4 16/31/4 12/15/4 4/14/4 8/32/4 6/12/4 80 | f 13/6/1 11/33/1 15/4/1 7/3/1 3/34/1 1/1/1 81 | f 12/35/3 11/36/3 13/37/3 14/38/3 82 | f 14/39/2 13/40/2 9/41/2 10/42/2 83 | -------------------------------------------------------------------------------- /scripts/levels.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | // level 1 3 | { 4 | path: [ 5 | [2, 3], 6 | [3, 3], 7 | [4, 3] 8 | ], 9 | blocks: 2, 10 | facing: "east" 11 | }, 12 | // level 2 13 | { 14 | path: [ 15 | [2, 4], 16 | [2, 3], 17 | [3, 3], 18 | [4, 3] 19 | ], 20 | blocks: 4, 21 | facing: "north" 22 | }, 23 | // level 3 24 | { 25 | path: [ 26 | [4, 4], 27 | [3, 4], 28 | [3, 3], 29 | [3, 2], 30 | [2, 2] 31 | ], 32 | blocks: 6, 33 | facing: "west" 34 | }, 35 | // level 4 36 | { 37 | path: [ 38 | [3, 4], 39 | [2, 4], 40 | [3, 3], 41 | [3, 2] 42 | ], 43 | blocks: 8, 44 | obstacle: 2, 45 | switches: [1], 46 | facing: "north" 47 | }, 48 | // level 5 49 | { 50 | path: [ 51 | [3, 5], 52 | [3, 4], 53 | [3, 3], 54 | [2, 4], 55 | [3, 3], 56 | [3, 2] 57 | ], 58 | blocks: 9, 59 | obstacle: 2, 60 | switches: [1, 3], 61 | facing: "north" 62 | }, 63 | // level 6 64 | { 65 | path: [ 66 | [5, 3], 67 | [4, 3], 68 | [3, 3], 69 | [2, 3], 70 | [1, 3] 71 | ], 72 | blocks: 3, 73 | facing: "west" 74 | }, 75 | // level 7 76 | { 77 | path: [ 78 | [1, 5], 79 | [2, 5], 80 | [3, 5], 81 | [4, 5], 82 | [4, 4], 83 | [4, 3], 84 | [4, 2], 85 | [3, 2], 86 | [2, 2], 87 | [1, 2] 88 | ], 89 | blocks: 6, 90 | facing: "east" 91 | }, 92 | //level 8 93 | { 94 | path: [ 95 | [3, 4], 96 | [3, 3], 97 | [3, 2], 98 | [4, 4], 99 | [5, 4] 100 | ], 101 | blocks: 9, 102 | obstacle: 3, 103 | switches: [1, 2], 104 | facing: "south" 105 | }, 106 | // level 9 107 | { 108 | path: [ 109 | [1, 5], 110 | [1, 4], 111 | [2, 4], 112 | [2, 3], 113 | [3, 3], 114 | [3, 2], 115 | [4, 2], 116 | [4, 1], 117 | [5, 1] 118 | ], 119 | blocks: 6, 120 | facing: "north" 121 | }, 122 | // level 10 123 | { 124 | path: [ 125 | [3, 3], 126 | [2, 3], 127 | [2, 4], 128 | [3, 4], 129 | [4, 3], 130 | [5, 3] 131 | ], 132 | blocks: 7, 133 | obstacle: 4, 134 | switches: [3, 1], 135 | facing: "south" 136 | } 137 | ]; 138 | -------------------------------------------------------------------------------- /objects/carrot/carrot.obj: -------------------------------------------------------------------------------- 1 | # Created by Kenney (www.kenney.nl) 2 | 3 | mtllib carrot.mtl 4 | 5 | g carrot 6 | 7 | v -0.0363315 0.4 0.020976 8 | v -0.0363315 0.4 -0.020976 9 | v 1.490126E-10 0.4 0.041952 10 | v -0.01107 0.4 0.01107 11 | v 0.01107 0.4 0.01107 12 | v 0.0363315 0.4 0.020976 13 | v 0.01107 0.4 -0.01107 14 | v -0.01107 0.4 -0.01107 15 | v 1.490126E-10 0.4 -0.041952 16 | v 0.0363315 0.4 -0.020976 17 | v 1.490123E-10 0.36 0.06 18 | v -0.05196153 0.36 0.03 19 | v 1.490123E-10 0.36 -0.06 20 | v 0.05196153 0.36 -0.03 21 | v 0.05196153 0.36 0.03 22 | v -0.05196153 0.36 -0.03 23 | v -0.01766692 0 -0.0102 24 | v -0.01766692 0 0.0102 25 | v 1.490123E-10 0 -0.0204 26 | v 1.490123E-10 0 0.0204 27 | v 0.01766692 0 -0.0102 28 | v 0.01766692 0 0.0102 29 | v 1.490123E-10 0.02 0.03 30 | v -0.02598076 0.02 0.015 31 | v 1.490123E-10 0.02 -0.03 32 | v 0.02598076 0.02 -0.015 33 | v 0.02598076 0.02 0.015 34 | v -0.02598076 0.02 -0.015 35 | v -0.03321 0.6227495 -0.06389733 36 | v -0.01107 0.6571575 -0.1206398 37 | v 0.03321 0.6227495 -0.06389733 38 | v 0.01107 0.6571575 -0.1206398 39 | v 0.02214 0.5563835 -0.02705598 40 | v -0.02214 0.5563835 -0.02705598 41 | v 0.06389733 0.5626071 0.03321 42 | v 0.02705597 0.5141599 0.02214 43 | v 0.06389733 0.5626071 -0.03321 44 | v 0.02705598 0.5141599 -0.02214 45 | v 0.1206398 0.587725 0.01107 46 | v 0.1206398 0.587725 -0.01107 47 | v -0.06389733 0.6739818 0.03321 48 | v -0.06389733 0.6739818 -0.03321 49 | v -0.02705598 0.5923516 0.02214 50 | v -0.02705598 0.5923516 -0.02214 51 | v -0.1206398 0.7163037 0.01107 52 | v -0.1206398 0.7163037 -0.01107 53 | v -0.03321 0.6227495 0.06389733 54 | v 0.03321 0.6227495 0.06389733 55 | v -0.01107 0.6571575 0.1206398 56 | v 0.01107 0.6571575 0.1206398 57 | v -0.02214 0.5563835 0.02705598 58 | v 0.02214 0.5563835 0.02705598 59 | v -0.0732239 0.4916298 0.02214 60 | v -0.0732239 0.4916298 -0.02214 61 | v -0.171571 0.512981 0.01107 62 | v -0.171571 0.512981 -0.01107 63 | v -0.1206398 0.5169111 0.03321 64 | v -0.1206398 0.5169111 -0.03321 65 | v 0.1206398 0.5169111 0.03321 66 | v 0.1206398 0.5169111 -0.03321 67 | v 0.171571 0.512981 0.01107 68 | v 0.171571 0.512981 -0.01107 69 | v 0.0732239 0.4916298 0.02214 70 | v 0.0732239 0.4916298 -0.02214 71 | v -0.02214 0.4916298 0.0732239 72 | v 0.02214 0.4916298 0.0732239 73 | v -0.03321 0.5169111 0.1206398 74 | v 0.03320999 0.5169111 0.1206398 75 | v -0.01107001 0.512981 0.171571 76 | v 0.01106999 0.512981 0.171571 77 | v 0.02214 0.4916298 -0.0732239 78 | v -0.02214 0.4916298 -0.0732239 79 | v -0.03321 0.5169111 -0.1206398 80 | v -0.01107 0.512981 -0.171571 81 | v 0.03321 0.5169111 -0.1206398 82 | v 0.01107 0.512981 -0.171571 83 | 84 | vn 0 1 0 85 | vn -0.4657089 0.3639521 0.8066314 86 | vn 0.4657089 0.3639521 -0.8066314 87 | vn 0.4657089 0.3639521 0.8066314 88 | vn -0.4657089 0.3639521 -0.8066314 89 | vn -0.9314176 0.3639521 0 90 | vn 0.9314176 0.3639521 0 91 | vn 0 -1 0 92 | vn -0.461698 -0.3838485 0.7996844 93 | vn 0.461698 -0.3838485 -0.7996844 94 | vn 0.9233961 -0.3838485 0 95 | vn -0.461698 -0.3838485 -0.7996844 96 | vn 0.461698 -0.3838485 0.7996844 97 | vn -0.9233961 -0.3838485 0 98 | vn 0.9970932 -0.07619189 0 99 | vn -0.4985466 -0.07619188 -0.863508 100 | vn 0.4985466 -0.07619188 -0.863508 101 | vn -0.4985466 -0.07619188 0.863508 102 | vn -0.9970932 -0.07619189 0 103 | vn 0.4985466 -0.07619188 0.863508 104 | vn 0 0.8550734 0.5185071 105 | vn 0 -0.8550734 -0.5185071 106 | vn 0 0.4853545 0.8743175 107 | vn 0 -0.4853545 -0.8743175 108 | vn 0 0.101693 0.9948158 109 | vn 0 -0.101693 -0.9948158 110 | vn -0.7959921 0.605307 0 111 | vn 0.7959921 -0.605307 0 112 | vn -0.4047785 0.9144148 0 113 | vn 0.4047785 -0.9144148 0 114 | vn -0.9903375 0.1386784 0 115 | vn 0.9903375 -0.1386784 0 116 | vn 0.9114707 0.4113651 0 117 | vn -0.9114707 -0.4113651 0 118 | vn 0.9965643 0.08282254 0 119 | vn -0.9965643 -0.08282254 0 120 | vn 0.5978731 0.8015907 0 121 | vn -0.5978731 -0.8015907 0 122 | vn 0 0.8550734 -0.5185071 123 | vn 0 -0.8550734 0.5185071 124 | vn 0 0.4853545 -0.8743175 125 | vn 0 -0.4853545 0.8743175 126 | vn 0 0.101693 -0.9948158 127 | vn 0 -0.101693 0.9948158 128 | vn 0.8275743 0.5613562 0 129 | vn -0.8275743 -0.5613562 0 130 | vn -0.07693703 0.997036 0 131 | vn 0.07693703 -0.997036 0 132 | vn 0.4704844 0.8824083 0 133 | vn -0.4704844 -0.8824083 0 134 | vn 0.07693703 0.997036 0 135 | vn -0.07693703 -0.997036 0 136 | vn -0.4704844 0.8824083 0 137 | vn 0.4704844 -0.8824083 0 138 | vn -0.8275743 0.5613562 0 139 | vn 0.8275743 -0.5613562 0 140 | vn 0 0.5613562 -0.8275743 141 | vn 0 -0.5613562 0.8275743 142 | vn 0 0.8824083 -0.4704844 143 | vn 0 -0.8824083 0.4704844 144 | vn 0 0.997036 0.07693703 145 | vn 0 -0.997036 -0.07693703 146 | vn 0 0.5613562 0.8275743 147 | vn 0 -0.5613562 -0.8275743 148 | vn 0 0.997036 -0.07693703 149 | vn 0 -0.997036 0.07693703 150 | vn 0 0.8824083 0.4704844 151 | vn 0 -0.8824083 -0.4704844 152 | 153 | vt -1.430374 -0.8258268 154 | vt -1.430374 0.8258268 155 | vt 5.866639E-09 -1.651654 156 | vt -0.4358268 -0.4358267 157 | vt 0.4358268 -0.4358267 158 | vt 1.430374 -0.8258268 159 | vt 0.4358268 0.4358268 160 | vt -0.4358268 0.4358268 161 | vt 5.866639E-09 1.651654 162 | vt 1.430374 0.8258268 163 | vt 1.181102 12.45665 164 | vt -1.181102 12.45665 165 | vt 0.8258268 14.14741 166 | vt -0.8258268 14.14741 167 | vt 0.6955479 0.4015748 168 | vt 0.6955479 -0.4015748 169 | vt -5.866625E-09 0.8031496 170 | vt -5.866625E-09 -0.8031496 171 | vt -0.6955479 0.4015748 172 | vt -0.6955479 -0.4015748 173 | vt 0.4015748 0.2669851 174 | vt -0.4015748 0.2669851 175 | vt 0.5905512 1.119709 176 | vt -0.5905512 1.119709 177 | vt 0.4015748 0.2669851 178 | vt -0.4015748 0.2669851 179 | vt -1.181102 14.2879 180 | vt 1.181102 14.2879 181 | vt -0.5905512 0.8630467 182 | vt 0.5905512 0.8630467 183 | vt -1.30748 14.86366 184 | vt -0.4358268 17.47625 185 | vt 1.30748 14.86366 186 | vt 0.4358268 17.47625 187 | vt 0.8716536 19.6688 188 | vt -0.8716536 19.6688 189 | vt 1.30748 22.65723 190 | vt -1.30748 22.65723 191 | vt 0.4358268 15.71071 192 | vt -0.4358268 15.71071 193 | vt 0.8716536 21.89963 194 | vt -0.8716536 21.89963 195 | vt 1.30748 19.15387 196 | vt 0.8716535 16.75765 197 | vt -1.30748 19.15387 198 | vt -0.8716536 16.75765 199 | vt 1.30748 11.26614 200 | vt -1.30748 11.26614 201 | vt 0.4358267 13.70918 202 | vt -0.4358268 13.70918 203 | vt 0.8716535 20.19464 204 | vt 0.4358267 15.65631 205 | vt -0.8716536 20.19464 206 | vt -0.4358268 15.65631 207 | vt -1.30748 25.22046 208 | vt 1.30748 25.22046 209 | vt -0.8716536 21.69453 210 | vt 0.8716536 21.69453 211 | vt -0.8716536 23.32903 212 | vt 0.8716536 23.32903 213 | vt -0.4358267 15.73002 214 | vt 0.4358268 15.73002 215 | vt -0.4358267 20.66782 216 | vt 0.4358268 20.66782 217 | vt -1.30748 17.88091 218 | vt 1.30748 17.88091 219 | vt -0.8716536 17.63641 220 | vt 0.8716536 17.63641 221 | vt -0.4358268 13.27732 222 | vt 0.4358268 13.27732 223 | vt 0.4358268 -5.180914 224 | vt -0.4358268 -5.180914 225 | vt 1.30748 -3.169789 226 | vt -1.30748 -3.169789 227 | vt -1.30748 13.76583 228 | vt 1.30748 13.76583 229 | vt -0.8716536 11.6503 230 | vt 0.8716536 11.6503 231 | vt -0.4358267 -5.180914 232 | vt 0.8716535 11.6503 233 | vt 0.8716535 17.63641 234 | vt 0.4358267 13.27732 235 | vt 0.4358268 -5.180914 236 | 237 | usemtl orange 238 | 239 | f 3/3/1 2/2/1 1/1/1 240 | f 2/2/1 3/3/1 4/4/1 241 | f 4/4/1 3/3/1 5/5/1 242 | f 5/5/1 3/3/1 6/6/1 243 | f 5/5/1 6/6/1 7/7/1 244 | f 8/8/1 2/2/1 4/4/1 245 | f 2/2/1 8/8/1 9/9/1 246 | f 9/9/1 8/8/1 7/7/1 247 | f 9/9/1 7/7/1 10/10/1 248 | f 10/10/1 7/7/1 6/6/1 249 | f 3/13/2 12/12/2 11/11/2 250 | f 12/12/2 3/13/2 1/14/2 251 | f 9/13/3 14/12/3 13/11/3 252 | f 14/12/3 9/13/3 10/14/3 253 | f 6/13/4 11/12/4 15/11/4 254 | f 11/12/4 6/13/4 3/14/4 255 | f 2/13/5 13/12/5 16/11/5 256 | f 13/12/5 2/13/5 9/14/5 257 | f 1/13/6 16/12/6 12/11/6 258 | f 16/12/6 1/13/6 2/14/6 259 | f 14/11/7 6/14/7 15/12/7 260 | f 6/14/7 14/11/7 10/13/7 261 | f 19/17/8 18/16/8 17/15/8 262 | f 18/16/8 19/17/8 20/18/8 263 | f 20/18/8 19/17/8 21/19/8 264 | f 20/18/8 21/19/8 22/20/8 265 | f 23/23/9 18/22/9 20/21/9 266 | f 18/22/9 23/23/9 24/24/9 267 | f 25/23/10 21/22/10 19/21/10 268 | f 21/22/10 25/23/10 26/24/10 269 | f 22/22/11 26/23/11 27/24/11 270 | f 26/23/11 22/22/11 21/25/11 271 | f 28/23/12 19/26/12 17/21/12 272 | f 19/26/12 28/23/12 25/24/12 273 | f 27/23/13 20/22/13 22/25/13 274 | f 20/22/13 27/23/13 23/24/13 275 | f 28/24/14 18/21/14 24/23/14 276 | f 18/21/14 28/24/14 17/26/14 277 | f 27/29/15 14/28/15 15/27/15 278 | f 14/28/15 27/29/15 26/30/15 279 | f 16/28/16 25/29/16 28/30/16 280 | f 25/29/16 16/28/16 13/27/16 281 | f 13/28/17 26/29/17 25/30/17 282 | f 26/29/17 13/28/17 14/27/17 283 | f 11/28/18 24/29/18 23/30/18 284 | f 24/29/18 11/28/18 12/27/18 285 | f 16/27/19 24/30/19 12/28/19 286 | f 24/30/19 16/27/19 28/29/19 287 | f 15/28/20 23/29/20 27/30/20 288 | f 23/29/20 15/28/20 11/27/20 289 | 290 | usemtl green 291 | 292 | f 31/33/21 30/32/21 29/31/21 293 | f 30/32/21 31/33/21 32/34/21 294 | f 29/31/22 30/32/22 31/33/22 295 | f 32/34/22 31/33/22 30/32/22 296 | f 31/37/23 34/36/23 33/35/23 297 | f 34/36/23 31/37/23 29/38/23 298 | f 33/35/24 34/36/24 31/37/24 299 | f 29/38/24 31/37/24 34/36/24 300 | f 33/41/25 8/40/25 7/39/25 301 | f 8/40/25 33/41/25 34/42/25 302 | f 7/39/26 8/40/26 33/41/26 303 | f 34/42/26 33/41/26 8/40/26 304 | f 37/45/27 36/44/27 35/43/27 305 | f 36/44/27 37/45/27 38/46/27 306 | f 35/43/28 36/44/28 37/45/28 307 | f 38/46/28 37/45/28 36/44/28 308 | f 39/49/29 37/48/29 35/47/29 309 | f 37/48/29 39/49/29 40/50/29 310 | f 35/47/30 37/48/30 39/49/30 311 | f 40/50/30 39/49/30 37/48/30 312 | f 38/53/31 5/52/31 36/51/31 313 | f 5/52/31 38/53/31 7/54/31 314 | f 36/51/32 5/52/32 38/53/32 315 | f 7/54/32 38/53/32 5/52/32 316 | f 43/57/33 42/56/33 41/55/33 317 | f 42/56/33 43/57/33 44/58/33 318 | f 41/55/34 42/56/34 43/57/34 319 | f 44/58/34 43/57/34 42/56/34 320 | f 4/61/35 44/60/35 43/59/35 321 | f 44/60/35 4/61/35 8/62/35 322 | f 43/59/36 44/60/36 4/61/36 323 | f 8/62/36 4/61/36 44/60/36 324 | f 41/65/37 46/64/37 45/63/37 325 | f 46/64/37 41/65/37 42/66/37 326 | f 45/63/38 46/64/38 41/65/38 327 | f 42/66/38 41/65/38 46/64/38 328 | f 49/34/39 48/31/39 47/33/39 329 | f 48/31/39 49/34/39 50/32/39 330 | f 47/33/40 48/31/40 49/34/40 331 | f 50/32/40 49/34/40 48/31/40 332 | f 47/37/41 52/36/41 51/35/41 333 | f 52/36/41 47/37/41 48/38/41 334 | f 51/35/42 52/36/42 47/37/42 335 | f 48/38/42 47/37/42 52/36/42 336 | f 51/41/43 5/40/43 4/39/43 337 | f 5/40/43 51/41/43 52/42/43 338 | f 4/39/44 5/40/44 51/41/44 339 | f 52/42/44 51/41/44 5/40/44 340 | f 5/5/1 8/8/1 4/4/1 341 | f 8/8/1 5/5/1 7/7/1 342 | f 4/69/45 54/68/45 53/67/45 343 | f 54/68/45 4/69/45 8/70/45 344 | f 53/67/46 54/68/46 4/69/46 345 | f 8/70/46 4/69/46 54/68/46 346 | f 57/73/47 56/72/47 55/71/47 347 | f 56/72/47 57/73/47 58/74/47 348 | f 55/71/48 56/72/48 57/73/48 349 | f 58/74/48 57/73/48 56/72/48 350 | f 53/77/49 58/76/49 57/75/49 351 | f 58/76/49 53/77/49 54/78/49 352 | f 57/75/50 58/76/50 53/77/50 353 | f 54/78/50 53/77/50 58/76/50 354 | f 61/79/51 60/73/51 59/74/51 355 | f 60/73/51 61/79/51 62/71/51 356 | f 59/74/52 60/73/52 61/79/52 357 | f 62/71/52 61/79/52 60/73/52 358 | f 59/76/53 64/77/53 63/80/53 359 | f 64/77/53 59/76/53 60/75/53 360 | f 63/80/54 64/77/54 59/76/54 361 | f 60/75/54 59/76/54 64/77/54 362 | f 64/67/55 5/82/55 63/81/55 363 | f 5/82/55 64/67/55 7/69/55 364 | f 63/81/56 5/82/56 64/67/56 365 | f 7/69/56 64/67/56 5/82/56 366 | f 65/68/57 5/69/57 4/82/57 367 | f 5/69/57 65/68/57 66/67/57 368 | f 4/82/58 5/69/58 65/68/58 369 | f 66/67/58 65/68/58 5/69/58 370 | f 68/75/59 65/80/59 67/76/59 371 | f 65/80/59 68/75/59 66/77/59 372 | f 67/76/60 65/80/60 68/75/60 373 | f 66/77/60 68/75/60 65/80/60 374 | f 69/79/61 68/73/61 67/74/61 375 | f 68/73/61 69/79/61 70/83/61 376 | f 67/74/62 68/73/62 69/79/62 377 | f 70/83/62 69/79/62 68/73/62 378 | f 71/68/63 8/69/63 7/70/63 379 | f 8/69/63 71/68/63 72/67/63 380 | f 7/70/64 8/69/64 71/68/64 381 | f 72/67/64 71/68/64 8/69/64 382 | f 75/74/65 74/71/65 73/73/65 383 | f 74/71/65 75/74/65 76/72/65 384 | f 73/73/66 74/71/66 75/74/66 385 | f 76/72/66 75/74/66 74/71/66 386 | f 72/77/67 75/76/67 73/75/67 387 | f 75/76/67 72/77/67 71/78/67 388 | f 73/75/68 75/76/68 72/77/68 389 | f 71/78/68 72/77/68 75/76/68 390 | 391 | -------------------------------------------------------------------------------- /objects/spikes/spikes.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | mtllib spikes.mtl 4 | o spikesLarge 5 | v -0.290536 -0.080213 -0.132516 6 | v -0.134322 -0.080213 -0.132516 7 | v -0.140771 -0.054545 -0.138916 8 | v -0.284087 -0.054545 -0.138916 9 | v -0.218525 0.189301 -0.216033 10 | v -0.218525 0.189301 -0.204011 11 | v -0.206332 0.189301 -0.204011 12 | v -0.206332 0.189301 -0.216033 13 | v -0.251621 -0.054545 -0.248662 14 | v -0.251621 -0.054545 -0.171382 15 | v -0.173237 -0.054545 -0.171382 16 | v -0.173237 -0.054545 -0.248662 17 | v -0.134322 -0.080213 -0.287527 18 | v -0.290536 -0.080213 -0.287527 19 | v -0.284087 -0.054545 -0.281128 20 | v -0.140771 -0.054545 -0.281128 21 | v -0.251621 -0.054545 -0.038640 22 | v -0.251621 -0.054545 0.038640 23 | v -0.218525 0.189301 0.006011 24 | v -0.218525 0.189301 -0.006011 25 | v -0.140771 -0.054545 0.071106 26 | v -0.134322 -0.080213 0.077506 27 | v -0.134322 -0.080213 -0.077505 28 | v -0.140771 -0.054545 -0.071106 29 | v -0.206332 0.189301 0.006011 30 | v -0.173237 -0.054545 0.038640 31 | v -0.173237 -0.054545 -0.038640 32 | v -0.206332 0.189301 -0.006011 33 | v -0.290536 -0.080213 -0.077505 34 | v -0.290536 -0.080213 0.077506 35 | v -0.284087 -0.054545 0.071106 36 | v -0.284087 -0.054545 -0.071106 37 | v -0.134322 -0.080213 0.132516 38 | v -0.290536 -0.080213 0.132516 39 | v -0.284087 -0.054545 0.138916 40 | v -0.140771 -0.054545 0.138916 41 | v -0.251621 -0.054545 0.248662 42 | v -0.173237 -0.054545 0.248662 43 | v -0.206332 0.189301 0.216033 44 | v -0.218525 0.189301 0.216033 45 | v -0.290536 -0.080213 0.287527 46 | v -0.134322 -0.080213 0.287527 47 | v -0.140771 -0.054545 0.281128 48 | v -0.284087 -0.054545 0.281128 49 | v -0.251621 -0.054545 0.171382 50 | v -0.218525 0.189301 0.204011 51 | v -0.173237 -0.054545 0.171382 52 | v -0.206332 0.189301 0.204011 53 | v 0.290536 -0.080213 0.132516 54 | v 0.134322 -0.080213 0.132516 55 | v 0.140771 -0.054545 0.138916 56 | v 0.284087 -0.054545 0.138916 57 | v 0.134322 -0.080213 0.287527 58 | v 0.290536 -0.080213 0.287527 59 | v 0.284087 -0.054545 0.281128 60 | v 0.140771 -0.054545 0.281128 61 | v 0.206332 0.189301 0.204011 62 | v 0.206332 0.189301 0.216033 63 | v 0.218525 0.189301 0.216033 64 | v 0.218525 0.189301 0.204011 65 | v 0.173237 -0.054545 0.171382 66 | v 0.173237 -0.054545 0.248662 67 | v 0.251621 -0.054545 0.248662 68 | v 0.251621 -0.054545 0.171382 69 | v 0.290536 -0.080213 -0.077505 70 | v 0.134322 -0.080213 -0.077505 71 | v 0.140771 -0.054545 -0.071106 72 | v 0.284087 -0.054545 -0.071106 73 | v 0.173237 -0.054545 0.038640 74 | v 0.251621 -0.054545 0.038640 75 | v 0.218525 0.189301 0.006011 76 | v 0.206332 0.189301 0.006011 77 | v 0.251621 -0.054545 -0.038640 78 | v 0.218525 0.189301 -0.006011 79 | v 0.173237 -0.054545 -0.038640 80 | v 0.206332 0.189301 -0.006011 81 | v 0.284087 -0.054545 0.071106 82 | v 0.290536 -0.080213 0.077506 83 | v 0.134322 -0.080213 0.077506 84 | v 0.140771 -0.054545 0.071106 85 | v -0.039192 -0.054545 0.171382 86 | v -0.039192 -0.054545 0.248662 87 | v -0.006097 0.189301 0.216033 88 | v -0.006097 0.189301 0.204011 89 | v 0.039192 -0.054545 0.171382 90 | v 0.006096 0.189301 0.204011 91 | v -0.078107 -0.080213 0.287527 92 | v 0.078107 -0.080213 0.287527 93 | v 0.071658 -0.054545 0.281128 94 | v -0.071658 -0.054545 0.281128 95 | v -0.071658 -0.054545 0.138916 96 | v 0.039192 -0.054545 0.248662 97 | v 0.071658 -0.054545 0.138916 98 | v 0.006096 0.189301 0.216033 99 | v -0.078107 -0.080213 0.132516 100 | v 0.078107 -0.080213 0.132516 101 | v 0.134322 -0.080213 -0.287527 102 | v 0.134322 -0.080213 -0.132516 103 | v 0.140771 -0.054545 -0.138916 104 | v 0.140771 -0.054545 -0.281128 105 | v 0.251621 -0.054545 -0.248662 106 | v 0.173237 -0.054545 -0.248662 107 | v 0.206332 0.189301 -0.216033 108 | v 0.218525 0.189301 -0.216033 109 | v 0.290536 -0.080213 -0.287527 110 | v 0.284087 -0.054545 -0.281128 111 | v 0.284087 -0.054545 -0.138916 112 | v 0.290536 -0.080213 -0.132516 113 | v 0.173237 -0.054545 -0.171382 114 | v 0.251621 -0.054545 -0.171382 115 | v 0.218525 0.189301 -0.204011 116 | v 0.206332 0.189301 -0.204011 117 | v -0.039192 -0.054545 -0.038640 118 | v -0.039192 -0.054545 0.038640 119 | v -0.006097 0.189301 0.006011 120 | v -0.006097 0.189301 -0.006011 121 | v -0.078107 -0.080213 0.077506 122 | v -0.078107 -0.080213 -0.077505 123 | v 0.078107 -0.080213 -0.077505 124 | v 0.078107 -0.080213 0.077506 125 | v 0.039192 -0.054545 -0.038640 126 | v 0.006096 0.189301 -0.006011 127 | v 0.006096 0.189301 0.006011 128 | v 0.039192 -0.054545 0.038640 129 | v 0.071658 -0.054545 0.071106 130 | v -0.071658 -0.054545 0.071106 131 | v -0.071658 -0.054545 -0.071106 132 | v 0.071658 -0.054545 -0.071106 133 | v 0.078107 -0.080213 -0.287527 134 | v -0.078107 -0.080213 -0.287527 135 | v -0.071658 -0.054545 -0.281128 136 | v 0.071658 -0.054545 -0.281128 137 | v -0.039192 -0.054545 -0.171382 138 | v 0.039192 -0.054545 -0.171382 139 | v 0.006096 0.189301 -0.204011 140 | v -0.006097 0.189301 -0.204011 141 | v -0.078107 -0.080213 -0.132516 142 | v -0.071658 -0.054545 -0.138916 143 | v 0.071658 -0.054545 -0.138916 144 | v 0.039192 -0.054545 -0.248662 145 | v -0.039192 -0.054545 -0.248662 146 | v 0.078107 -0.080213 -0.132516 147 | v -0.006097 0.189301 -0.216033 148 | v 0.006096 0.189301 -0.216033 149 | vt 8.246622 6.024201 150 | vt 14.396790 6.024201 151 | vt 14.142890 7.065687 152 | vt 8.500528 7.065687 153 | vt 11.081690 28.190260 154 | vt 11.081690 27.716980 155 | vt 11.561730 27.716980 156 | vt 27.716980 8.959454 157 | vt 26.432360 -0.728800 158 | vt 29.474880 -0.728800 159 | vt 28.190260 8.959454 160 | vt -14.396790 -7.500554 161 | vt -8.246622 -7.500554 162 | vt -8.500528 -6.459068 163 | vt -14.142890 -6.459068 164 | vt -8.246622 24.902220 165 | vt -8.246622 31.005020 166 | vt -14.396790 31.005020 167 | vt -31.005020 2.009546 168 | vt -24.902220 2.009546 169 | vt -25.154169 3.051507 170 | vt 9.778715 26.432360 171 | vt 8.500528 30.753071 172 | vt 8.500528 25.154169 173 | vt 14.142890 25.154169 174 | vt 12.864700 29.474880 175 | vt 12.864700 26.432360 176 | vt 9.778715 29.474880 177 | vt 14.142890 30.753071 178 | vt 25.154169 -2.466265 179 | vt 24.902220 -3.508226 180 | vt 31.005020 -3.508226 181 | vt 30.753071 -2.466265 182 | vt -12.864700 -2.907603 183 | vt -9.778715 -2.907603 184 | vt -11.081690 6.778200 185 | vt -21.206301 2.316508 186 | vt -18.163780 2.316508 187 | vt -19.448400 12.004760 188 | vt -19.921680 12.004760 189 | vt 22.736441 -3.508226 190 | vt 22.484489 -2.466265 191 | vt 16.885590 -2.466265 192 | vt 19.448400 8.959454 193 | vt 18.163780 -0.728800 194 | vt 21.206301 -0.728800 195 | vt 19.921680 8.959454 196 | vt -22.736441 2.009546 197 | vt -16.633640 2.009546 198 | vt -16.885590 3.051507 199 | vt -22.484489 3.051507 200 | vt -14.396790 -5.500267 201 | vt -8.246622 -5.500267 202 | vt -8.500528 -4.458781 203 | vt -14.142890 -4.458781 204 | vt -14.396790 22.736441 205 | vt -14.396790 16.633640 206 | vt -8.246622 16.633640 207 | vt 9.778715 18.163780 208 | vt 8.500528 22.484489 209 | vt 8.500528 16.885590 210 | vt 14.142890 16.885590 211 | vt 12.864700 18.163780 212 | vt 9.778715 21.206301 213 | vt 14.142890 22.484489 214 | vt 12.864700 21.206301 215 | vt 11.561730 19.448400 216 | vt 11.561730 19.921680 217 | vt 11.081690 19.921680 218 | vt 14.142890 5.065400 219 | vt 8.500528 5.065400 220 | vt 8.246622 4.023914 221 | vt 9.778715 3.410670 222 | vt 12.864700 3.410670 223 | vt 11.561730 13.096470 224 | vt -14.396790 -3.499980 225 | vt -8.246622 -3.499980 226 | vt -8.500528 -2.458494 227 | vt 9.778715 2.314015 228 | vt 12.864700 2.314015 229 | vt 11.561730 11.999820 230 | vt 11.081690 11.999820 231 | vt -14.467860 2.009546 232 | vt -8.365063 2.009546 233 | vt -8.617013 3.051507 234 | vt 9.778715 9.895200 235 | vt 8.500528 14.215910 236 | vt 8.500528 8.617013 237 | vt 14.142890 8.617013 238 | vt 12.864700 9.895200 239 | vt 12.864700 12.937720 240 | vt 14.142890 14.215910 241 | vt 8.617013 -2.466265 242 | vt 8.365063 -3.508226 243 | vt 14.467860 -3.508226 244 | vt 14.215910 -2.466265 245 | vt -11.081690 8.971509 246 | vt -11.561730 8.971509 247 | vt -12.864700 -0.714294 248 | vt 11.179820 8.959454 249 | vt 9.895200 -0.728800 250 | vt 12.937720 -0.728800 251 | vt 30.869551 3.065113 252 | vt 25.227190 3.065113 253 | vt 24.973289 2.023628 254 | vt 27.808350 11.653100 255 | vt 27.808350 11.179820 256 | vt 28.288389 11.179820 257 | vt 28.288389 11.653100 258 | vt -11.179820 14.254330 259 | vt -11.653100 14.254330 260 | vt -12.937720 4.566073 261 | vt 26.505381 9.895200 262 | vt 25.227190 14.215910 263 | vt 25.227190 8.617013 264 | vt 30.869551 8.617013 265 | vt 29.591360 12.937720 266 | vt 29.591360 9.895200 267 | vt 26.505381 12.937720 268 | vt 30.869551 14.215910 269 | vt 8.617013 -6.542237 270 | vt 8.365063 -7.584198 271 | vt 14.467860 -7.584198 272 | vt 14.215910 -6.542237 273 | vt -24.973289 8.365063 274 | vt -24.973289 14.467860 275 | vt -31.123461 14.467860 276 | vt -31.123461 8.365063 277 | vt 12.937720 -2.978366 278 | vt 11.653100 6.709888 279 | vt 11.179820 6.709888 280 | vt -31.123461 -5.500267 281 | vt -24.973289 -5.500267 282 | vt -25.227190 -4.458781 283 | vt 26.505381 3.410670 284 | vt 29.591360 3.410670 285 | vt 28.288389 13.096470 286 | vt 27.808350 13.096470 287 | vt 19.448400 6.709888 288 | vt 18.163780 -2.978366 289 | vt 21.206301 -2.978366 290 | vt -27.808350 7.874854 291 | vt -28.288389 7.874854 292 | vt -29.591360 -1.810949 293 | vt 22.736441 -7.584198 294 | vt 22.484489 -6.542237 295 | vt 16.885590 -6.542237 296 | vt 30.869551 5.065400 297 | vt 25.227190 5.065400 298 | vt 24.973289 4.023914 299 | vt 27.808350 19.921680 300 | vt 27.808350 19.448400 301 | vt 28.288389 19.448400 302 | vt -21.206301 4.566073 303 | vt -18.163780 4.566073 304 | vt -19.448400 14.254330 305 | vt -19.921680 14.254330 306 | vt 26.505381 18.163780 307 | vt 25.227190 22.484489 308 | vt 25.227190 16.885590 309 | vt 30.869551 16.885590 310 | vt 29.591360 21.206301 311 | vt 29.591360 18.163780 312 | vt 26.505381 21.206301 313 | vt 30.869551 22.484489 314 | vt -12.937720 3.441290 315 | vt -9.895200 3.441290 316 | vt -11.179820 13.129540 317 | vt -11.653100 13.129540 318 | vt 16.609949 2.023628 319 | vt 22.760120 2.023628 320 | vt 22.506220 3.065113 321 | vt 18.142050 9.895200 322 | vt 16.863859 14.215910 323 | vt 16.863859 8.617013 324 | vt 22.506220 8.617013 325 | vt 21.228029 12.937720 326 | vt 21.228029 9.895200 327 | vt 18.142050 12.937720 328 | vt 22.506220 14.215910 329 | vt 18.142050 2.314015 330 | vt 21.228029 2.314015 331 | vt 19.925060 11.999820 332 | vt 12.937720 -1.853583 333 | vt 11.653100 7.834671 334 | vt 11.179820 7.834671 335 | vt 8.617013 -4.504251 336 | vt 8.365063 -5.546212 337 | vt 14.467860 -5.546212 338 | vt -8.617013 5.089492 339 | vt -14.215910 5.089492 340 | vt -14.467860 4.047532 341 | vt 19.445021 11.653100 342 | vt 19.445021 11.179820 343 | vt 19.925060 11.179820 344 | vt 19.925060 11.653100 345 | vt -31.005020 6.085518 346 | vt -24.902220 6.085518 347 | vt -25.154169 7.127479 348 | vt -29.591360 -2.907603 349 | vt -26.505381 -2.907603 350 | vt -27.808350 6.778200 351 | vt -28.288389 6.778200 352 | vt -25.227190 -6.459068 353 | vt -30.869551 -6.459068 354 | vt -31.123461 -7.500554 355 | vt 25.154169 -6.542237 356 | vt 24.902220 -7.584198 357 | vt 31.005020 -7.584198 358 | vt 30.753071 -6.542237 359 | vt 24.973289 6.024201 360 | vt 31.123461 6.024201 361 | vt 30.869551 7.065687 362 | vt 26.505381 4.507324 363 | vt 29.591360 4.507324 364 | vt 28.288389 14.193130 365 | vt 26.505381 26.432360 366 | vt 25.227190 30.753071 367 | vt 25.227190 25.154169 368 | vt 30.869551 25.154169 369 | vt 29.591360 26.432360 370 | vt 29.591360 29.474880 371 | vt 26.505381 29.474880 372 | vt 30.869551 30.753071 373 | vt 27.808350 28.190260 374 | vt 27.808350 27.716980 375 | vt 28.288389 27.716980 376 | vt -24.973289 24.902220 377 | vt -24.973289 31.005020 378 | vt -31.123461 31.005020 379 | vt -31.123461 24.902220 380 | vt 27.716980 6.709888 381 | vt 26.432360 -2.978366 382 | vt 29.474880 -2.978366 383 | vt 28.190260 6.709888 384 | vt -21.206301 3.441290 385 | vt -18.163780 3.441290 386 | vt -19.448400 13.129540 387 | vt -16.609949 16.633640 388 | vt -16.609949 22.736441 389 | vt -22.760120 22.736441 390 | vt -22.760120 16.633640 391 | vt 21.206301 -1.853583 392 | vt 19.921680 7.834671 393 | vt 19.448400 7.834671 394 | vt 18.142050 3.410670 395 | vt 21.228029 3.410670 396 | vt 19.925060 13.096470 397 | vt 22.506220 5.065400 398 | vt 16.863859 5.065400 399 | vt 16.609949 4.023914 400 | vt -22.736441 4.047532 401 | vt -16.633640 4.047532 402 | vt -16.885590 5.089492 403 | vt -22.484489 5.089492 404 | vt 19.445021 19.921680 405 | vt 19.445021 19.448400 406 | vt 19.925060 19.448400 407 | vt 18.142050 21.206301 408 | vt 21.228029 21.206301 409 | vt 22.506220 22.484489 410 | vt 22.506220 16.885590 411 | vt 18.142050 4.507324 412 | vt 21.228029 4.507324 413 | vt 19.925060 14.193130 414 | vt -31.005020 4.047532 415 | vt -24.902220 4.047532 416 | vt -25.154169 5.089492 417 | vt 22.506220 25.154169 418 | vt 21.228029 26.432360 419 | vt 18.142050 26.432360 420 | vt 16.863859 30.753071 421 | vt 18.142050 29.474880 422 | vt 22.506220 7.065687 423 | vt 16.863859 7.065687 424 | vt 16.609949 6.024201 425 | vt 25.154169 -4.504251 426 | vt 24.902220 -5.546212 427 | vt 31.005020 -5.546212 428 | vt 30.753071 -4.504251 429 | vt -21.228029 -2.907603 430 | vt -18.142050 -2.907603 431 | vt -19.445021 6.778200 432 | vt -19.925060 6.778200 433 | vt 27.716980 7.834671 434 | vt 26.432360 -1.853583 435 | vt 29.474880 -1.853583 436 | vt 28.190260 7.834671 437 | vt -29.474880 3.441290 438 | vt -26.432360 3.441290 439 | vt -27.716980 13.129540 440 | vt 19.925060 27.716980 441 | vt 19.925060 28.190260 442 | vt 19.445021 28.190260 443 | vt 11.561730 28.190260 444 | vt -29.474880 2.316508 445 | vt -26.432360 2.316508 446 | vt -27.716980 12.004760 447 | vt -28.190260 12.004760 448 | vt -14.396790 24.902220 449 | vt -30.753071 3.051507 450 | vt 9.778715 4.507324 451 | vt 12.864700 4.507324 452 | vt 11.561730 14.193130 453 | vt 11.081690 14.193130 454 | vt -11.561730 6.778200 455 | vt 16.633640 -3.508226 456 | vt -8.246622 22.736441 457 | vt -12.864700 -1.810949 458 | vt -9.778715 -1.810949 459 | vt -11.081690 7.874854 460 | vt -11.561730 7.874854 461 | vt 11.081690 19.448400 462 | vt 14.396790 4.023914 463 | vt 11.081690 13.096470 464 | vt -14.142890 -2.458494 465 | vt 8.246622 2.023628 466 | vt 14.396790 2.023628 467 | vt 14.142890 3.065113 468 | vt 8.500528 3.065113 469 | vt -14.215910 3.051507 470 | vt -12.937720 2.316508 471 | vt -9.895200 2.316508 472 | vt -11.179820 12.004760 473 | vt -11.653100 12.004760 474 | vt 9.778715 12.937720 475 | vt 11.081690 11.653100 476 | vt 11.081690 11.179820 477 | vt 11.561730 11.179820 478 | vt 11.561730 11.653100 479 | vt -8.246622 8.365063 480 | vt -8.246622 14.467860 481 | vt -14.396790 14.467860 482 | vt -14.396790 8.365063 483 | vt -9.778715 -0.714294 484 | vt 11.653100 8.959454 485 | vt -31.123461 -3.499980 486 | vt -24.973289 -3.499980 487 | vt -25.227190 -2.458494 488 | vt -30.869551 -2.458494 489 | vt 31.123461 2.023628 490 | vt -14.467860 6.085518 491 | vt -8.365063 6.085518 492 | vt -8.617013 7.127479 493 | vt -14.215910 7.127479 494 | vt -9.895200 4.566073 495 | vt 26.505381 2.314015 496 | vt 29.591360 2.314015 497 | vt 28.288389 11.999820 498 | vt 27.808350 11.999820 499 | vt -29.591360 -0.714294 500 | vt -26.505381 -0.714294 501 | vt -27.808350 8.971509 502 | vt -28.288389 8.971509 503 | vt 9.895200 -2.978366 504 | vt -30.869551 -4.458781 505 | vt 19.921680 6.709888 506 | vt -26.505381 -1.810949 507 | vt 16.633640 -7.584198 508 | vt 31.123461 4.023914 509 | vt 28.288389 19.921680 510 | vt -22.736441 6.085518 511 | vt -16.633640 6.085518 512 | vt -16.885590 7.127479 513 | vt -22.484489 7.127479 514 | vt -24.973289 16.633640 515 | vt -24.973289 22.736441 516 | vt -31.123461 22.736441 517 | vt -31.123461 16.633640 518 | vt -21.228029 -0.714294 519 | vt -18.142050 -0.714294 520 | vt -19.445021 8.971509 521 | vt -19.925060 8.971509 522 | vt 16.863859 3.065113 523 | vt 19.445021 11.999820 524 | vt 9.895200 -1.853583 525 | vt -16.609949 8.365063 526 | vt -16.609949 14.467860 527 | vt -22.760120 14.467860 528 | vt -22.760120 8.365063 529 | vt 14.215910 -4.504251 530 | vt -22.760120 -3.499980 531 | vt -16.609949 -3.499980 532 | vt -16.863859 -2.458494 533 | vt -22.506220 -2.458494 534 | vt -8.365063 4.047532 535 | vt -30.753071 7.127479 536 | vt -24.973289 -7.500554 537 | vt 25.227190 7.065687 538 | vt 27.808350 14.193130 539 | vt 28.288389 28.190260 540 | vt -29.474880 4.566073 541 | vt -26.432360 4.566073 542 | vt -27.716980 14.254330 543 | vt -28.190260 14.254330 544 | vt -19.921680 13.129540 545 | vt -21.228029 -1.810949 546 | vt -18.142050 -1.810949 547 | vt -19.445021 7.874854 548 | vt -19.925060 7.874854 549 | vt 18.163780 -1.853583 550 | vt 19.445021 13.096470 551 | vt 22.760120 4.023914 552 | vt 19.925060 19.921680 553 | vt 18.142050 18.163780 554 | vt 16.863859 22.484489 555 | vt 16.863859 16.885590 556 | vt 21.228029 18.163780 557 | vt 16.885590 -4.504251 558 | vt 16.633640 -5.546212 559 | vt 22.736441 -5.546212 560 | vt 22.484489 -4.504251 561 | vt -22.760120 -5.500267 562 | vt -16.609949 -5.500267 563 | vt -16.863859 -4.458781 564 | vt -22.506220 -4.458781 565 | vt -22.760120 -7.500554 566 | vt -16.609949 -7.500554 567 | vt -16.863859 -6.459068 568 | vt -22.506220 -6.459068 569 | vt 19.445021 14.193130 570 | vt -30.753071 5.089492 571 | vt 16.863859 25.154169 572 | vt 21.228029 29.474880 573 | vt 22.506220 30.753071 574 | vt 22.760120 6.024201 575 | vt -16.609949 24.902220 576 | vt -16.609949 31.005020 577 | vt -22.760120 31.005020 578 | vt -22.760120 24.902220 579 | vt -28.190260 13.129540 580 | vt 19.445021 27.716980 581 | vn 0.0000 0.2420 -0.9703 582 | vn 0.0000 1.0000 0.0000 583 | vn -0.9909 0.1345 0.0000 584 | vn -0.0000 0.2420 0.9703 585 | vn 0.0000 -1.0000 -0.0000 586 | vn 0.9699 0.2437 -0.0000 587 | vn -0.9699 0.2437 -0.0000 588 | vn -0.0000 0.1327 0.9912 589 | vn 0.9909 0.1345 -0.0000 590 | vn 0.0000 0.1327 -0.9912 591 | usemtl metal 592 | s 1 593 | f 1/1/1 2/2/1 3/3/1 594 | f 3/3/1 4/4/1 1/1/1 595 | f 5/5/2 6/6/2 7/7/2 596 | f 7/8/3 11/9/3 12/10/3 597 | f 12/10/3 8/11/3 7/8/3 598 | f 13/12/4 14/13/4 15/14/4 599 | f 15/14/4 16/15/4 13/12/4 600 | f 1/16/5 14/17/5 13/18/5 601 | f 14/19/6 1/20/6 4/21/6 602 | f 10/22/2 15/23/2 4/24/2 603 | f 4/24/2 3/25/2 10/22/2 604 | f 3/25/2 12/26/2 11/27/2 605 | f 9/28/2 16/29/2 15/23/2 606 | f 3/30/7 2/31/7 13/32/7 607 | f 13/32/7 16/33/7 3/30/7 608 | f 12/34/8 9/35/8 5/36/8 609 | f 17/37/9 18/38/9 19/39/9 610 | f 19/39/9 20/40/9 17/37/9 611 | f 23/41/7 24/42/7 21/43/7 612 | f 25/44/3 26/45/3 27/46/3 613 | f 27/46/3 28/47/3 25/44/3 614 | f 29/48/6 30/49/6 31/50/6 615 | f 31/50/6 32/51/6 29/48/6 616 | f 23/52/4 29/53/4 32/54/4 617 | f 32/54/4 24/55/4 23/52/4 618 | f 23/56/5 22/57/5 30/58/5 619 | f 18/59/2 32/60/2 31/61/2 620 | f 21/62/2 26/63/2 18/59/2 621 | f 32/60/2 18/59/2 17/64/2 622 | f 17/64/2 24/65/2 32/60/2 623 | f 17/64/2 27/66/2 24/65/2 624 | f 25/67/2 28/68/2 20/69/2 625 | f 21/70/1 31/71/1 30/72/1 626 | f 18/73/10 26/74/10 25/75/10 627 | f 33/76/4 34/77/4 35/78/4 628 | f 37/79/10 38/80/10 39/81/10 629 | f 39/81/10 40/82/10 37/79/10 630 | f 34/83/6 41/84/6 44/85/6 631 | f 37/86/2 35/87/2 44/88/2 632 | f 44/88/2 43/89/2 37/86/2 633 | f 43/89/2 38/90/2 37/86/2 634 | f 43/89/2 47/91/2 38/90/2 635 | f 47/91/2 43/89/2 36/92/2 636 | f 43/93/7 42/94/7 33/95/7 637 | f 33/95/7 36/96/7 43/93/7 638 | f 46/97/8 48/98/8 47/99/8 639 | f 39/100/3 38/101/3 47/102/3 640 | f 55/103/1 56/104/1 53/105/1 641 | f 57/106/2 58/107/2 59/108/2 642 | f 59/108/2 60/109/2 57/106/2 643 | f 58/110/9 57/111/9 61/112/9 644 | f 62/113/2 51/114/2 56/115/2 645 | f 55/116/2 64/117/2 63/118/2 646 | f 61/119/2 52/120/2 51/114/2 647 | f 55/121/7 54/122/7 49/123/7 648 | f 49/123/7 52/124/7 55/121/7 649 | f 53/125/5 50/126/5 49/127/5 650 | f 49/127/5 54/128/5 53/125/5 651 | f 64/129/3 60/130/3 59/131/3 652 | f 65/132/4 66/133/4 67/134/4 653 | f 69/135/10 70/136/10 71/137/10 654 | f 71/137/10 72/138/10 69/135/10 655 | f 71/139/3 70/140/3 73/141/3 656 | f 76/142/8 74/143/8 73/144/8 657 | f 65/145/7 68/146/7 77/147/7 658 | f 77/148/1 80/149/1 79/150/1 659 | f 76/151/2 72/152/2 71/153/2 660 | f 75/154/9 69/155/9 72/156/9 661 | f 72/156/9 76/157/9 75/154/9 662 | f 69/158/2 67/159/2 80/160/2 663 | f 77/161/2 73/162/2 70/163/2 664 | f 75/164/2 73/162/2 68/165/2 665 | f 73/162/2 77/161/2 68/165/2 666 | f 81/166/9 82/167/9 83/168/9 667 | f 83/168/9 84/169/9 81/166/9 668 | f 87/170/1 88/171/1 89/172/1 669 | f 82/173/2 91/174/2 90/175/2 670 | f 89/176/2 85/177/2 92/178/2 671 | f 91/174/2 82/173/2 81/179/2 672 | f 81/179/2 93/180/2 91/174/2 673 | f 81/179/2 85/177/2 93/180/2 674 | f 82/181/10 92/182/10 94/183/10 675 | f 85/184/3 86/185/3 94/186/3 676 | f 89/187/7 88/188/7 96/189/7 677 | f 90/190/6 91/191/6 95/192/6 678 | f 84/193/2 83/194/2 94/195/2 679 | f 94/195/2 86/196/2 84/193/2 680 | f 97/197/6 98/198/6 99/199/6 681 | f 101/200/8 102/201/8 103/202/8 682 | f 103/202/8 104/203/8 101/200/8 683 | f 100/204/4 106/205/4 105/206/4 684 | f 107/207/7 108/208/7 105/209/7 685 | f 105/209/7 106/210/7 107/207/7 686 | f 98/211/1 108/212/1 107/213/1 687 | f 109/214/10 110/215/10 111/216/10 688 | f 109/217/2 100/218/2 99/219/2 689 | f 99/219/2 107/220/2 109/217/2 690 | f 107/220/2 110/221/2 109/217/2 691 | f 107/220/2 101/222/2 110/221/2 692 | f 100/218/2 109/217/2 102/223/2 693 | f 102/223/2 106/224/2 100/218/2 694 | f 101/222/2 107/220/2 106/224/2 695 | f 103/225/2 112/226/2 111/227/2 696 | f 98/228/5 97/229/5 105/230/5 697 | f 105/230/5 108/231/5 98/228/5 698 | f 111/232/3 110/233/3 101/234/3 699 | f 101/234/3 104/235/3 111/232/3 700 | f 113/236/9 114/237/9 115/238/9 701 | f 117/239/5 118/240/5 119/241/5 702 | f 119/241/5 120/242/5 117/239/5 703 | f 121/243/3 122/244/3 123/245/3 704 | f 114/246/10 124/247/10 123/248/10 705 | f 125/249/1 126/250/1 117/251/1 706 | f 118/252/6 117/253/6 126/254/6 707 | f 126/254/6 127/255/6 118/252/6 708 | f 116/256/2 115/257/2 123/258/2 709 | f 113/259/2 121/260/2 128/261/2 710 | f 121/260/2 125/262/2 128/261/2 711 | f 133/263/10 134/264/10 135/265/10 712 | f 130/266/6 137/267/6 138/268/6 713 | f 139/269/2 134/270/2 133/271/2 714 | f 131/272/2 133/271/2 141/273/2 715 | f 139/274/1 138/275/1 137/276/1 716 | f 139/277/7 142/278/7 129/279/7 717 | f 129/279/7 132/280/7 139/277/7 718 | f 140/281/8 141/282/8 143/283/8 719 | f 143/283/8 144/284/8 140/281/8 720 | f 135/285/3 134/286/3 140/287/3 721 | f 140/287/3 144/288/3 135/285/3 722 | f 141/289/9 133/290/9 136/291/9 723 | f 135/292/2 144/293/2 143/294/2 724 | f 7/7/2 8/295/2 5/5/2 725 | f 9/296/9 10/297/9 6/298/9 726 | f 6/298/9 5/299/9 9/296/9 727 | f 13/18/5 2/300/5 1/16/5 728 | f 4/21/6 15/301/6 14/19/6 729 | f 3/25/2 11/27/2 10/22/2 730 | f 15/23/2 10/22/2 9/28/2 731 | f 9/28/2 12/26/2 16/29/2 732 | f 12/26/2 3/25/2 16/29/2 733 | f 10/302/10 11/303/10 7/304/10 734 | f 7/304/10 6/305/10 10/302/10 735 | f 5/36/8 8/306/8 12/34/8 736 | f 21/43/7 22/307/7 23/41/7 737 | f 30/58/5 29/308/5 23/56/5 738 | f 27/309/8 17/310/8 20/311/8 739 | f 20/311/8 28/312/8 27/309/8 740 | f 31/61/2 21/62/2 18/59/2 741 | f 21/62/2 27/66/2 26/63/2 742 | f 27/66/2 21/62/2 24/65/2 743 | f 20/69/2 19/313/2 25/67/2 744 | f 30/72/1 22/314/1 21/70/1 745 | f 25/75/10 19/315/10 18/73/10 746 | f 35/78/4 36/316/4 33/76/4 747 | f 41/317/1 42/318/1 43/319/1 748 | f 43/319/1 44/320/1 41/317/1 749 | f 44/85/6 35/321/6 34/83/6 750 | f 45/322/9 37/323/9 40/324/9 751 | f 40/324/9 46/325/9 45/322/9 752 | f 35/87/2 37/86/2 45/326/2 753 | f 45/326/2 36/92/2 35/87/2 754 | f 45/326/2 47/91/2 36/92/2 755 | f 46/327/2 40/328/2 39/329/2 756 | f 39/329/2 48/330/2 46/327/2 757 | f 41/331/5 34/332/5 33/333/5 758 | f 33/333/5 42/334/5 41/331/5 759 | f 47/99/8 45/335/8 46/97/8 760 | f 47/102/3 48/336/3 39/100/3 761 | f 49/337/4 50/338/4 51/339/4 762 | f 51/339/4 52/340/4 49/337/4 763 | f 53/105/1 54/341/1 55/103/1 764 | f 50/342/6 53/343/6 56/344/6 765 | f 56/344/6 51/345/6 50/342/6 766 | f 61/112/9 62/346/9 58/110/9 767 | f 56/115/2 55/116/2 62/113/2 768 | f 55/116/2 63/118/2 62/113/2 769 | f 51/114/2 62/113/2 61/119/2 770 | f 61/119/2 64/117/2 52/120/2 771 | f 64/117/2 55/116/2 52/120/2 772 | f 62/347/10 63/348/10 59/349/10 773 | f 59/349/10 58/350/10 62/347/10 774 | f 64/351/8 61/352/8 57/353/8 775 | f 57/353/8 60/354/8 64/351/8 776 | f 59/131/3 63/355/3 64/129/3 777 | f 67/134/4 68/356/4 65/132/4 778 | f 73/141/3 74/357/3 71/139/3 779 | f 73/144/8 75/358/8 76/142/8 780 | f 77/147/7 78/359/7 65/145/7 781 | f 79/150/1 78/360/1 77/148/1 782 | f 71/153/2 74/361/2 76/151/2 783 | f 66/362/6 79/363/6 80/364/6 784 | f 80/364/6 67/365/6 66/362/6 785 | f 79/366/5 66/367/5 65/368/5 786 | f 65/368/5 78/369/5 79/366/5 787 | f 80/160/2 77/161/2 69/158/2 788 | f 77/161/2 70/163/2 69/158/2 789 | f 67/159/2 69/158/2 75/164/2 790 | f 75/164/2 68/165/2 67/159/2 791 | f 85/370/8 81/371/8 84/372/8 792 | f 84/372/8 86/373/8 85/370/8 793 | f 89/172/1 90/374/1 87/170/1 794 | f 90/175/2 89/176/2 82/173/2 795 | f 89/176/2 92/178/2 82/173/2 796 | f 85/177/2 89/176/2 93/180/2 797 | f 94/183/10 83/375/10 82/181/10 798 | f 94/186/3 92/376/3 85/184/3 799 | f 87/377/5 95/378/5 96/379/5 800 | f 96/379/5 88/380/5 87/377/5 801 | f 96/189/7 93/381/7 89/187/7 802 | f 96/382/4 95/383/4 91/384/4 803 | f 91/384/4 93/385/4 96/382/4 804 | f 95/192/6 87/386/6 90/190/6 805 | f 99/199/6 100/387/6 97/197/6 806 | f 105/206/4 97/388/4 100/204/4 807 | f 107/213/1 99/389/1 98/211/1 808 | f 111/216/10 112/390/10 109/214/10 809 | f 102/223/2 101/222/2 106/224/2 810 | f 111/227/2 104/391/2 103/225/2 811 | f 102/392/9 109/393/9 112/394/9 812 | f 112/394/9 103/395/9 102/392/9 813 | f 115/238/9 116/396/9 113/236/9 814 | f 121/397/8 113/398/8 116/399/8 815 | f 116/399/8 122/400/8 121/397/8 816 | f 123/245/3 124/401/3 121/243/3 817 | f 123/248/10 115/402/10 114/246/10 818 | f 117/251/1 120/403/1 125/249/1 819 | f 123/258/2 122/404/2 116/256/2 820 | f 114/405/2 127/406/2 126/407/2 821 | f 126/407/2 125/262/2 114/405/2 822 | f 125/262/2 124/408/2 114/405/2 823 | f 125/262/2 121/260/2 124/408/2 824 | f 127/406/2 114/405/2 113/259/2 825 | f 113/259/2 128/261/2 127/406/2 826 | f 125/409/7 120/410/7 119/411/7 827 | f 119/411/7 128/412/7 125/409/7 828 | f 119/413/4 118/414/4 127/415/4 829 | f 127/415/4 128/416/4 119/413/4 830 | f 129/417/4 130/418/4 131/419/4 831 | f 131/419/4 132/420/4 129/417/4 832 | f 135/265/10 136/421/10 133/263/10 833 | f 138/268/6 131/422/6 130/266/6 834 | f 133/271/2 131/272/2 138/423/2 835 | f 138/423/2 139/269/2 133/271/2 836 | f 139/269/2 140/424/2 134/270/2 837 | f 141/273/2 132/425/2 131/272/2 838 | f 141/273/2 140/424/2 132/425/2 839 | f 140/424/2 139/269/2 132/425/2 840 | f 137/276/1 142/426/1 139/274/1 841 | f 137/427/5 130/428/5 129/429/5 842 | f 129/429/5 142/430/5 137/427/5 843 | f 136/291/9 143/431/9 141/289/9 844 | f 143/294/2 136/432/2 135/292/2 845 | -------------------------------------------------------------------------------- /objects/bunny/bunny.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.80 (sub 75) OBJ File: '' 2 | # www.blender.org 3 | mtllib bunny.mtl 4 | o bunny 5 | v 0.100000 1.000000 0.450000 6 | v -0.100000 0.800000 0.450000 7 | v 0.100000 0.800000 0.450000 8 | v -0.100000 1.000000 0.450000 9 | v 0.300000 0.100000 0.350000 10 | v -0.300000 -0.000000 0.350000 11 | v 0.300000 -0.000000 0.350000 12 | v -0.300000 0.100000 0.350000 13 | v 0.100000 0.800000 0.350000 14 | v -0.500000 0.500000 0.350000 15 | v 0.200000 0.500000 0.350000 16 | v -0.100000 0.800000 0.350000 17 | v 0.100000 1.000000 0.350000 18 | v -0.100000 1.000000 0.350000 19 | v 0.200000 1.100000 0.350000 20 | v -0.300000 1.100000 0.350000 21 | v -0.300000 1.600000 0.350000 22 | v -0.500000 1.600000 0.350000 23 | v 0.000000 0.300000 0.250000 24 | v -0.300000 0.100000 0.250000 25 | v 0.000000 0.100000 0.250000 26 | v -0.400000 0.100000 0.250000 27 | v 0.100000 0.400000 0.250000 28 | v 0.100000 0.300000 0.250000 29 | v 0.000000 0.400000 0.250000 30 | v 0.000000 0.500000 0.250000 31 | v -0.400000 0.500000 0.250000 32 | v -0.400000 0.300000 0.150000 33 | v -0.600000 0.100000 0.150000 34 | v -0.400000 0.100000 0.150000 35 | v -0.600000 0.300000 0.150000 36 | v 0.300000 0.900000 0.150000 37 | v 0.200000 0.700000 0.150000 38 | v 0.300000 0.700000 0.150000 39 | v 0.200000 0.900000 0.150000 40 | v 0.300000 0.100000 -0.050000 41 | v -0.300000 0.000000 -0.050000 42 | v 0.300000 0.000000 -0.050000 43 | v 0.000000 0.100000 -0.050000 44 | v -0.300000 0.100000 -0.050000 45 | v 0.100000 0.400000 -0.050000 46 | v 0.000000 0.300000 -0.050000 47 | v 0.100000 0.300000 -0.050000 48 | v 0.000000 0.400000 -0.050000 49 | v -0.300000 1.500000 -0.050000 50 | v -0.400000 1.100000 -0.050000 51 | v -0.300000 1.100000 -0.050000 52 | v -0.400000 1.500000 -0.050000 53 | v -0.500000 1.100000 -0.050000 54 | v -0.300000 1.600000 -0.050000 55 | v -0.500000 1.600000 -0.050000 56 | v 0.300000 -0.000000 0.050000 57 | v -0.300000 -0.000000 0.050000 58 | v 0.300000 0.100000 0.050000 59 | v 0.000000 0.100000 0.050000 60 | v -0.300000 0.100000 0.050000 61 | v 0.100000 0.300000 0.050000 62 | v 0.000000 0.300000 0.050000 63 | v 0.100000 0.400000 0.050000 64 | v 0.000000 0.400000 0.050000 65 | v -0.300000 1.100000 0.050000 66 | v -0.400000 1.100000 0.050000 67 | v -0.300000 1.500000 0.050000 68 | v -0.500000 1.100000 0.050000 69 | v -0.400000 1.500000 0.050000 70 | v -0.300000 1.600000 0.050000 71 | v -0.500000 1.600000 0.050000 72 | v -0.400000 0.100000 -0.150000 73 | v -0.600000 0.100000 -0.150000 74 | v -0.400000 0.300000 -0.150000 75 | v -0.600000 0.300000 -0.150000 76 | v 0.300000 0.700000 -0.150000 77 | v 0.200000 0.700000 -0.150000 78 | v 0.300000 0.900000 -0.150000 79 | v 0.200000 0.900000 -0.150000 80 | v 0.000000 0.100000 -0.250000 81 | v -0.300000 0.100000 -0.250000 82 | v 0.000000 0.300000 -0.250000 83 | v -0.400000 0.100000 -0.250000 84 | v 0.100000 0.300000 -0.250000 85 | v 0.100000 0.400000 -0.250000 86 | v 0.000000 0.400000 -0.250000 87 | v 0.000000 0.500000 -0.250000 88 | v -0.400000 0.500000 -0.250000 89 | v 0.300000 0.000000 -0.350000 90 | v -0.300000 0.000000 -0.350000 91 | v 0.300000 0.100000 -0.350000 92 | v -0.300000 0.100000 -0.350000 93 | v 0.200000 0.500000 -0.350000 94 | v -0.500000 0.500000 -0.350000 95 | v 0.100000 0.800000 -0.350000 96 | v -0.100000 0.800000 -0.350000 97 | v 0.100000 1.000000 -0.350000 98 | v -0.100000 1.000000 -0.350000 99 | v 0.200000 1.100000 -0.350000 100 | v -0.300000 1.100000 -0.350000 101 | v -0.300000 1.600000 -0.350000 102 | v -0.500000 1.600000 -0.350000 103 | v 0.100000 0.800000 -0.450000 104 | v -0.100000 0.800000 -0.450000 105 | v 0.100000 1.000000 -0.450000 106 | v -0.100000 1.000000 -0.450000 107 | v 0.300000 -0.000000 0.050000 108 | v 0.300000 0.100000 0.350000 109 | v 0.300000 -0.000000 0.350000 110 | v 0.300000 0.100000 0.050000 111 | v 0.300000 0.700000 -0.150000 112 | v 0.300000 0.900000 0.150000 113 | v 0.300000 0.700000 0.150000 114 | v 0.300000 0.900000 -0.150000 115 | v 0.300000 0.000000 -0.350000 116 | v 0.300000 0.100000 -0.050000 117 | v 0.300000 0.000000 -0.050000 118 | v 0.300000 0.100000 -0.350000 119 | v 0.200000 0.700000 0.150000 120 | v 0.200000 1.100000 0.350000 121 | v 0.200000 0.500000 0.350000 122 | v 0.200000 0.900000 0.150000 123 | v 0.200000 0.700000 -0.150000 124 | v 0.200000 0.900000 -0.150000 125 | v 0.200000 0.500000 -0.350000 126 | v 0.200000 1.100000 -0.350000 127 | v 0.100000 0.800000 0.350000 128 | v 0.100000 1.000000 0.450000 129 | v 0.100000 0.800000 0.450000 130 | v 0.100000 1.000000 0.350000 131 | v 0.100000 0.300000 0.050000 132 | v 0.100000 0.400000 0.250000 133 | v 0.100000 0.300000 0.250000 134 | v 0.100000 0.400000 0.050000 135 | v 0.100000 0.300000 -0.250000 136 | v 0.100000 0.400000 -0.050000 137 | v 0.100000 0.300000 -0.050000 138 | v 0.100000 0.400000 -0.250000 139 | v 0.100000 0.800000 -0.450000 140 | v 0.100000 1.000000 -0.350000 141 | v 0.100000 0.800000 -0.350000 142 | v 0.100000 1.000000 -0.450000 143 | v 0.000000 0.100000 0.050000 144 | v 0.000000 0.300000 0.250000 145 | v 0.000000 0.100000 0.250000 146 | v 0.000000 0.300000 0.050000 147 | v 0.000000 0.400000 0.050000 148 | v 0.000000 0.500000 0.250000 149 | v 0.000000 0.400000 0.250000 150 | v 0.000000 0.100000 -0.050000 151 | v 0.000000 0.300000 -0.050000 152 | v 0.000000 0.400000 -0.050000 153 | v 0.000000 0.100000 -0.250000 154 | v 0.000000 0.300000 -0.250000 155 | v 0.000000 0.400000 -0.250000 156 | v 0.000000 0.500000 -0.250000 157 | v -0.300000 1.100000 0.250000 158 | v -0.300000 1.600000 0.350000 159 | v -0.300000 1.100000 0.350000 160 | v -0.300000 1.500000 0.250000 161 | v -0.300000 1.100000 0.050000 162 | v -0.300000 1.500000 0.050000 163 | v -0.300000 1.600000 0.050000 164 | v -0.300000 1.100000 -0.250000 165 | v -0.300000 1.500000 -0.050000 166 | v -0.300000 1.100000 -0.050000 167 | v -0.300000 1.500000 -0.250000 168 | v -0.300000 1.600000 -0.050000 169 | v -0.300000 1.100000 -0.350000 170 | v -0.300000 1.600000 -0.350000 171 | v -0.100000 0.800000 0.450000 172 | v -0.100000 1.000000 0.450000 173 | v -0.100000 0.800000 0.350000 174 | v -0.100000 1.000000 0.350000 175 | v -0.100000 0.800000 -0.350000 176 | v -0.100000 1.000000 -0.350000 177 | v -0.100000 0.800000 -0.450000 178 | v -0.100000 1.000000 -0.450000 179 | v -0.300000 -0.000000 0.350000 180 | v -0.300000 0.100000 0.350000 181 | v -0.300000 0.100000 0.250000 182 | v -0.300000 -0.000000 0.050000 183 | v -0.300000 0.100000 0.050000 184 | v -0.300000 0.000000 -0.050000 185 | v -0.300000 0.100000 -0.050000 186 | v -0.300000 0.100000 -0.250000 187 | v -0.300000 0.000000 -0.350000 188 | v -0.300000 0.100000 -0.350000 189 | v -0.400000 0.100000 0.250000 190 | v -0.400000 0.500000 0.250000 191 | v -0.400000 0.100000 0.150000 192 | v -0.400000 0.300000 0.150000 193 | v -0.400000 0.300000 -0.150000 194 | v -0.400000 0.100000 -0.150000 195 | v -0.400000 0.100000 -0.250000 196 | v -0.400000 0.500000 -0.250000 197 | v -0.500000 0.500000 0.350000 198 | v -0.500000 1.600000 0.350000 199 | v -0.500000 1.100000 0.050000 200 | v -0.500000 1.600000 0.050000 201 | v -0.500000 1.100000 -0.050000 202 | v -0.500000 0.500000 -0.350000 203 | v -0.500000 1.600000 -0.050000 204 | v -0.500000 1.600000 -0.350000 205 | v -0.600000 0.100000 0.150000 206 | v -0.600000 0.300000 0.150000 207 | v -0.600000 0.100000 -0.150000 208 | v -0.600000 0.300000 -0.150000 209 | v -0.300000 -0.000000 0.350000 210 | v 0.300000 -0.000000 0.050000 211 | v 0.300000 -0.000000 0.350000 212 | v -0.300000 -0.000000 0.050000 213 | v -0.300000 0.000000 -0.050000 214 | v 0.300000 0.000000 -0.350000 215 | v 0.300000 0.000000 -0.050000 216 | v -0.300000 0.000000 -0.350000 217 | v -0.300000 0.100000 0.050000 218 | v 0.000000 0.100000 -0.050000 219 | v 0.000000 0.100000 0.050000 220 | v -0.300000 0.100000 -0.050000 221 | v -0.400000 0.100000 0.250000 222 | v -0.300000 0.100000 0.250000 223 | v -0.300000 0.100000 -0.250000 224 | v -0.400000 0.100000 0.150000 225 | v -0.400000 0.100000 -0.150000 226 | v -0.400000 0.100000 -0.250000 227 | v -0.600000 0.100000 0.150000 228 | v -0.600000 0.100000 -0.150000 229 | v 0.000000 0.300000 0.250000 230 | v 0.100000 0.300000 0.050000 231 | v 0.100000 0.300000 0.250000 232 | v 0.000000 0.300000 0.050000 233 | v 0.000000 0.300000 -0.050000 234 | v 0.100000 0.300000 -0.250000 235 | v 0.100000 0.300000 -0.050000 236 | v 0.000000 0.300000 -0.250000 237 | v 0.000000 0.500000 0.250000 238 | v 0.200000 0.500000 -0.350000 239 | v 0.200000 0.500000 0.350000 240 | v 0.000000 0.500000 -0.250000 241 | v -0.400000 0.500000 0.250000 242 | v -0.400000 0.500000 -0.250000 243 | v -0.500000 0.500000 0.350000 244 | v -0.500000 0.500000 -0.350000 245 | v 0.200000 0.700000 0.150000 246 | v 0.300000 0.700000 -0.150000 247 | v 0.300000 0.700000 0.150000 248 | v 0.200000 0.700000 -0.150000 249 | v -0.100000 0.800000 0.450000 250 | v 0.100000 0.800000 0.350000 251 | v 0.100000 0.800000 0.450000 252 | v -0.100000 0.800000 0.350000 253 | v -0.100000 0.800000 -0.350000 254 | v 0.100000 0.800000 -0.450000 255 | v 0.100000 0.800000 -0.350000 256 | v -0.100000 0.800000 -0.450000 257 | v 0.300000 0.100000 0.350000 258 | v 0.300000 0.100000 0.050000 259 | v 0.000000 0.100000 0.250000 260 | v 0.000000 0.100000 0.050000 261 | v 0.300000 0.100000 -0.050000 262 | v 0.300000 0.100000 -0.350000 263 | v 0.000000 0.100000 -0.050000 264 | v 0.000000 0.100000 -0.250000 265 | v -0.300000 0.100000 0.350000 266 | v -0.300000 0.100000 0.250000 267 | v -0.300000 0.100000 -0.250000 268 | v -0.300000 0.100000 -0.350000 269 | v -0.400000 0.300000 0.150000 270 | v -0.400000 0.300000 -0.150000 271 | v -0.600000 0.300000 0.150000 272 | v -0.600000 0.300000 -0.150000 273 | v 0.100000 0.400000 0.250000 274 | v 0.100000 0.400000 0.050000 275 | v 0.000000 0.400000 0.250000 276 | v 0.000000 0.400000 0.050000 277 | v 0.100000 0.400000 -0.050000 278 | v 0.100000 0.400000 -0.250000 279 | v 0.000000 0.400000 -0.050000 280 | v 0.000000 0.400000 -0.250000 281 | v 0.300000 0.900000 0.150000 282 | v 0.300000 0.900000 -0.150000 283 | v 0.200000 0.900000 0.150000 284 | v 0.200000 0.900000 -0.150000 285 | v 0.100000 1.000000 0.450000 286 | v 0.100000 1.000000 0.350000 287 | v -0.100000 1.000000 0.450000 288 | v -0.100000 1.000000 0.350000 289 | v 0.100000 1.000000 -0.350000 290 | v 0.100000 1.000000 -0.450000 291 | v -0.100000 1.000000 -0.350000 292 | v -0.100000 1.000000 -0.450000 293 | v 0.200000 1.100000 0.350000 294 | v 0.200000 1.100000 -0.350000 295 | v -0.300000 1.100000 0.350000 296 | v -0.300000 1.100000 0.250000 297 | v -0.300000 1.100000 0.050000 298 | v -0.300000 1.100000 -0.050000 299 | v -0.300000 1.100000 -0.250000 300 | v -0.300000 1.100000 -0.350000 301 | v -0.400000 1.100000 0.050000 302 | v -0.400000 1.100000 -0.050000 303 | v -0.500000 1.100000 0.050000 304 | v -0.500000 1.100000 -0.050000 305 | v -0.300000 1.600000 0.350000 306 | v -0.300000 1.600000 0.050000 307 | v -0.500000 1.600000 0.350000 308 | v -0.500000 1.600000 0.050000 309 | v -0.300000 1.600000 -0.050000 310 | v -0.300000 1.600000 -0.350000 311 | v -0.500000 1.600000 -0.050000 312 | v -0.500000 1.600000 -0.350000 313 | vt 0.986328 0.500000 314 | vt 0.986328 0.500000 315 | vt 0.986328 0.500000 316 | vt 0.986328 0.500000 317 | vt 0.970703 0.500000 318 | vt 0.970703 0.500000 319 | vt 0.970703 0.500000 320 | vt 0.970703 0.500000 321 | vt 0.970703 0.500000 322 | vt 0.970703 0.500000 323 | vt 0.970703 0.500000 324 | vt 0.970703 0.500000 325 | vt 0.970703 0.500000 326 | vt 0.970703 0.500000 327 | vt 0.970703 0.500000 328 | vt 0.970703 0.500000 329 | vt 0.970703 0.500000 330 | vt 0.970703 0.500000 331 | vt 0.970703 0.500000 332 | vt 0.970703 0.500000 333 | vt 0.970703 0.500000 334 | vt 0.970703 0.500000 335 | vt 0.970703 0.500000 336 | vt 0.970703 0.500000 337 | vt 0.970703 0.500000 338 | vt 0.970703 0.500000 339 | vt 0.970703 0.500000 340 | vt 0.970703 0.500000 341 | vt 0.970703 0.500000 342 | vt 0.970703 0.500000 343 | vt 0.970703 0.500000 344 | vt 0.974609 0.500000 345 | vt 0.974609 0.500000 346 | vt 0.974609 0.500000 347 | vt 0.974609 0.500000 348 | vt 0.970703 0.500000 349 | vt 0.970703 0.500000 350 | vt 0.970703 0.500000 351 | vt 0.970703 0.500000 352 | vt 0.970703 0.500000 353 | vt 0.970703 0.500000 354 | vt 0.970703 0.500000 355 | vt 0.970703 0.500000 356 | vt 0.970703 0.500000 357 | vt 0.978516 0.500000 358 | vt 0.978516 0.500000 359 | vt 0.978516 0.500000 360 | vt 0.970703 0.500000 361 | vt 0.970703 0.500000 362 | vt 0.970703 0.500000 363 | vt 0.978516 0.500000 364 | vt 0.970703 0.500000 365 | vt 0.970703 0.500000 366 | vt 0.970703 0.500000 367 | vt 0.970703 0.500000 368 | vt 0.970703 0.500000 369 | vt 0.970703 0.500000 370 | vt 0.970703 0.500000 371 | vt 0.970703 0.500000 372 | vt 0.970703 0.500000 373 | vt 0.970703 0.500000 374 | vt 0.970703 0.500000 375 | vt 0.970703 0.500000 376 | vt 0.978516 0.500000 377 | vt 0.978516 0.500000 378 | vt 0.978516 0.500000 379 | vt 0.970703 0.500000 380 | vt 0.970703 0.500000 381 | vt 0.970703 0.500000 382 | vt 0.978516 0.500000 383 | vt 0.970703 0.500000 384 | vt 0.970703 0.500000 385 | vt 0.970703 0.500000 386 | vt 0.970703 0.500000 387 | vt 0.970703 0.500000 388 | vt 0.970703 0.500000 389 | vt 0.970703 0.500000 390 | vt 0.974609 0.500000 391 | vt 0.974609 0.500000 392 | vt 0.974609 0.500000 393 | vt 0.974609 0.500000 394 | vt 0.970703 0.500000 395 | vt 0.970703 0.500000 396 | vt 0.970703 0.500000 397 | vt 0.970703 0.500000 398 | vt 0.970703 0.500000 399 | vt 0.970703 0.500000 400 | vt 0.970703 0.500000 401 | vt 0.970703 0.500000 402 | vt 0.970703 0.500000 403 | vt 0.970703 0.500000 404 | vt 0.970703 0.500000 405 | vt 0.970703 0.500000 406 | vt 0.970703 0.500000 407 | vt 0.970703 0.500000 408 | vt 0.970703 0.500000 409 | vt 0.970703 0.500000 410 | vt 0.970703 0.500000 411 | vt 0.970703 0.500000 412 | vt 0.970703 0.500000 413 | vt 0.970703 0.500000 414 | vt 0.970703 0.500000 415 | vt 0.970703 0.500000 416 | vt 0.970703 0.500000 417 | vt 0.986328 0.500000 418 | vt 0.986328 0.500000 419 | vt 0.986328 0.500000 420 | vt 0.986328 0.500000 421 | vt 0.970703 0.500000 422 | vt 0.970703 0.500000 423 | vt 0.970703 0.500000 424 | vt 0.970703 0.500000 425 | vt 0.974609 0.500000 426 | vt 0.974609 0.500000 427 | vt 0.974609 0.500000 428 | vt 0.974609 0.500000 429 | vt 0.970703 0.500000 430 | vt 0.970703 0.500000 431 | vt 0.970703 0.500000 432 | vt 0.970703 0.500000 433 | vt 0.970703 0.500000 434 | vt 0.970703 0.500000 435 | vt 0.970703 0.500000 436 | vt 0.970703 0.500000 437 | vt 0.970703 0.500000 438 | vt 0.970703 0.500000 439 | vt 0.970703 0.500000 440 | vt 0.970703 0.500000 441 | vt 0.986328 0.500000 442 | vt 0.986328 0.500000 443 | vt 0.986328 0.500000 444 | vt 0.986328 0.500000 445 | vt 0.970703 0.500000 446 | vt 0.970703 0.500000 447 | vt 0.970703 0.500000 448 | vt 0.970703 0.500000 449 | vt 0.970703 0.500000 450 | vt 0.970703 0.500000 451 | vt 0.970703 0.500000 452 | vt 0.970703 0.500000 453 | vt 0.986328 0.500000 454 | vt 0.986328 0.500000 455 | vt 0.986328 0.500000 456 | vt 0.986328 0.500000 457 | vt 0.970703 0.500000 458 | vt 0.970703 0.500000 459 | vt 0.970703 0.500000 460 | vt 0.970703 0.500000 461 | vt 0.970703 0.500000 462 | vt 0.970703 0.500000 463 | vt 0.970703 0.500000 464 | vt 0.970703 0.500000 465 | vt 0.970703 0.500000 466 | vt 0.970703 0.500000 467 | vt 0.970703 0.500000 468 | vt 0.970703 0.500000 469 | vt 0.970703 0.500000 470 | vt 0.970703 0.500000 471 | vt 0.970703 0.500000 472 | vt 0.970703 0.500000 473 | vt 0.970703 0.500000 474 | vt 0.970703 0.500000 475 | vt 0.978516 0.500000 476 | vt 0.978516 0.500000 477 | vt 0.978516 0.500000 478 | vt 0.970703 0.500000 479 | vt 0.978516 0.500000 480 | vt 0.970703 0.500000 481 | vt 0.978516 0.500000 482 | vt 0.978516 0.500000 483 | vt 0.978516 0.500000 484 | vt 0.970703 0.500000 485 | vt 0.970703 0.500000 486 | vt 0.970703 0.500000 487 | vt 0.978516 0.500000 488 | vt 0.970703 0.500000 489 | vt 0.970703 0.500000 490 | vt 0.970703 0.500000 491 | vt 0.986328 0.500000 492 | vt 0.986328 0.500000 493 | vt 0.986328 0.500000 494 | vt 0.986328 0.500000 495 | vt 0.986328 0.500000 496 | vt 0.986328 0.500000 497 | vt 0.986328 0.500000 498 | vt 0.986328 0.500000 499 | vt 0.970703 0.500000 500 | vt 0.970703 0.500000 501 | vt 0.970703 0.500000 502 | vt 0.970703 0.500000 503 | vt 0.970703 0.500000 504 | vt 0.970703 0.500000 505 | vt 0.970703 0.500000 506 | vt 0.970703 0.500000 507 | vt 0.970703 0.500000 508 | vt 0.970703 0.500000 509 | vt 0.970703 0.500000 510 | vt 0.970703 0.500000 511 | vt 0.970703 0.500000 512 | vt 0.970703 0.500000 513 | vt 0.970703 0.500000 514 | vt 0.970703 0.500000 515 | vt 0.970703 0.500000 516 | vt 0.970703 0.500000 517 | vt 0.970703 0.500000 518 | vt 0.970703 0.500000 519 | vt 0.970703 0.500000 520 | vt 0.970703 0.500000 521 | vt 0.970703 0.500000 522 | vt 0.970703 0.500000 523 | vt 0.970703 0.500000 524 | vt 0.970703 0.500000 525 | vt 0.970703 0.500000 526 | vt 0.970703 0.500000 527 | vt 0.970703 0.500000 528 | vt 0.970703 0.500000 529 | vt 0.970703 0.500000 530 | vt 0.970703 0.500000 531 | vt 0.970703 0.500000 532 | vt 0.970703 0.500000 533 | vt 0.970703 0.500000 534 | vt 0.970703 0.500000 535 | vt 0.970703 0.500000 536 | vt 0.970703 0.500000 537 | vt 0.970703 0.500000 538 | vt 0.970703 0.500000 539 | vt 0.970703 0.500000 540 | vt 0.970703 0.500000 541 | vt 0.970703 0.500000 542 | vt 0.970703 0.500000 543 | vt 0.970703 0.500000 544 | vt 0.970703 0.500000 545 | vt 0.970703 0.500000 546 | vt 0.970703 0.500000 547 | vt 0.970703 0.500000 548 | vt 0.970703 0.500000 549 | vt 0.970703 0.500000 550 | vt 0.970703 0.500000 551 | vt 0.970703 0.500000 552 | vt 0.970703 0.500000 553 | vt 0.970703 0.500000 554 | vt 0.970703 0.500000 555 | vt 0.970703 0.500000 556 | vt 0.970703 0.500000 557 | vt 0.970703 0.500000 558 | vt 0.970703 0.500000 559 | vt 0.970703 0.500000 560 | vt 0.970703 0.500000 561 | vt 0.970703 0.500000 562 | vt 0.970703 0.500000 563 | vt 0.970703 0.500000 564 | vt 0.970703 0.500000 565 | vt 0.974609 0.500000 566 | vt 0.974609 0.500000 567 | vt 0.974609 0.500000 568 | vt 0.974609 0.500000 569 | vt 0.986328 0.500000 570 | vt 0.986328 0.500000 571 | vt 0.986328 0.500000 572 | vt 0.986328 0.500000 573 | vt 0.986328 0.500000 574 | vt 0.986328 0.500000 575 | vt 0.986328 0.500000 576 | vt 0.986328 0.500000 577 | vt 0.970703 0.500000 578 | vt 0.970703 0.500000 579 | vt 0.970703 0.500000 580 | vt 0.970703 0.500000 581 | vt 0.970703 0.500000 582 | vt 0.970703 0.500000 583 | vt 0.970703 0.500000 584 | vt 0.970703 0.500000 585 | vt 0.970703 0.500000 586 | vt 0.970703 0.500000 587 | vt 0.970703 0.500000 588 | vt 0.970703 0.500000 589 | vt 0.970703 0.500000 590 | vt 0.970703 0.500000 591 | vt 0.970703 0.500000 592 | vt 0.970703 0.500000 593 | vt 0.970703 0.500000 594 | vt 0.970703 0.500000 595 | vt 0.970703 0.500000 596 | vt 0.970703 0.500000 597 | vt 0.970703 0.500000 598 | vt 0.970703 0.500000 599 | vt 0.970703 0.500000 600 | vt 0.970703 0.500000 601 | vt 0.974609 0.500000 602 | vt 0.974609 0.500000 603 | vt 0.974609 0.500000 604 | vt 0.974609 0.500000 605 | vt 0.986328 0.500000 606 | vt 0.986328 0.500000 607 | vt 0.986328 0.500000 608 | vt 0.986328 0.500000 609 | vt 0.986328 0.500000 610 | vt 0.986328 0.500000 611 | vt 0.986328 0.500000 612 | vt 0.986328 0.500000 613 | vt 0.970703 0.500000 614 | vt 0.970703 0.500000 615 | vt 0.970703 0.500000 616 | vt 0.970703 0.500000 617 | vt 0.970703 0.500000 618 | vt 0.970703 0.500000 619 | vt 0.970703 0.500000 620 | vt 0.970703 0.500000 621 | vt 0.970703 0.500000 622 | vt 0.970703 0.500000 623 | vt 0.970703 0.500000 624 | vt 0.970703 0.500000 625 | vt 0.970703 0.500000 626 | vt 0.970703 0.500000 627 | vt 0.970703 0.500000 628 | vt 0.970703 0.500000 629 | vt 0.970703 0.500000 630 | vt 0.970703 0.500000 631 | vt 0.970703 0.500000 632 | vt 0.970703 0.500000 633 | vn 0.0000 -0.0000 1.0000 634 | vn 0.0000 0.0000 -1.0000 635 | vn 1.0000 0.0000 0.0000 636 | vn -1.0000 0.0000 0.0000 637 | vn 0.0000 -1.0000 -0.0000 638 | vn 0.0000 1.0000 0.0000 639 | usemtl palette 640 | s 1 641 | f 1/1/1 2/2/1 3/3/1 642 | f 4/4/1 2/2/1 1/1/1 643 | f 5/5/1 6/6/1 7/7/1 644 | f 8/8/1 6/6/1 5/5/1 645 | f 9/9/1 10/10/1 11/11/1 646 | f 12/12/1 10/10/1 9/9/1 647 | f 13/13/1 9/9/1 11/11/1 648 | f 14/14/1 10/10/1 12/12/1 649 | f 15/15/1 13/13/1 11/11/1 650 | f 15/15/1 14/14/1 13/13/1 651 | f 16/16/1 10/10/1 14/14/1 652 | f 16/16/1 14/14/1 15/15/1 653 | f 17/17/1 10/10/1 16/16/1 654 | f 18/18/1 10/10/1 17/17/1 655 | f 19/19/1 20/20/1 21/21/1 656 | f 19/19/1 22/22/1 20/20/1 657 | f 23/23/1 19/19/1 24/24/1 658 | f 25/25/1 22/22/1 19/19/1 659 | f 25/25/1 19/19/1 23/23/1 660 | f 26/26/1 22/22/1 25/25/1 661 | f 27/27/1 22/22/1 26/26/1 662 | f 28/28/1 29/29/1 30/30/1 663 | f 31/31/1 29/29/1 28/28/1 664 | f 32/32/1 33/33/1 34/34/1 665 | f 35/35/1 33/33/1 32/32/1 666 | f 36/36/1 37/37/1 38/38/1 667 | f 39/39/1 37/37/1 36/36/1 668 | f 40/40/1 37/37/1 39/39/1 669 | f 41/41/1 42/42/1 43/43/1 670 | f 44/44/1 42/42/1 41/41/1 671 | f 45/45/1 46/46/1 47/47/1 672 | f 48/48/1 49/49/1 46/50/1 673 | f 48/51/1 46/46/1 45/45/1 674 | f 50/52/1 48/48/1 45/53/1 675 | f 51/54/1 49/49/1 48/48/1 676 | f 51/54/1 48/48/1 50/52/1 677 | f 52/55/2 53/56/2 54/57/2 678 | f 54/57/2 53/56/2 55/58/2 679 | f 55/58/2 53/56/2 56/59/2 680 | f 57/60/2 58/61/2 59/62/2 681 | f 59/62/2 58/61/2 60/63/2 682 | f 61/64/2 62/65/2 63/66/2 683 | f 62/67/2 64/68/2 65/69/2 684 | f 63/66/2 62/65/2 65/70/2 685 | f 63/71/2 65/69/2 66/72/2 686 | f 65/69/2 64/68/2 67/73/2 687 | f 66/72/2 65/69/2 67/73/2 688 | f 68/74/2 69/75/2 70/76/2 689 | f 70/76/2 69/75/2 71/77/2 690 | f 72/78/2 73/79/2 74/80/2 691 | f 74/80/2 73/79/2 75/81/2 692 | f 76/82/2 77/83/2 78/84/2 693 | f 77/83/2 79/85/2 78/84/2 694 | f 80/86/2 78/84/2 81/87/2 695 | f 78/84/2 79/85/2 82/88/2 696 | f 81/87/2 78/84/2 82/88/2 697 | f 82/88/2 79/85/2 83/89/2 698 | f 83/89/2 79/85/2 84/90/2 699 | f 85/91/2 86/92/2 87/93/2 700 | f 87/93/2 86/92/2 88/94/2 701 | f 89/95/2 90/96/2 91/97/2 702 | f 91/97/2 90/96/2 92/98/2 703 | f 89/95/2 91/97/2 93/99/2 704 | f 92/98/2 90/96/2 94/100/2 705 | f 89/95/2 93/99/2 95/101/2 706 | f 93/99/2 94/100/2 95/101/2 707 | f 94/100/2 90/96/2 96/102/2 708 | f 95/101/2 94/100/2 96/102/2 709 | f 96/102/2 90/96/2 97/103/2 710 | f 97/103/2 90/96/2 98/104/2 711 | f 99/105/2 100/106/2 101/107/2 712 | f 101/107/2 100/106/2 102/108/2 713 | f 103/109/3 104/110/3 105/111/3 714 | f 106/112/3 104/110/3 103/109/3 715 | f 107/113/3 108/114/3 109/115/3 716 | f 110/116/3 108/114/3 107/113/3 717 | f 111/117/3 112/118/3 113/119/3 718 | f 114/120/3 112/118/3 111/117/3 719 | f 115/121/3 116/122/3 117/123/3 720 | f 118/124/3 116/122/3 115/121/3 721 | f 119/125/3 115/121/3 117/123/3 722 | f 120/126/3 116/122/3 118/124/3 723 | f 121/127/3 119/125/3 117/123/3 724 | f 121/127/3 120/126/3 119/125/3 725 | f 122/128/3 116/122/3 120/126/3 726 | f 122/128/3 120/126/3 121/127/3 727 | f 123/129/3 124/130/3 125/131/3 728 | f 126/132/3 124/130/3 123/129/3 729 | f 127/133/3 128/134/3 129/135/3 730 | f 130/136/3 128/134/3 127/133/3 731 | f 131/137/3 132/138/3 133/139/3 732 | f 134/140/3 132/138/3 131/137/3 733 | f 135/141/3 136/142/3 137/143/3 734 | f 138/144/3 136/142/3 135/141/3 735 | f 139/145/3 140/146/3 141/147/3 736 | f 142/148/3 140/146/3 139/145/3 737 | f 143/149/3 144/150/3 145/151/3 738 | f 146/152/3 142/148/3 139/145/3 739 | f 146/152/3 143/149/3 142/148/3 740 | f 147/153/3 143/149/3 146/152/3 741 | f 148/154/3 144/150/3 143/149/3 742 | f 148/154/3 143/149/3 147/153/3 743 | f 149/155/3 147/153/3 146/152/3 744 | f 150/156/3 147/153/3 149/155/3 745 | f 151/157/3 144/150/3 148/154/3 746 | f 152/158/3 144/150/3 151/157/3 747 | f 153/159/3 154/160/3 155/161/3 748 | f 156/162/3 154/160/3 153/159/3 749 | f 157/163/3 156/164/3 153/165/3 750 | f 158/166/3 154/160/3 156/162/3 751 | f 158/167/3 156/164/3 157/163/3 752 | f 159/168/3 154/160/3 158/166/3 753 | f 160/169/3 161/170/3 162/171/3 754 | f 163/172/3 164/173/3 161/174/3 755 | f 163/175/3 161/170/3 160/169/3 756 | f 165/176/3 163/172/3 160/177/3 757 | f 166/178/3 164/173/3 163/172/3 758 | f 166/178/3 163/172/3 165/176/3 759 | f 167/179/4 168/180/4 169/181/4 760 | f 169/181/4 168/180/4 170/182/4 761 | f 171/183/4 172/184/4 173/185/4 762 | f 173/185/4 172/184/4 174/186/4 763 | f 175/187/4 176/188/4 177/189/4 764 | f 175/187/4 177/189/4 178/190/4 765 | f 178/190/4 177/189/4 179/191/4 766 | f 180/192/4 181/193/4 182/194/4 767 | f 180/192/4 182/194/4 183/195/4 768 | f 183/195/4 182/194/4 184/196/4 769 | f 185/197/4 186/198/4 187/199/4 770 | f 187/199/4 186/198/4 188/200/4 771 | f 188/200/4 186/198/4 189/201/4 772 | f 190/202/4 189/201/4 191/203/4 773 | f 189/201/4 186/198/4 192/204/4 774 | f 191/203/4 189/201/4 192/204/4 775 | f 193/205/4 194/206/4 195/207/4 776 | f 195/207/4 194/206/4 196/208/4 777 | f 193/205/4 195/207/4 197/209/4 778 | f 193/205/4 197/209/4 198/210/4 779 | f 197/209/4 199/211/4 198/210/4 780 | f 198/210/4 199/211/4 200/212/4 781 | f 201/213/4 202/214/4 203/215/4 782 | f 203/215/4 202/214/4 204/216/4 783 | f 205/217/5 206/218/5 207/219/5 784 | f 208/220/5 206/218/5 205/217/5 785 | f 209/221/5 210/222/5 211/223/5 786 | f 212/224/5 210/222/5 209/221/5 787 | f 213/225/5 214/226/5 215/227/5 788 | f 216/228/5 214/226/5 213/225/5 789 | f 217/229/5 213/225/5 218/230/5 790 | f 217/229/5 219/231/5 216/228/5 791 | f 217/229/5 216/228/5 213/225/5 792 | f 220/232/5 219/231/5 217/229/5 793 | f 221/233/5 219/231/5 220/232/5 794 | f 222/234/5 219/231/5 221/233/5 795 | f 223/235/5 221/233/5 220/232/5 796 | f 224/236/5 221/233/5 223/235/5 797 | f 225/237/5 226/238/5 227/239/5 798 | f 228/240/5 226/238/5 225/237/5 799 | f 229/241/5 230/242/5 231/243/5 800 | f 232/244/5 230/242/5 229/241/5 801 | f 233/245/5 234/246/5 235/247/5 802 | f 236/248/5 234/246/5 233/245/5 803 | f 237/249/5 233/245/5 235/247/5 804 | f 238/250/5 234/246/5 236/248/5 805 | f 239/251/5 237/249/5 235/247/5 806 | f 239/251/5 238/250/5 237/249/5 807 | f 240/252/5 234/246/5 238/250/5 808 | f 240/252/5 238/250/5 239/251/5 809 | f 241/253/5 242/254/5 243/255/5 810 | f 244/256/5 242/254/5 241/253/5 811 | f 245/257/5 246/258/5 247/259/5 812 | f 248/260/5 246/258/5 245/257/5 813 | f 249/261/5 250/262/5 251/263/5 814 | f 252/264/5 250/262/5 249/261/5 815 | f 253/265/6 254/266/6 255/267/6 816 | f 255/267/6 254/266/6 256/268/6 817 | f 257/269/6 258/270/6 259/271/6 818 | f 259/271/6 258/270/6 260/272/6 819 | f 253/265/6 255/267/6 261/273/6 820 | f 261/273/6 255/267/6 262/274/6 821 | f 260/272/6 258/270/6 263/275/6 822 | f 263/275/6 258/270/6 264/276/6 823 | f 265/277/6 266/278/6 267/279/6 824 | f 267/279/6 266/278/6 268/280/6 825 | f 269/281/6 270/282/6 271/283/6 826 | f 271/283/6 270/282/6 272/284/6 827 | f 273/285/6 274/286/6 275/287/6 828 | f 275/287/6 274/286/6 276/288/6 829 | f 277/289/6 278/290/6 279/291/6 830 | f 279/291/6 278/290/6 280/292/6 831 | f 281/293/6 282/294/6 283/295/6 832 | f 283/295/6 282/294/6 284/296/6 833 | f 285/297/6 286/298/6 287/299/6 834 | f 287/299/6 286/298/6 288/300/6 835 | f 289/301/6 290/302/6 291/303/6 836 | f 291/303/6 290/302/6 292/304/6 837 | f 292/304/6 290/302/6 293/305/6 838 | f 293/305/6 290/302/6 294/306/6 839 | f 294/306/6 290/302/6 295/307/6 840 | f 295/307/6 290/302/6 296/308/6 841 | f 293/305/6 294/306/6 297/309/6 842 | f 297/309/6 294/306/6 298/310/6 843 | f 297/309/6 298/310/6 299/311/6 844 | f 299/311/6 298/310/6 300/312/6 845 | f 301/313/6 302/314/6 303/315/6 846 | f 303/315/6 302/314/6 304/316/6 847 | f 305/317/6 306/318/6 307/319/6 848 | f 307/319/6 306/318/6 308/320/6 849 | -------------------------------------------------------------------------------- /scripts/script.js: -------------------------------------------------------------------------------- 1 | // Spark AR modules 2 | const Diagnostics = require("Diagnostics"); 3 | const Scene = require("Scene"); 4 | const Animation = require("Animation"); 5 | const TouchGestures = require("TouchGestures"); 6 | const Time = require("Time"); 7 | const Reactive = require("Reactive"); 8 | const Materials = require("Materials"); 9 | const Textures = require("Textures"); 10 | const Audio = require("Audio"); 11 | const Instruction = require("Instruction"); 12 | const CameraInfo = require("CameraInfo"); 13 | 14 | (async function () { 15 | const [ 16 | // Game objects 17 | player, 18 | blocks, 19 | platforms, 20 | obstacle, 21 | switches, 22 | buttons, 23 | goal, 24 | waterEmitter, 25 | instructionsView, 26 | congratsView, 27 | UIGroup, 28 | allTextures, 29 | allMaterials, 30 | knobs, 31 | // Sounds 32 | jumpSound, 33 | dropSound, 34 | failSound, 35 | completeSound, 36 | clickSound, 37 | switchSound, 38 | spikesSound, 39 | removeSound, 40 | popSound, 41 | ] = await Promise.all([ 42 | // Game objects 43 | Scene.root.findFirst("bunny"), 44 | Scene.root.findByPath("**/blocks/*"), 45 | Scene.root.findByPath("**/platforms/*"), 46 | Scene.root.findFirst("spikes"), 47 | Scene.root.findByPath("**/switches/*"), 48 | Scene.root.findByPath("**/buttons/*"), 49 | Scene.root.findFirst("carrot"), 50 | Scene.root.findFirst("water_emitter"), 51 | Scene.root.findFirst("instructions_view"), 52 | Scene.root.findFirst("congrats_view"), 53 | Scene.root.findFirst("UI"), 54 | Textures.findUsingPattern("*"), 55 | Materials.findUsingPattern("*"), 56 | Scene.root.findAll("knob"), 57 | // Sounds 58 | Audio.getAudioPlaybackController("jump"), 59 | Audio.getAudioPlaybackController("drop"), 60 | Audio.getAudioPlaybackController("fail"), 61 | Audio.getAudioPlaybackController("complete"), 62 | Audio.getAudioPlaybackController("click"), 63 | Audio.getAudioPlaybackController("switch"), 64 | Audio.getAudioPlaybackController("spikes_off"), 65 | Audio.getAudioPlaybackController("remove"), 66 | Audio.getAudioPlaybackController("pop"), 67 | ]); 68 | 69 | // Game constants 70 | const levels = require("./levels"); 71 | const gridSize = 0.36; 72 | const gridInc = 0.12; 73 | const numOfSwitches = 2; 74 | const numOfBlocks = 10; 75 | const numOfPlatforms = 10; 76 | const blockSlotInc = 0.1; 77 | const blockInitY = 0.9; 78 | const initBlockSlot = 0.6; 79 | const playerInitY = 0.02; 80 | const states = { 81 | start: 1, 82 | running: 2, 83 | complete: 3, 84 | failed: 4, 85 | uncomplete: 5, 86 | }; 87 | 88 | // Game variables 89 | let currentLevel = 0; 90 | let commands = []; 91 | let executionCommands = []; 92 | let switchesAdded = []; 93 | let blocksUsed = 0; 94 | let platformsUsed = 0; 95 | let switchesUsed = 0; 96 | let nextBlockSlot = initBlockSlot; 97 | let currentState = states.start; 98 | let playerDir = levels[currentLevel].facing; 99 | let loopIterations = 2; 100 | let exeIntervalID; 101 | let obstacleActivated = true; 102 | let loopAdded = false; 103 | let endLoopAdded = false; 104 | let obstacleRemoved = false; 105 | let activateLoopFunctionality = false; 106 | let isFirstRun = true; 107 | let allCoordinates = createAllCoordinates(); 108 | let pathCoordinates = createPathCoordinates(); 109 | let dangerCoordinates = createDangerCoordinates(); 110 | 111 | CameraInfo.captureDevicePosition 112 | .monitor({ fireOnInitialValue: true }) 113 | .subscribe(function (e) { 114 | Diagnostics.log(e.newValue); 115 | if (e.newValue === "FRONT") { 116 | Instruction.bind(true, "switch_camera_view_to_place"); 117 | } else { 118 | Instruction.bind(false, "switch_camera_view_to_place"); 119 | } 120 | }); 121 | 122 | /*------------- Button Taps -------------*/ 123 | 124 | for (let i = 0; i < 9; i++) { 125 | let button = buttons[i]; 126 | TouchGestures.onTap(button).subscribe(function () { 127 | switch (i) { 128 | case 0: 129 | addCommand("forward"); 130 | break; 131 | case 1: 132 | addCommand("left"); 133 | break; 134 | case 2: 135 | addCommand("right"); 136 | break; 137 | case 3: 138 | if (!loopAdded && activateLoopFunctionality === true) { 139 | loopAdded = true; 140 | loopIterations = 2; 141 | addCommand("loop_2"); 142 | setTexture("loop_2_block", "loop_2_block_mat"); 143 | setTexture("loop_off", "btn_loop_mat"); 144 | } 145 | break; 146 | case 4: 147 | if (!endLoopAdded && activateLoopFunctionality === true) { 148 | endLoopAdded = true; 149 | addCommand("end_loop"); 150 | setTexture("end_loop_off", "btn_end_loop_mat"); 151 | } 152 | break; 153 | case 5: 154 | setLoopIterations(2); 155 | break; 156 | case 6: 157 | setLoopIterations(3); 158 | break; 159 | case 7: 160 | setLoopIterations(4); 161 | break; 162 | case 8: 163 | // Call a different function based on current game state 164 | clickSound.setPlaying(true); 165 | clickSound.reset(); 166 | switch (currentState) { 167 | case states.start: 168 | Time.setTimeout(function () { 169 | if (commands.length !== 0) executeCommands(); 170 | }, 300); 171 | break; 172 | case states.failed: 173 | resetLevel(); 174 | break; 175 | case states.uncomplete: 176 | resetLevel(); 177 | break; 178 | case states.complete: 179 | nextLevel("next"); 180 | break; 181 | } 182 | break; 183 | } 184 | }); 185 | } 186 | TouchGestures.onTap(blocks[10]).subscribe(function () { 187 | // Remove the last command 188 | removeSound.setPlaying(true); 189 | removeSound.reset(); 190 | if (blocksUsed !== 0 && currentState === states.start) { 191 | let popped = commands.pop(); 192 | popped.block.transform.y = blockInitY; 193 | popped.block.hidden = true; 194 | nextBlockSlot += blockSlotInc; 195 | blocksUsed--; 196 | if (popped.command.search("loop_") !== -1) { 197 | loopAdded = false; 198 | setTexture("loop", "btn_loop_mat"); 199 | } else if (popped.command === "end_loop") { 200 | endLoopAdded = false; 201 | setTexture("end_loop", "btn_end_loop_mat"); 202 | } 203 | } 204 | }); 205 | 206 | TouchGestures.onTap(congratsView).subscribe(function () { 207 | isFirstRun = false; 208 | nextLevel("back"); 209 | }); 210 | 211 | /*------------- Monitor Player Position -------------*/ 212 | 213 | Reactive.monitorMany({ 214 | x: player.transform.x, 215 | z: player.transform.z, 216 | }).subscribe(({ newValues }) => { 217 | let playerX = newValues.x; 218 | let playerZ = newValues.z; 219 | let goalX = pathCoordinates[pathCoordinates.length - 1][0]; 220 | let goalZ = pathCoordinates[pathCoordinates.length - 1][1]; 221 | let obstacleCoords = levels[currentLevel].obstacle; 222 | let collisionArea = 0.005; 223 | let maxBlocks = levels[currentLevel].blocks; 224 | 225 | // Check if player is on the goal 226 | if ( 227 | isBetween(playerX, goalX + collisionArea, goalX - collisionArea) && 228 | isBetween(playerZ, goalZ + collisionArea, goalZ - collisionArea) 229 | ) { 230 | player.transform.x = goalX; 231 | player.transform.z = goalZ; 232 | commands = []; 233 | executionCommands = []; 234 | Time.clearInterval(exeIntervalID); 235 | changeState(states.complete, "next"); 236 | goal.hidden = true; 237 | animateLevelComplete(); 238 | completeSound.setPlaying(true); 239 | completeSound.reset(); 240 | 241 | if (currentLevel === 9) { 242 | animateUIGroup(); 243 | } 244 | 245 | if (currentLevel === 0) { 246 | animateInstructionsViewHide(); 247 | } else if (currentLevel === 3) { 248 | animateInstructionsViewHide(); 249 | } else if (currentLevel === 5) { 250 | animateInstructionsViewHide(); 251 | } 252 | 253 | if (blocksUsed > maxBlocks) { 254 | Diagnostics.log( 255 | "You can also solve this with " + maxBlocks + " blocks." 256 | ); 257 | } 258 | } 259 | 260 | // Check if player is on a danger zone 261 | for (let i = 0; i < dangerCoordinates.length; i++) { 262 | let dx = dangerCoordinates[i][0]; 263 | let dz = dangerCoordinates[i][1]; 264 | if ( 265 | isBetween(playerX, dx + collisionArea, dx - collisionArea) && 266 | isBetween(playerZ, dz + collisionArea, dz - collisionArea) 267 | ) { 268 | player.transform.x = dx; 269 | player.transform.z = dz; 270 | commands = []; 271 | executionCommands = []; 272 | Time.clearInterval(exeIntervalID); 273 | changeState(states.failed, "retry"); 274 | animatePlayerFall(); 275 | dropSound.setPlaying(true); 276 | dropSound.reset(); 277 | } 278 | } 279 | 280 | if ("obstacle" in levels[currentLevel]) { 281 | // Check if player is on an obstacle 282 | let obstacleX = pathCoordinates[obstacleCoords][0]; 283 | let obstacleZ = pathCoordinates[obstacleCoords][1]; 284 | 285 | if ( 286 | isBetween( 287 | playerX, 288 | obstacleX + collisionArea, 289 | obstacleX - collisionArea 290 | ) && 291 | isBetween( 292 | playerZ, 293 | obstacleZ + collisionArea, 294 | obstacleZ - collisionArea 295 | ) && 296 | obstacleActivated 297 | ) { 298 | player.transform.x = obstacleX; 299 | player.transform.z = obstacleZ; 300 | commands = []; 301 | executionCommands = []; 302 | Time.clearInterval(exeIntervalID); 303 | changeState(states.failed, "retry"); 304 | animatePlayerSpikeDeath(); 305 | failSound.setPlaying(true); 306 | failSound.reset(); 307 | } 308 | 309 | // Check if player is on a switch 310 | let switchCoords = levels[currentLevel].switches; 311 | for (let i = 0; i < switchCoords.length; i++) { 312 | let sx = pathCoordinates[switchCoords[i]][0]; 313 | let sz = pathCoordinates[switchCoords[i]][1]; 314 | if ( 315 | isBetween(playerX, sx + collisionArea, sx - collisionArea) && 316 | isBetween(playerZ, sz + collisionArea, sz - collisionArea) 317 | ) { 318 | switchesAdded[i].activated = true; 319 | let s = switches[i]; 320 | knobs[i].transform.z = 0; 321 | player.transform.y = playerInitY + 0.015; 322 | if (knobs[i].transform.z.pinLastValue() !== 0) { 323 | switchSound.setPlaying(true); 324 | switchSound.reset(); 325 | } 326 | } 327 | } 328 | 329 | // Remove obstacle if all switches are deactivated 330 | if (switchesAdded.every((val) => val.activated === true)) { 331 | obstacleActivated = false; 332 | if (!obstacleRemoved) { 333 | obstacleRemoved = true; 334 | animateSpikes(); 335 | Time.setTimeout(function () { 336 | spikesSound.setPlaying(true); 337 | spikesSound.reset(); 338 | }, 100); 339 | } 340 | } 341 | } 342 | }); 343 | 344 | /*------------- Create Level Coordinates -------------*/ 345 | 346 | function createAllCoordinates() { 347 | // Creates a 7 x 7 grid of coordinates 348 | let coords = []; 349 | for (let i = -gridSize; i <= gridSize; i += gridInc) { 350 | for (let j = -gridSize; j <= gridSize; j += gridInc) { 351 | let x = Math.round(i * 1e4) / 1e4; 352 | let z = Math.round(j * 1e4) / 1e4; 353 | coords.push([x, z]); 354 | } 355 | } 356 | return coords; 357 | } 358 | 359 | function createPathCoordinates() { 360 | // Get the current level path coordinates from all the coordinates 361 | let path = levels[currentLevel].path; 362 | let coords = []; 363 | for (let i = 0; i < path.length; i++) { 364 | let x = allCoordinates[path[i][0]][1]; 365 | let z = allCoordinates[path[i][1]][1]; 366 | coords.push([x, z]); 367 | } 368 | return coords; 369 | } 370 | 371 | function createDangerCoordinates() { 372 | // Get the danger coordinates by removing the current path coordinates 373 | let coords = allCoordinates; 374 | for (let i = 0; i < pathCoordinates.length; i++) { 375 | for (let j = 0; j < coords.length; j++) { 376 | let lvlCoordStr = JSON.stringify(pathCoordinates[i]); 377 | let genCoordStr = JSON.stringify(coords[j]); 378 | if (lvlCoordStr === genCoordStr) { 379 | coords.splice(j, 1); 380 | } 381 | } 382 | } 383 | return coords; 384 | } 385 | 386 | /*------------- Initialize current level -------------*/ 387 | 388 | function initLevel() { 389 | playerDir = levels[currentLevel].facing; 390 | 391 | // Set the player's initial position 392 | player.transform.x = pathCoordinates[0][0]; 393 | player.transform.z = pathCoordinates[0][1]; 394 | player.transform.y = playerInitY; 395 | 396 | // set goal position 397 | let goalX = pathCoordinates[pathCoordinates.length - 1][0]; 398 | let goalZ = pathCoordinates[pathCoordinates.length - 1][1]; 399 | goal.transform.x = goalX; 400 | goal.transform.z = goalZ; 401 | goal.transform.y = 0.03; 402 | goal.hidden = false; 403 | 404 | // Set the player's initial direction 405 | if (playerDir === "east") { 406 | player.transform.rotationY = 0; 407 | } else if (playerDir === "north") { 408 | player.transform.rotationY = degreesToRadians(90); 409 | } else if (playerDir === "west") { 410 | player.transform.rotationY = degreesToRadians(180); 411 | } else if (playerDir === "south") { 412 | player.transform.rotationY = degreesToRadians(270); 413 | } 414 | 415 | // Add the path platforms 416 | for (let i = 0; i < pathCoordinates.length; i++) { 417 | let path = pathCoordinates[i]; 418 | let x = path[0]; 419 | let z = path[1]; 420 | let platform = platforms[platformsUsed++]; 421 | platform.transform.x = x; 422 | platform.transform.z = z; 423 | platform.hidden = false; 424 | } 425 | 426 | if ("obstacle" in levels[currentLevel]) { 427 | // Add the obstacle 428 | let obstacleCoords = levels[currentLevel].obstacle; 429 | obstacle.transform.x = pathCoordinates[obstacleCoords][0]; 430 | obstacle.transform.z = pathCoordinates[obstacleCoords][1]; 431 | obstacle.transform.y = 0.03; 432 | obstacle.hidden = false; 433 | 434 | // Add the switches 435 | let switchCoords = levels[currentLevel].switches; 436 | for (let i = 0; i < switchCoords.length; i++) { 437 | let s = switches[switchesUsed++]; 438 | s.transform.x = pathCoordinates[switchCoords[i]][0]; 439 | s.transform.z = pathCoordinates[switchCoords[i]][1]; 440 | s.transform.y = 0.03; 441 | switchesAdded.push({ 442 | switch: "switch" + switchesUsed, 443 | activated: false, 444 | }); 445 | s.hidden = false; 446 | } 447 | } 448 | 449 | if (currentLevel > 4) { 450 | activateLoopFunctionality = true; 451 | setTexture("loop", "btn_loop_mat"); 452 | setTexture("end_loop", "btn_end_loop_mat"); 453 | setTexture("loop_2", "btn_2_mat"); 454 | setTexture("loop_3", "btn_3_mat"); 455 | setTexture("loop_4", "btn_4_mat"); 456 | } 457 | 458 | Time.setTimeout(function () { 459 | if (currentLevel === 0) { 460 | setTexture("in_0", "instructions_mat"); 461 | if (!isFirstRun) { 462 | animateInstructionsViewShow(); 463 | } 464 | } else if (currentLevel === 3) { 465 | setTexture("in_1", "instructions_mat"); 466 | animateInstructionsViewShow(); 467 | } else if (currentLevel === 5) { 468 | setTexture("in_2", "instructions_mat"); 469 | animateInstructionsViewShow(); 470 | } 471 | }, 1000); 472 | } 473 | 474 | initLevel(); 475 | 476 | /*------------- Add Command -------------*/ 477 | 478 | function addCommand(move) { 479 | if (currentState === states.start) { 480 | if (blocksUsed < numOfBlocks) { 481 | let block = blocks[blocksUsed]; 482 | blocksUsed++; 483 | nextBlockSlot -= blockSlotInc; 484 | block.transform.y = nextBlockSlot; 485 | 486 | // Set the block material 487 | for (let i = 0; i < allMaterials.length; i++) { 488 | if (allMaterials[i].name === move + "_block_mat") { 489 | block.material = allMaterials[i]; 490 | } 491 | } 492 | 493 | block.hidden = false; 494 | commands.push({ command: move, block: block }); 495 | clickSound.setPlaying(true); 496 | clickSound.reset(); 497 | } 498 | } 499 | } 500 | 501 | /*------------- Execution functions -------------*/ 502 | 503 | function executeCommands() { 504 | currentState = states.running; 505 | let loopIndex = findCommandIndex("loop_"); 506 | let endIndex = findCommandIndex("end_loop"); 507 | 508 | if (loopIndex != undefined && endIndex != undefined) { 509 | if (endIndex < loopIndex) { 510 | //TODO: handle this visually later 511 | Diagnostics.log("loop block must go before the end loop block"); 512 | currentState = states.start; 513 | } else { 514 | executionCommands = getLoopCommands(loopIndex, endIndex); 515 | } 516 | } else if (loopIndex != undefined && endIndex == undefined) { 517 | //TODO: handle this visually later 518 | Diagnostics.log("please end the loop"); 519 | currentState = states.start; 520 | } else if (loopIndex == undefined && endIndex != undefined) { 521 | //TODO: handle this visually later 522 | Diagnostics.log("loop block not added"); 523 | currentState = states.start; 524 | } else if (loopIndex == undefined && endIndex == undefined) { 525 | executionCommands = getNonLoopCommands(); 526 | } 527 | 528 | setExecutionInterval( 529 | function (e) { 530 | animatePlayerMovement(executionCommands[e]); 531 | }, 532 | 1000, 533 | executionCommands.length 534 | ); 535 | } 536 | 537 | function setExecutionInterval(callback, delay, repetitions) { 538 | let e = 0; 539 | callback(0); 540 | exeIntervalID = Time.setInterval(function () { 541 | callback(e + 1); 542 | if (++e === repetitions) { 543 | Time.clearInterval(exeIntervalID); 544 | if (currentState === states.running) currentState = states.uncomplete; 545 | setTexture("retry", "btn_play_mat"); 546 | failSound.setPlaying(true); 547 | failSound.reset(); 548 | } 549 | }, delay); 550 | } 551 | 552 | function getLoopCommands(loopIndex, endIndex) { 553 | let commandsToLoop = []; 554 | let dupCommands = []; 555 | let unDuplicatedLoop = []; 556 | let nonLoopCommands = getNonLoopCommands(); 557 | 558 | // get loop commands 559 | for (let i = loopIndex; i < endIndex; i++) { 560 | commandsToLoop.push(commands[i].command); 561 | } 562 | commandsToLoop.shift(); 563 | if (commandsToLoop.length === 0) { 564 | for (let i = 1; i >= 0; i--) 565 | nonLoopCommands.splice([loopIndex, endIndex][i], 1); 566 | 567 | if (nonLoopCommands.length === 0) { 568 | Diagnostics.log("loop is empty"); 569 | currentState = states.start; 570 | } 571 | 572 | return nonLoopCommands; 573 | } else { 574 | // duplicate loop commands 575 | for (let i = 0; i < loopIterations; i++) { 576 | for (let j = 0; j < commandsToLoop.length; j++) { 577 | dupCommands.push(commandsToLoop[j]); 578 | } 579 | } 580 | // merge loop commands 581 | for (let i = loopIndex; i < endIndex + 1; i++) { 582 | unDuplicatedLoop.push(nonLoopCommands[i]); 583 | } 584 | nonLoopCommands.splice(loopIndex, unDuplicatedLoop.length, dupCommands); 585 | let merged = [].concat.apply([], nonLoopCommands); 586 | return merged; 587 | } 588 | } 589 | 590 | function getNonLoopCommands() { 591 | let nonLoopCommands = []; 592 | for (let i = 0; i < commands.length; i++) { 593 | nonLoopCommands.push(commands[i].command); 594 | } 595 | return nonLoopCommands; 596 | } 597 | 598 | /*------------- Animations -------------*/ 599 | 600 | function animatePlayerMovement(command) { 601 | const timeDriverParameters = { 602 | durationMilliseconds: 400, 603 | loopCount: 1, 604 | mirror: false, 605 | }; 606 | 607 | const timeDriver = Animation.timeDriver(timeDriverParameters); 608 | const translationNegX = Animation.animate( 609 | timeDriver, 610 | Animation.samplers.linear( 611 | player.transform.x.pinLastValue(), 612 | player.transform.x.pinLastValue() - gridInc 613 | ) 614 | ); 615 | 616 | const translationPosX = Animation.animate( 617 | timeDriver, 618 | Animation.samplers.linear( 619 | player.transform.x.pinLastValue(), 620 | player.transform.x.pinLastValue() + gridInc 621 | ) 622 | ); 623 | 624 | const translationNegZ = Animation.animate( 625 | timeDriver, 626 | Animation.samplers.linear( 627 | player.transform.z.pinLastValue(), 628 | player.transform.z.pinLastValue() - gridInc 629 | ) 630 | ); 631 | 632 | const translationPosZ = Animation.animate( 633 | timeDriver, 634 | Animation.samplers.linear( 635 | player.transform.z.pinLastValue(), 636 | player.transform.z.pinLastValue() + gridInc 637 | ) 638 | ); 639 | 640 | const rotationLeft = Animation.animate( 641 | timeDriver, 642 | Animation.samplers.linear( 643 | player.transform.rotationY.pinLastValue(), 644 | player.transform.rotationY.pinLastValue() + degreesToRadians(90) 645 | ) 646 | ); 647 | 648 | const rotationRight = Animation.animate( 649 | timeDriver, 650 | Animation.samplers.linear( 651 | player.transform.rotationY.pinLastValue(), 652 | player.transform.rotationY.pinLastValue() - degreesToRadians(90) 653 | ) 654 | ); 655 | 656 | const jump = Animation.animate( 657 | timeDriver, 658 | Animation.samplers.sequence({ 659 | samplers: [ 660 | Animation.samplers.easeInOutSine(playerInitY, 0.1), 661 | Animation.samplers.easeInOutSine(0.1, playerInitY), 662 | ], 663 | knots: [0, 1, 2], 664 | }) 665 | ); 666 | 667 | timeDriver.start(); 668 | 669 | switch (command) { 670 | case "forward": 671 | player.transform.y = jump; 672 | jumpSound.setPlaying(true); 673 | jumpSound.reset(); 674 | if (playerDir === "east") { 675 | player.transform.x = translationPosX; 676 | } else if (playerDir === "north") { 677 | player.transform.z = translationNegZ; 678 | } else if (playerDir === "west") { 679 | player.transform.x = translationNegX; 680 | } else if (playerDir === "south") { 681 | player.transform.z = translationPosZ; 682 | } 683 | break; 684 | case "left": 685 | if (playerDir === "east") { 686 | playerDir = "north"; 687 | } else if (playerDir === "north") { 688 | playerDir = "west"; 689 | } else if (playerDir === "west") { 690 | playerDir = "south"; 691 | } else if (playerDir === "south") { 692 | playerDir = "east"; 693 | } 694 | player.transform.rotationY = rotationLeft; 695 | break; 696 | case "right": 697 | if (playerDir === "east") { 698 | playerDir = "south"; 699 | } else if (playerDir === "south") { 700 | playerDir = "west"; 701 | } else if (playerDir === "west") { 702 | playerDir = "north"; 703 | } else if (playerDir === "north") { 704 | playerDir = "east"; 705 | } 706 | player.transform.rotationY = rotationRight; 707 | break; 708 | } 709 | } 710 | 711 | function animatePlayerIdle() { 712 | const timeDriverParameters = { 713 | durationMilliseconds: 400, 714 | loopCount: Infinity, 715 | mirror: true, 716 | }; 717 | const timeDriver = Animation.timeDriver(timeDriverParameters); 718 | 719 | const scale = Animation.animate( 720 | timeDriver, 721 | Animation.samplers.linear( 722 | player.transform.scaleY.pinLastValue(), 723 | player.transform.scaleY.pinLastValue() + 0.02 724 | ) 725 | ); 726 | 727 | player.transform.scaleY = scale; 728 | 729 | timeDriver.start(); 730 | } 731 | 732 | animatePlayerIdle(); 733 | 734 | function animateLevelComplete() { 735 | const timeDriverParameters = { 736 | durationMilliseconds: 450, 737 | loopCount: 2, 738 | mirror: false, 739 | }; 740 | 741 | const timeDriver = Animation.timeDriver(timeDriverParameters); 742 | 743 | const jump = Animation.animate( 744 | timeDriver, 745 | Animation.samplers.sequence({ 746 | samplers: [ 747 | Animation.samplers.easeInOutSine(playerInitY, 0.1), 748 | Animation.samplers.easeInOutSine(0.1, playerInitY), 749 | ], 750 | knots: [0, 1, 2], 751 | }) 752 | ); 753 | 754 | player.transform.y = jump; 755 | 756 | timeDriver.start(); 757 | } 758 | 759 | function animateCarrot() { 760 | const timeDriverParameters = { 761 | durationMilliseconds: 2500, 762 | loopCount: Infinity, 763 | mirror: false, 764 | }; 765 | 766 | const timeDriver = Animation.timeDriver(timeDriverParameters); 767 | 768 | const rotate = Animation.animate( 769 | timeDriver, 770 | Animation.samplers.linear( 771 | goal.transform.rotationY.pinLastValue(), 772 | goal.transform.rotationY.pinLastValue() - degreesToRadians(360) 773 | ) 774 | ); 775 | 776 | goal.transform.rotationY = rotate; 777 | 778 | timeDriver.start(); 779 | } 780 | 781 | animateCarrot(); 782 | 783 | function emmitWaterParticles() { 784 | const sizeSampler = Animation.samplers.easeInQuad(0.015, 0.007); 785 | waterEmitter.transform.x = player.transform.x; 786 | waterEmitter.transform.z = player.transform.z; 787 | waterEmitter.birthrate = 500; 788 | waterEmitter.sizeModifier = sizeSampler; 789 | 790 | Time.setTimeout(function () { 791 | player.hidden = true; 792 | waterEmitter.birthrate = 0; 793 | }, 200); 794 | } 795 | 796 | function animatePlayerFall() { 797 | emmitWaterParticles(); 798 | const timeDriverParameters = { 799 | durationMilliseconds: 100, 800 | loopCount: 1, 801 | mirror: false, 802 | }; 803 | 804 | const timeDriver = Animation.timeDriver(timeDriverParameters); 805 | 806 | const moveY = Animation.animate( 807 | timeDriver, 808 | Animation.samplers.easeInOutSine(playerInitY - 0.1, -0.17) 809 | ); 810 | 811 | player.transform.y = moveY; 812 | 813 | timeDriver.start(); 814 | 815 | Time.setTimeout(function () { 816 | player.hidden = true; 817 | }, 200); 818 | } 819 | 820 | function animatePlayerSpikeDeath() { 821 | const timeDriverParameters = { 822 | durationMilliseconds: 500, 823 | loopCount: 1, 824 | mirror: false, 825 | }; 826 | 827 | const timeDriver = Animation.timeDriver(timeDriverParameters); 828 | 829 | const deadY = Animation.animate( 830 | timeDriver, 831 | Animation.samplers.sequence({ 832 | samplers: [ 833 | Animation.samplers.easeInOutSine( 834 | player.transform.y.pinLastValue(), 835 | player.transform.y.pinLastValue() + 0.1 836 | ), 837 | Animation.samplers.easeInOutSine( 838 | player.transform.y.pinLastValue() + 0.1, 839 | playerInitY - 0.17 840 | ), 841 | ], 842 | knots: [0, 1, 2], 843 | }) 844 | ); 845 | 846 | player.transform.y = deadY; 847 | 848 | timeDriver.start(); 849 | 850 | Time.setTimeout(function () { 851 | player.hidden = true; 852 | }, 600); 853 | } 854 | 855 | function animateSpikes() { 856 | const timeDriverParameters = { 857 | durationMilliseconds: 400, 858 | loopCount: 1, 859 | mirror: false, 860 | }; 861 | 862 | const timeDriver = Animation.timeDriver(timeDriverParameters); 863 | 864 | const moveY = Animation.animate( 865 | timeDriver, 866 | Animation.samplers.linear(obstacle.transform.y.pinLastValue(), -0.03) 867 | ); 868 | 869 | obstacle.transform.y = moveY; 870 | 871 | timeDriver.start(); 872 | } 873 | 874 | function animateUIGroup() { 875 | const timeDriverParameters = { 876 | durationMilliseconds: 600, 877 | loopCount: 1, 878 | mirror: false, 879 | }; 880 | 881 | const timeDriver = Animation.timeDriver(timeDriverParameters); 882 | 883 | const scaleUI = Animation.animate( 884 | timeDriver, 885 | Animation.samplers.sequence({ 886 | samplers: [ 887 | Animation.samplers.easeInOutSine(0.3, 0.45), 888 | Animation.samplers.easeInOutSine(0.45, 0), 889 | ], 890 | knots: [0, 1, 2], 891 | }) 892 | ); 893 | 894 | UIGroup.transform.scaleX = scaleUI; 895 | UIGroup.transform.scaleY = scaleUI; 896 | 897 | timeDriver.start(); 898 | 899 | Time.setTimeout(function () { 900 | animateCongrats(); 901 | }, 700); 902 | } 903 | 904 | function animateCongrats() { 905 | popSound.setPlaying(true); 906 | popSound.reset(); 907 | const timeDriverParameters = { 908 | durationMilliseconds: 200, 909 | loopCount: 1, 910 | mirror: false, 911 | }; 912 | 913 | const timeDriver = Animation.timeDriver(timeDriverParameters); 914 | 915 | const scaleX = Animation.animate( 916 | timeDriver, 917 | Animation.samplers.sequence({ 918 | samplers: [ 919 | Animation.samplers.easeInOutSine(0, 4 + 1), 920 | Animation.samplers.easeInOutSine(4 + 1, 4), 921 | ], 922 | knots: [0, 1, 2], 923 | }) 924 | ); 925 | 926 | const scaleY = Animation.animate( 927 | timeDriver, 928 | Animation.samplers.sequence({ 929 | samplers: [ 930 | Animation.samplers.easeInOutSine(0, 2.8 + 1), 931 | Animation.samplers.easeInOutSine(2.8 + 1, 2.8), 932 | ], 933 | knots: [0, 1, 2], 934 | }) 935 | ); 936 | 937 | congratsView.transform.scaleX = scaleX; 938 | congratsView.transform.scaleY = scaleY; 939 | 940 | timeDriver.start(); 941 | } 942 | 943 | function animateInstructionsViewHide() { 944 | const timeDriverParameters = { 945 | durationMilliseconds: 200, 946 | loopCount: 1, 947 | mirror: false, 948 | }; 949 | 950 | const timeDriver = Animation.timeDriver(timeDriverParameters); 951 | 952 | const scale = Animation.animate( 953 | timeDriver, 954 | Animation.samplers.sequence({ 955 | samplers: [ 956 | Animation.samplers.easeInOutSine(10, 10 + 2), 957 | Animation.samplers.easeInOutSine(10 + 2, 0), 958 | ], 959 | knots: [0, 1, 2], 960 | }) 961 | ); 962 | 963 | instructionsView.transform.scaleX = scale; 964 | instructionsView.transform.scaleY = scale; 965 | 966 | timeDriver.start(); 967 | } 968 | 969 | function animateInstructionsViewShow() { 970 | popSound.setPlaying(true); 971 | popSound.reset(); 972 | const timeDriverParameters = { 973 | durationMilliseconds: 200, 974 | loopCount: 1, 975 | mirror: false, 976 | }; 977 | 978 | const timeDriver = Animation.timeDriver(timeDriverParameters); 979 | 980 | const scale = Animation.animate( 981 | timeDriver, 982 | Animation.samplers.sequence({ 983 | samplers: [ 984 | Animation.samplers.easeInOutSine(0, 10 + 2), 985 | Animation.samplers.easeInOutSine(10 + 2, 10), 986 | ], 987 | knots: [0, 1, 2], 988 | }) 989 | ); 990 | 991 | instructionsView.transform.scaleX = scale; 992 | instructionsView.transform.scaleY = scale; 993 | 994 | timeDriver.start(); 995 | } 996 | 997 | /*------------- Reset current level -------------*/ 998 | 999 | function resetLevel() { 1000 | currentState = states.start; 1001 | playerDir = levels[currentLevel].facing; 1002 | commands = []; 1003 | executionCommands = []; 1004 | switchesAdded = []; 1005 | loopIterations = 2; 1006 | blocksUsed = 0; 1007 | platformsUsed = 0; 1008 | switchesUsed = 0; 1009 | nextBlockSlot = initBlockSlot; 1010 | obstacleActivated = true; 1011 | loopAdded = false; 1012 | endLoopAdded = false; 1013 | player.hidden = false; 1014 | obstacleRemoved = false; 1015 | setTexture("play", "btn_play_mat"); 1016 | Time.clearInterval(exeIntervalID); 1017 | 1018 | for (let i = 0; i < numOfBlocks; i++) { 1019 | let block = blocks[i]; 1020 | block.transform.y = blockInitY; 1021 | block.hidden = true; 1022 | } 1023 | 1024 | for (let i = 0; i < numOfSwitches; i++) { 1025 | knobs[i].transform.z = -0.045; 1026 | } 1027 | 1028 | initLevel(); 1029 | } 1030 | 1031 | /*------------- Go to next level -------------*/ 1032 | 1033 | function nextLevel(state) { 1034 | if (state === "next") { 1035 | currentLevel++; 1036 | } else { 1037 | currentLevel = 0; 1038 | congratsView.transform.scaleX = 0; 1039 | congratsView.transform.scaleY = 0; 1040 | UIGroup.transform.scaleX = 0.3; 1041 | UIGroup.transform.scaleY = 0.3; 1042 | setTexture("end_loop", "btn_end_loop_mat"); 1043 | setTexture("loop", "btn_loop_mat"); 1044 | } 1045 | 1046 | allCoordinates = createAllCoordinates(); 1047 | pathCoordinates = createPathCoordinates(); 1048 | dangerCoordinates = createDangerCoordinates(); 1049 | 1050 | for (let i = 0; i < numOfPlatforms; i++) { 1051 | let platform = platforms[i]; 1052 | platform.hidden = true; 1053 | } 1054 | 1055 | if ("obstacle" in levels[currentLevel] === false) { 1056 | obstacle.transform.x = 0; 1057 | obstacle.transform.z = 0; 1058 | obstacle.hidden = true; 1059 | 1060 | for (let i = 0; i < numOfSwitches; i++) { 1061 | let s = switches[i]; 1062 | s.transform.x = 0; 1063 | s.transform.z = 0; 1064 | s.hidden = true; 1065 | } 1066 | } 1067 | 1068 | resetLevel(); 1069 | } 1070 | 1071 | /*------------- Utils -------------*/ 1072 | 1073 | function degreesToRadians(degrees) { 1074 | let pi = Math.PI; 1075 | return degrees * (pi / 180); 1076 | } 1077 | 1078 | function isBetween(n, a, b) { 1079 | return (n - a) * (n - b) <= 0; 1080 | } 1081 | 1082 | function setTexture(texture_name, mat_name) { 1083 | for (let i = 0; i < allTextures.length; i++) { 1084 | if (allTextures[i].name === texture_name) { 1085 | let signal = allTextures[i].signal; 1086 | for (let j = 0; j < allMaterials.length; j++) { 1087 | if (allMaterials[j].name === mat_name) { 1088 | allMaterials[j].setTextureSlot("DIFFUSE", signal); 1089 | } 1090 | } 1091 | } 1092 | } 1093 | } 1094 | 1095 | function setLoopIterations(i) { 1096 | if (activateLoopFunctionality === true) { 1097 | clickSound.setPlaying(true); 1098 | clickSound.reset(); 1099 | } 1100 | if ( 1101 | findCommandIndex("loop_") !== undefined && 1102 | activateLoopFunctionality === true 1103 | ) { 1104 | loopIterations = i; 1105 | setTexture("loop_" + i + "_block", "loop_2_block_mat"); 1106 | } 1107 | } 1108 | 1109 | function findCommandIndex(command) { 1110 | let index; 1111 | for (let i = 0; i < commands.length; i++) { 1112 | if (commands[i].command.search(command) !== -1) { 1113 | index = i; 1114 | break; 1115 | } 1116 | } 1117 | return index; 1118 | } 1119 | 1120 | function changeState(state, buttonText) { 1121 | Time.setTimeout(function () { 1122 | currentState = state; 1123 | setTexture(buttonText, "btn_play_mat"); 1124 | }, 500); 1125 | } 1126 | })(); 1127 | --------------------------------------------------------------------------------