commit a844ba46f8f3d58ccf006787972d7d19d9875178 Author: Dominic Szablewski Date: Mon Sep 13 09:34:08 2021 +0200 Initial diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..bba51cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +package.json +package-lock.json +autosave/ +\#* +*~ diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..8a9f2cc --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Dominic Szablewski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100755 index 0000000..ded10ac --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# Q1K3 - A JS13k GAME + +My entry for the 2021 [js13k](https://js13kgames.com/) competition. + +Play here: https://phoboslab.org/q1k3/ + +### Controls +- Movement: WASD or Arrow Keys +- Attack: Left Mouse Button +- Jump: Space or Right Mouse Button +- Switch Weapon: Q/E or Mousewheel + +### Features +- 2 Levels +- 5 Types of enemies +- 3 Weapons +- 30 different textures +- Music from Andy Lösch: [no-fate](http://no-fate.net/) +- Dynamic lighting +- Doors(!) +- Somewhat robust collision detection, even for fast moving objects +- Enemy AI with line of sight checks. No pathfinding, but still does a reasonable job following the player +- "Spacial" Audio (Stero separation and falloff by distance) +- Maps build with [TrenchBroom](https://trenchbroom.github.io/) +- A map compiler written in C (used during build) + +### Libs used +- [Tiny Texture Tumbler](https://github.com/phoboslab/ttt) for texture generation +- A minified fork of [Sonant-X](https://github.com/nicolas-van/sonant-x) for sounds and music + + +### License +MIT Licensed + +Please be aware that this projects makes use of Sonant-X (albeit heavily modified) +which is published under the zlib license. diff --git a/assets/maps/m1.map b/assets/maps/m1.map new file mode 100644 index 0000000..ff1f1ab --- /dev/null +++ b/assets/maps/m1.map @@ -0,0 +1,3516 @@ +// Game: qu1k3 +// Format: Standard +// entity 0 +{ +"message" "the Slipgate Complex" +"wad" "gfx/base.wad" +"classname" "worldspawn" +"sounds" "6" +"worldtype" "2" +"_tb_textures" "assets/textures" +// brush 0 +{ +( 1056 128 688 ) ( 1056 64 688 ) ( 1056 64 624 ) 8 0 0 0 1 1 +( 1056 64 688 ) ( 1120 64 688 ) ( 1120 64 624 ) 8 0 0 0 1 1 +( 1120 128 672 ) ( 1056 128 672 ) ( 1056 64 672 ) 8 0 0 0 1 1 +( 1056 64 688 ) ( 1056 128 688 ) ( 1120 128 688 ) 8 0 0 0 1 1 +( 1120 128 688 ) ( 1056 128 688 ) ( 1056 128 624 ) 8 0 0 0 1 1 +( 1120 64 688 ) ( 1120 128 688 ) ( 1120 128 624 ) 8 0 0 0 1 1 +} +// brush 1 +{ +( 960 776 624 ) ( 960 584 624 ) ( 960 584 608 ) 9 0 0 0 1 1 +( 1008 416 624 ) ( 1200 416 624 ) ( 1200 416 608 ) 9 0 0 0 1 1 +( 1200 704 608 ) ( 1008 704 608 ) ( 1008 512 608 ) 9 0 0 0 1 1 +( 1008 512 624 ) ( 1008 704 624 ) ( 1200 704 624 ) 9 0 0 0 1 1 +( 1144 1216 624 ) ( 952 1216 624 ) ( 952 1216 608 ) 9 0 0 0 1 1 +( 1216 504 624 ) ( 1216 696 624 ) ( 1216 696 608 ) 9 0 0 0 1 1 +} +// brush 2 +{ +( 832 640 640 ) ( 832 584 640 ) ( 832 584 624 ) 6 0 0 0 1 1 +( 928 480 800 ) ( 944 480 800 ) ( 944 480 608 ) 6 0 0 0 1 1 +( 944 576 736 ) ( 928 576 736 ) ( 928 512 736 ) 6 0 0 0 1 1 +( 928 584 832 ) ( 928 640 832 ) ( 944 640 832 ) 6 0 0 0 1 1 +( 936 768 800 ) ( 920 768 800 ) ( 920 768 608 ) 6 0 0 0 1 1 +( 928 584 640 ) ( 928 640 640 ) ( 928 640 624 ) 6 0 0 0 1 1 +} +// brush 3 +{ +( 832 784 816 ) ( 832 496 816 ) ( 832 496 624 ) 12 0 0 0 1 1 +( 856 480 816 ) ( 872 480 816 ) ( 872 480 624 ) 12 0 0 0 1 1 +( 864 784 672 ) ( 848 784 672 ) ( 848 496 672 ) 12 0 0 0 1 1 +( 848 496 736 ) ( 848 784 736 ) ( 864 784 736 ) 12 0 0 0 1 1 +( 872 768 816 ) ( 856 768 816 ) ( 856 768 624 ) 12 0 0 0 1 1 +( 864 496 816 ) ( 864 784 816 ) ( 864 784 624 ) 12 0 0 0 1 1 +} +// brush 4 +{ +( 864 768 672 ) ( 864 512 672 ) ( 864 512 608 ) 6 0 0 0 1 1 +( 864 480 672 ) ( 928 480 672 ) ( 928 480 608 ) 6 0 0 0 1 1 +( 928 768 640 ) ( 864 768 640 ) ( 864 512 640 ) 6 0 0 0 1 1 +( 864 512 672 ) ( 864 768 672 ) ( 928 768 672 ) 6 0 0 0 1 1 +( 928 768 672 ) ( 864 768 672 ) ( 864 768 608 ) 6 0 0 0 1 1 +( 928 512 672 ) ( 928 768 672 ) ( 928 768 608 ) 6 0 0 0 1 1 +} +// brush 5 +{ +( 928 832 640 ) ( 928 448 640 ) ( 928 448 624 ) 4 0 0 0 1 1 +( 944 448 640 ) ( 1008 448 640 ) ( 1008 448 624 ) 4 0 0 0 1 1 +( 1008 832 624 ) ( 944 832 624 ) ( 944 448 624 ) 4 0 0 0 1 1 +( 944 448 640 ) ( 944 832 640 ) ( 1008 832 640 ) 4 0 0 0 1 1 +( 1008 832 640 ) ( 944 832 640 ) ( 944 832 624 ) 4 0 0 0 1 1 +( 992 448 640 ) ( 992 832 640 ) ( 992 832 624 ) 4 0 0 0 1 1 +} +// brush 6 +{ +( 832 496 640 ) ( 832 448 640 ) ( 832 448 624 ) 1 0 0 0 1 1 +( 944 416 640 ) ( 976 416 640 ) ( 976 416 624 ) 1 0 0 0 1 1 +( 976 496 640 ) ( 944 496 640 ) ( 944 448 640 ) 1 0 0 0 1 1 +( 944 448 816 ) ( 944 496 816 ) ( 976 496 816 ) 1 0 0 0 1 1 +( 976 480 640 ) ( 944 480 640 ) ( 944 480 624 ) 1 0 0 0 1 1 +( 960 448 640 ) ( 960 496 640 ) ( 960 496 624 ) 1 0 0 0 1 1 +} +// brush 7 +{ +( 1248 496 640 ) ( 1248 448 640 ) ( 1248 448 624 ) 1 0 0 0 1 1 +( 1232 416 640 ) ( 1264 416 640 ) ( 1264 416 624 ) 1 0 0 0 1 1 +( 1264 496 640 ) ( 1232 496 640 ) ( 1232 448 640 ) 1 0 0 0 1 1 +( 1232 448 816 ) ( 1232 496 816 ) ( 1264 496 816 ) 1 0 0 0 1 1 +( 1264 512 640 ) ( 1232 512 640 ) ( 1232 512 624 ) 1 0 0 0 1 1 +( 1280 448 640 ) ( 1280 496 640 ) ( 1280 496 624 ) 1 0 0 0 1 1 +} +// brush 8 +{ +( 1344 784 624 ) ( 1344 784 816 ) ( 1344 496 816 ) 12 0 0 0 1 1 +( 1336 416 624 ) ( 1336 416 816 ) ( 1352 416 816 ) 12 0 0 0 1 1 +( 1360 496 672 ) ( 1360 784 672 ) ( 1344 784 672 ) 12 0 0 0 1 1 +( 1344 784 736 ) ( 1360 784 736 ) ( 1360 496 736 ) 12 0 0 0 1 1 +( 1352 768 624 ) ( 1352 768 816 ) ( 1336 768 816 ) 12 0 0 0 1 1 +( 1376 496 624 ) ( 1376 496 816 ) ( 1376 784 816 ) 12 0 0 0 1 1 +} +// brush 9 +{ +( 1280 768 608 ) ( 1280 768 672 ) ( 1280 512 672 ) 6 0 0 0 1 1 +( 1280 416 608 ) ( 1280 416 672 ) ( 1344 416 672 ) 6 0 0 0 1 1 +( 1344 512 640 ) ( 1344 768 640 ) ( 1280 768 640 ) 6 0 0 0 1 1 +( 1280 768 672 ) ( 1344 768 672 ) ( 1344 512 672 ) 6 0 0 0 1 1 +( 1344 768 608 ) ( 1344 768 672 ) ( 1280 768 672 ) 6 0 0 0 1 1 +( 1344 512 608 ) ( 1344 512 672 ) ( 1344 768 672 ) 6 0 0 0 1 1 +} +// brush 10 +{ +( 1280 768 688 ) ( 1280 768 752 ) ( 1280 736 752 ) 1 0 0 0 1 1 +( 1296 416 688 ) ( 1296 416 752 ) ( 1336 416 752 ) 1 0 0 0 1 1 +( 1320 736 736 ) ( 1320 768 736 ) ( 1280 768 736 ) 1 0 0 0 1 1 +( 1280 768 832 ) ( 1320 768 832 ) ( 1320 736 832 ) 1 0 0 0 1 1 +( 1320 768 688 ) ( 1320 768 752 ) ( 1280 768 752 ) 1 0 0 0 1 1 +( 1344 512 688 ) ( 1344 512 752 ) ( 1344 544 752 ) 1 0 0 0 1 1 +} +// brush 11 +{ +( 1216 832 624 ) ( 1216 832 640 ) ( 1216 448 640 ) 4 0 0 0 1 1 +( 1200 448 624 ) ( 1200 448 640 ) ( 1264 448 640 ) 4 0 0 0 1 1 +( 1264 448 624 ) ( 1264 832 624 ) ( 1200 832 624 ) 4 0 0 0 1 1 +( 1200 832 640 ) ( 1264 832 640 ) ( 1264 448 640 ) 4 0 0 0 1 1 +( 1272 1216 624 ) ( 1272 1216 640 ) ( 1208 1216 640 ) 4 0 0 0 1 1 +( 1344 448 624 ) ( 1344 448 640 ) ( 1344 832 640 ) 4 0 0 0 1 1 +} +// brush 12 +{ +( 1248 832 640 ) ( 1248 784 640 ) ( 1248 784 624 ) 3 0 0 0 1 1 +( 1232 768 640 ) ( 1264 768 640 ) ( 1264 768 624 ) 3 0 0 0 1 1 +( 1264 832 640 ) ( 1232 832 640 ) ( 1232 784 640 ) 3 0 0 0 1 1 +( 1232 784 832 ) ( 1232 832 832 ) ( 1264 832 832 ) 3 0 0 0 1 1 +( 1264 896 640 ) ( 1232 896 640 ) ( 1232 896 624 ) 3 0 0 0 1 1 +( 1344 784 640 ) ( 1344 832 640 ) ( 1344 832 624 ) 3 0 0 0 1 1 +} +// brush 13 +{ +( 960 832 816 ) ( 960 784 816 ) ( 960 784 640 ) 7 0 0 270 1 -1 +( 976 768 816 ) ( 1016 768 816 ) ( 1016 768 640 ) 7 0 0 270 1 -1 +( 1016 832 800 ) ( 976 832 800 ) ( 976 784 800 ) 7 0 0 270 1 -1 +( 976 784 832 ) ( 976 832 832 ) ( 1016 832 832 ) 7 0 0 270 1 -1 +( 1016 832 816 ) ( 976 832 816 ) ( 976 832 640 ) 7 0 0 270 1 -1 +( 1248 784 816 ) ( 1248 832 816 ) ( 1248 832 640 ) 7 0 0 270 1 -1 +} +// brush 14 +{ +( 992 240 672 ) ( 992 128 672 ) ( 992 128 656 ) 4 0 0 0 1 1 +( 1008 32 672 ) ( 1200 32 672 ) ( 1200 32 656 ) 4 0 0 0 1 1 +( 1200 240 656 ) ( 1008 240 656 ) ( 1008 128 656 ) 4 0 0 0 1 1 +( 1008 128 672 ) ( 1008 240 672 ) ( 1200 240 672 ) 4 0 0 0 1 1 +( 1200 224 672 ) ( 1008 224 672 ) ( 1008 224 656 ) 4 0 0 0 1 1 +( 1216 128 672 ) ( 1216 240 672 ) ( 1216 240 656 ) 4 0 0 0 1 1 +} +// brush 15 +{ +( 1184 432 816 ) ( 1184 400 816 ) ( 1184 400 624 ) 1 0 0 0 1 1 +( 1176 32 816 ) ( 1192 32 816 ) ( 1192 32 624 ) 1 0 0 0 1 1 +( 1200 432 624 ) ( 1184 432 624 ) ( 1184 400 624 ) 1 0 0 0 1 1 +( 1184 400 816 ) ( 1184 432 816 ) ( 1200 432 816 ) 1 0 0 0 1 1 +( 1200 416 816 ) ( 1184 416 816 ) ( 1184 416 624 ) 1 0 0 0 1 1 +( 1344 400 816 ) ( 1344 432 816 ) ( 1344 432 624 ) 1 0 0 0 1 1 +} +// brush 16 +{ +( 960 432 816 ) ( 960 400 816 ) ( 960 400 624 ) 1 0 0 0 1 1 +( 968 32 816 ) ( 984 32 816 ) ( 984 32 624 ) 1 0 0 0 1 1 +( 992 432 624 ) ( 976 432 624 ) ( 976 400 624 ) 1 0 0 0 1 1 +( 976 400 816 ) ( 976 432 816 ) ( 992 432 816 ) 1 0 0 0 1 1 +( 992 416 816 ) ( 976 416 816 ) ( 976 416 624 ) 1 0 0 0 1 1 +( 992 400 816 ) ( 992 432 816 ) ( 992 432 624 ) 1 0 0 0 1 1 +} +// brush 17 +{ +( 992 32 816 ) ( 992 16 816 ) ( 992 16 624 ) 1 0 0 0 1 1 +( 992 0 816 ) ( 1216 0 816 ) ( 1216 0 624 ) 1 0 0 0 1 1 +( 1216 32 624 ) ( 992 32 624 ) ( 992 16 624 ) 1 0 0 0 1 1 +( 992 16 816 ) ( 992 32 816 ) ( 1216 32 816 ) 1 0 0 0 1 1 +( 1216 32 816 ) ( 992 32 816 ) ( 992 32 624 ) 1 0 0 0 1 1 +( 1200 16 816 ) ( 1200 32 816 ) ( 1200 32 624 ) 1 0 0 0 1 1 +} +// brush 18 +{ +( 992 384 816 ) ( 992 352 816 ) ( 992 352 624 ) 6 0 0 0 1 1 +( 992 352 816 ) ( 1008 352 816 ) ( 1008 352 624 ) 6 0 0 0 1 1 +( 1008 384 624 ) ( 992 384 624 ) ( 992 352 624 ) 6 0 0 0 1 1 +( 992 352 816 ) ( 992 384 816 ) ( 1008 384 816 ) 6 0 0 0 1 1 +( 1008 384 816 ) ( 992 384 816 ) ( 992 384 624 ) 6 0 0 0 1 1 +( 1024 352 816 ) ( 1024 384 816 ) ( 1024 384 624 ) 6 0 0 0 1 1 +} +// brush 19 +{ +( 1152 384 816 ) ( 1152 352 816 ) ( 1152 352 624 ) 6 0 0 0 1 1 +( 1176 352 816 ) ( 1192 352 816 ) ( 1192 352 624 ) 6 0 0 0 1 1 +( 1192 384 624 ) ( 1176 384 624 ) ( 1176 352 624 ) 6 0 0 0 1 1 +( 1176 352 816 ) ( 1176 384 816 ) ( 1192 384 816 ) 6 0 0 0 1 1 +( 1192 384 816 ) ( 1176 384 816 ) ( 1176 384 624 ) 6 0 0 0 1 1 +( 1184 352 816 ) ( 1184 384 816 ) ( 1184 384 624 ) 6 0 0 0 1 1 +} +// brush 20 +{ +( 992 256 816 ) ( 992 224 816 ) ( 992 224 624 ) 6 0 0 0 1 1 +( 992 224 816 ) ( 1008 224 816 ) ( 1008 224 624 ) 6 0 0 0 1 1 +( 1008 256 624 ) ( 992 256 624 ) ( 992 224 624 ) 6 0 0 0 1 1 +( 992 224 816 ) ( 992 256 816 ) ( 1008 256 816 ) 6 0 0 0 1 1 +( 1008 256 816 ) ( 992 256 816 ) ( 992 256 624 ) 6 0 0 0 1 1 +( 1024 224 816 ) ( 1024 256 816 ) ( 1024 256 624 ) 6 0 0 0 1 1 +} +// brush 21 +{ +( 1152 256 816 ) ( 1152 224 816 ) ( 1152 224 624 ) 6 0 0 0 1 1 +( 1160 224 816 ) ( 1176 224 816 ) ( 1176 224 624 ) 6 0 0 0 1 1 +( 1176 256 624 ) ( 1160 256 624 ) ( 1160 224 624 ) 6 0 0 0 1 1 +( 1160 224 816 ) ( 1160 256 816 ) ( 1176 256 816 ) 6 0 0 0 1 1 +( 1176 256 816 ) ( 1160 256 816 ) ( 1160 256 624 ) 6 0 0 0 1 1 +( 1184 224 816 ) ( 1184 256 816 ) ( 1184 256 624 ) 6 0 0 0 1 1 +} +// brush 22 +{ +( 992 128 816 ) ( 992 96 816 ) ( 992 96 624 ) 6 0 0 0 1 1 +( 992 96 816 ) ( 1008 96 816 ) ( 1008 96 624 ) 6 0 0 0 1 1 +( 1008 128 624 ) ( 992 128 624 ) ( 992 96 624 ) 6 0 0 0 1 1 +( 992 96 816 ) ( 992 128 816 ) ( 1008 128 816 ) 6 0 0 0 1 1 +( 1008 128 816 ) ( 992 128 816 ) ( 992 128 624 ) 6 0 0 0 1 1 +( 1024 96 816 ) ( 1024 128 816 ) ( 1024 128 624 ) 6 0 0 0 1 1 +} +// brush 23 +{ +( 1152 128 816 ) ( 1152 96 816 ) ( 1152 96 624 ) 6 0 0 0 1 1 +( 1160 96 816 ) ( 1176 96 816 ) ( 1176 96 624 ) 6 0 0 0 1 1 +( 1176 128 624 ) ( 1160 128 624 ) ( 1160 96 624 ) 6 0 0 0 1 1 +( 1160 96 816 ) ( 1160 128 816 ) ( 1176 128 816 ) 6 0 0 0 1 1 +( 1176 128 816 ) ( 1160 128 816 ) ( 1160 128 624 ) 6 0 0 0 1 1 +( 1184 96 816 ) ( 1184 128 816 ) ( 1184 128 624 ) 6 0 0 0 1 1 +} +// brush 24 +{ +( 1024 384 816 ) ( 1024 352 816 ) ( 1024 352 624 ) 6 0 0 0 1 1 +( 1016 352 816 ) ( 1160 352 816 ) ( 1160 352 624 ) 6 0 0 0 1 1 +( 1160 384 784 ) ( 1016 384 784 ) ( 1016 352 784 ) 6 0 0 270 1 -1 +( 1016 352 816 ) ( 1016 384 816 ) ( 1160 384 816 ) 6 0 0 0 1 1 +( 1160 384 816 ) ( 1016 384 816 ) ( 1016 384 624 ) 6 0 0 0 1 1 +( 1152 352 816 ) ( 1152 384 816 ) ( 1152 384 624 ) 6 0 0 0 1 1 +} +// brush 25 +{ +( 1024 256 816 ) ( 1024 224 816 ) ( 1024 224 624 ) 6 0 0 0 1 1 +( 1032 224 816 ) ( 1176 224 816 ) ( 1176 224 624 ) 6 0 0 0 1 1 +( 1176 256 784 ) ( 1032 256 784 ) ( 1032 224 784 ) 6 0 0 0 1 1 +( 1032 224 816 ) ( 1032 256 816 ) ( 1176 256 816 ) 6 0 0 0 1 1 +( 1176 256 816 ) ( 1032 256 816 ) ( 1032 256 624 ) 6 0 0 0 1 1 +( 1152 224 816 ) ( 1152 256 816 ) ( 1152 256 624 ) 6 0 0 0 1 1 +} +// brush 26 +{ +( 1024 128 816 ) ( 1024 96 816 ) ( 1024 96 624 ) 6 0 0 0 1 1 +( 1032 96 816 ) ( 1176 96 816 ) ( 1176 96 624 ) 6 0 0 0 1 1 +( 1176 128 784 ) ( 1032 128 784 ) ( 1032 96 784 ) 6 0 0 270 1 -1 +( 1032 96 816 ) ( 1032 128 816 ) ( 1176 128 816 ) 6 0 0 0 1 1 +( 1176 128 816 ) ( 1032 128 816 ) ( 1032 128 624 ) 6 0 0 0 1 1 +( 1152 96 816 ) ( 1152 128 816 ) ( 1152 128 624 ) 6 0 0 0 1 1 +} +// brush 27 +{ +( 928 960 656 ) ( 928 832 656 ) ( 928 832 640 ) 4 0 0 0 1 1 +( 944 832 656 ) ( 1008 832 656 ) ( 1008 832 640 ) 4 0 0 0 1 1 +( 1008 960 624 ) ( 944 960 624 ) ( 944 832 624 ) 4 0 0 0 1 1 +( 944 832 656 ) ( 944 960 656 ) ( 1008 960 656 ) 4 0 0 0 1 1 +( 1008 960 656 ) ( 944 960 656 ) ( 944 960 640 ) 4 0 0 0 1 1 +( 1024 832 656 ) ( 1024 960 656 ) ( 1024 960 640 ) 4 0 0 0 1 1 +} +// brush 28 +{ +( 960 1152 672 ) ( 960 1088 672 ) ( 960 1088 640 ) 9 0 0 0 1 1 +( 944 1088 672 ) ( 1008 1088 672 ) ( 1008 1088 640 ) 9 0 0 0 1 1 +( 1008 1152 672 ) ( 944 1152 672 ) ( 944 1088 672 ) 9 0 0 0 1 1 +( 944 1088 688 ) ( 944 1152 688 ) ( 1008 1152 688 ) 9 0 0 0 1 1 +( 1008 1216 672 ) ( 944 1216 672 ) ( 944 1216 640 ) 9 0 0 0 1 1 +( 1024 1088 672 ) ( 1024 1152 672 ) ( 1024 1152 640 ) 9 0 0 0 1 1 +} +// brush 29 +{ +( 1024 1208 656 ) ( 1024 1144 656 ) ( 1024 1144 624 ) 9 0 0 0 1 1 +( 944 1152 656 ) ( 1008 1152 656 ) ( 1008 1152 624 ) 9 0 0 0 1 1 +( 1008 1216 672 ) ( 944 1216 672 ) ( 944 1152 672 ) 9 0 0 0 1 1 +( 944 1152 688 ) ( 944 1216 688 ) ( 1008 1216 688 ) 9 0 0 0 1 1 +( 1008 1216 656 ) ( 944 1216 656 ) ( 944 1216 624 ) 9 0 0 0 1 1 +( 1328 1144 656 ) ( 1328 1208 656 ) ( 1328 1208 624 ) 9 0 0 0 1 1 +} +// brush 30 +{ +( 832 936 832 ) ( 832 864 832 ) ( 832 864 624 ) 1 0 0 0 1 1 +( 912 832 832 ) ( 928 832 832 ) ( 928 832 624 ) 1 0 0 0 1 1 +( 928 936 624 ) ( 912 936 624 ) ( 912 864 624 ) 1 0 0 0 1 1 +( 912 864 832 ) ( 912 936 832 ) ( 928 936 832 ) 1 0 0 0 1 1 +( 944 960 832 ) ( 928 960 832 ) ( 928 960 624 ) 1 0 0 0 1 1 +( 928 864 832 ) ( 928 936 832 ) ( 928 936 624 ) 1 0 0 0 1 1 +} +// brush 31 +{ +( 736 1216 832 ) ( 736 1136 832 ) ( 736 1136 624 ) 2 0 0 0 1 1 +( 928 1120 832 ) ( 944 1120 832 ) ( 944 1120 624 ) 2 0 0 0 1 1 +( 944 1216 384 ) ( 928 1216 384 ) ( 928 1136 384 ) 2 0 0 0 1 1 +( 928 1136 832 ) ( 928 1216 832 ) ( 944 1216 832 ) 2 0 0 0 1 1 +( 944 1216 832 ) ( 928 1216 832 ) ( 928 1216 624 ) 2 0 0 0 1 1 +( 960 1136 832 ) ( 960 1216 832 ) ( 960 1216 624 ) 2 0 0 0 1 1 +} +// brush 32 +{ +( 1248 1120 832 ) ( 1248 864 832 ) ( 1248 864 624 ) 1 0 0 0 1 1 +( 1232 896 832 ) ( 1264 896 832 ) ( 1264 896 624 ) 1 0 0 0 1 1 +( 1264 1120 624 ) ( 1232 1120 624 ) ( 1232 864 624 ) 1 0 0 0 1 1 +( 1232 864 832 ) ( 1232 1120 832 ) ( 1264 1120 832 ) 1 0 0 0 1 1 +( 1240 992 624 ) ( 1240 992 832 ) ( 1232 992 832 ) 1 0 0 0 1 1 +( 1280 976 832 ) ( 1280 1008 832 ) ( 1280 1008 624 ) 1 0 0 0 1 1 +} +// brush 33 +{ +( 928 928 832 ) ( 928 896 832 ) ( 928 896 816 ) 7 0 0 0 1 1 +( 1216 896 832 ) ( 1232 896 832 ) ( 1232 896 816 ) 7 0 0 0 1 1 +( 1232 928 800 ) ( 1216 928 800 ) ( 1216 896 800 ) 7 0 0 0 1 1 +( 1216 896 832 ) ( 1216 928 832 ) ( 1232 928 832 ) 7 0 0 0 1 1 +( 1232 928 832 ) ( 1216 928 832 ) ( 1216 928 816 ) 7 0 0 0 1 1 +( 1248 896 832 ) ( 1248 928 832 ) ( 1248 928 816 ) 7 0 0 0 1 1 +} +// brush 34 +{ +( 896 1072 832 ) ( 896 1040 832 ) ( 896 1040 816 ) 7 0 0 0 1 1 +( 1216 1024 832 ) ( 1232 1024 832 ) ( 1232 1024 816 ) 7 0 0 0 1 1 +( 1232 1056 800 ) ( 1216 1056 800 ) ( 1216 1024 800 ) 7 0 0 0 1 1 +( 1216 1024 832 ) ( 1216 1056 832 ) ( 1232 1056 832 ) 7 0 0 0 1 1 +( 1232 1056 832 ) ( 1216 1056 832 ) ( 1216 1056 816 ) 7 0 0 0 1 1 +( 1344 1024 832 ) ( 1344 1056 832 ) ( 1344 1056 816 ) 7 0 0 0 1 1 +} +// brush 35 +{ +( 1088 1088 832 ) ( 1088 1072 832 ) ( 1088 1072 816 ) 7 0 0 0 1 1 +( 1088 1056 832 ) ( 1120 1056 832 ) ( 1120 1056 816 ) 7 0 0 0 1 1 +( 1120 1088 800 ) ( 1088 1088 800 ) ( 1088 1072 800 ) 7 0 0 0 1 1 +( 1088 1072 832 ) ( 1088 1088 832 ) ( 1120 1088 832 ) 7 0 0 0 1 1 +( 1120 1216 832 ) ( 1088 1216 832 ) ( 1088 1216 816 ) 7 0 0 0 1 1 +( 1120 1072 832 ) ( 1120 1088 832 ) ( 1120 1088 816 ) 7 0 0 0 1 1 +} +// brush 36 +{ +( 736 1144 656 ) ( 736 888 656 ) ( 736 888 608 ) 9 0 0 0 1 1 +( 880 928 656 ) ( 928 928 656 ) ( 928 928 608 ) 9 0 0 0 1 1 +( 928 1152 608 ) ( 880 1152 608 ) ( 880 896 608 ) 9 0 0 0 1 1 +( 880 896 624 ) ( 880 1152 624 ) ( 928 1152 624 ) 9 0 0 0 1 1 +( 928 1120 656 ) ( 880 1120 656 ) ( 880 1120 608 ) 9 0 0 0 1 1 +( 960 896 656 ) ( 960 1152 656 ) ( 960 1152 608 ) 9 0 0 0 1 1 +} +// brush 37 +{ +( 1344 1232 832 ) ( 1344 1200 832 ) ( 1344 1200 624 ) 1 0 0 0 1 1 +( 1368 896 832 ) ( 1384 896 832 ) ( 1384 896 624 ) 1 0 0 0 1 1 +( 1376 1232 640 ) ( 1360 1232 640 ) ( 1360 1200 640 ) 1 0 0 0 1 1 +( 1360 1200 832 ) ( 1360 1232 832 ) ( 1376 1232 832 ) 1 0 0 0 1 1 +( 1376 1216 688 ) ( 1376 1216 832 ) ( 1360 1216 832 ) 1 0 0 0 1 1 +( 1376 1200 832 ) ( 1376 1232 832 ) ( 1376 1232 624 ) 1 0 0 0 1 1 +} +// brush 38 +{ +( 1280 1152 704 ) ( 1280 896 704 ) ( 1280 896 688 ) 9 0 0 0 1 1 +( 1264 896 704 ) ( 1360 896 704 ) ( 1360 896 688 ) 9 0 0 0 1 1 +( 1360 1152 688 ) ( 1264 1152 688 ) ( 1264 896 688 ) 9 0 0 0 1 1 +( 1264 896 704 ) ( 1264 1152 704 ) ( 1360 1152 704 ) 9 0 0 0 1 1 +( 1360 1216 704 ) ( 1264 1216 704 ) ( 1264 1216 688 ) 9 0 0 0 1 1 +( 1344 896 704 ) ( 1344 1152 704 ) ( 1344 1152 688 ) 9 0 0 0 1 1 +} +// brush 39 +{ +( 576 968 768 ) ( 576 952 768 ) ( 576 952 624 ) 1 0 0 0 1 1 +( 560 928 768 ) ( 688 928 768 ) ( 688 928 624 ) 1 0 0 0 1 1 +( 688 960 368 ) ( 560 960 368 ) ( 560 944 368 ) 1 0 0 0 1 1 +( 560 944 768 ) ( 560 960 768 ) ( 688 960 768 ) 1 0 0 0 1 1 +( 688 960 768 ) ( 560 960 768 ) ( 560 960 624 ) 1 0 0 0 1 1 +( 704 944 768 ) ( 704 960 768 ) ( 704 960 624 ) 1 0 0 0 1 1 +} +// brush 40 +{ +( 576 1104 400 ) ( 576 1088 400 ) ( 576 1088 384 ) 3 0 0 0 1 1 +( 560 1088 768 ) ( 688 1088 768 ) ( 688 1088 624 ) 3 0 0 0 1 1 +( 656 1104 480 ) ( 592 1104 480 ) ( 592 1088 480 ) 3 0 0 0 1 1 +( 560 1088 768 ) ( 560 1104 768 ) ( 688 1104 768 ) 3 0 0 0 1 1 +( 688 1152 768 ) ( 560 1152 768 ) ( 560 1152 624 ) 3 0 0 0 1 1 +( 736 1088 400 ) ( 736 1104 400 ) ( 736 1104 384 ) 3 0 0 0 1 1 +} +// brush 41 +{ +( 544 1104 768 ) ( 544 944 768 ) ( 544 944 368 ) 1 0 0 0 1 1 +( 544 928 768 ) ( 560 928 768 ) ( 560 928 368 ) 1 0 0 0 1 1 +( 560 1104 480 ) ( 544 1104 480 ) ( 544 944 480 ) 1 0 0 0 1 1 +( 544 944 768 ) ( 544 1104 768 ) ( 560 1104 768 ) 1 0 0 0 1 1 +( 560 1120 768 ) ( 544 1120 768 ) ( 544 1120 368 ) 1 0 0 0 1 1 +( 576 1008 656 ) ( 576 1008 672 ) ( 576 1040 672 ) 1 0 0 0 1 1 +} +// brush 42 +{ +( 704 1104 768 ) ( 704 944 768 ) ( 704 944 368 ) 2 0 0 0 1 1 +( 704 928 768 ) ( 720 928 768 ) ( 720 928 368 ) 2 0 0 0 1 1 +( 720 1104 368 ) ( 704 1104 368 ) ( 704 944 368 ) 2 0 0 0 1 1 +( 704 944 608 ) ( 704 1104 608 ) ( 720 1104 608 ) 2 0 0 0 1 1 +( 720 1184 768 ) ( 704 1184 768 ) ( 704 1184 368 ) 2 0 0 0 1 1 +( 736 944 768 ) ( 736 1104 768 ) ( 736 1104 368 ) 2 0 0 0 1 1 +} +// brush 43 +{ +( 544 1088 384 ) ( 544 976 384 ) ( 544 976 368 ) 9 0 0 0 1 1 +( 568 960 384 ) ( 656 960 384 ) ( 656 960 368 ) 9 0 0 0 1 1 +( 648 1088 368 ) ( 560 1088 368 ) ( 560 976 368 ) 9 0 0 0 1 1 +( 560 976 384 ) ( 560 1088 384 ) ( 648 1088 384 ) 9 0 0 0 1 1 +( 648 1120 384 ) ( 560 1120 384 ) ( 560 1120 368 ) 9 0 0 0 1 1 +( 704 984 384 ) ( 704 1096 384 ) ( 704 1096 368 ) 9 0 0 0 1 1 +} +// brush 44 +{ +( 448 1280 400 ) ( 448 1152 400 ) ( 448 1152 384 ) 10 0 0 0 1 1 +( 496 1344 400 ) ( 752 1344 400 ) ( 752 1344 384 ) 10 0 0 0 1 1 +( 752 1280 384 ) ( 496 1280 384 ) ( 496 1152 384 ) 10 0 0 0 1 1 +( 496 1152 400 ) ( 496 1280 400 ) ( 752 1280 400 ) 10 0 0 0 1 1 +( 744 1536 400 ) ( 488 1536 400 ) ( 488 1536 384 ) 10 0 0 0 1 1 +( 992 1144 400 ) ( 992 1272 400 ) ( 992 1272 384 ) 10 0 0 0 1 1 +} +// brush 45 +{ +( 320 1376 832 ) ( 320 1280 832 ) ( 320 1280 384 ) 11 0 0 0 1 1 +( 416 1152 832 ) ( 448 1152 832 ) ( 448 1152 384 ) 11 0 0 0 1 1 +( 448 1376 368 ) ( 416 1376 368 ) ( 416 1280 368 ) 11 0 0 0 1 1 +( 416 1280 752 ) ( 416 1376 752 ) ( 448 1376 752 ) 11 0 0 0 1 1 +( 448 1424 832 ) ( 416 1424 832 ) ( 416 1424 384 ) 11 0 0 0 1 1 +( 448 1280 832 ) ( 448 1376 832 ) ( 448 1376 384 ) 11 0 0 0 1 1 +} +// brush 46 +{ +( 512 1552 384 ) ( 512 1536 384 ) ( 512 1536 368 ) 11 0 0 0 1 1 +( 528 1536 384 ) ( 552 1536 384 ) ( 552 1536 368 ) 11 0 0 0 1 1 +( 552 1552 336 ) ( 528 1552 336 ) ( 528 1536 336 ) 11 0 0 0 1 1 +( 528 1536 384 ) ( 528 1552 384 ) ( 552 1552 384 ) 11 0 0 0 1 1 +( 552 1568 384 ) ( 528 1568 384 ) ( 528 1568 368 ) 11 0 0 0 1 1 +( 992 1536 384 ) ( 992 1552 384 ) ( 992 1552 368 ) 11 0 0 0 1 1 +} +// brush 47 +{ +( 512 1800 384 ) ( 512 1784 384 ) ( 512 1784 272 ) 11 0 0 0 1 1 +( 528 1760 384 ) ( 992 1760 384 ) ( 992 1760 272 ) 11 0 0 0 1 1 +( 992 1792 288 ) ( 528 1792 288 ) ( 528 1776 288 ) 11 0 0 0 1 1 +( 528 1776 384 ) ( 528 1792 384 ) ( 992 1792 384 ) 11 0 0 0 1 1 +( 992 1792 384 ) ( 528 1792 384 ) ( 528 1792 272 ) 11 0 0 0 1 1 +( 992 1768 384 ) ( 992 1784 384 ) ( 992 1784 272 ) 11 0 0 0 1 1 +} +// brush 48 +{ +( 320 1728 832 ) ( 320 1536 832 ) ( 320 1536 288 ) 11 0 0 0 1 1 +( 432 1424 832 ) ( 528 1424 832 ) ( 528 1424 288 ) 11 0 0 0 1 1 +( 528 1728 336 ) ( 432 1728 336 ) ( 432 1536 336 ) 11 0 0 0 1 1 +( 432 1536 816 ) ( 432 1728 816 ) ( 528 1728 816 ) 11 0 0 0 1 1 +( 528 1792 832 ) ( 432 1792 832 ) ( 432 1792 288 ) 11 0 0 0 1 1 +( 512 1536 832 ) ( 512 1728 832 ) ( 512 1728 288 ) 11 0 0 0 1 1 +} +// brush 49 +{ +( 992 1728 832 ) ( 992 1536 832 ) ( 992 1536 288 ) 11 0 0 0 1 1 +( 984 1248 832 ) ( 1080 1248 832 ) ( 1080 1248 288 ) 11 0 0 0 1 1 +( 1080 1728 336 ) ( 984 1728 336 ) ( 984 1536 336 ) 11 0 0 0 1 1 +( 984 1536 784 ) ( 984 1728 784 ) ( 1080 1728 784 ) 11 0 0 0 1 1 +( 1064 1824 832 ) ( 984 1824 832 ) ( 984 1824 288 ) 11 0 0 0 1 1 +( 1216 1536 832 ) ( 1216 1728 832 ) ( 1216 1728 288 ) 11 0 0 0 1 1 +} +// brush 50 +{ +( 256 1840 400 ) ( 256 1784 400 ) ( 256 1784 384 ) 10 0 0 0 1 1 +( 536 1760 400 ) ( 712 1760 400 ) ( 712 1760 384 ) 10 0 0 0 1 1 +( 704 1840 384 ) ( 528 1840 384 ) ( 528 1784 384 ) 10 0 0 0 1 1 +( 528 1784 400 ) ( 528 1840 400 ) ( 704 1840 400 ) 10 0 0 0 1 1 +( 688 2176 400 ) ( 512 2176 400 ) ( 512 2176 384 ) 10 0 0 0 1 1 +( 1296 1768 400 ) ( 1296 1824 400 ) ( 1296 1824 384 ) 10 0 0 0 1 1 +} +// brush 51 +{ +( 640 1776 416 ) ( 640 1536 416 ) ( 640 1536 400 ) 4 0 0 0 1 1 +( 688 1504 416 ) ( 816 1504 416 ) ( 816 1504 400 ) 4 0 0 0 1 1 +( 816 1776 400 ) ( 688 1776 400 ) ( 688 1536 400 ) 4 0 0 0 1 1 +( 688 1536 416 ) ( 688 1776 416 ) ( 816 1776 416 ) 4 0 0 0 1 1 +( 816 1792 416 ) ( 688 1792 416 ) ( 688 1792 400 ) 4 0 0 0 1 1 +( 832 1536 416 ) ( 832 1776 416 ) ( 832 1776 400 ) 4 0 0 0 1 1 +} +// brush 52 +{ +( 640 1616 784 ) ( 640 1600 784 ) ( 640 1600 384 ) 2 0 0 0 1 1 +( 624 1600 784 ) ( 848 1600 784 ) ( 848 1600 384 ) 2 0 0 0 1 1 +( 848 1616 640 ) ( 624 1616 640 ) ( 624 1600 640 ) 2 0 0 0 1 1 +( 624 1600 768 ) ( 624 1616 768 ) ( 848 1616 768 ) 2 0 0 0 1 1 +( 848 2112 784 ) ( 624 2112 784 ) ( 624 2112 384 ) 2 0 0 0 1 1 +( 864 1600 784 ) ( 864 1616 784 ) ( 864 1616 384 ) 2 0 0 0 1 1 +} +// brush 53 +{ +( 608 1664 768 ) ( 608 1616 768 ) ( 608 1616 624 ) 16 0 0 0 1 1 +( 624 1632 768 ) ( 640 1632 768 ) ( 640 1632 624 ) 16 0 0 0 1 1 +( 640 1664 640 ) ( 624 1664 640 ) ( 624 1616 640 ) 16 0 0 0 1 1 +( 624 1616 768 ) ( 624 1664 768 ) ( 640 1664 768 ) 16 0 0 0 1 1 +( 632 2112 768 ) ( 616 2112 768 ) ( 616 2112 624 ) 16 0 0 0 1 1 +( 640 1616 768 ) ( 640 1664 768 ) ( 640 1664 624 ) 16 0 0 0 1 1 +} +// brush 54 +{ +( 864 1664 768 ) ( 864 1616 768 ) ( 864 1616 624 ) 16 0 0 0 1 1 +( 856 1632 768 ) ( 872 1632 768 ) ( 872 1632 624 ) 16 0 0 0 1 1 +( 880 1664 640 ) ( 864 1664 640 ) ( 864 1616 640 ) 16 0 0 0 1 1 +( 864 1616 768 ) ( 864 1664 768 ) ( 880 1664 768 ) 16 0 0 0 1 1 +( 856 2112 768 ) ( 840 2112 768 ) ( 840 2112 624 ) 16 0 0 0 1 1 +( 896 1616 768 ) ( 896 1664 768 ) ( 896 1664 624 ) 16 0 0 0 1 1 +} +// brush 55 +{ +( 576 2272 640 ) ( 576 2224 640 ) ( 576 2224 624 ) 6 0 0 0 1 1 +( 576 2272 624 ) ( 576 2272 640 ) ( 632 2272 640 ) 6 0 0 0 1 1 +( 1072 2304 624 ) ( 424 2304 624 ) ( 424 2120 624 ) 6 0 0 0 1 1 +( 424 2120 640 ) ( 424 2304 640 ) ( 1072 2304 640 ) 6 0 0 0 1 1 +( 1072 2304 640 ) ( 424 2304 640 ) ( 424 2304 624 ) 6 0 0 0 1 1 +( 608 2288 624 ) ( 608 2288 640 ) ( 608 2352 640 ) 6 0 0 0 1 1 +} +// brush 56 +{ +( 896 2352 624 ) ( 896 2352 640 ) ( 896 2288 640 ) 6 0 0 0 1 1 +( 576 2272 624 ) ( 576 2272 640 ) ( 632 2272 640 ) 6 0 0 0 1 1 +( 1072 2304 624 ) ( 424 2304 624 ) ( 424 2120 624 ) 6 0 0 0 1 1 +( 424 2120 640 ) ( 424 2304 640 ) ( 1072 2304 640 ) 6 0 0 0 1 1 +( 1072 2304 640 ) ( 424 2304 640 ) ( 424 2304 624 ) 6 0 0 0 1 1 +( 1072 2120 640 ) ( 1072 2304 640 ) ( 1072 2304 624 ) 6 0 0 0 1 1 +} +// brush 57 +{ +( 256 2208 624 ) ( 256 2192 624 ) ( 256 2192 400 ) 2 0 0 0 1 1 +( 600 2176 624 ) ( 624 2176 624 ) ( 624 2176 400 ) 2 0 0 0 1 1 +( 616 2208 400 ) ( 592 2208 400 ) ( 592 2192 400 ) 2 0 0 0 1 1 +( 592 2192 624 ) ( 592 2208 624 ) ( 616 2208 624 ) 2 0 0 0 1 1 +( 616 2304 624 ) ( 592 2304 624 ) ( 592 2304 400 ) 2 0 0 0 1 1 +( 672 2176 400 ) ( 672 2176 624 ) ( 672 2208 624 ) 2 0 0 0 1 1 +} +// brush 58 +{ +( 832 2208 400 ) ( 832 2208 624 ) ( 832 2176 624 ) 2 0 0 0 1 1 +( 592 2176 624 ) ( 616 2176 624 ) ( 616 2176 400 ) 2 0 0 0 1 1 +( 616 2208 400 ) ( 592 2208 400 ) ( 592 2192 400 ) 2 0 0 0 1 1 +( 592 2192 624 ) ( 592 2208 624 ) ( 616 2208 624 ) 2 0 0 0 1 1 +( 824 2304 624 ) ( 816 2304 624 ) ( 816 2304 400 ) 2 0 0 0 1 1 +( 1296 2160 624 ) ( 1296 2176 624 ) ( 1296 2176 400 ) 2 0 0 0 1 1 +} +// brush 59 +{ +( 672 2208 480 ) ( 672 2192 480 ) ( 672 2192 448 ) 6 0 0 0 1 1 +( 592 2144 624 ) ( 616 2144 624 ) ( 616 2144 400 ) 6 0 0 0 1 1 +( 816 2208 544 ) ( 688 2208 544 ) ( 688 2192 544 ) 6 0 0 0 1 1 +( 592 2192 624 ) ( 592 2208 624 ) ( 616 2208 624 ) 6 0 0 0 1 1 +( 616 2272 624 ) ( 592 2272 624 ) ( 592 2272 400 ) 6 0 0 0 1 1 +( 832 2192 480 ) ( 832 2208 480 ) ( 832 2208 448 ) 6 0 0 0 1 1 +} +// brush 60 +{ +( 672 2240 416 ) ( 672 2192 416 ) ( 672 2192 400 ) 9 0 0 0 1 1 +( 688 2080 416 ) ( 816 2080 416 ) ( 816 2080 400 ) 9 0 0 0 1 1 +( 816 2208 400 ) ( 688 2208 400 ) ( 688 2160 400 ) 9 0 0 0 1 1 +( 688 2160 416 ) ( 688 2208 416 ) ( 816 2208 416 ) 9 0 0 0 1 1 +( 824 2304 416 ) ( 696 2304 416 ) ( 696 2304 400 ) 9 0 0 0 1 1 +( 832 2160 416 ) ( 832 2208 416 ) ( 832 2208 400 ) 9 0 0 0 1 1 +} +// brush 61 +{ +( 320 2432 416 ) ( 320 2288 416 ) ( 320 2288 400 ) 9 0 0 0 1 1 +( 592 2304 416 ) ( 912 2304 416 ) ( 912 2304 400 ) 9 0 0 0 1 1 +( 912 2432 400 ) ( 592 2432 400 ) ( 592 2288 400 ) 9 0 0 0 1 1 +( 592 2288 416 ) ( 592 2432 416 ) ( 912 2432 416 ) 9 0 0 0 1 1 +( 920 2560 416 ) ( 600 2560 416 ) ( 600 2560 400 ) 9 0 0 0 1 1 +( 896 2288 416 ) ( 896 2432 416 ) ( 896 2432 400 ) 9 0 0 0 1 1 +} +// brush 62 +{ +( 896 1728 720 ) ( 896 1688 720 ) ( 896 1688 648 ) 16 0 0 0 1 1 +( 880 1664 720 ) ( 984 1664 720 ) ( 984 1664 648 ) 16 0 0 0 1 1 +( 984 1728 640 ) ( 880 1728 640 ) ( 880 1688 640 ) 16 0 0 0 1 1 +( 880 1688 704 ) ( 880 1728 704 ) ( 984 1728 704 ) 16 0 0 0 1 1 +( 984 1728 720 ) ( 880 1728 720 ) ( 880 1728 648 ) 16 0 0 0 1 1 +( 992 1688 720 ) ( 992 1728 720 ) ( 992 1728 648 ) 16 0 0 0 1 1 +} +// brush 63 +{ +( 512 1728 720 ) ( 512 1664 720 ) ( 512 1664 648 ) 16 0 0 0 1 1 +( 528 1664 720 ) ( 624 1664 720 ) ( 624 1664 648 ) 16 0 0 0 1 1 +( 624 1728 640 ) ( 528 1728 640 ) ( 528 1664 640 ) 16 0 0 0 1 1 +( 528 1664 704 ) ( 528 1728 704 ) ( 624 1728 704 ) 16 0 0 0 1 1 +( 624 1728 720 ) ( 528 1728 720 ) ( 528 1728 648 ) 16 0 0 0 1 1 +( 608 1664 720 ) ( 608 1728 720 ) ( 608 1728 648 ) 16 0 0 0 1 1 +} +// brush 64 +{ +( 224 1840 832 ) ( 224 1792 832 ) ( 224 1792 288 ) 11 0 0 0 1 1 +( 320 1792 832 ) ( 432 1792 832 ) ( 432 1792 288 ) 11 0 0 0 1 1 +( 432 1840 400 ) ( 320 1840 400 ) ( 320 1792 400 ) 11 0 0 0 1 1 +( 320 1792 720 ) ( 320 1840 720 ) ( 432 1840 720 ) 11 0 0 0 1 1 +( 432 1904 832 ) ( 320 1904 832 ) ( 320 1904 288 ) 11 0 0 0 1 1 +( 448 1792 832 ) ( 448 1840 832 ) ( 448 1840 288 ) 11 0 0 0 1 1 +} +// brush 65 +{ +( 896 2560 432 ) ( 896 2368 432 ) ( 896 2368 416 ) 9 0 0 0 1 1 +( 912 2304 432 ) ( 1136 2304 432 ) ( 1136 2304 416 ) 9 0 0 0 1 1 +( 1136 2560 416 ) ( 912 2560 416 ) ( 912 2368 416 ) 9 0 0 0 1 1 +( 912 2368 432 ) ( 912 2560 432 ) ( 1136 2560 432 ) 9 0 0 0 1 1 +( 1136 2624 432 ) ( 912 2624 432 ) ( 912 2624 416 ) 9 0 0 0 1 1 +( 1184 2368 432 ) ( 1184 2560 432 ) ( 1184 2560 416 ) 9 0 0 0 1 1 +} +// brush 66 +{ +( 1024 2504 448 ) ( 1024 2440 448 ) ( 1024 2440 432 ) 15 0 0 0 1 1 +( 1032 2432 448 ) ( 1088 2432 448 ) ( 1088 2432 432 ) 15 0 0 0 1 1 +( 1088 2496 432 ) ( 1032 2496 432 ) ( 1032 2432 432 ) 15 0 0 0 1 1 +( 1032 2432 592 ) ( 1032 2496 592 ) ( 1088 2496 592 ) 15 0 0 0 1 1 +( 1088 2496 448 ) ( 1032 2496 448 ) ( 1032 2496 432 ) 15 0 0 0 1 1 +( 1088 2488 432 ) ( 1088 2488 624 ) ( 1088 2496 624 ) 15 0 0 0 1 1 +} +// brush 67 +{ +( 1184 2640 624 ) ( 1184 2288 624 ) ( 1184 2288 416 ) 2 0 0 0 1 1 +( 1200 2304 624 ) ( 1216 2304 624 ) ( 1216 2304 416 ) 2 0 0 0 1 1 +( 1216 2640 416 ) ( 1200 2640 416 ) ( 1200 2288 416 ) 2 0 0 0 1 1 +( 1200 2288 624 ) ( 1200 2640 624 ) ( 1216 2640 624 ) 2 0 0 0 1 1 +( 1528 2368 496 ) ( 1528 2368 560 ) ( 1208 2368 560 ) 2 0 0 0 1 1 +( 1248 2288 624 ) ( 1248 2640 624 ) ( 1248 2640 416 ) 2 0 0 0 1 1 +} +// brush 68 +{ +( 832 2648 576 ) ( 832 2640 576 ) ( 832 2640 512 ) 12 0 0 0 1 1 +( 944 2624 576 ) ( 1048 2624 576 ) ( 1048 2624 512 ) 12 0 0 0 1 1 +( 1048 2648 560 ) ( 944 2648 560 ) ( 944 2640 560 ) 12 0 0 0 1 1 +( 944 2640 768 ) ( 944 2648 768 ) ( 1048 2648 768 ) 12 0 0 0 1 1 +( 1048 2720 576 ) ( 944 2720 576 ) ( 944 2720 512 ) 12 0 0 0 1 1 +( 1248 2640 576 ) ( 1248 2648 576 ) ( 1248 2648 512 ) 12 0 0 0 1 1 +} +// brush 69 +{ +( 1184 2640 576 ) ( 1184 2336 576 ) ( 1184 2336 560 ) 12 0 0 0 1 1 +( 1216 2368 576 ) ( 1264 2368 576 ) ( 1264 2368 560 ) 12 0 0 0 1 1 +( 1264 2640 560 ) ( 1216 2640 560 ) ( 1216 2336 560 ) 12 0 0 0 1 1 +( 1216 2336 640 ) ( 1216 2640 640 ) ( 1264 2640 640 ) 12 0 0 0 1 1 +( 1264 2624 576 ) ( 1216 2624 576 ) ( 1216 2624 560 ) 12 0 0 0 1 1 +( 1248 2336 576 ) ( 1248 2640 576 ) ( 1248 2640 560 ) 12 0 0 0 1 1 +} +// brush 70 +{ +( 896 2648 496 ) ( 896 2640 496 ) ( 896 2640 432 ) 12 0 0 0 1 1 +( 944 2624 496 ) ( 1048 2624 496 ) ( 1048 2624 432 ) 12 0 0 0 1 1 +( 1048 2648 432 ) ( 944 2648 432 ) ( 944 2640 432 ) 12 0 0 0 1 1 +( 944 2640 496 ) ( 944 2648 496 ) ( 1048 2648 496 ) 12 0 0 0 1 1 +( 1048 2688 496 ) ( 944 2688 496 ) ( 944 2688 432 ) 12 0 0 0 1 1 +( 1184 2640 496 ) ( 1184 2648 496 ) ( 1184 2648 432 ) 12 0 0 0 1 1 +} +// brush 71 +{ +( 1184 2640 496 ) ( 1184 2336 496 ) ( 1184 2336 480 ) 12 0 0 0 1 1 +( 1200 2368 496 ) ( 1248 2368 496 ) ( 1248 2368 480 ) 12 0 0 0 1 1 +( 1248 2640 432 ) ( 1200 2640 432 ) ( 1200 2336 432 ) 12 0 0 0 1 1 +( 1200 2336 496 ) ( 1200 2640 496 ) ( 1248 2640 496 ) 12 0 0 0 1 1 +( 1248 2688 496 ) ( 1200 2688 496 ) ( 1200 2688 480 ) 12 0 0 0 1 1 +( 1248 2336 496 ) ( 1248 2640 496 ) ( 1248 2640 480 ) 12 0 0 0 1 1 +} +// brush 72 +{ +( 928 2704 496 ) ( 928 2688 496 ) ( 928 2688 480 ) 2 0 0 0 1 1 +( 944 2688 496 ) ( 1264 2688 496 ) ( 1264 2688 480 ) 2 0 0 0 1 1 +( 1264 2704 64 ) ( 944 2704 64 ) ( 944 2688 64 ) 2 0 0 0 1 1 +( 944 2688 896 ) ( 944 2704 896 ) ( 1264 2704 896 ) 2 0 0 0 1 1 +( 1264 3072 496 ) ( 944 3072 496 ) ( 944 3072 480 ) 2 0 0 0 1 1 +( 1248 2680 496 ) ( 1248 2696 496 ) ( 1248 2696 480 ) 2 0 0 0 1 1 +} +// brush 73 +{ +( 512 2584 624 ) ( 512 2568 624 ) ( 512 2568 416 ) 2 0 0 0 1 1 +( 872 2560 624 ) ( 896 2560 624 ) ( 896 2560 416 ) 2 0 0 0 1 1 +( 896 2576 416 ) ( 872 2576 416 ) ( 872 2560 416 ) 2 0 0 0 1 1 +( 872 2560 656 ) ( 872 2576 656 ) ( 896 2576 656 ) 2 0 0 0 1 1 +( 896 2992 624 ) ( 872 2992 624 ) ( 872 2992 416 ) 2 0 0 0 1 1 +( 928 2560 624 ) ( 928 2576 624 ) ( 928 2576 416 ) 2 0 0 0 1 1 +} +// brush 74 +{ +( 896 2560 624 ) ( 896 2304 624 ) ( 896 2304 416 ) 16 0 0 0 1 1 +( 896 2304 624 ) ( 912 2304 624 ) ( 912 2304 416 ) 16 0 0 0 1 1 +( 912 2560 592 ) ( 896 2560 592 ) ( 896 2304 592 ) 16 0 0 0 1 1 +( 896 2304 624 ) ( 896 2560 624 ) ( 912 2560 624 ) 16 0 0 0 1 1 +( 912 2560 624 ) ( 896 2560 624 ) ( 896 2560 416 ) 16 0 0 0 1 1 +( 928 2304 624 ) ( 928 2560 624 ) ( 928 2560 416 ) 16 0 0 0 1 1 +} +// brush 75 +{ +( 1024 2624 624 ) ( 1024 2496 624 ) ( 1024 2496 608 ) 16 0 0 0 1 1 +( 1024 2080 624 ) ( 1056 2080 624 ) ( 1056 2080 608 ) 16 0 0 0 1 1 +( 1056 2624 592 ) ( 1024 2624 592 ) ( 1024 2496 592 ) 16 0 0 0 1 1 +( 1024 2496 816 ) ( 1024 2624 816 ) ( 1056 2624 816 ) 16 0 0 0 1 1 +( 1056 2624 624 ) ( 1024 2624 624 ) ( 1024 2624 608 ) 16 0 0 0 1 1 +( 1088 2496 624 ) ( 1088 2624 624 ) ( 1088 2624 608 ) 16 0 0 0 1 1 +} +// brush 76 +{ +( 928 2480 624 ) ( 928 2448 624 ) ( 928 2448 608 ) 16 0 0 0 1 1 +( 912 2432 624 ) ( 1040 2432 624 ) ( 1040 2432 608 ) 16 0 0 0 1 1 +( 1040 2448 592 ) ( 1040 2480 592 ) ( 912 2480 592 ) 16 0 0 0 1 1 +( 912 2480 624 ) ( 1040 2480 624 ) ( 1040 2448 624 ) 16 0 0 0 1 1 +( 1040 2496 624 ) ( 912 2496 624 ) ( 912 2496 608 ) 16 0 0 0 1 1 +( 1184 2448 624 ) ( 1184 2480 624 ) ( 1184 2480 608 ) 16 0 0 0 1 1 +} +// brush 77 +{ +( 128 2408 624 ) ( 128 2392 624 ) ( 128 2392 400 ) 1 0 0 0 1 1 +( 304 2304 624 ) ( 336 2304 624 ) ( 336 2304 400 ) 1 0 0 0 1 1 +( 336 2400 400 ) ( 304 2400 400 ) ( 304 2384 400 ) 1 0 0 0 1 1 +( 304 2384 752 ) ( 304 2400 752 ) ( 336 2400 752 ) 1 0 0 0 1 1 +( 336 2400 624 ) ( 304 2400 624 ) ( 304 2400 400 ) 1 0 0 0 1 1 +( 320 2384 624 ) ( 320 2400 624 ) ( 320 2400 400 ) 1 0 0 0 1 1 +} +// brush 78 +{ +( 400 2528 432 ) ( 400 2464 432 ) ( 400 2464 416 ) 4 0 0 0 1 1 +( 400 2464 432 ) ( 464 2464 432 ) ( 464 2464 416 ) 4 0 0 0 1 1 +( 496 2560 416 ) ( 432 2560 416 ) ( 432 2496 416 ) 4 0 0 0 1 1 +( 432 2496 432 ) ( 432 2560 432 ) ( 496 2560 432 ) 4 0 0 0 1 1 +( 496 2560 432 ) ( 432 2560 432 ) ( 432 2560 416 ) 4 0 0 0 1 1 +( 544 2488 432 ) ( 544 2552 432 ) ( 544 2552 416 ) 4 0 0 0 1 1 +} +// brush 79 +{ +( 304 2432 432 ) ( 304 2368 432 ) ( 304 2368 416 ) 4 0 0 0 1 1 +( 304 2368 432 ) ( 368 2368 432 ) ( 368 2368 416 ) 4 0 0 0 1 1 +( 400 2464 416 ) ( 336 2464 416 ) ( 336 2400 416 ) 4 0 0 0 1 1 +( 336 2400 432 ) ( 336 2464 432 ) ( 400 2464 432 ) 4 0 0 0 1 1 +( 392 2560 432 ) ( 328 2560 432 ) ( 328 2560 416 ) 4 0 0 0 1 1 +( 400 2400 432 ) ( 400 2464 432 ) ( 400 2464 416 ) 4 0 0 0 1 1 +} +// brush 80 +{ +( 352 2584 448 ) ( 352 2520 448 ) ( 352 2520 432 ) 4 0 0 0 1 1 +( 400 2512 448 ) ( 464 2512 448 ) ( 464 2512 432 ) 4 0 0 0 1 1 +( 496 2616 432 ) ( 432 2616 432 ) ( 432 2552 432 ) 4 0 0 0 1 1 +( 432 2552 448 ) ( 432 2616 448 ) ( 496 2616 448 ) 4 0 0 0 1 1 +( 496 2616 448 ) ( 432 2616 448 ) ( 432 2616 432 ) 4 0 0 0 1 1 +( 512 2552 448 ) ( 512 2616 448 ) ( 512 2616 432 ) 4 0 0 0 1 1 +} +// brush 81 +{ +( 256 2568 448 ) ( 256 2504 448 ) ( 256 2504 432 ) 4 0 0 0 1 1 +( 280 2400 448 ) ( 344 2400 448 ) ( 344 2400 432 ) 4 0 0 0 1 1 +( 352 2472 432 ) ( 352 2536 432 ) ( 288 2536 432 ) 4 0 0 0 1 1 +( 288 2536 448 ) ( 352 2536 448 ) ( 352 2472 448 ) 4 0 0 0 1 1 +( 320 2616 448 ) ( 256 2616 448 ) ( 256 2616 432 ) 4 0 0 0 1 1 +( 352 2472 448 ) ( 352 2536 448 ) ( 352 2536 432 ) 4 0 0 0 1 1 +} +// brush 82 +{ +( 128 2648 464 ) ( 128 2608 464 ) ( 128 2608 448 ) 9 0 0 0 1 1 +( 424 2592 464 ) ( 496 2592 464 ) ( 496 2592 448 ) 9 0 0 0 1 1 +( 496 2616 448 ) ( 424 2616 448 ) ( 424 2576 448 ) 9 0 0 0 1 1 +( 424 2576 464 ) ( 424 2616 464 ) ( 496 2616 464 ) 9 0 0 0 1 1 +( 464 3008 464 ) ( 392 3008 464 ) ( 392 3008 448 ) 9 0 0 0 1 1 +( 512 2576 464 ) ( 512 2616 464 ) ( 512 2616 448 ) 9 0 0 0 1 1 +} +// brush 83 +{ +( 128 2576 464 ) ( 128 2400 464 ) ( 128 2400 448 ) 9 0 0 0 1 1 +( 112 2400 464 ) ( 304 2400 464 ) ( 304 2400 448 ) 9 0 0 0 1 1 +( 304 2576 448 ) ( 112 2576 448 ) ( 112 2400 448 ) 9 0 0 0 1 1 +( 112 2400 464 ) ( 112 2576 464 ) ( 304 2576 464 ) 9 0 0 0 1 1 +( 304 2592 464 ) ( 112 2592 464 ) ( 112 2592 448 ) 9 0 0 0 1 1 +( 288 2400 464 ) ( 288 2576 464 ) ( 288 2576 448 ) 9 0 0 0 1 1 +} +// brush 84 +{ +( 256 2568 640 ) ( 256 2296 640 ) ( 256 2296 624 ) 12 0 0 0 1 1 +( 416 2112 640 ) ( 896 2112 640 ) ( 896 2112 624 ) 12 0 0 0 1 1 +( 896 2560 624 ) ( 416 2560 624 ) ( 416 2288 624 ) 12 0 0 0 1 1 +( 416 2288 800 ) ( 416 2560 800 ) ( 896 2560 800 ) 12 0 0 0 1 1 +( 896 2624 640 ) ( 416 2624 640 ) ( 416 2624 624 ) 12 0 0 0 1 1 +( 1216 2288 624 ) ( 1216 2288 640 ) ( 1216 2352 640 ) 12 0 0 0 1 1 +} +// brush 85 +{ +( 672 2560 624 ) ( 672 2520 624 ) ( 672 2520 608 ) 16 0 0 270 1 -1 +( 704 2272 624 ) ( 720 2272 624 ) ( 720 2272 608 ) 16 0 0 0 1 1 +( 688 2560 592 ) ( 672 2560 592 ) ( 672 2520 592 ) 16 0 0 0 1 1 +( 672 2520 624 ) ( 672 2560 624 ) ( 688 2560 624 ) 16 0 0 0 1 1 +( 688 2560 624 ) ( 672 2560 624 ) ( 672 2560 608 ) 16 0 0 0 1 1 +( 704 2520 624 ) ( 704 2560 624 ) ( 704 2560 608 ) 16 0 0 270 1 -1 +} +// brush 86 +{ +( 800 2560 624 ) ( 800 2520 624 ) ( 800 2520 608 ) 16 0 0 270 1 -1 +( 824 2368 624 ) ( 840 2368 624 ) ( 840 2368 608 ) 16 0 0 0 1 1 +( 816 2560 592 ) ( 800 2560 592 ) ( 800 2520 592 ) 16 0 0 0 1 1 +( 800 2520 624 ) ( 800 2560 624 ) ( 816 2560 624 ) 16 0 0 0 1 1 +( 816 2560 624 ) ( 800 2560 624 ) ( 800 2560 608 ) 16 0 0 0 1 1 +( 832 2520 624 ) ( 832 2560 624 ) ( 832 2560 608 ) 16 0 0 270 1 -1 +} +// brush 87 +{ +( 512 2560 624 ) ( 512 2520 624 ) ( 512 2520 608 ) 16 0 0 270 1 -1 +( 536 2336 624 ) ( 552 2336 624 ) ( 552 2336 608 ) 16 0 0 0 1 1 +( 528 2560 592 ) ( 512 2560 592 ) ( 512 2520 592 ) 16 0 0 0 1 1 +( 512 2520 624 ) ( 512 2560 624 ) ( 528 2560 624 ) 16 0 0 0 1 1 +( 528 2560 624 ) ( 512 2560 624 ) ( 512 2560 608 ) 16 0 0 0 1 1 +( 544 2520 624 ) ( 544 2560 624 ) ( 544 2560 608 ) 16 0 0 270 1 -1 +} +// brush 88 +{ +( 416 2560 624 ) ( 416 2520 624 ) ( 416 2520 608 ) 16 0 0 270 1 -1 +( 440 2080 624 ) ( 456 2080 624 ) ( 456 2080 608 ) 16 0 0 0 1 1 +( 432 2560 592 ) ( 416 2560 592 ) ( 416 2520 592 ) 16 0 0 0 1 1 +( 416 2520 784 ) ( 416 2560 784 ) ( 432 2560 784 ) 16 0 0 0 1 1 +( 432 2656 624 ) ( 416 2656 624 ) ( 416 2656 608 ) 16 0 0 0 1 1 +( 448 2520 624 ) ( 448 2560 624 ) ( 448 2560 608 ) 16 0 0 270 1 -1 +} +// brush 89 +{ +( 448 2464 624 ) ( 448 2448 624 ) ( 448 2448 608 ) 16 0 0 0 1 1 +( 520 2464 624 ) ( 560 2464 624 ) ( 560 2464 608 ) 16 0 0 270 1 -1 +( 560 2480 592 ) ( 560 2496 592 ) ( 520 2496 592 ) 16 0 0 0 1 1 +( 520 2496 624 ) ( 560 2496 624 ) ( 560 2480 624 ) 16 0 0 0 1 1 +( 560 2496 624 ) ( 520 2496 624 ) ( 520 2496 608 ) 16 0 0 270 1 -1 +( 512 2480 624 ) ( 512 2496 624 ) ( 512 2496 608 ) 16 0 0 0 1 1 +} +// brush 90 +{ +( 704 2464 624 ) ( 704 2448 624 ) ( 704 2448 608 ) 16 0 0 0 1 1 +( 776 2464 624 ) ( 816 2464 624 ) ( 816 2464 608 ) 16 0 0 270 1 -1 +( 816 2480 592 ) ( 816 2496 592 ) ( 776 2496 592 ) 16 0 0 0 1 1 +( 776 2496 624 ) ( 816 2496 624 ) ( 816 2480 624 ) 16 0 0 0 1 1 +( 816 2496 624 ) ( 776 2496 624 ) ( 776 2496 608 ) 16 0 0 270 1 -1 +( 800 2480 624 ) ( 800 2496 624 ) ( 800 2496 608 ) 16 0 0 0 1 1 +} +// brush 91 +{ +( 544 2368 624 ) ( 544 2352 624 ) ( 544 2352 608 ) 16 0 0 0 1 1 +( 648 2368 624 ) ( 688 2368 624 ) ( 688 2368 608 ) 16 0 0 270 1 -1 +( 688 2384 592 ) ( 688 2400 592 ) ( 648 2400 592 ) 16 0 0 0 1 1 +( 648 2400 624 ) ( 688 2400 624 ) ( 688 2384 624 ) 16 0 0 0 1 1 +( 688 2400 624 ) ( 648 2400 624 ) ( 648 2400 608 ) 16 0 0 270 1 -1 +( 800 2384 624 ) ( 800 2400 624 ) ( 800 2400 608 ) 16 0 0 0 1 1 +} +// brush 92 +{ +( 32 2872 656 ) ( 32 2776 656 ) ( 32 2776 640 ) 9 0 0 0 1 1 +( 312 2752 656 ) ( 496 2752 656 ) ( 496 2752 640 ) 9 0 0 0 1 1 +( 496 2848 640 ) ( 312 2848 640 ) ( 312 2752 640 ) 9 0 0 0 1 1 +( 312 2752 672 ) ( 312 2848 672 ) ( 496 2848 672 ) 9 0 0 0 1 1 +( 496 2848 656 ) ( 312 2848 656 ) ( 312 2848 640 ) 9 0 0 0 1 1 +( 576 2744 656 ) ( 576 2840 656 ) ( 576 2840 640 ) 9 0 0 0 1 1 +} +// brush 93 +{ +( 32 2848 672 ) ( 32 2752 672 ) ( 32 2752 400 ) 3 0 0 0 1 1 +( 112 2752 672 ) ( 128 2752 672 ) ( 128 2752 400 ) 3 0 0 0 1 1 +( 128 2848 400 ) ( 112 2848 400 ) ( 112 2752 400 ) 3 0 0 0 1 1 +( 112 2752 640 ) ( 112 2848 640 ) ( 128 2848 640 ) 3 0 0 0 1 1 +( 128 3072 672 ) ( 112 3072 672 ) ( 112 3072 400 ) 3 0 0 0 1 1 +( 128 2752 672 ) ( 128 2848 672 ) ( 128 2848 400 ) 3 0 0 0 1 1 +} +// brush 94 +{ +( 224 2816 608 ) ( 224 2784 608 ) ( 224 2784 448 ) 16 0 0 0 1 1 +( 256 2784 608 ) ( 368 2784 608 ) ( 368 2784 448 ) 16 0 0 0 1 1 +( 368 2816 576 ) ( 256 2816 576 ) ( 256 2784 576 ) 16 0 0 0 1 1 +( 256 2784 608 ) ( 256 2816 608 ) ( 368 2816 608 ) 16 0 0 0 1 1 +( 368 2816 608 ) ( 256 2816 608 ) ( 256 2816 448 ) 16 0 0 0 1 1 +( 416 2784 608 ) ( 416 2816 608 ) ( 416 2816 448 ) 16 0 0 0 1 1 +} +// brush 95 +{ +( 128 2816 576 ) ( 128 2784 576 ) ( 128 2784 416 ) 16 0 0 0 1 1 +( 144 2784 576 ) ( 256 2784 576 ) ( 256 2784 416 ) 16 0 0 0 1 1 +( 256 2816 544 ) ( 144 2816 544 ) ( 144 2784 544 ) 16 0 0 0 1 1 +( 144 2784 576 ) ( 144 2816 576 ) ( 256 2816 576 ) 16 0 0 0 1 1 +( 256 2816 576 ) ( 144 2816 576 ) ( 144 2816 416 ) 16 0 0 0 1 1 +( 192 2792 576 ) ( 192 2824 576 ) ( 192 2824 416 ) 16 0 0 0 1 1 +} +// brush 96 +{ +( 448 2816 576 ) ( 448 2784 576 ) ( 448 2784 416 ) 16 0 0 0 1 1 +( 464 2784 576 ) ( 576 2784 576 ) ( 576 2784 416 ) 16 0 0 0 1 1 +( 576 2816 544 ) ( 464 2816 544 ) ( 464 2784 544 ) 16 0 0 0 1 1 +( 464 2784 576 ) ( 464 2816 576 ) ( 576 2816 576 ) 16 0 0 0 1 1 +( 576 2816 576 ) ( 464 2816 576 ) ( 464 2816 416 ) 16 0 0 0 1 1 +( 512 2792 576 ) ( 512 2824 576 ) ( 512 2824 416 ) 16 0 0 0 1 1 +} +// brush 97 +{ +( 480 2944 752 ) ( 480 2848 752 ) ( 480 2848 448 ) 3 0 0 0 1 1 +( 496 2976 544 ) ( 496 2976 672 ) ( 512 2976 672 ) 3 0 0 0 1 1 +( 512 2944 448 ) ( 496 2944 448 ) ( 496 2848 448 ) 3 0 0 0 1 1 +( 496 2848 864 ) ( 496 2944 864 ) ( 512 2944 864 ) 3 0 0 0 1 1 +( 512 3104 752 ) ( 496 3104 752 ) ( 496 3104 448 ) 3 0 0 0 1 1 +( 608 2848 752 ) ( 608 2944 752 ) ( 608 2944 448 ) 3 0 0 0 1 1 +} +// brush 98 +{ +( 480 2944 752 ) ( 480 2848 752 ) ( 480 2848 448 ) 3 0 0 0 1 1 +( 496 2848 672 ) ( 512 2848 672 ) ( 512 2848 544 ) 3 0 0 0 1 1 +( 512 2928 576 ) ( 496 2928 576 ) ( 496 2848 576 ) 3 0 0 0 1 1 +( 496 2848 864 ) ( 496 2944 864 ) ( 512 2944 864 ) 3 0 0 0 1 1 +( 512 2944 672 ) ( 496 2944 672 ) ( 496 2944 544 ) 3 0 0 0 1 1 +( 512 2848 752 ) ( 512 2944 752 ) ( 512 2944 448 ) 3 0 0 0 1 1 +} +// brush 99 +{ +( 32 2752 752 ) ( 32 2736 752 ) ( 32 2736 400 ) 1 0 0 0 1 1 +( 48 2400 752 ) ( 112 2400 752 ) ( 112 2400 400 ) 1 0 0 0 1 1 +( 112 2752 448 ) ( 48 2752 448 ) ( 48 2736 448 ) 1 0 0 0 1 1 +( 48 2736 864 ) ( 48 2752 864 ) ( 112 2752 864 ) 1 0 0 0 1 1 +( 112 2752 752 ) ( 48 2752 752 ) ( 48 2752 400 ) 1 0 0 0 1 1 +( 128 2736 752 ) ( 128 2752 752 ) ( 128 2752 400 ) 1 0 0 0 1 1 +} +// brush 100 +{ +( 128 2416 800 ) ( 128 2400 800 ) ( 128 2400 448 ) 2 0 0 0 1 1 +( 128 2400 800 ) ( 152 2400 800 ) ( 152 2400 448 ) 2 0 0 0 1 1 +( 496 2752 768 ) ( 472 2752 768 ) ( 472 2736 768 ) 2 0 0 0 1 1 +( 472 2736 864 ) ( 472 2752 864 ) ( 496 2752 864 ) 2 0 0 0 1 1 +( 496 2720 800 ) ( 472 2720 800 ) ( 472 2720 448 ) 2 0 0 0 1 1 +( 480 2736 800 ) ( 480 2752 800 ) ( 480 2752 448 ) 2 0 0 0 1 1 +} +// brush 101 +{ +( 288 2736 784 ) ( 288 2712 784 ) ( 288 2712 736 ) 7 0 0 0 1 1 +( 288 2624 784 ) ( 320 2624 784 ) ( 320 2624 736 ) 7 0 0 0 1 1 +( 320 2736 736 ) ( 288 2736 736 ) ( 288 2712 736 ) 7 0 0 0 1 1 +( 288 2712 864 ) ( 288 2736 864 ) ( 320 2736 864 ) 7 0 0 0 1 1 +( 320 2752 784 ) ( 288 2752 784 ) ( 288 2752 736 ) 7 0 0 0 1 1 +( 320 2712 784 ) ( 320 2736 784 ) ( 320 2736 736 ) 7 0 0 0 1 1 +} +// brush 102 +{ +( 128 2592 784 ) ( 128 2560 784 ) ( 128 2560 736 ) 7 0 0 0 1 1 +( 264 2560 784 ) ( 288 2560 784 ) ( 288 2560 736 ) 7 0 0 0 1 1 +( 288 2560 736 ) ( 288 2592 736 ) ( 264 2592 736 ) 7 0 0 0 1 1 +( 264 2592 768 ) ( 288 2592 768 ) ( 288 2560 768 ) 7 0 0 0 1 1 +( 288 2592 784 ) ( 264 2592 784 ) ( 264 2592 736 ) 7 0 0 0 1 1 +( 256 2560 784 ) ( 256 2592 784 ) ( 256 2592 736 ) 7 0 0 0 1 1 +} +// brush 103 +{ +( 192 2392 784 ) ( 192 2368 784 ) ( 192 2368 736 ) 7 0 0 0 1 1 +( 192 2400 784 ) ( 224 2400 784 ) ( 224 2400 736 ) 7 0 0 0 1 1 +( 192 2368 736 ) ( 224 2368 736 ) ( 224 2392 736 ) 7 0 0 0 1 1 +( 224 2392 768 ) ( 224 2368 768 ) ( 192 2368 768 ) 7 0 0 0 1 1 +( 224 2560 784 ) ( 192 2560 784 ) ( 192 2560 736 ) 7 0 0 0 1 1 +( 224 2368 784 ) ( 224 2392 784 ) ( 224 2392 736 ) 7 0 0 0 1 1 +} +// brush 104 +{ +( 128 3008 480 ) ( 128 2944 480 ) ( 128 2944 464 ) 4 0 0 0 1 1 +( 128 2944 480 ) ( 240 2944 480 ) ( 240 2944 464 ) 4 0 0 0 1 1 +( 240 3008 464 ) ( 128 3008 464 ) ( 128 2944 464 ) 4 0 0 0 1 1 +( 128 2944 480 ) ( 128 3008 480 ) ( 240 3008 480 ) 4 0 0 0 1 1 +( 240 3008 480 ) ( 128 3008 480 ) ( 128 3008 464 ) 4 0 0 0 1 1 +( 256 2944 480 ) ( 256 3008 480 ) ( 256 3008 464 ) 4 0 0 0 1 1 +} +// brush 105 +{ +( 352 3008 480 ) ( 352 2944 480 ) ( 352 2944 464 ) 4 0 0 0 1 1 +( 384 2944 480 ) ( 496 2944 480 ) ( 496 2944 464 ) 4 0 0 0 1 1 +( 496 3008 464 ) ( 384 3008 464 ) ( 384 2944 464 ) 4 0 0 0 1 1 +( 384 2944 480 ) ( 384 3008 480 ) ( 496 3008 480 ) 4 0 0 0 1 1 +( 496 3008 480 ) ( 384 3008 480 ) ( 384 3008 464 ) 4 0 0 0 1 1 +( 496 2944 480 ) ( 496 3008 480 ) ( 496 3008 464 ) 4 0 0 0 1 1 +} +// brush 106 +{ +( 16 3088 480 ) ( 16 3024 480 ) ( 16 3024 464 ) 9 0 0 0 1 1 +( 384 3008 480 ) ( 496 3008 480 ) ( 496 3008 464 ) 9 0 0 0 1 1 +( 496 3072 464 ) ( 384 3072 464 ) ( 384 3008 464 ) 9 0 0 0 1 1 +( 384 3008 496 ) ( 384 3072 496 ) ( 496 3072 496 ) 9 0 0 0 1 1 +( 496 3264 480 ) ( 384 3264 480 ) ( 384 3264 464 ) 9 0 0 0 1 1 +( 496 3008 480 ) ( 496 3072 480 ) ( 496 3072 464 ) 9 0 0 0 1 1 +} +// brush 107 +{ +( 0 3200 800 ) ( 0 3072 800 ) ( 0 3072 400 ) 1 0 0 0 1 1 +( 16 2752 800 ) ( 32 2752 800 ) ( 32 2752 400 ) 1 0 0 0 1 1 +( 32 3200 400 ) ( 16 3200 400 ) ( 16 3072 400 ) 1 0 0 0 1 1 +( 16 3072 864 ) ( 16 3200 864 ) ( 32 3200 864 ) 1 0 0 0 1 1 +( 32 3264 800 ) ( 16 3264 800 ) ( 16 3264 400 ) 1 0 0 0 1 1 +( 32 3168 528 ) ( 32 3168 560 ) ( 32 3200 560 ) 1 0 0 0 1 1 +} +// brush 108 +{ +( 256 3224 496 ) ( 256 3224 512 ) ( 256 3160 512 ) 4 0 0 0 1 1 +( 336 3136 496 ) ( 336 3136 512 ) ( 400 3136 512 ) 4 0 0 0 1 1 +( 368 3168 496 ) ( 368 3232 496 ) ( 304 3232 496 ) 4 0 0 0 1 1 +( 304 3232 512 ) ( 368 3232 512 ) ( 368 3168 512 ) 4 0 0 0 1 1 +( 368 3264 496 ) ( 368 3264 512 ) ( 304 3264 512 ) 4 0 0 0 1 1 +( 384 3136 496 ) ( 384 3136 512 ) ( 384 3200 512 ) 4 0 0 0 1 1 +} +// brush 109 +{ +( 384 3136 496 ) ( 384 3136 512 ) ( 384 3072 512 ) 4 0 0 0 1 1 +( 432 3040 496 ) ( 432 3040 512 ) ( 496 3040 512 ) 4 0 0 0 1 1 +( 464 3072 496 ) ( 464 3136 496 ) ( 400 3136 496 ) 4 0 0 0 1 1 +( 400 3136 512 ) ( 464 3136 512 ) ( 464 3072 512 ) 4 0 0 0 1 1 +( 472 3232 496 ) ( 472 3232 512 ) ( 408 3232 512 ) 4 0 0 0 1 1 +( 496 3040 496 ) ( 496 3040 512 ) ( 496 3104 512 ) 4 0 0 0 1 1 +} +// brush 110 +{ +( 288 3288 512 ) ( 288 3288 528 ) ( 288 3224 528 ) 4 0 0 0 1 1 +( 336 3168 512 ) ( 336 3168 528 ) ( 400 3168 528 ) 4 0 0 0 1 1 +( 368 3224 512 ) ( 368 3288 512 ) ( 304 3288 512 ) 4 0 0 0 1 1 +( 304 3288 528 ) ( 368 3288 528 ) ( 368 3224 528 ) 4 0 0 0 1 1 +( 368 3296 512 ) ( 368 3296 528 ) ( 304 3296 528 ) 4 0 0 0 1 1 +( 448 3192 512 ) ( 448 3192 528 ) ( 448 3256 528 ) 4 0 0 0 1 1 +} +// brush 111 +{ +( 0 3280 800 ) ( 0 3272 800 ) ( 0 3272 400 ) 1 0 0 0 1 1 +( 0 3264 800 ) ( 240 3264 800 ) ( 240 3264 400 ) 1 0 0 0 1 1 +( 240 3280 464 ) ( 0 3280 464 ) ( 0 3272 464 ) 1 0 0 0 1 1 +( 0 3272 864 ) ( 0 3280 864 ) ( 240 3280 864 ) 1 0 0 0 1 1 +( 240 3456 800 ) ( 0 3456 800 ) ( 0 3456 400 ) 1 0 0 0 1 1 +( 320 3264 464 ) ( 320 3264 800 ) ( 320 3280 800 ) 1 0 0 0 1 1 +} +// brush 112 +{ +( 32 3200 880 ) ( 32 3152 880 ) ( 32 3152 816 ) 12 0 0 0 1 1 +( 392 2720 880 ) ( 432 2720 880 ) ( 432 2720 816 ) 12 0 0 0 1 1 +( 136 3200 864 ) ( 96 3200 864 ) ( 96 3152 864 ) 12 0 0 0 1 1 +( 96 3152 880 ) ( 96 3200 880 ) ( 136 3200 880 ) 12 0 0 0 1 1 +( 136 3296 880 ) ( 96 3296 880 ) ( 96 3296 816 ) 12 0 0 0 1 1 +( 512 2848 880 ) ( 512 2896 880 ) ( 512 2896 816 ) 12 0 0 0 1 1 +} +// brush 113 +{ +( 32 3232 864 ) ( 32 3168 864 ) ( 32 3168 848 ) 7 0 0 0 1 1 +( 176 3168 864 ) ( 368 3168 864 ) ( 368 3168 848 ) 7 0 0 0 1 1 +( 368 3232 832 ) ( 176 3232 832 ) ( 176 3168 832 ) 7 0 0 270 1 -1 +( 176 3168 864 ) ( 176 3232 864 ) ( 368 3232 864 ) 7 0 0 0 1 1 +( 368 3200 864 ) ( 176 3200 864 ) ( 176 3200 848 ) 7 0 0 0 1 1 +( 512 3168 864 ) ( 512 3232 864 ) ( 512 3232 848 ) 7 0 0 0 1 1 +} +// brush 114 +{ +( 32 2944 864 ) ( 32 2880 864 ) ( 32 2880 848 ) 7 0 0 0 1 1 +( 176 2912 864 ) ( 368 2912 864 ) ( 368 2912 848 ) 7 0 0 0 1 1 +( 368 2944 832 ) ( 176 2944 832 ) ( 176 2880 832 ) 7 0 0 270 1 -1 +( 176 2880 864 ) ( 176 2944 864 ) ( 368 2944 864 ) 7 0 0 0 1 1 +( 368 2944 864 ) ( 176 2944 864 ) ( 176 2944 848 ) 7 0 0 0 1 1 +( 480 2880 864 ) ( 480 2944 864 ) ( 480 2944 848 ) 7 0 0 0 1 1 +} +// brush 115 +{ +( 288 3072 864 ) ( 288 2944 864 ) ( 288 2944 848 ) 7 0 0 0 1 1 +( 288 2720 864 ) ( 320 2720 864 ) ( 320 2720 848 ) 7 0 0 0 1 1 +( 320 3072 832 ) ( 288 3072 832 ) ( 288 2944 832 ) 7 0 0 0 1 1 +( 288 2944 864 ) ( 288 3072 864 ) ( 320 3072 864 ) 7 0 0 0 1 1 +( 320 3168 864 ) ( 288 3168 864 ) ( 288 3168 848 ) 7 0 0 0 1 1 +( 320 2944 864 ) ( 320 3072 864 ) ( 320 3072 848 ) 7 0 0 0 1 1 +} +// brush 116 +{ +( 544 3184 544 ) ( 544 3128 544 ) ( 544 3128 528 ) 9 0 0 0 1 1 +( 536 3072 544 ) ( 568 3072 544 ) ( 568 3072 528 ) 9 0 0 0 1 1 +( 576 3184 528 ) ( 544 3184 528 ) ( 544 3128 528 ) 9 0 0 0 1 1 +( 544 3128 544 ) ( 544 3184 544 ) ( 576 3184 544 ) 9 0 0 0 1 1 +( 584 3456 544 ) ( 552 3456 544 ) ( 552 3456 528 ) 9 0 0 0 1 1 +( 640 3128 544 ) ( 640 3184 544 ) ( 640 3184 528 ) 9 0 0 0 1 1 +} +// brush 117 +{ +( 320 3456 544 ) ( 320 3288 544 ) ( 320 3288 528 ) 9 0 0 0 1 1 +( 360 3296 544 ) ( 544 3296 544 ) ( 544 3296 528 ) 9 0 0 0 1 1 +( 544 3456 528 ) ( 360 3456 528 ) ( 360 3288 528 ) 9 0 0 0 1 1 +( 360 3288 544 ) ( 360 3456 544 ) ( 544 3456 544 ) 9 0 0 0 1 1 +( 544 3456 544 ) ( 360 3456 544 ) ( 360 3456 528 ) 9 0 0 0 1 1 +( 544 3288 544 ) ( 544 3456 544 ) ( 544 3456 528 ) 9 0 0 0 1 1 +} +// brush 118 +{ +( 608 3456 528 ) ( 608 3360 528 ) ( 608 3360 432 ) 6 0 0 0 1 1 +( 616 3088 528 ) ( 664 3088 528 ) ( 664 3088 432 ) 6 0 0 0 1 1 +( 656 3456 432 ) ( 608 3456 432 ) ( 608 3360 432 ) 6 0 0 0 1 1 +( 608 3360 448 ) ( 608 3456 448 ) ( 656 3456 448 ) 6 0 0 0 1 1 +( 656 3456 528 ) ( 608 3456 528 ) ( 608 3456 432 ) 6 0 0 0 1 1 +( 944 3344 528 ) ( 944 3440 528 ) ( 944 3440 432 ) 6 0 0 0 1 1 +} +// brush 119 +{ +( 768 3448 464 ) ( 768 3472 464 ) ( 768 3472 816 ) 16 0 0 0 1 1 +( 752 3424 784 ) ( 816 3424 784 ) ( 816 3424 432 ) 16 0 0 0 1 1 +( 768 3472 496 ) ( 768 3448 496 ) ( 800 3448 496 ) 16 0 0 0 1 1 +( 752 3440 784 ) ( 752 3456 784 ) ( 816 3456 784 ) 16 0 0 0 1 1 +( 816 3456 784 ) ( 752 3456 784 ) ( 752 3456 432 ) 16 0 0 0 1 1 +( 832 3472 464 ) ( 832 3448 464 ) ( 832 3448 816 ) 16 0 0 0 1 1 +} +// brush 120 +{ +( 320 3472 784 ) ( 320 3456 784 ) ( 320 3456 528 ) 2 0 0 0 1 1 +( 368 3456 784 ) ( 496 3456 784 ) ( 496 3456 528 ) 2 0 0 0 1 1 +( 496 3472 480 ) ( 368 3472 480 ) ( 368 3456 480 ) 2 0 0 0 1 1 +( 368 3456 784 ) ( 368 3472 784 ) ( 496 3472 784 ) 2 0 0 0 1 1 +( 496 3488 784 ) ( 368 3488 784 ) ( 368 3488 528 ) 2 0 0 0 1 1 +( 1120 3456 784 ) ( 1120 3472 784 ) ( 1120 3472 528 ) 2 0 0 0 1 1 +} +// brush 121 +{ +( 576 3088 544 ) ( 576 3040 544 ) ( 576 3040 528 ) 3 0 0 0 1 1 +( 720 2992 432 ) ( 720 2992 784 ) ( 736 2992 784 ) 3 0 0 0 1 1 +( 848 3088 576 ) ( 624 3088 576 ) ( 624 3040 576 ) 3 0 0 0 1 1 +( 736 3056 768 ) ( 720 3056 768 ) ( 720 3072 768 ) 3 0 0 0 1 1 +( 736 3072 432 ) ( 736 3072 784 ) ( 720 3072 784 ) 3 0 0 0 1 1 +( 928 3056 432 ) ( 928 3056 784 ) ( 928 3072 784 ) 3 0 0 0 1 1 +} +// brush 122 +{ +( 944 3456 544 ) ( 944 3088 544 ) ( 944 3088 528 ) 9 0 0 0 1 1 +( 1072 3072 544 ) ( 1200 3072 544 ) ( 1200 3072 528 ) 9 0 0 0 1 1 +( 1200 3456 496 ) ( 1072 3456 496 ) ( 1072 3088 496 ) 9 0 0 0 1 1 +( 1072 3088 544 ) ( 1072 3456 544 ) ( 1200 3456 544 ) 9 0 0 0 1 1 +( 1200 3456 544 ) ( 1072 3456 544 ) ( 1072 3456 528 ) 9 0 0 0 1 1 +( 1216 3088 544 ) ( 1216 3456 544 ) ( 1216 3456 528 ) 9 0 0 0 1 1 +} +// brush 123 +{ +( 928 3456 784 ) ( 928 3432 784 ) ( 928 3432 432 ) 1 0 0 0 1 1 +( 936 3072 784 ) ( 952 3072 784 ) ( 952 3072 432 ) 1 0 0 0 1 1 +( 960 3456 736 ) ( 944 3456 736 ) ( 944 3432 736 ) 1 0 0 0 1 1 +( 944 3432 816 ) ( 944 3456 816 ) ( 960 3456 816 ) 1 0 0 0 1 1 +( 960 3456 784 ) ( 944 3456 784 ) ( 944 3456 432 ) 1 0 0 0 1 1 +( 992 3432 784 ) ( 992 3456 784 ) ( 992 3456 432 ) 1 0 0 0 1 1 +} +// brush 124 +{ +( 592 3128 784 ) ( 592 3112 784 ) ( 592 3112 432 ) 16 0 0 0 1 1 +( 920 3072 784 ) ( 944 3072 784 ) ( 944 3072 432 ) 16 0 0 0 1 1 +( 944 3104 736 ) ( 944 3120 736 ) ( 920 3120 736 ) 16 0 0 0 1 1 +( 920 3120 816 ) ( 944 3120 816 ) ( 944 3104 816 ) 16 0 0 0 1 1 +( 944 3136 784 ) ( 920 3136 784 ) ( 920 3136 432 ) 16 0 0 0 1 1 +( 928 3104 784 ) ( 928 3120 784 ) ( 928 3120 432 ) 16 0 0 0 1 1 +} +// brush 125 +{ +( 736 3296 816 ) ( 736 3184 816 ) ( 736 3184 784 ) 16 0 0 0 1 1 +( 752 3136 816 ) ( 816 3136 816 ) ( 816 3136 784 ) 16 0 0 0 1 1 +( 816 3296 784 ) ( 752 3296 784 ) ( 752 3184 784 ) 16 0 0 0 1 1 +( 752 3184 816 ) ( 752 3296 816 ) ( 816 3296 816 ) 16 0 0 0 1 1 +( 816 3392 816 ) ( 752 3392 816 ) ( 752 3392 784 ) 16 0 0 0 1 1 +( 800 3184 816 ) ( 800 3296 816 ) ( 800 3296 784 ) 16 0 0 0 1 1 +} +// brush 126 +{ +( 608 3448 816 ) ( 608 3424 816 ) ( 608 3424 784 ) 16 0 0 0 1 1 +( 944 3392 816 ) ( 968 3392 816 ) ( 968 3392 784 ) 16 0 0 0 1 1 +( 960 3136 784 ) ( 960 3160 784 ) ( 936 3160 784 ) 16 0 0 0 1 1 +( 936 3160 816 ) ( 960 3160 816 ) ( 960 3136 816 ) 16 0 0 0 1 1 +( 680 3456 816 ) ( 656 3456 816 ) ( 656 3456 784 ) 16 0 0 0 1 1 +( 928 3136 816 ) ( 928 3160 816 ) ( 928 3160 784 ) 16 0 0 0 1 1 +} +// brush 127 +{ +( 320 3320 800 ) ( 320 3296 800 ) ( 320 3296 768 ) 6 0 0 0 1 1 +( 320 3296 800 ) ( 344 3296 800 ) ( 344 3296 768 ) 6 0 0 0 1 1 +( 344 3320 736 ) ( 320 3320 736 ) ( 320 3296 736 ) 6 0 0 0 1 1 +( 320 3296 896 ) ( 320 3320 896 ) ( 344 3320 896 ) 6 0 0 0 1 1 +( 408 3456 800 ) ( 384 3456 800 ) ( 384 3456 768 ) 6 0 0 0 1 1 +( 608 3448 800 ) ( 608 3472 800 ) ( 608 3472 768 ) 6 0 0 0 1 1 +} +// brush 128 +{ +( 608 3456 464 ) ( 608 3408 464 ) ( 608 3408 448 ) 4 0 0 0 1 1 +( 656 3392 464 ) ( 672 3392 464 ) ( 672 3392 448 ) 4 0 0 0 1 1 +( 672 3456 496 ) ( 656 3456 496 ) ( 656 3408 496 ) 4 0 0 0 1 1 +( 656 3408 528 ) ( 656 3456 528 ) ( 672 3456 528 ) 4 0 0 0 1 1 +( 672 3456 464 ) ( 656 3456 464 ) ( 656 3456 448 ) 4 0 0 0 1 1 +( 672 3408 464 ) ( 672 3456 464 ) ( 672 3456 448 ) 4 0 0 0 1 1 +} +// brush 129 +{ +( 672 3456 464 ) ( 672 3408 464 ) ( 672 3408 448 ) 4 0 0 0 1 1 +( 688 3392 464 ) ( 704 3392 464 ) ( 704 3392 448 ) 4 0 0 0 1 1 +( 704 3456 496 ) ( 688 3456 496 ) ( 688 3408 496 ) 4 0 0 0 1 1 +( 688 3408 512 ) ( 688 3456 512 ) ( 704 3456 512 ) 4 0 0 0 1 1 +( 704 3456 464 ) ( 688 3456 464 ) ( 688 3456 448 ) 4 0 0 0 1 1 +( 704 3408 464 ) ( 704 3456 464 ) ( 704 3456 448 ) 4 0 0 0 1 1 +} +// brush 130 +{ +( 704 3456 448 ) ( 704 3456 464 ) ( 704 3408 464 ) 6 0 0 0 1 1 +( 704 3392 448 ) ( 704 3392 464 ) ( 720 3392 464 ) 6 0 0 0 1 1 +( 720 3408 448 ) ( 720 3456 448 ) ( 704 3456 448 ) 6 0 0 0 1 1 +( 704 3456 480 ) ( 720 3456 480 ) ( 720 3408 480 ) 6 0 0 0 1 1 +( 720 3456 448 ) ( 720 3456 464 ) ( 704 3456 464 ) 6 0 0 0 1 1 +( 736 3408 448 ) ( 736 3408 464 ) ( 736 3456 464 ) 6 0 0 0 1 1 +} +// brush 131 +{ +( 672 3456 448 ) ( 672 3456 464 ) ( 672 3408 464 ) 6 0 0 0 1 1 +( 728 3360 448 ) ( 728 3360 464 ) ( 744 3360 464 ) 6 0 0 0 1 1 +( 752 3408 448 ) ( 752 3456 448 ) ( 736 3456 448 ) 6 0 0 0 1 1 +( 736 3456 464 ) ( 752 3456 464 ) ( 752 3408 464 ) 6 0 0 0 1 1 +( 752 3456 448 ) ( 752 3456 464 ) ( 736 3456 464 ) 6 0 0 0 1 1 +( 768 3408 448 ) ( 768 3408 464 ) ( 768 3456 464 ) 6 0 0 0 1 1 +} +// brush 132 +{ +( 608 3456 480 ) ( 608 3408 480 ) ( 608 3408 464 ) 13 0 0 0 1 1 +( 928 3040 480 ) ( 960 3040 480 ) ( 960 3040 464 ) 13 0 0 0 1 1 +( 640 3456 464 ) ( 608 3456 464 ) ( 608 3408 464 ) 13 0 0 0 1 1 +( 608 3408 496 ) ( 608 3456 496 ) ( 640 3456 496 ) 13 0 0 0 1 1 +( 640 3456 480 ) ( 608 3456 480 ) ( 608 3456 464 ) 13 0 0 0 1 1 +( 960 3088 480 ) ( 960 3136 480 ) ( 960 3136 464 ) 13 0 0 0 1 1 +} +// brush 133 +{ +( 1152 3200 784 ) ( 1152 3152 784 ) ( 1152 3152 528 ) 6 0 0 0 1 1 +( 1168 3136 784 ) ( 1184 3136 784 ) ( 1184 3136 528 ) 6 0 0 0 1 1 +( 1184 3200 528 ) ( 1168 3200 528 ) ( 1168 3152 528 ) 6 0 0 0 1 1 +( 1168 3152 784 ) ( 1168 3200 784 ) ( 1184 3200 784 ) 6 0 0 0 1 1 +( 1184 3200 784 ) ( 1168 3200 784 ) ( 1168 3200 528 ) 6 0 0 0 1 1 +( 1248 3152 784 ) ( 1248 3200 784 ) ( 1248 3200 528 ) 6 0 0 0 1 1 +} +// brush 134 +{ +( 992 3456 784 ) ( 992 3088 784 ) ( 992 3088 752 ) 6 0 0 0 1 1 +( 1104 3072 784 ) ( 1168 3072 784 ) ( 1168 3072 752 ) 6 0 0 0 1 1 +( 1168 3456 768 ) ( 1104 3456 768 ) ( 1104 3088 768 ) 6 0 0 0 1 1 +( 1104 3088 784 ) ( 1104 3456 784 ) ( 1168 3456 784 ) 6 0 0 0 1 1 +( 1168 3456 784 ) ( 1104 3456 784 ) ( 1104 3456 752 ) 6 0 0 0 1 1 +( 1184 3088 784 ) ( 1184 3456 784 ) ( 1184 3456 752 ) 6 0 0 0 1 1 +} +// brush 135 +{ +( 1216 3328 528 ) ( 1216 3200 528 ) ( 1216 3200 512 ) 9 0 0 0 1 1 +( 1168 2720 528 ) ( 1232 2720 528 ) ( 1232 2720 512 ) 9 0 0 0 1 1 +( 1232 3328 416 ) ( 1168 3328 416 ) ( 1168 3200 416 ) 9 0 0 0 1 1 +( 1168 3200 528 ) ( 1168 3328 528 ) ( 1232 3328 528 ) 9 0 0 0 1 1 +( 1232 3360 528 ) ( 1168 3360 528 ) ( 1168 3360 512 ) 9 0 0 0 1 1 +( 1536 3200 528 ) ( 1536 3328 528 ) ( 1536 3328 512 ) 9 0 0 0 1 1 +} +// brush 136 +{ +( 1184 3344 784 ) ( 1184 3328 784 ) ( 1184 3328 528 ) 6 0 0 0 1 1 +( 1184 3328 784 ) ( 1232 3328 784 ) ( 1232 3328 528 ) 6 0 0 0 1 1 +( 1232 3344 528 ) ( 1184 3344 528 ) ( 1184 3328 528 ) 6 0 0 0 1 1 +( 1184 3328 784 ) ( 1184 3344 784 ) ( 1232 3344 784 ) 6 0 0 0 1 1 +( 1232 3424 784 ) ( 1184 3424 784 ) ( 1184 3424 528 ) 6 0 0 0 1 1 +( 1248 3328 784 ) ( 1248 3344 784 ) ( 1248 3344 528 ) 6 0 0 0 1 1 +} +// brush 137 +{ +( 1184 3328 784 ) ( 1184 3200 784 ) ( 1184 3200 528 ) 12 0 0 0 1 1 +( 1184 2848 784 ) ( 1232 2848 784 ) ( 1232 2848 528 ) 12 0 0 0 1 1 +( 1232 3328 736 ) ( 1184 3328 736 ) ( 1184 3200 736 ) 12 0 0 0 1 1 +( 1184 3200 896 ) ( 1184 3328 896 ) ( 1232 3328 896 ) 12 0 0 0 1 1 +( 1232 3360 784 ) ( 1184 3360 784 ) ( 1184 3360 528 ) 12 0 0 0 1 1 +( 1536 3200 784 ) ( 1536 3328 784 ) ( 1536 3328 528 ) 12 0 0 0 1 1 +} +// brush 138 +{ +( 1120 3360 784 ) ( 1120 3344 784 ) ( 1120 3344 528 ) 2 0 0 0 1 1 +( 1232 3360 784 ) ( 1264 3360 784 ) ( 1264 3360 528 ) 2 0 0 0 1 1 +( 1264 3360 528 ) ( 1232 3360 528 ) ( 1232 3344 528 ) 2 0 0 0 1 1 +( 1232 3344 784 ) ( 1232 3360 784 ) ( 1264 3360 784 ) 2 0 0 0 1 1 +( 1264 3456 784 ) ( 1232 3456 784 ) ( 1232 3456 528 ) 2 0 0 0 1 1 +( 1536 3352 784 ) ( 1536 3368 784 ) ( 1536 3368 528 ) 2 0 0 0 1 1 +} +// brush 139 +{ +( 832 2944 824 ) ( 832 2640 824 ) ( 832 2640 624 ) 12 0 0 0 1 1 +( 824 2880 624 ) ( 824 2880 824 ) ( 840 2880 824 ) 12 0 0 0 1 1 +( 848 2944 656 ) ( 832 2944 656 ) ( 832 2640 656 ) 12 0 0 0 1 1 +( 832 2640 768 ) ( 832 2944 768 ) ( 848 2944 768 ) 12 0 0 0 1 1 +( 848 2944 824 ) ( 832 2944 824 ) ( 832 2944 624 ) 12 0 0 0 1 1 +( 928 2640 824 ) ( 928 2944 824 ) ( 928 2944 624 ) 12 0 0 0 1 1 +} +// brush 140 +{ +( 512 2952 824 ) ( 512 2936 824 ) ( 512 2936 624 ) 6 0 0 0 1 1 +( 800 2944 824 ) ( 832 2944 824 ) ( 832 2944 624 ) 6 0 0 0 1 1 +( 832 2944 656 ) ( 800 2944 656 ) ( 800 2928 656 ) 6 0 0 0 1 1 +( 800 2928 864 ) ( 800 2944 864 ) ( 832 2944 864 ) 6 0 0 0 1 1 +( 832 2976 824 ) ( 800 2976 824 ) ( 800 2976 624 ) 6 0 0 0 1 1 +( 832 2928 824 ) ( 832 2944 824 ) ( 832 2944 624 ) 6 0 0 0 1 1 +} +// brush 141 +{ +( 1536 3360 784 ) ( 1536 3072 784 ) ( 1536 3072 528 ) 1 0 0 0 1 1 +( 1520 2848 784 ) ( 1536 2848 784 ) ( 1536 2848 528 ) 1 0 0 0 1 1 +( 1536 3360 496 ) ( 1520 3360 496 ) ( 1520 3072 496 ) 1 0 0 0 1 1 +( 1520 3072 768 ) ( 1520 3360 768 ) ( 1536 3360 768 ) 1 0 0 0 1 1 +( 1536 3360 784 ) ( 1520 3360 784 ) ( 1520 3360 528 ) 1 0 0 0 1 1 +( 1568 3072 784 ) ( 1568 3360 784 ) ( 1568 3360 528 ) 1 0 0 0 1 1 +} +// brush 142 +{ +( 1248 3168 784 ) ( 1248 3072 784 ) ( 1248 3072 528 ) 2 0 0 0 1 1 +( 1384 2880 496 ) ( 1384 2880 784 ) ( 1400 2880 784 ) 2 0 0 0 1 1 +( 1392 3168 528 ) ( 1376 3168 528 ) ( 1376 3072 528 ) 2 0 0 0 1 1 +( 1376 3072 784 ) ( 1376 3168 784 ) ( 1392 3168 784 ) 2 0 0 0 1 1 +( 1392 3168 784 ) ( 1376 3168 784 ) ( 1376 3168 528 ) 2 0 0 0 1 1 +( 1376 3072 784 ) ( 1376 3168 784 ) ( 1376 3168 528 ) 2 0 0 0 1 1 +} +// brush 143 +{ +( 1376 3136 760 ) ( 1376 3104 760 ) ( 1376 3104 744 ) 6 0 0 270 1 -1 +( 1392 3104 760 ) ( 1520 3104 760 ) ( 1520 3104 744 ) 6 0 0 270 1 -1 +( 1520 3136 744 ) ( 1392 3136 744 ) ( 1392 3104 744 ) 6 0 0 270 1 -1 +( 1392 3104 768 ) ( 1392 3136 768 ) ( 1520 3136 768 ) 6 0 0 270 1 -1 +( 1520 3136 760 ) ( 1392 3136 760 ) ( 1392 3136 744 ) 6 0 0 270 1 -1 +( 1536 3104 760 ) ( 1536 3136 760 ) ( 1536 3136 744 ) 6 0 0 270 1 -1 +} +// brush 144 +{ +( 1376 3136 744 ) ( 1376 3104 744 ) ( 1376 3104 728 ) 7 0 0 0 1 1 +( 1392 3104 744 ) ( 1408 3104 744 ) ( 1408 3104 728 ) 7 0 0 0 1 1 +( 1408 3136 528 ) ( 1392 3136 528 ) ( 1392 3104 528 ) 7 0 0 0 1 1 +( 1392 3104 744 ) ( 1392 3136 744 ) ( 1408 3136 744 ) 7 0 0 0 1 1 +( 1408 3136 744 ) ( 1392 3136 744 ) ( 1392 3136 728 ) 7 0 0 0 1 1 +( 1408 3104 744 ) ( 1408 3136 744 ) ( 1408 3136 728 ) 7 0 0 0 1 1 +} +// brush 145 +{ +( 1504 3136 744 ) ( 1504 3104 744 ) ( 1504 3104 728 ) 7 0 0 0 1 1 +( 1504 3104 744 ) ( 1520 3104 744 ) ( 1520 3104 728 ) 7 0 0 0 1 1 +( 1520 3136 528 ) ( 1504 3136 528 ) ( 1504 3104 528 ) 7 0 0 0 1 1 +( 1504 3104 744 ) ( 1504 3136 744 ) ( 1520 3136 744 ) 7 0 0 0 1 1 +( 1520 3136 744 ) ( 1504 3136 744 ) ( 1504 3136 728 ) 7 0 0 0 1 1 +( 1536 3104 744 ) ( 1536 3136 744 ) ( 1536 3136 728 ) 7 0 0 0 1 1 +} +// brush 146 +{ +( 1376 3008 744 ) ( 1376 2976 744 ) ( 1376 2976 728 ) 7 0 0 270 1 -1 +( 1392 2976 744 ) ( 1520 2976 744 ) ( 1520 2976 728 ) 7 0 0 270 1 -1 +( 1520 3008 704 ) ( 1392 3008 704 ) ( 1392 2976 704 ) 7 0 0 270 1 -1 +( 1392 2976 736 ) ( 1392 3008 736 ) ( 1520 3008 736 ) 7 0 0 270 1 -1 +( 1520 3008 744 ) ( 1392 3008 744 ) ( 1392 3008 728 ) 7 0 0 270 1 -1 +( 1536 2976 744 ) ( 1536 3008 744 ) ( 1536 3008 728 ) 7 0 0 270 1 -1 +} +// brush 147 +{ +( 1376 2880 744 ) ( 1376 2848 744 ) ( 1376 2848 728 ) 7 0 0 0 1 1 +( 1392 2848 744 ) ( 1408 2848 744 ) ( 1408 2848 728 ) 7 0 0 0 1 1 +( 1408 2880 528 ) ( 1392 2880 528 ) ( 1392 2848 528 ) 7 0 0 0 1 1 +( 1392 2848 744 ) ( 1392 2880 744 ) ( 1408 2880 744 ) 7 0 0 0 1 1 +( 1408 2880 744 ) ( 1392 2880 744 ) ( 1392 2880 728 ) 7 0 0 0 1 1 +( 1408 2848 744 ) ( 1408 2880 744 ) ( 1408 2880 728 ) 7 0 0 0 1 1 +} +// brush 148 +{ +( 1504 2880 744 ) ( 1504 2848 744 ) ( 1504 2848 728 ) 7 0 0 0 1 1 +( 1520 2848 744 ) ( 1536 2848 744 ) ( 1536 2848 728 ) 7 0 0 0 1 1 +( 1536 2880 528 ) ( 1520 2880 528 ) ( 1520 2848 528 ) 7 0 0 0 1 1 +( 1520 2848 736 ) ( 1520 2880 736 ) ( 1536 2880 736 ) 7 0 0 0 1 1 +( 1536 2880 744 ) ( 1520 2880 744 ) ( 1520 2880 728 ) 7 0 0 0 1 1 +( 1536 2848 744 ) ( 1536 2880 744 ) ( 1536 2880 728 ) 7 0 0 0 1 1 +} +// brush 149 +{ +( 1536 2768 784 ) ( 1536 2752 784 ) ( 1536 2752 496 ) 7 0 0 0 1 1 +( 1536 2720 784 ) ( 1560 2720 784 ) ( 1560 2720 496 ) 7 0 0 0 1 1 +( 1560 2768 384 ) ( 1536 2768 384 ) ( 1536 2752 384 ) 7 0 0 0 1 1 +( 1536 2752 784 ) ( 1536 2768 784 ) ( 1560 2768 784 ) 7 0 0 0 1 1 +( 1560 2848 784 ) ( 1536 2848 784 ) ( 1536 2848 496 ) 7 0 0 0 1 1 +( 1664 2744 784 ) ( 1664 2760 784 ) ( 1664 2760 496 ) 7 0 0 0 1 1 +} +// brush 150 +{ +( 1248 2704 784 ) ( 1248 2680 784 ) ( 1248 2680 304 ) 7 0 0 0 1 1 +( 1264 2368 784 ) ( 1280 2368 784 ) ( 1280 2368 304 ) 7 0 0 0 1 1 +( 1280 2704 96 ) ( 1264 2704 96 ) ( 1264 2680 96 ) 7 0 0 0 1 1 +( 1264 2680 896 ) ( 1264 2704 896 ) ( 1280 2704 896 ) 7 0 0 0 1 1 +( 1280 2688 784 ) ( 1264 2688 784 ) ( 1264 2688 304 ) 7 0 0 0 1 1 +( 1280 2680 784 ) ( 1280 2704 784 ) ( 1280 2704 304 ) 7 0 0 0 1 1 +} +// brush 151 +{ +( 1376 2568 512 ) ( 1376 2440 512 ) ( 1376 2440 432 ) 6 0 0 0 1 1 +( 1392 2432 512 ) ( 1520 2432 512 ) ( 1520 2432 432 ) 6 0 0 0 1 1 +( 1520 2560 432 ) ( 1392 2560 432 ) ( 1392 2432 432 ) 6 0 0 0 1 1 +( 1392 2432 448 ) ( 1392 2560 448 ) ( 1520 2560 448 ) 6 0 0 0 1 1 +( 1520 2592 512 ) ( 1392 2592 512 ) ( 1392 2592 432 ) 6 0 0 0 1 1 +( 1600 2432 512 ) ( 1600 2560 512 ) ( 1600 2560 432 ) 6 0 0 0 1 1 +} +// brush 152 +{ +( 1760 2560 448 ) ( 1760 2432 448 ) ( 1760 2432 368 ) 6 0 0 0 1 1 +( 1792 2432 448 ) ( 1920 2432 448 ) ( 1920 2432 368 ) 6 0 0 0 1 1 +( 1920 2560 368 ) ( 1792 2560 368 ) ( 1792 2432 368 ) 6 0 0 0 1 1 +( 1792 2432 384 ) ( 1792 2560 384 ) ( 1920 2560 384 ) 6 0 0 0 1 1 +( 1920 2560 448 ) ( 1792 2560 448 ) ( 1792 2560 368 ) 6 0 0 0 1 1 +( 1920 2432 448 ) ( 1920 2560 448 ) ( 1920 2560 368 ) 6 0 0 0 1 1 +} +// brush 153 +{ +( 1792 2960 368 ) ( 1792 2832 368 ) ( 1792 2832 288 ) 6 0 0 0 1 1 +( 1792 2784 368 ) ( 1920 2784 368 ) ( 1920 2784 288 ) 6 0 0 0 1 1 +( 1920 2960 288 ) ( 1792 2960 288 ) ( 1792 2832 288 ) 6 0 0 0 1 1 +( 1792 2832 304 ) ( 1792 2960 304 ) ( 1920 2960 304 ) 6 0 0 0 1 1 +( 1920 2976 368 ) ( 1792 2976 368 ) ( 1792 2976 288 ) 6 0 0 0 1 1 +( 1920 2832 368 ) ( 1920 2960 368 ) ( 1920 2960 288 ) 6 0 0 0 1 1 +} +// brush 154 +{ +( 1376 2960 320 ) ( 1376 2832 320 ) ( 1376 2832 240 ) 6 0 0 0 1 1 +( 1392 2848 320 ) ( 1520 2848 320 ) ( 1520 2848 240 ) 6 0 0 0 1 1 +( 1520 2960 240 ) ( 1392 2960 240 ) ( 1392 2832 240 ) 6 0 0 0 1 1 +( 1392 2832 256 ) ( 1392 2960 256 ) ( 1520 2960 256 ) 6 0 0 0 1 1 +( 1520 2976 320 ) ( 1392 2976 320 ) ( 1392 2976 240 ) 6 0 0 0 1 1 +( 1504 2832 320 ) ( 1504 2960 320 ) ( 1504 2960 240 ) 6 0 0 0 1 1 +} +// brush 155 +{ +( 1344 2632 192 ) ( 1344 2592 192 ) ( 1344 2592 176 ) 6 0 0 0 1 1 +( 1296 2400 176 ) ( 1296 2400 192 ) ( 1328 2400 192 ) 6 0 0 0 1 1 +( 1584 2624 176 ) ( 1560 2624 176 ) ( 1560 2584 176 ) 6 0 0 0 1 1 +( 1560 2584 192 ) ( 1560 2624 192 ) ( 1584 2624 192 ) 6 0 0 0 1 1 +( 1544 2656 192 ) ( 1520 2656 192 ) ( 1520 2656 176 ) 6 0 0 0 1 1 +( 1600 2616 192 ) ( 1600 2656 192 ) ( 1600 2656 176 ) 6 0 0 0 1 1 +} +// brush 156 +{ +( 1248 2552 160 ) ( 1248 2528 160 ) ( 1248 2528 80 ) 13 0 0 0 1 1 +( 1336 2112 160 ) ( 1352 2112 160 ) ( 1352 2112 80 ) 13 0 0 0 1 1 +( 1328 2552 80 ) ( 1312 2552 80 ) ( 1312 2528 80 ) 13 0 0 0 1 1 +( 1312 2528 96 ) ( 1312 2552 96 ) ( 1328 2552 96 ) 13 0 0 0 1 1 +( 1288 3072 160 ) ( 1272 3072 160 ) ( 1272 3072 80 ) 13 0 0 0 1 1 +( 2048 2536 160 ) ( 2048 2560 160 ) ( 2048 2560 80 ) 13 0 0 0 1 1 +} +// brush 157 +{ +( 1568 3072 784 ) ( 1568 2848 784 ) ( 1568 2848 368 ) 7 0 0 0 1 1 +( 1608 2944 368 ) ( 1608 2944 784 ) ( 1624 2944 784 ) 7 0 0 0 1 1 +( 1648 3072 384 ) ( 1632 3072 384 ) ( 1632 2848 384 ) 7 0 0 0 1 1 +( 1632 2848 784 ) ( 1632 3072 784 ) ( 1648 3072 784 ) 7 0 0 0 1 1 +( 1648 3072 784 ) ( 1632 3072 784 ) ( 1632 3072 368 ) 7 0 0 0 1 1 +( 1664 2848 784 ) ( 1664 3072 784 ) ( 1664 3072 368 ) 7 0 0 0 1 1 +} +// brush 158 +{ +( 1568 3072 784 ) ( 1568 2848 784 ) ( 1568 2848 368 ) 7 0 0 0 1 1 +( 1632 2848 784 ) ( 1648 2848 784 ) ( 1648 2848 368 ) 7 0 0 0 1 1 +( 1648 2912 592 ) ( 1632 2912 592 ) ( 1632 2840 592 ) 7 0 0 0 1 1 +( 1632 2848 784 ) ( 1632 3072 784 ) ( 1648 3072 784 ) 7 0 0 0 1 1 +( 1624 2944 784 ) ( 1608 2944 784 ) ( 1608 2944 368 ) 7 0 0 0 1 1 +( 1632 2848 784 ) ( 1632 3072 784 ) ( 1632 3072 368 ) 7 0 0 0 1 1 +} +// brush 159 +{ +( 1504 2352 784 ) ( 1504 2336 784 ) ( 1504 2336 304 ) 7 0 0 0 1 1 +( 1520 2304 784 ) ( 1544 2304 784 ) ( 1544 2304 304 ) 7 0 0 0 1 1 +( 1544 2352 80 ) ( 1520 2352 80 ) ( 1520 2336 80 ) 7 0 0 0 1 1 +( 1520 2336 896 ) ( 1520 2352 896 ) ( 1544 2352 896 ) 7 0 0 0 1 1 +( 1544 2336 784 ) ( 1520 2336 784 ) ( 1520 2336 304 ) 7 0 0 0 1 1 +( 2048 2336 784 ) ( 2048 2352 784 ) ( 2048 2352 304 ) 7 0 0 0 1 1 +} +// brush 160 +{ +( 2048 2352 784 ) ( 2048 2336 784 ) ( 2048 2336 80 ) 7 0 0 0 1 1 +( 2048 2336 784 ) ( 2064 2336 784 ) ( 2064 2336 80 ) 7 0 0 0 1 1 +( 2064 2352 80 ) ( 2048 2352 80 ) ( 2048 2336 80 ) 7 0 0 0 1 1 +( 2048 2336 896 ) ( 2048 2352 896 ) ( 2064 2352 896 ) 7 0 0 0 1 1 +( 2056 3072 784 ) ( 2040 3072 784 ) ( 2040 3072 80 ) 7 0 0 0 1 1 +( 2080 2336 784 ) ( 2080 2352 784 ) ( 2080 2352 80 ) 7 0 0 0 1 1 +} +// brush 161 +{ +( 1568 3088 784 ) ( 1568 3072 784 ) ( 1568 3072 80 ) 7 0 0 0 1 1 +( 2016 3072 784 ) ( 2040 3072 784 ) ( 2040 3072 80 ) 7 0 0 0 1 1 +( 2040 3088 80 ) ( 2016 3088 80 ) ( 2016 3072 80 ) 7 0 0 0 1 1 +( 2016 3072 896 ) ( 2016 3088 896 ) ( 2040 3088 896 ) 7 0 0 0 1 1 +( 2040 3104 784 ) ( 2016 3104 784 ) ( 2016 3104 80 ) 7 0 0 0 1 1 +( 2048 3072 784 ) ( 2048 3088 784 ) ( 2048 3088 80 ) 7 0 0 0 1 1 +} +// brush 162 +{ +( 1376 2528 432 ) ( 1376 2464 432 ) ( 1376 2464 416 ) 16 0 0 0 1 1 +( 1488 2464 432 ) ( 1568 2464 432 ) ( 1568 2464 416 ) 16 0 0 0 1 1 +( 1568 2528 400 ) ( 1488 2528 400 ) ( 1488 2464 400 ) 16 0 0 0 1 1 +( 1488 2464 432 ) ( 1488 2528 432 ) ( 1568 2528 432 ) 16 0 0 0 1 1 +( 1568 2528 432 ) ( 1488 2528 432 ) ( 1488 2528 416 ) 16 0 0 0 1 1 +( 1568 2464 432 ) ( 1568 2528 432 ) ( 1568 2528 416 ) 16 0 0 0 1 1 +} +// brush 163 +{ +( 1376 2528 400 ) ( 1376 2464 400 ) ( 1376 2464 368 ) 16 0 0 0 1 1 +( 1376 2464 400 ) ( 1408 2464 400 ) ( 1408 2464 368 ) 16 0 0 0 1 1 +( 1408 2528 96 ) ( 1376 2528 96 ) ( 1376 2464 96 ) 16 0 0 0 1 1 +( 1376 2464 400 ) ( 1376 2528 400 ) ( 1408 2528 400 ) 16 0 0 0 1 1 +( 1408 2528 400 ) ( 1376 2528 400 ) ( 1376 2528 368 ) 16 0 0 0 1 1 +( 1408 2464 400 ) ( 1408 2528 400 ) ( 1408 2528 368 ) 16 0 0 0 1 1 +} +// brush 164 +{ +( 1536 2528 400 ) ( 1536 2464 400 ) ( 1536 2464 368 ) 16 0 0 0 1 1 +( 1536 2464 400 ) ( 1568 2464 400 ) ( 1568 2464 368 ) 16 0 0 0 1 1 +( 1568 2528 96 ) ( 1536 2528 96 ) ( 1536 2464 96 ) 16 0 0 0 1 1 +( 1536 2464 400 ) ( 1536 2528 400 ) ( 1568 2528 400 ) 16 0 0 0 1 1 +( 1568 2528 400 ) ( 1536 2528 400 ) ( 1536 2528 368 ) 16 0 0 0 1 1 +( 1568 2464 400 ) ( 1568 2528 400 ) ( 1568 2528 368 ) 16 0 0 0 1 1 +} +// brush 165 +{ +( 2016 2560 784 ) ( 2016 2496 784 ) ( 2016 2496 304 ) 16 0 0 270 1 -1 +( 2016 2496 784 ) ( 2032 2496 784 ) ( 2032 2496 304 ) 16 0 0 270 1 -1 +( 2032 2560 80 ) ( 2016 2560 80 ) ( 2016 2496 80 ) 16 0 0 270 1 -1 +( 2016 2496 896 ) ( 2016 2560 896 ) ( 2032 2560 896 ) 16 0 0 270 1 -1 +( 2032 2560 784 ) ( 2016 2560 784 ) ( 2016 2560 304 ) 16 0 0 270 1 -1 +( 2080 2496 784 ) ( 2080 2560 784 ) ( 2080 2560 304 ) 16 0 0 270 1 -1 +} +// brush 166 +{ +( 2016 2752 784 ) ( 2016 2688 784 ) ( 2016 2688 304 ) 16 0 0 270 1 -1 +( 2016 2688 784 ) ( 2032 2688 784 ) ( 2032 2688 304 ) 16 0 0 270 1 -1 +( 2032 2752 80 ) ( 2016 2752 80 ) ( 2016 2688 80 ) 16 0 0 270 1 -1 +( 2016 2688 896 ) ( 2016 2752 896 ) ( 2032 2752 896 ) 16 0 0 270 1 -1 +( 2032 2752 784 ) ( 2016 2752 784 ) ( 2016 2752 304 ) 16 0 0 270 1 -1 +( 2080 2688 784 ) ( 2080 2752 784 ) ( 2080 2752 304 ) 16 0 0 270 1 -1 +} +// brush 167 +{ +( 2016 2944 784 ) ( 2016 2880 784 ) ( 2016 2880 304 ) 16 0 0 270 1 -1 +( 2016 2880 784 ) ( 2032 2880 784 ) ( 2032 2880 304 ) 16 0 0 270 1 -1 +( 2032 2944 80 ) ( 2016 2944 80 ) ( 2016 2880 80 ) 16 0 0 270 1 -1 +( 2016 2880 896 ) ( 2016 2944 896 ) ( 2032 2944 896 ) 16 0 0 270 1 -1 +( 2032 2944 784 ) ( 2016 2944 784 ) ( 2016 2944 304 ) 16 0 0 270 1 -1 +( 2080 2880 784 ) ( 2080 2944 784 ) ( 2080 2944 304 ) 16 0 0 270 1 -1 +} +// brush 168 +{ +( 1248 2944 784 ) ( 1248 2880 784 ) ( 1248 2880 304 ) 6 0 0 270 1 -1 +( 1264 2880 784 ) ( 1280 2880 784 ) ( 1280 2880 304 ) 6 0 0 270 1 -1 +( 1280 2944 80 ) ( 1264 2944 80 ) ( 1264 2880 80 ) 6 0 0 270 1 -1 +( 1264 2880 384 ) ( 1264 2944 384 ) ( 1280 2944 384 ) 6 0 0 270 1 -1 +( 1280 2944 784 ) ( 1264 2944 784 ) ( 1264 2944 304 ) 6 0 0 270 1 -1 +( 1280 2880 784 ) ( 1280 2944 784 ) ( 1280 2944 304 ) 6 0 0 270 1 -1 +} +// brush 169 +{ +( 1248 2752 784 ) ( 1248 2688 784 ) ( 1248 2688 304 ) 16 0 0 270 1 -1 +( 1280 2688 784 ) ( 1296 2688 784 ) ( 1296 2688 304 ) 16 0 0 270 1 -1 +( 1296 2752 80 ) ( 1280 2752 80 ) ( 1280 2688 80 ) 16 0 0 270 1 -1 +( 1280 2688 896 ) ( 1280 2752 896 ) ( 1296 2752 896 ) 16 0 0 270 1 -1 +( 1296 2752 784 ) ( 1280 2752 784 ) ( 1280 2752 304 ) 16 0 0 270 1 -1 +( 1312 2688 784 ) ( 1312 2752 784 ) ( 1312 2752 304 ) 16 0 0 270 1 -1 +} +// brush 170 +{ +( 1216 2560 784 ) ( 1216 2496 784 ) ( 1216 2496 304 ) 16 0 0 270 1 -1 +( 1280 2496 784 ) ( 1296 2496 784 ) ( 1296 2496 304 ) 16 0 0 270 1 -1 +( 1296 2560 80 ) ( 1280 2560 80 ) ( 1280 2496 80 ) 16 0 0 270 1 -1 +( 1280 2496 896 ) ( 1280 2560 896 ) ( 1296 2560 896 ) 16 0 0 270 1 -1 +( 1296 2560 784 ) ( 1280 2560 784 ) ( 1280 2560 304 ) 16 0 0 270 1 -1 +( 1312 2496 784 ) ( 1312 2560 784 ) ( 1312 2560 304 ) 16 0 0 270 1 -1 +} +// brush 171 +{ +( 1888 2352 784 ) ( 1888 2336 784 ) ( 1888 2336 304 ) 16 0 0 270 1 -1 +( 1888 2272 784 ) ( 1952 2272 784 ) ( 1952 2272 304 ) 16 0 0 270 1 -1 +( 1952 2336 80 ) ( 1952 2352 80 ) ( 1888 2352 80 ) 16 0 0 270 1 -1 +( 1888 2352 896 ) ( 1952 2352 896 ) ( 1952 2336 896 ) 16 0 0 270 1 -1 +( 1952 2368 784 ) ( 1888 2368 784 ) ( 1888 2368 304 ) 16 0 0 270 1 -1 +( 1952 2336 784 ) ( 1952 2352 784 ) ( 1952 2352 304 ) 16 0 0 270 1 -1 +} +// brush 172 +{ +( 1696 2352 784 ) ( 1696 2336 784 ) ( 1696 2336 304 ) 16 0 0 270 1 -1 +( 1696 2272 784 ) ( 1760 2272 784 ) ( 1760 2272 304 ) 16 0 0 270 1 -1 +( 1760 2336 80 ) ( 1760 2352 80 ) ( 1696 2352 80 ) 16 0 0 270 1 -1 +( 1696 2352 896 ) ( 1760 2352 896 ) ( 1760 2336 896 ) 16 0 0 270 1 -1 +( 1760 2368 784 ) ( 1696 2368 784 ) ( 1696 2368 304 ) 16 0 0 270 1 -1 +( 1760 2336 784 ) ( 1760 2352 784 ) ( 1760 2352 304 ) 16 0 0 270 1 -1 +} +// brush 173 +{ +( 1536 2352 784 ) ( 1536 2336 784 ) ( 1536 2336 304 ) 16 0 0 270 1 -1 +( 1536 2272 784 ) ( 1600 2272 784 ) ( 1600 2272 304 ) 16 0 0 270 1 -1 +( 1600 2336 80 ) ( 1600 2352 80 ) ( 1536 2352 80 ) 16 0 0 270 1 -1 +( 1536 2352 896 ) ( 1600 2352 896 ) ( 1600 2336 896 ) 16 0 0 270 1 -1 +( 1600 2368 784 ) ( 1536 2368 784 ) ( 1536 2368 304 ) 16 0 0 270 1 -1 +( 1600 2336 784 ) ( 1600 2352 784 ) ( 1600 2352 304 ) 16 0 0 270 1 -1 +} +// brush 174 +{ +( 1888 3072 784 ) ( 1888 3056 784 ) ( 1888 3056 304 ) 16 0 0 270 1 -1 +( 1888 3040 784 ) ( 1952 3040 784 ) ( 1952 3040 304 ) 16 0 0 270 1 -1 +( 1952 3056 80 ) ( 1952 3072 80 ) ( 1888 3072 80 ) 16 0 0 270 1 -1 +( 1888 3072 896 ) ( 1952 3072 896 ) ( 1952 3056 896 ) 16 0 0 270 1 -1 +( 1952 3104 784 ) ( 1888 3104 784 ) ( 1888 3104 304 ) 16 0 0 270 1 -1 +( 1952 3056 784 ) ( 1952 3072 784 ) ( 1952 3072 304 ) 16 0 0 270 1 -1 +} +// brush 175 +{ +( 1696 3072 784 ) ( 1696 3056 784 ) ( 1696 3056 304 ) 16 0 0 270 1 -1 +( 1696 3040 784 ) ( 1760 3040 784 ) ( 1760 3040 304 ) 16 0 0 270 1 -1 +( 1760 3056 80 ) ( 1760 3072 80 ) ( 1696 3072 80 ) 16 0 0 270 1 -1 +( 1696 3072 896 ) ( 1760 3072 896 ) ( 1760 3056 896 ) 16 0 0 270 1 -1 +( 1760 3104 784 ) ( 1696 3104 784 ) ( 1696 3104 304 ) 16 0 0 270 1 -1 +( 1760 3056 784 ) ( 1760 3072 784 ) ( 1760 3072 304 ) 16 0 0 270 1 -1 +} +// brush 176 +{ +( 1536 3072 784 ) ( 1536 3056 784 ) ( 1536 3056 304 ) 6 0 0 270 1 -1 +( 1520 3040 784 ) ( 1584 3040 784 ) ( 1584 3040 304 ) 6 0 0 270 1 -1 +( 1584 3056 80 ) ( 1584 3072 80 ) ( 1520 3072 80 ) 6 0 0 270 1 -1 +( 1520 3072 384 ) ( 1584 3072 384 ) ( 1584 3056 384 ) 6 0 0 270 1 -1 +( 1584 3072 784 ) ( 1520 3072 784 ) ( 1520 3072 304 ) 6 0 0 270 1 -1 +( 1600 3056 784 ) ( 1600 3072 784 ) ( 1600 3072 304 ) 6 0 0 270 1 -1 +} +// brush 177 +{ +( 1344 3072 784 ) ( 1344 3056 784 ) ( 1344 3056 304 ) 6 0 0 270 1 -1 +( 1336 3040 784 ) ( 1400 3040 784 ) ( 1400 3040 304 ) 6 0 0 270 1 -1 +( 1400 3056 96 ) ( 1400 3072 96 ) ( 1336 3072 96 ) 6 0 0 270 1 -1 +( 1336 3072 384 ) ( 1400 3072 384 ) ( 1400 3056 384 ) 6 0 0 270 1 -1 +( 1400 3072 784 ) ( 1336 3072 784 ) ( 1336 3072 304 ) 6 0 0 270 1 -1 +( 1408 3056 784 ) ( 1408 3072 784 ) ( 1408 3072 304 ) 6 0 0 270 1 -1 +} +// brush 178 +{ +( 1296 2744 784 ) ( 1296 2680 784 ) ( 1296 2680 720 ) 16 0 0 0 1 1 +( 1984 2688 784 ) ( 2016 2688 784 ) ( 2016 2688 720 ) 16 0 0 0 1 1 +( 2016 2752 720 ) ( 1984 2752 720 ) ( 1984 2688 720 ) 16 0 0 0 1 1 +( 1984 2688 752 ) ( 1984 2752 752 ) ( 2016 2752 752 ) 16 0 0 0 1 1 +( 2016 2752 784 ) ( 1984 2752 784 ) ( 1984 2752 720 ) 16 0 0 0 1 1 +( 2016 2688 784 ) ( 2016 2752 784 ) ( 2016 2752 720 ) 16 0 0 0 1 1 +} +// brush 179 +{ +( 1296 2552 784 ) ( 1296 2488 784 ) ( 1296 2488 720 ) 16 0 0 0 1 1 +( 1984 2496 784 ) ( 2016 2496 784 ) ( 2016 2496 720 ) 16 0 0 0 1 1 +( 2016 2560 720 ) ( 1984 2560 720 ) ( 1984 2496 720 ) 16 0 0 0 1 1 +( 1984 2496 752 ) ( 1984 2560 752 ) ( 2016 2560 752 ) 16 0 0 0 1 1 +( 2016 2560 784 ) ( 1984 2560 784 ) ( 1984 2560 720 ) 16 0 0 0 1 1 +( 2016 2496 784 ) ( 2016 2560 784 ) ( 2016 2560 720 ) 16 0 0 0 1 1 +} +// brush 180 +{ +( 1632 2952 784 ) ( 1632 2888 784 ) ( 1632 2888 720 ) 16 0 0 0 1 1 +( 1984 2880 784 ) ( 2016 2880 784 ) ( 2016 2880 720 ) 16 0 0 0 1 1 +( 2016 2944 720 ) ( 1984 2944 720 ) ( 1984 2880 720 ) 16 0 0 0 1 1 +( 1984 2880 752 ) ( 1984 2944 752 ) ( 2016 2944 752 ) 16 0 0 0 1 1 +( 2016 2944 784 ) ( 1984 2944 784 ) ( 1984 2944 720 ) 16 0 0 0 1 1 +( 2016 2880 784 ) ( 2016 2944 784 ) ( 2016 2944 720 ) 16 0 0 0 1 1 +} +// brush 181 +{ +( 1888 2720 784 ) ( 1888 2688 784 ) ( 1888 2688 720 ) 16 0 0 0 1 1 +( 1864 2368 784 ) ( 1928 2368 784 ) ( 1928 2368 720 ) 16 0 0 0 1 1 +( 1952 2688 720 ) ( 1952 2720 720 ) ( 1888 2720 720 ) 16 0 0 0 1 1 +( 1888 2720 752 ) ( 1952 2720 752 ) ( 1952 2688 752 ) 16 0 0 0 1 1 +( 1960 3040 784 ) ( 1896 3040 784 ) ( 1896 3040 720 ) 16 0 0 0 1 1 +( 1952 2688 784 ) ( 1952 2720 784 ) ( 1952 2720 720 ) 16 0 0 0 1 1 +} +// brush 182 +{ +( 1696 2720 784 ) ( 1696 2688 784 ) ( 1696 2688 720 ) 16 0 0 0 1 1 +( 1672 2368 784 ) ( 1736 2368 784 ) ( 1736 2368 720 ) 16 0 0 0 1 1 +( 1760 2688 720 ) ( 1760 2720 720 ) ( 1696 2720 720 ) 16 0 0 0 1 1 +( 1696 2720 752 ) ( 1760 2720 752 ) ( 1760 2688 752 ) 16 0 0 0 1 1 +( 1768 3040 784 ) ( 1704 3040 784 ) ( 1704 3040 720 ) 16 0 0 0 1 1 +( 1760 2688 784 ) ( 1760 2720 784 ) ( 1760 2720 720 ) 16 0 0 0 1 1 +} +// brush 183 +{ +( 1536 2720 784 ) ( 1536 2688 784 ) ( 1536 2688 720 ) 16 0 0 0 1 1 +( 1512 2368 784 ) ( 1576 2368 784 ) ( 1576 2368 720 ) 16 0 0 0 1 1 +( 1600 2688 720 ) ( 1600 2720 720 ) ( 1536 2720 720 ) 16 0 0 0 1 1 +( 1536 2720 752 ) ( 1600 2720 752 ) ( 1600 2688 752 ) 16 0 0 0 1 1 +( 1592 2752 784 ) ( 1528 2752 784 ) ( 1528 2752 720 ) 16 0 0 0 1 1 +( 1600 2688 784 ) ( 1600 2720 784 ) ( 1600 2720 720 ) 16 0 0 0 1 1 +} +// brush 184 +{ +( 1344 2704 784 ) ( 1344 2672 784 ) ( 1344 2672 720 ) 16 0 0 0 1 1 +( 1320 2304 784 ) ( 1384 2304 784 ) ( 1384 2304 720 ) 16 0 0 0 1 1 +( 1408 2672 720 ) ( 1408 2704 720 ) ( 1344 2704 720 ) 16 0 0 0 1 1 +( 1344 2704 752 ) ( 1408 2704 752 ) ( 1408 2672 752 ) 16 0 0 0 1 1 +( 1392 2832 784 ) ( 1328 2832 784 ) ( 1328 2832 720 ) 16 0 0 0 1 1 +( 1408 2672 784 ) ( 1408 2704 784 ) ( 1408 2704 720 ) 16 0 0 0 1 1 +} +// brush 185 +{ +( 1280 2336 304 ) ( 1280 2312 304 ) ( 1280 2312 80 ) 7 0 0 0 1 1 +( 1344 2112 304 ) ( 1360 2112 304 ) ( 1360 2112 80 ) 7 0 0 0 1 1 +( 1360 2336 80 ) ( 1344 2336 80 ) ( 1344 2312 80 ) 7 0 0 0 1 1 +( 1344 2312 896 ) ( 1344 2336 896 ) ( 1360 2336 896 ) 7 0 0 0 1 1 +( 1360 2368 192 ) ( 1360 2368 304 ) ( 1280 2368 304 ) 7 0 0 0 1 1 +( 1344 2312 304 ) ( 1344 2336 304 ) ( 1344 2336 80 ) 7 0 0 0 1 1 +} +// brush 186 +{ +( 1376 2368 192 ) ( 1376 2320 192 ) ( 1376 2320 176 ) 9 0 0 0 1 1 +( 1400 2144 192 ) ( 1528 2144 192 ) ( 1528 2144 176 ) 9 0 0 0 1 1 +( 1520 2368 176 ) ( 1392 2368 176 ) ( 1392 2320 176 ) 9 0 0 0 1 1 +( 1392 2320 192 ) ( 1392 2368 192 ) ( 1520 2368 192 ) 9 0 0 0 1 1 +( 1520 2400 192 ) ( 1392 2400 192 ) ( 1392 2400 176 ) 9 0 0 0 1 1 +( 1536 2320 192 ) ( 1536 2368 192 ) ( 1536 2368 176 ) 9 0 0 0 1 1 +} +// brush 187 +{ +( 1536 2272 192 ) ( 1536 2144 192 ) ( 1536 2144 176 ) 9 0 0 0 1 1 +( 1520 2144 192 ) ( 1600 2144 192 ) ( 1600 2144 176 ) 9 0 0 0 1 1 +( 1600 2272 176 ) ( 1520 2272 176 ) ( 1520 2144 176 ) 9 0 0 0 1 1 +( 1520 2144 192 ) ( 1520 2272 192 ) ( 1600 2272 192 ) 9 0 0 0 1 1 +( 1600 2272 192 ) ( 1520 2272 192 ) ( 1520 2272 176 ) 9 0 0 0 1 1 +( 2016 2224 192 ) ( 2016 2352 192 ) ( 2016 2352 176 ) 9 0 0 0 1 1 +} +// brush 188 +{ +( 2016 2336 336 ) ( 2016 1920 336 ) ( 2016 1920 16 ) 3 0 0 0 1 1 +( 2032 1920 336 ) ( 2048 1920 336 ) ( 2048 1920 16 ) 3 0 0 0 1 1 +( 2048 2336 16 ) ( 2032 2336 16 ) ( 2032 1920 16 ) 3 0 0 0 1 1 +( 2032 1920 352 ) ( 2032 2336 352 ) ( 2048 2336 352 ) 3 0 0 0 1 1 +( 2048 2112 16 ) ( 2048 2112 336 ) ( 2032 2112 336 ) 3 0 0 0 1 1 +( 2080 1920 336 ) ( 2080 2336 336 ) ( 2080 2336 16 ) 3 0 0 0 1 1 +} +// brush 189 +{ +( 1344 2112 16 ) ( 1344 2112 336 ) ( 1344 2096 336 ) 1 0 0 0 1 1 +( 1360 1600 336 ) ( 1840 1600 336 ) ( 1840 1600 16 ) 1 0 0 0 1 1 +( 1840 2112 16 ) ( 1360 2112 16 ) ( 1360 2096 16 ) 1 0 0 0 1 1 +( 1360 2096 512 ) ( 1360 2112 512 ) ( 1840 2112 512 ) 1 0 0 0 1 1 +( 1840 2112 336 ) ( 1360 2112 336 ) ( 1360 2112 16 ) 1 0 0 0 1 1 +( 1856 2096 336 ) ( 1856 2112 336 ) ( 1856 2112 16 ) 1 0 0 0 1 1 +} +// brush 190 +{ +( 1856 2112 336 ) ( 1856 2080 336 ) ( 1856 2080 304 ) 16 0 0 0 1 1 +( 1856 2080 336 ) ( 1880 2080 336 ) ( 1880 2080 304 ) 16 0 0 0 1 1 +( 1880 2080 320 ) ( 1880 2112 320 ) ( 1856 2112 320 ) 16 0 0 0 1 1 +( 1856 2112 352 ) ( 1880 2112 352 ) ( 1880 2080 352 ) 16 0 0 0 1 1 +( 1880 2112 336 ) ( 1856 2112 336 ) ( 1856 2112 304 ) 16 0 0 0 1 1 +( 2016 2080 320 ) ( 2016 2080 336 ) ( 2016 2112 336 ) 16 0 0 0 1 1 +} +// brush 191 +{ +( 1856 1984 336 ) ( 1856 1952 336 ) ( 1856 1952 304 ) 16 0 0 0 1 1 +( 1856 1952 336 ) ( 1880 1952 336 ) ( 1880 1952 304 ) 16 0 0 0 1 1 +( 1880 1952 320 ) ( 1880 1984 320 ) ( 1856 1984 320 ) 16 0 0 0 1 1 +( 1856 1984 352 ) ( 1880 1984 352 ) ( 1880 1952 352 ) 16 0 0 0 1 1 +( 1880 1984 336 ) ( 1856 1984 336 ) ( 1856 1984 304 ) 16 0 0 0 1 1 +( 2016 1952 320 ) ( 2016 1952 336 ) ( 2016 1984 336 ) 16 0 0 0 1 1 +} +// brush 192 +{ +( 1856 2144 192 ) ( 1856 1952 192 ) ( 1856 1952 176 ) 9 0 0 0 1 1 +( 1880 1888 192 ) ( 2008 1888 192 ) ( 2008 1888 176 ) 9 0 0 0 1 1 +( 2000 2144 96 ) ( 1872 2144 96 ) ( 1872 1952 96 ) 9 0 0 0 1 1 +( 1872 1952 192 ) ( 1872 2144 192 ) ( 2000 2144 192 ) 9 0 0 0 1 1 +( 2000 2144 192 ) ( 1872 2144 192 ) ( 1872 2144 176 ) 9 0 0 0 1 1 +( 2016 1952 192 ) ( 2016 2144 192 ) ( 2016 2144 176 ) 9 0 0 0 1 1 +} +// brush 193 +{ +( 1344 2208 336 ) ( 1344 2176 336 ) ( 1344 2176 320 ) 16 0 0 0 1 1 +( 1776 2176 336 ) ( 1808 2176 336 ) ( 1808 2176 320 ) 16 0 0 0 1 1 +( 1808 2208 320 ) ( 1776 2208 320 ) ( 1776 2176 320 ) 16 0 0 0 1 1 +( 1776 2176 352 ) ( 1776 2208 352 ) ( 1808 2208 352 ) 16 0 0 0 1 1 +( 1808 2208 336 ) ( 1776 2208 336 ) ( 1776 2208 320 ) 16 0 0 0 1 1 +( 2048 2176 320 ) ( 2048 2176 336 ) ( 2048 2208 336 ) 16 0 0 0 1 1 +} +// brush 194 +{ +( 1920 2080 336 ) ( 1920 2048 336 ) ( 1920 2048 320 ) 16 0 0 0 1 1 +( 1920 1984 320 ) ( 1920 1984 336 ) ( 1952 1984 336 ) 16 0 0 0 1 1 +( 1952 2048 320 ) ( 1952 2080 320 ) ( 1920 2080 320 ) 16 0 0 0 1 1 +( 1920 2080 352 ) ( 1952 2080 352 ) ( 1952 2048 352 ) 16 0 0 0 1 1 +( 1952 2080 320 ) ( 1952 2080 336 ) ( 1920 2080 336 ) 16 0 0 0 1 1 +( 1952 2048 336 ) ( 1952 2080 336 ) ( 1952 2080 320 ) 16 0 0 0 1 1 +} +// brush 195 +{ +( 1984 1984 192 ) ( 1984 1952 192 ) ( 1984 1952 176 ) 8 0 0 0 1 1 +( 2000 1952 192 ) ( 2016 1952 192 ) ( 2016 1952 176 ) 8 0 0 0 1 1 +( 2016 1952 192 ) ( 2016 1984 192 ) ( 2000 1984 192 ) 8 0 0 0 1 1 +( 2000 1984 224 ) ( 2016 1984 224 ) ( 2016 1952 224 ) 8 0 0 0 1 1 +( 2016 1984 192 ) ( 2000 1984 192 ) ( 2000 1984 176 ) 8 0 0 0 1 1 +( 2016 1952 192 ) ( 2016 1984 192 ) ( 2016 1984 176 ) 8 0 0 0 1 1 +} +// brush 196 +{ +( 1856 1984 208 ) ( 1856 1952 208 ) ( 1856 1952 192 ) 8 0 0 0 1 1 +( 1856 1952 208 ) ( 1872 1952 208 ) ( 1872 1952 192 ) 8 0 0 0 1 1 +( 1872 1952 192 ) ( 1872 1984 192 ) ( 1856 1984 192 ) 8 0 0 0 1 1 +( 1856 1984 224 ) ( 1872 1984 224 ) ( 1872 1952 224 ) 8 0 0 0 1 1 +( 1872 1984 208 ) ( 1856 1984 208 ) ( 1856 1984 192 ) 8 0 0 0 1 1 +( 1888 1952 208 ) ( 1888 1984 208 ) ( 1888 1984 192 ) 8 0 0 0 1 1 +} +// brush 197 +{ +( 1760 1520 294 ) ( 1760 1504 294 ) ( 1760 1504 278 ) 9 0 0 0 1 1 +( 1776 1200 280 ) ( 2096 1200 280 ) ( 2096 1200 264 ) 9 0 0 0 1 1 +( 2096 1520 272 ) ( 1776 1520 272 ) ( 1776 1200 272 ) 9 0 0 0 1 1 +( 1776 1200 304 ) ( 1776 1520 304 ) ( 2096 1520 304 ) 9 0 0 0 1 1 +( 2000 1504 278 ) ( 2000 1504 294 ) ( 1872 1504 294 ) 9 0 0 0 1 1 +( 2112 1504 294 ) ( 2112 1520 294 ) ( 2112 1520 278 ) 9 0 0 0 1 1 +} +// brush 198 +{ +( 2016 1920 336 ) ( 2016 1904 336 ) ( 2016 1904 16 ) 1 0 0 0 1 1 +( 2040 1600 336 ) ( 2056 1600 336 ) ( 2056 1600 16 ) 1 0 0 0 1 1 +( 2048 1920 16 ) ( 2032 1920 16 ) ( 2032 1904 16 ) 1 0 0 0 1 1 +( 2032 1904 512 ) ( 2032 1920 512 ) ( 2048 1920 512 ) 1 0 0 0 1 1 +( 2048 1920 336 ) ( 2032 1920 336 ) ( 2032 1920 16 ) 1 0 0 0 1 1 +( 2080 1904 336 ) ( 2080 1920 336 ) ( 2080 1920 16 ) 1 0 0 0 1 1 +} +// brush 199 +{ +( 1760 1408 480 ) ( 1760 1408 496 ) ( 1760 1376 496 ) 6 0 0 0 1 1 +( 1760 1376 496 ) ( 1784 1376 496 ) ( 1784 1376 464 ) 6 0 0 0 1 1 +( 1784 1376 480 ) ( 1784 1408 480 ) ( 1760 1408 480 ) 6 0 0 0 1 1 +( 1760 1408 512 ) ( 1784 1408 512 ) ( 1784 1376 512 ) 6 0 0 0 1 1 +( 1784 1408 496 ) ( 1760 1408 496 ) ( 1760 1408 464 ) 6 0 0 0 1 1 +( 2104 1368 496 ) ( 2104 1400 496 ) ( 2104 1400 464 ) 6 0 0 0 1 1 +} +// brush 200 +{ +( 1920 1568 496 ) ( 1920 1424 496 ) ( 1920 1424 480 ) 6 0 0 0 1 1 +( 1920 1408 496 ) ( 1952 1408 496 ) ( 1952 1408 480 ) 6 0 0 0 1 1 +( 1952 1568 480 ) ( 1920 1568 480 ) ( 1920 1424 480 ) 6 0 0 0 1 1 +( 1920 1424 512 ) ( 1920 1568 512 ) ( 1952 1568 512 ) 6 0 0 0 1 1 +( 1952 1696 496 ) ( 1920 1696 496 ) ( 1920 1696 480 ) 6 0 0 0 1 1 +( 1952 1424 496 ) ( 1952 1568 496 ) ( 1952 1568 480 ) 6 0 0 0 1 1 +} +// brush 201 +{ +( 800 1792 440 ) ( 800 1736 440 ) ( 800 1736 400 ) 16 0 0 0 1 1 +( 800 1504 440 ) ( 816 1504 440 ) ( 816 1504 400 ) 16 0 0 0 1 1 +( 816 1792 416 ) ( 800 1792 416 ) ( 800 1736 416 ) 16 0 0 0 1 1 +( 800 1736 440 ) ( 800 1792 440 ) ( 816 1792 440 ) 16 0 0 0 1 1 +( 816 1792 440 ) ( 800 1792 440 ) ( 800 1792 400 ) 16 0 0 0 1 1 +( 832 1736 440 ) ( 832 1792 440 ) ( 832 1792 400 ) 16 0 0 0 1 1 +} +// brush 202 +{ +( 800 1488 440 ) ( 800 1472 440 ) ( 800 1472 400 ) 16 0 0 0 1 1 +( 816 1472 440 ) ( 832 1472 440 ) ( 832 1472 400 ) 16 0 0 0 1 1 +( 832 1488 400 ) ( 816 1488 400 ) ( 816 1472 400 ) 16 0 0 0 1 1 +( 816 1472 464 ) ( 816 1488 464 ) ( 832 1488 464 ) 16 0 0 0 1 1 +( 832 1504 440 ) ( 816 1504 440 ) ( 816 1504 400 ) 16 0 0 0 1 1 +( 832 1472 440 ) ( 832 1488 440 ) ( 832 1488 400 ) 16 0 0 0 1 1 +} +// brush 203 +{ +( 640 1792 440 ) ( 640 1736 440 ) ( 640 1736 400 ) 16 0 0 0 1 1 +( 656 1504 440 ) ( 672 1504 440 ) ( 672 1504 400 ) 16 0 0 0 1 1 +( 672 1792 416 ) ( 656 1792 416 ) ( 656 1736 416 ) 16 0 0 0 1 1 +( 656 1736 440 ) ( 656 1792 440 ) ( 672 1792 440 ) 16 0 0 0 1 1 +( 672 1792 440 ) ( 656 1792 440 ) ( 656 1792 400 ) 16 0 0 0 1 1 +( 672 1736 440 ) ( 672 1792 440 ) ( 672 1792 400 ) 16 0 0 0 1 1 +} +// brush 204 +{ +( 640 1488 440 ) ( 640 1472 440 ) ( 640 1472 400 ) 16 0 0 0 1 1 +( 656 1472 440 ) ( 672 1472 440 ) ( 672 1472 400 ) 16 0 0 0 1 1 +( 672 1488 400 ) ( 656 1488 400 ) ( 656 1472 400 ) 16 0 0 0 1 1 +( 656 1472 464 ) ( 656 1488 464 ) ( 672 1488 464 ) 16 0 0 0 1 1 +( 672 1504 440 ) ( 656 1504 440 ) ( 656 1504 400 ) 16 0 0 0 1 1 +( 672 1472 440 ) ( 672 1488 440 ) ( 672 1488 400 ) 16 0 0 0 1 1 +} +// brush 205 +{ +( 256 2960 480 ) ( 256 2960 464 ) ( 256 3008 464 ) 4 0 0 0 1 1 +( 272 2976 464 ) ( 272 2976 480 ) ( 336 2976 480 ) 4 0 0 0 1 1 +( 432 2944 464 ) ( 432 3008 464 ) ( 320 3008 464 ) 4 0 0 0 1 1 +( 320 3008 480 ) ( 432 3008 480 ) ( 432 2944 480 ) 4 0 0 0 1 1 +( 432 3008 464 ) ( 432 3008 480 ) ( 320 3008 480 ) 4 0 0 0 1 1 +( 352 2944 464 ) ( 352 2944 480 ) ( 352 3008 480 ) 4 0 0 0 1 1 +} +// brush 206 +{ +( 832 832 640 ) ( 832 784 640 ) ( 832 784 624 ) 3 0 0 0 1 1 +( 912 768 640 ) ( 944 768 640 ) ( 944 768 624 ) 3 0 0 0 1 1 +( 944 832 640 ) ( 912 832 640 ) ( 912 784 640 ) 3 0 0 0 1 1 +( 912 784 832 ) ( 912 832 832 ) ( 944 832 832 ) 3 0 0 0 1 1 +( 944 832 640 ) ( 912 832 640 ) ( 912 832 624 ) 3 0 0 0 1 1 +( 960 784 640 ) ( 960 832 640 ) ( 960 832 624 ) 3 0 0 0 1 1 +} +// brush 207 +{ +( 672 2256 544 ) ( 672 2208 544 ) ( 672 2208 480 ) 16 0 0 0 1 1 +( 688 2208 544 ) ( 704 2208 544 ) ( 704 2208 480 ) 16 0 0 0 1 1 +( 704 2256 416 ) ( 688 2256 416 ) ( 688 2208 416 ) 16 0 0 0 1 1 +( 688 2208 544 ) ( 688 2256 544 ) ( 704 2256 544 ) 16 0 0 0 1 1 +( 704 2240 544 ) ( 688 2240 544 ) ( 688 2240 480 ) 16 0 0 0 1 1 +( 704 2208 544 ) ( 704 2256 544 ) ( 704 2256 480 ) 16 0 0 0 1 1 +} +// brush 208 +{ +( 800 2256 544 ) ( 800 2208 544 ) ( 800 2208 480 ) 16 0 0 0 1 1 +( 816 2208 544 ) ( 832 2208 544 ) ( 832 2208 480 ) 16 0 0 0 1 1 +( 832 2256 416 ) ( 816 2256 416 ) ( 816 2208 416 ) 16 0 0 0 1 1 +( 816 2208 544 ) ( 816 2256 544 ) ( 832 2256 544 ) 16 0 0 0 1 1 +( 832 2240 544 ) ( 816 2240 544 ) ( 816 2240 480 ) 16 0 0 0 1 1 +( 832 2208 544 ) ( 832 2256 544 ) ( 832 2256 480 ) 16 0 0 0 1 1 +} +// brush 209 +{ +( 416 1120 376 ) ( 416 1064 376 ) ( 416 1064 344 ) 10 0 0 0 1 1 +( 440 928 376 ) ( 552 928 376 ) ( 552 928 344 ) 10 0 0 0 1 1 +( 544 1120 336 ) ( 432 1120 336 ) ( 432 1064 336 ) 10 0 0 0 1 1 +( 432 1064 368 ) ( 432 1120 368 ) ( 544 1120 368 ) 10 0 0 0 1 1 +( 544 1184 376 ) ( 432 1184 376 ) ( 432 1184 344 ) 10 0 0 0 1 1 +( 736 1064 376 ) ( 736 1120 376 ) ( 736 1120 344 ) 10 0 0 0 1 1 +} +// brush 210 +{ +( 1600 2624 160 ) ( 1600 2528 160 ) ( 1600 2528 144 ) 9 0 0 0 1 1 +( 1600 2528 160 ) ( 1616 2528 160 ) ( 1616 2528 144 ) 9 0 0 0 1 1 +( 1616 2624 96 ) ( 1600 2624 96 ) ( 1600 2528 96 ) 9 0 0 0 1 1 +( 1600 2528 160 ) ( 1600 2624 160 ) ( 1616 2624 160 ) 9 0 0 0 1 1 +( 1616 2624 160 ) ( 1600 2624 160 ) ( 1600 2624 144 ) 9 0 0 0 1 1 +( 1632 2528 160 ) ( 1632 2624 160 ) ( 1632 2624 144 ) 9 0 0 0 1 1 +} +// brush 211 +{ +( 2016 1200 512 ) ( 2016 1216 16 ) ( 2016 1216 512 ) 3 0 0 0 1 1 +( 2128 1152 512 ) ( 2112 1152 16 ) ( 2112 1152 512 ) 3 0 0 0 1 1 +( 2112 1216 304 ) ( 2128 1200 304 ) ( 2128 1216 304 ) 3 0 0 0 1 1 +( 2128 1200 512 ) ( 2112 1216 512 ) ( 2128 1216 512 ) 3 0 0 0 1 1 +( 2112 1216 512 ) ( 2128 1216 16 ) ( 2128 1216 512 ) 3 0 0 0 1 1 +( 2144 1216 512 ) ( 2144 1200 16 ) ( 2144 1200 512 ) 3 0 0 0 1 1 +} +// brush 212 +{ +( 1760 1216 512 ) ( 1760 1200 512 ) ( 1760 1200 16 ) 3 0 0 0 1 1 +( 1824 1152 512 ) ( 1840 1152 512 ) ( 1840 1152 16 ) 3 0 0 0 1 1 +( 1840 1216 304 ) ( 1824 1216 304 ) ( 1824 1200 304 ) 3 0 0 0 1 1 +( 1824 1200 512 ) ( 1824 1216 512 ) ( 1840 1216 512 ) 3 0 0 0 1 1 +( 1840 1216 512 ) ( 1824 1216 512 ) ( 1824 1216 16 ) 3 0 0 0 1 1 +( 1856 1200 512 ) ( 1856 1216 512 ) ( 1856 1216 16 ) 3 0 0 0 1 1 +} +// brush 213 +{ +( 1888 1024 344 ) ( 1888 960 344 ) ( 1888 960 328 ) 8 0 0 90 1 1 +( 1904 960 344 ) ( 1968 960 344 ) ( 1968 960 328 ) 8 0 0 90 1 1 +( 1968 1024 336 ) ( 1904 1024 336 ) ( 1904 960 336 ) 8 0 0 90 1 1 +( 1904 960 352 ) ( 1904 1024 352 ) ( 1968 1024 352 ) 8 0 0 0 1 1 +( 1968 1056 344 ) ( 1904 1056 344 ) ( 1904 1056 328 ) 8 0 0 90 1 1 +( 1984 960 344 ) ( 1984 1024 344 ) ( 1984 1024 328 ) 8 0 0 90 1 1 +} +// brush 214 +{ +( 1888 1024 520 ) ( 1888 960 520 ) ( 1888 960 504 ) 8 0 0 90 1 1 +( 1904 960 520 ) ( 1968 960 520 ) ( 1968 960 504 ) 8 0 0 90 1 1 +( 1968 1024 504 ) ( 1904 1024 504 ) ( 1904 960 504 ) 8 0 0 0 1 1 +( 1904 960 520 ) ( 1904 1024 520 ) ( 1968 1024 520 ) 8 0 0 90 1 1 +( 1968 1024 520 ) ( 1904 1024 520 ) ( 1904 1024 504 ) 8 0 0 90 1 1 +( 1984 960 520 ) ( 1984 1024 520 ) ( 1984 1024 504 ) 8 0 0 90 1 1 +} +// brush 215 +{ +( 1760 1216 624 ) ( 1760 1200 624 ) ( 1760 1200 336 ) 6 0 0 0 1 1 +( 2000 1152 624 ) ( 2032 1152 624 ) ( 2032 1152 336 ) 6 0 0 0 1 1 +( 2032 1216 512 ) ( 2000 1216 512 ) ( 2000 1200 512 ) 6 0 0 0 1 1 +( 2000 1200 576 ) ( 2000 1216 576 ) ( 2032 1216 576 ) 6 0 0 0 1 1 +( 2032 1376 624 ) ( 2000 1376 624 ) ( 2000 1376 336 ) 6 0 0 0 1 1 +( 2112 1200 624 ) ( 2112 1216 624 ) ( 2112 1216 336 ) 6 0 0 0 1 1 +} +// brush 216 +{ +( 1792 1120 344 ) ( 1792 1056 344 ) ( 1792 1056 328 ) 14 0 0 0 1 1 +( 1808 1056 344 ) ( 1872 1056 344 ) ( 1872 1056 328 ) 14 0 0 0 1 1 +( 1872 1120 336 ) ( 1808 1120 336 ) ( 1808 1056 336 ) 14 0 0 0 1 1 +( 1808 1056 368 ) ( 1808 1120 368 ) ( 1872 1120 368 ) 14 0 0 0 1 1 +( 1872 1120 344 ) ( 1808 1120 344 ) ( 1808 1120 328 ) 14 0 0 0 1 1 +( 1856 1056 344 ) ( 1856 1120 344 ) ( 1856 1120 328 ) 14 0 0 0 1 1 +} +// brush 217 +{ +( 1792 1048 392 ) ( 1792 984 392 ) ( 1792 984 376 ) 14 0 0 0 1 1 +( 1776 992 392 ) ( 1840 992 392 ) ( 1840 992 376 ) 14 0 0 0 1 1 +( 1840 1048 368 ) ( 1776 1048 368 ) ( 1776 984 368 ) 14 0 0 0 1 1 +( 1776 984 400 ) ( 1776 1048 400 ) ( 1840 1048 400 ) 14 0 0 0 1 1 +( 1840 1024 392 ) ( 1776 1024 392 ) ( 1776 1024 376 ) 14 0 0 0 1 1 +( 1824 984 392 ) ( 1824 1048 392 ) ( 1824 1048 376 ) 14 0 0 0 1 1 +} +// brush 218 +{ +( 2080 1584 360 ) ( 2080 1520 360 ) ( 2080 1520 344 ) 1 0 0 0 1 1 +( 2080 1504 360 ) ( 2144 1504 360 ) ( 2144 1504 344 ) 1 0 0 0 1 1 +( 2144 1584 272 ) ( 2080 1584 272 ) ( 2080 1520 272 ) 1 0 0 0 1 1 +( 2080 1520 512 ) ( 2080 1584 512 ) ( 2144 1584 512 ) 1 0 0 0 1 1 +( 2144 1600 360 ) ( 2080 1600 360 ) ( 2080 1600 344 ) 1 0 0 0 1 1 +( 2144 1520 360 ) ( 2144 1584 360 ) ( 2144 1584 344 ) 1 0 0 0 1 1 +} +// brush 219 +{ +( 992 448 656 ) ( 992 336 656 ) ( 992 336 640 ) 4 0 0 0 1 1 +( 1008 224 656 ) ( 1200 224 656 ) ( 1200 224 640 ) 4 0 0 0 1 1 +( 1200 448 640 ) ( 1008 448 640 ) ( 1008 336 640 ) 4 0 0 0 1 1 +( 1008 336 656 ) ( 1008 448 656 ) ( 1200 448 656 ) 4 0 0 0 1 1 +( 1200 320 656 ) ( 1008 320 656 ) ( 1008 320 640 ) 4 0 0 0 1 1 +( 1216 336 656 ) ( 1216 448 656 ) ( 1216 448 640 ) 4 0 0 0 1 1 +} +// brush 220 +{ +( 960 448 640 ) ( 960 336 640 ) ( 960 336 624 ) 4 0 0 0 1 1 +( 1008 240 640 ) ( 1200 240 640 ) ( 1200 240 624 ) 4 0 0 0 1 1 +( 1200 448 624 ) ( 1008 448 624 ) ( 1008 336 624 ) 4 0 0 0 1 1 +( 1008 336 640 ) ( 1008 448 640 ) ( 1200 448 640 ) 4 0 0 0 1 1 +( 1200 448 640 ) ( 1008 448 640 ) ( 1008 448 624 ) 4 0 0 0 1 1 +( 1248 336 640 ) ( 1248 448 640 ) ( 1248 448 624 ) 4 0 0 0 1 1 +} +// brush 221 +{ +( 1856 960 512 ) ( 1856 832 512 ) ( 1856 832 336 ) 7 0 0 0 1 1 +( 1872 864 512 ) ( 2000 864 512 ) ( 2000 864 336 ) 7 0 0 0 1 1 +( 2000 960 336 ) ( 1872 960 336 ) ( 1872 832 336 ) 7 0 0 0 1 1 +( 1872 832 536 ) ( 1872 960 536 ) ( 2000 960 536 ) 7 0 0 0 1 1 +( 2000 960 512 ) ( 1872 960 512 ) ( 1872 960 336 ) 7 0 0 0 1 1 +( 2016 832 512 ) ( 2016 960 512 ) ( 2016 960 336 ) 7 0 0 0 1 1 +} +// brush 222 +{ +( 1920 904 608 ) ( 1920 880 608 ) ( 1920 880 592 ) 16 0 0 0 1 1 +( 1920 864 608 ) ( 1952 864 608 ) ( 1952 864 592 ) 16 0 0 0 1 1 +( 1952 880 576 ) ( 1952 904 576 ) ( 1920 904 576 ) 16 0 0 0 1 1 +( 1920 904 608 ) ( 1952 904 608 ) ( 1952 880 608 ) 16 0 0 0 1 1 +( 1960 1248 608 ) ( 1928 1248 608 ) ( 1928 1248 592 ) 16 0 0 0 1 1 +( 1952 880 608 ) ( 1952 904 608 ) ( 1952 904 592 ) 16 0 0 0 1 1 +} +// brush 223 +{ +( 1760 1600 512 ) ( 1760 1536 512 ) ( 1760 1536 496 ) 6 0 0 0 1 1 +( 2056 1376 512 ) ( 2128 1376 512 ) ( 2128 1376 496 ) 6 0 0 0 1 1 +( 1960 1456 512 ) ( 1888 1456 512 ) ( 1888 1392 512 ) 6 0 0 0 1 1 +( 1888 1392 544 ) ( 1888 1456 544 ) ( 1960 1456 544 ) 6 0 0 0 1 1 +( 1816 1920 512 ) ( 1744 1920 512 ) ( 1744 1920 496 ) 6 0 0 0 1 1 +( 2112 1216 512 ) ( 2112 1280 512 ) ( 2112 1280 496 ) 6 0 0 0 1 1 +} +// brush 224 +{ +( 1776 1032 608 ) ( 1776 1000 608 ) ( 1776 1000 592 ) 16 0 0 0 1 1 +( 2072 992 608 ) ( 2096 992 608 ) ( 2096 992 592 ) 16 0 0 0 1 1 +( 2096 1024 576 ) ( 2072 1024 576 ) ( 2072 992 576 ) 16 0 0 0 1 1 +( 2072 992 608 ) ( 2072 1024 608 ) ( 2096 1024 608 ) 16 0 0 0 1 1 +( 2096 1024 608 ) ( 2072 1024 608 ) ( 2072 1024 592 ) 16 0 0 0 1 1 +( 2112 992 608 ) ( 2112 1024 608 ) ( 2112 1024 592 ) 16 0 0 0 1 1 +} +// brush 225 +{ +( 1792 1248 344 ) ( 1792 1184 344 ) ( 1792 1184 328 ) 9 0 0 0 1 1 +( 1832 864 344 ) ( 2024 864 344 ) ( 2024 864 328 ) 9 0 0 0 1 1 +( 2032 1248 304 ) ( 1840 1248 304 ) ( 1840 1184 304 ) 9 0 0 0 1 1 +( 1840 1184 336 ) ( 1840 1248 336 ) ( 2032 1248 336 ) 9 0 0 0 1 1 +( 2032 1152 344 ) ( 1840 1152 344 ) ( 1840 1152 328 ) 9 0 0 0 1 1 +( 2144 1184 344 ) ( 2144 1248 344 ) ( 2144 1248 328 ) 9 0 0 0 1 1 +} +// brush 226 +{ +( 1760 1088 512 ) ( 1760 1072 512 ) ( 1760 1072 16 ) 2 0 0 0 1 1 +( 1776 896 512 ) ( 1792 896 512 ) ( 1792 896 16 ) 2 0 0 0 1 1 +( 1792 1088 336 ) ( 1776 1088 336 ) ( 1776 1072 336 ) 2 0 0 0 1 1 +( 1776 1072 608 ) ( 1776 1088 608 ) ( 1792 1088 608 ) 2 0 0 0 1 1 +( 1792 1200 512 ) ( 1776 1200 512 ) ( 1776 1200 16 ) 2 0 0 0 1 1 +( 1792 1072 512 ) ( 1792 1088 512 ) ( 1792 1088 16 ) 2 0 0 0 1 1 +} +// brush 227 +{ +( 2112 1088 512 ) ( 2112 1072 512 ) ( 2112 1072 16 ) 2 0 0 0 1 1 +( 2112 896 512 ) ( 2128 896 512 ) ( 2128 896 16 ) 2 0 0 0 1 1 +( 2128 1088 336 ) ( 2112 1088 336 ) ( 2112 1072 336 ) 2 0 0 0 1 1 +( 2112 1072 608 ) ( 2112 1088 608 ) ( 2128 1088 608 ) 2 0 0 0 1 1 +( 2128 1216 512 ) ( 2112 1216 512 ) ( 2112 1216 16 ) 2 0 0 0 1 1 +( 2144 1072 512 ) ( 2144 1088 512 ) ( 2144 1088 16 ) 2 0 0 0 1 1 +} +// brush 228 +{ +( 1824 832 512 ) ( 1824 816 512 ) ( 1824 816 336 ) 2 0 0 0 1 1 +( 1840 832 512 ) ( 2032 832 512 ) ( 2032 832 336 ) 2 0 0 0 1 1 +( 2032 832 336 ) ( 1840 832 336 ) ( 1840 816 336 ) 2 0 0 0 1 1 +( 1840 816 608 ) ( 1840 832 608 ) ( 2032 832 608 ) 2 0 0 0 1 1 +( 2032 864 512 ) ( 1840 864 512 ) ( 1840 864 336 ) 2 0 0 0 1 1 +( 2080 816 512 ) ( 2080 832 512 ) ( 2080 832 336 ) 2 0 0 0 1 1 +} +// brush 229 +{ +( 928 1552 832 ) ( 928 1520 832 ) ( 928 1520 624 ) 1 0 0 0 1 1 +( 1368 1216 832 ) ( 1384 1216 832 ) ( 1384 1216 624 ) 1 0 0 0 1 1 +( 1376 1552 384 ) ( 1360 1552 384 ) ( 1360 1520 384 ) 1 0 0 0 1 1 +( 1360 1520 832 ) ( 1360 1552 832 ) ( 1376 1552 832 ) 1 0 0 0 1 1 +( 1376 1248 688 ) ( 1376 1248 832 ) ( 1360 1248 832 ) 1 0 0 0 1 1 +( 1376 1520 832 ) ( 1376 1552 832 ) ( 1376 1552 624 ) 1 0 0 0 1 1 +} +// brush 230 +{ +( 704 928 768 ) ( 704 912 768 ) ( 704 912 624 ) 1 0 0 0 1 1 +( 848 928 768 ) ( 864 928 768 ) ( 864 928 624 ) 1 0 0 0 1 1 +( 864 944 608 ) ( 848 944 608 ) ( 848 928 608 ) 1 0 0 0 1 1 +( 848 928 768 ) ( 848 944 768 ) ( 864 944 768 ) 1 0 0 0 1 1 +( 864 960 768 ) ( 848 960 768 ) ( 848 960 624 ) 1 0 0 0 1 1 +( 832 928 768 ) ( 832 944 768 ) ( 832 944 624 ) 1 0 0 0 1 1 +} +// brush 231 +{ +( 320 1072 832 ) ( 320 1008 832 ) ( 320 1008 384 ) 11 0 0 0 1 1 +( 376 928 832 ) ( 408 928 832 ) ( 408 928 384 ) 11 0 0 0 1 1 +( 416 1072 360 ) ( 384 1072 360 ) ( 384 1008 360 ) 11 0 0 0 1 1 +( 384 1008 704 ) ( 384 1072 704 ) ( 416 1072 704 ) 11 0 0 0 1 1 +( 416 1152 832 ) ( 384 1152 832 ) ( 384 1152 384 ) 11 0 0 0 1 1 +( 416 1008 832 ) ( 416 1072 832 ) ( 416 1072 384 ) 11 0 0 0 1 1 +} +// brush 232 +{ +( 384 928 832 ) ( 384 904 832 ) ( 384 904 360 ) 2 0 0 0 1 1 +( 400 864 832 ) ( 576 864 832 ) ( 576 864 360 ) 2 0 0 0 1 1 +( 576 928 360 ) ( 400 928 360 ) ( 400 904 360 ) 2 0 0 0 1 1 +( 400 904 832 ) ( 400 928 832 ) ( 576 928 832 ) 2 0 0 0 1 1 +( 576 928 832 ) ( 400 928 832 ) ( 400 928 360 ) 2 0 0 0 1 1 +( 576 904 832 ) ( 576 928 832 ) ( 576 928 360 ) 2 0 0 0 1 1 +} +// brush 233 +{ +( 448 1232 392 ) ( 448 1176 392 ) ( 448 1176 360 ) 10 0 0 0 1 1 +( 440 1184 392 ) ( 552 1184 392 ) ( 552 1184 360 ) 10 0 0 0 1 1 +( 544 1232 352 ) ( 432 1232 352 ) ( 432 1176 352 ) 10 0 0 0 1 1 +( 432 1176 384 ) ( 432 1232 384 ) ( 544 1232 384 ) 10 0 0 0 1 1 +( 544 1344 392 ) ( 432 1344 392 ) ( 432 1344 360 ) 10 0 0 0 1 1 +( 992 1176 392 ) ( 992 1232 392 ) ( 992 1232 360 ) 10 0 0 0 1 1 +} +// brush 234 +{ +( 576 928 832 ) ( 576 929 832 ) ( 576 928 833 ) 6 0 0 0 1 1 +( 688 928 832 ) ( 688 928 833 ) ( 689 928 832 ) 6 0 0 0 1 1 +( 688 928 768 ) ( 689 928 768 ) ( 688 929 768 ) 6 0 0 0 1 1 +( 768 1024 848 ) ( 768 1025 848 ) ( 769 1024 848 ) 6 0 0 0 1 1 +( 768 1120 848 ) ( 769 1120 848 ) ( 768 1120 849 ) 6 0 0 0 1 1 +( 896 1024 848 ) ( 896 1024 849 ) ( 896 1025 848 ) 6 0 0 0 1 1 +} +// brush 235 +{ +( 800 1808 440 ) ( 800 1792 440 ) ( 800 1792 400 ) 16 0 0 0 1 1 +( 816 1792 440 ) ( 832 1792 440 ) ( 832 1792 400 ) 16 0 0 0 1 1 +( 832 1808 400 ) ( 816 1808 400 ) ( 816 1792 400 ) 16 0 0 0 1 1 +( 816 1792 464 ) ( 816 1808 464 ) ( 832 1808 464 ) 16 0 0 0 1 1 +( 832 1824 440 ) ( 816 1824 440 ) ( 816 1824 400 ) 16 0 0 0 1 1 +( 832 1792 440 ) ( 832 1808 440 ) ( 832 1808 400 ) 16 0 0 0 1 1 +} +// brush 236 +{ +( 640 1808 440 ) ( 640 1792 440 ) ( 640 1792 400 ) 16 0 0 0 1 1 +( 656 1792 440 ) ( 672 1792 440 ) ( 672 1792 400 ) 16 0 0 0 1 1 +( 672 1808 400 ) ( 656 1808 400 ) ( 656 1792 400 ) 16 0 0 0 1 1 +( 656 1792 464 ) ( 656 1808 464 ) ( 672 1808 464 ) 16 0 0 0 1 1 +( 672 1824 440 ) ( 656 1824 440 ) ( 656 1824 400 ) 16 0 0 0 1 1 +( 672 1792 440 ) ( 672 1808 440 ) ( 672 1808 400 ) 16 0 0 0 1 1 +} +// brush 237 +{ +( 224 1952 832 ) ( 224 1904 832 ) ( 224 1904 288 ) 11 0 0 0 1 1 +( 144 1904 832 ) ( 256 1904 832 ) ( 256 1904 288 ) 11 0 0 0 1 1 +( 256 1952 400 ) ( 144 1952 400 ) ( 144 1904 400 ) 11 0 0 0 1 1 +( 144 1904 656 ) ( 144 1952 656 ) ( 256 1952 656 ) 11 0 0 0 1 1 +( 256 2176 832 ) ( 144 2176 832 ) ( 144 2176 288 ) 11 0 0 0 1 1 +( 256 1904 832 ) ( 256 1952 832 ) ( 256 1952 288 ) 11 0 0 0 1 1 +} +// brush 238 +{ +( 480 2112 400 ) ( 480 2113 400 ) ( 480 2112 401 ) 6 0 0 0 1 1 +( 464 2112 400 ) ( 464 2112 401 ) ( 465 2112 400 ) 6 0 0 0 1 1 +( 464 2112 400 ) ( 465 2112 400 ) ( 464 2113 400 ) 6 0 0 0 1 1 +( 576 2160 624 ) ( 576 2161 624 ) ( 577 2160 624 ) 6 0 0 0 1 1 +( 576 2336 416 ) ( 577 2336 416 ) ( 576 2336 417 ) 6 0 0 0 1 1 +( 576 2160 416 ) ( 576 2160 417 ) ( 576 2161 416 ) 6 0 0 0 1 1 +} +// brush 239 +{ +( 1216 1776 832 ) ( 1216 1584 832 ) ( 1216 1584 288 ) 11 0 0 0 1 1 +( 1208 1792 832 ) ( 1304 1792 832 ) ( 1304 1792 288 ) 11 0 0 0 1 1 +( 1304 1776 400 ) ( 1208 1776 400 ) ( 1208 1584 400 ) 11 0 0 0 1 1 +( 1208 1584 784 ) ( 1208 1776 784 ) ( 1304 1776 784 ) 11 0 0 0 1 1 +( 1288 2176 832 ) ( 1208 2176 832 ) ( 1208 2176 288 ) 11 0 0 0 1 1 +( 1296 1584 832 ) ( 1296 1776 832 ) ( 1296 1776 288 ) 11 0 0 0 1 1 +} +// brush 240 +{ +( 928 2112 400 ) ( 928 2113 400 ) ( 928 2112 401 ) 6 0 0 0 1 1 +( 912 2112 400 ) ( 912 2112 401 ) ( 913 2112 400 ) 6 0 0 0 1 1 +( 912 2112 400 ) ( 913 2112 400 ) ( 912 2113 400 ) 6 0 0 0 1 1 +( 1024 2160 624 ) ( 1024 2161 624 ) ( 1025 2160 624 ) 6 0 0 0 1 1 +( 1024 2336 416 ) ( 1025 2336 416 ) ( 1024 2336 417 ) 6 0 0 0 1 1 +( 1024 2160 416 ) ( 1024 2160 417 ) ( 1024 2161 416 ) 6 0 0 0 1 1 +} +// brush 241 +{ +( 384 2112 400 ) ( 384 2113 400 ) ( 384 2112 401 ) 6 0 0 0 1 1 +( 368 2240 400 ) ( 368 2240 401 ) ( 369 2240 400 ) 6 0 0 0 1 1 +( 368 2112 400 ) ( 369 2112 400 ) ( 368 2113 400 ) 6 0 0 0 1 1 +( 480 2160 608 ) ( 480 2161 608 ) ( 481 2160 608 ) 6 0 0 0 1 1 +( 480 2272 416 ) ( 481 2272 416 ) ( 480 2272 417 ) 6 0 0 0 1 1 +( 480 2160 416 ) ( 480 2160 417 ) ( 480 2161 416 ) 6 0 0 0 1 1 +} +// brush 242 +{ +( 512 1680 320 ) ( 512 1681 320 ) ( 512 1680 321 ) 13 0 0 0 1 1 +( 512 1568 320 ) ( 512 1568 321 ) ( 513 1568 320 ) 13 0 0 0 1 1 +( 512 1680 320 ) ( 513 1680 320 ) ( 512 1681 320 ) 13 0 0 0 1 1 +( 688 1760 336 ) ( 688 1761 336 ) ( 689 1760 336 ) 13 0 0 0 1 1 +( 688 1760 336 ) ( 689 1760 336 ) ( 688 1760 337 ) 13 0 0 0 1 1 +( 992 1760 336 ) ( 992 1760 337 ) ( 992 1761 336 ) 13 0 0 0 1 1 +} +// brush 243 +{ +( 896 1584 384 ) ( 896 1568 384 ) ( 896 1568 368 ) 11 0 0 0 1 1 +( 528 1568 384 ) ( 552 1568 384 ) ( 552 1568 368 ) 11 0 0 0 1 1 +( 552 1584 336 ) ( 528 1584 336 ) ( 528 1568 336 ) 11 0 0 0 1 1 +( 528 1568 352 ) ( 528 1584 352 ) ( 552 1584 352 ) 11 0 0 0 1 1 +( 552 1632 384 ) ( 528 1632 384 ) ( 528 1632 368 ) 11 0 0 0 1 1 +( 992 1568 384 ) ( 992 1584 384 ) ( 992 1584 368 ) 11 0 0 0 1 1 +} +// brush 244 +{ +( 192 2784 464 ) ( 192 2785 464 ) ( 192 2784 465 ) 16 0 0 0 1 1 +( 192 2784 464 ) ( 192 2784 465 ) ( 193 2784 464 ) 16 0 0 0 1 1 +( 192 2784 464 ) ( 193 2784 464 ) ( 192 2785 464 ) 16 0 0 0 1 1 +( 224 2816 640 ) ( 224 2817 640 ) ( 225 2816 640 ) 16 0 0 0 1 1 +( 224 2816 480 ) ( 225 2816 480 ) ( 224 2816 481 ) 16 0 0 0 1 1 +( 224 2816 480 ) ( 224 2816 481 ) ( 224 2817 480 ) 16 0 0 0 1 1 +} +// brush 245 +{ +( 416 2784 464 ) ( 416 2785 464 ) ( 416 2784 465 ) 16 0 0 0 1 1 +( 416 2784 464 ) ( 416 2784 465 ) ( 417 2784 464 ) 16 0 0 0 1 1 +( 416 2784 464 ) ( 417 2784 464 ) ( 416 2785 464 ) 16 0 0 0 1 1 +( 448 2816 640 ) ( 448 2817 640 ) ( 449 2816 640 ) 16 0 0 0 1 1 +( 448 2816 480 ) ( 449 2816 480 ) ( 448 2816 481 ) 16 0 0 0 1 1 +( 448 2816 480 ) ( 448 2816 481 ) ( 448 2817 480 ) 16 0 0 0 1 1 +} +// brush 246 +{ +( 480 2720 752 ) ( 480 2624 752 ) ( 480 2624 448 ) 3 0 0 0 1 1 +( 496 2624 672 ) ( 512 2624 672 ) ( 512 2624 544 ) 3 0 0 0 1 1 +( 512 2704 576 ) ( 496 2704 576 ) ( 496 2624 576 ) 3 0 0 0 1 1 +( 496 2624 864 ) ( 496 2720 864 ) ( 512 2720 864 ) 3 0 0 0 1 1 +( 512 2752 672 ) ( 496 2752 672 ) ( 496 2752 544 ) 3 0 0 0 1 1 +( 512 2624 752 ) ( 512 2720 752 ) ( 512 2720 448 ) 3 0 0 0 1 1 +} +// brush 247 +{ +( 800 2640 768 ) ( 800 2641 768 ) ( 800 2640 769 ) 6 0 0 0 1 1 +( 752 2624 768 ) ( 752 2624 769 ) ( 753 2624 768 ) 6 0 0 0 1 1 +( 752 2640 768 ) ( 753 2640 768 ) ( 752 2641 768 ) 6 0 0 0 1 1 +( 912 2944 800 ) ( 912 2945 800 ) ( 913 2944 800 ) 6 0 0 0 1 1 +( 912 2944 784 ) ( 913 2944 784 ) ( 912 2944 785 ) 6 0 0 0 1 1 +( 928 2944 784 ) ( 928 2944 785 ) ( 928 2945 784 ) 6 0 0 0 1 1 +} +// brush 248 +{ +( 512 3296 864 ) ( 512 3088 864 ) ( 512 3088 848 ) 6 0 0 0 1 1 +( 528 3040 864 ) ( 592 3040 864 ) ( 592 3040 848 ) 6 0 0 0 1 1 +( 592 3296 800 ) ( 528 3296 800 ) ( 528 3088 800 ) 6 0 0 0 1 1 +( 528 3088 896 ) ( 528 3296 896 ) ( 592 3296 896 ) 6 0 0 0 1 1 +( 592 3296 864 ) ( 528 3296 864 ) ( 528 3296 848 ) 6 0 0 0 1 1 +( 608 3088 864 ) ( 608 3296 864 ) ( 608 3296 848 ) 6 0 0 0 1 1 +} +// brush 249 +{ +( 512 2624 800 ) ( 512 2625 800 ) ( 512 2624 801 ) 6 0 0 0 1 1 +( 512 2624 800 ) ( 512 2624 801 ) ( 513 2624 800 ) 6 0 0 0 1 1 +( 512 2624 800 ) ( 513 2624 800 ) ( 512 2625 800 ) 6 0 0 0 1 1 +( 800 2944 864 ) ( 800 2945 864 ) ( 801 2944 864 ) 6 0 0 0 1 1 +( 800 2944 816 ) ( 801 2944 816 ) ( 800 2944 817 ) 6 0 0 0 1 1 +( 800 2944 816 ) ( 800 2944 817 ) ( 800 2945 816 ) 6 0 0 0 1 1 +} +// brush 250 +{ +( 768 3056 480 ) ( 768 3057 480 ) ( 768 3056 481 ) 16 0 0 0 1 1 +( 752 3056 480 ) ( 752 3056 481 ) ( 753 3056 480 ) 16 0 0 0 1 1 +( 752 3056 576 ) ( 753 3056 576 ) ( 752 3057 576 ) 16 0 0 0 1 1 +( 800 3088 736 ) ( 800 3089 736 ) ( 801 3088 736 ) 16 0 0 0 1 1 +( 800 3104 496 ) ( 801 3104 496 ) ( 800 3104 497 ) 16 0 0 0 1 1 +( 832 3088 496 ) ( 832 3088 497 ) ( 832 3089 496 ) 16 0 0 0 1 1 +} +// brush 251 +{ +( 448 3208 512 ) ( 448 3208 528 ) ( 448 3144 528 ) 4 0 0 0 1 1 +( 456 3072 512 ) ( 456 3072 528 ) ( 520 3072 528 ) 4 0 0 0 1 1 +( 512 3208 496 ) ( 448 3208 496 ) ( 448 3144 496 ) 4 0 0 0 1 1 +( 448 3144 528 ) ( 448 3208 528 ) ( 512 3208 528 ) 4 0 0 0 1 1 +( 544 3456 512 ) ( 544 3456 528 ) ( 480 3456 528 ) 4 0 0 0 1 1 +( 608 3176 512 ) ( 608 3176 528 ) ( 608 3240 528 ) 4 0 0 0 1 1 +} +// brush 252 +{ +( 1056 3136 784 ) ( 1056 3088 784 ) ( 1056 3088 528 ) 3 0 0 0 1 1 +( 1120 2976 784 ) ( 1136 2976 784 ) ( 1136 2976 528 ) 3 0 0 0 1 1 +( 1136 3136 528 ) ( 1120 3136 528 ) ( 1120 3088 528 ) 3 0 0 0 1 1 +( 1120 3088 784 ) ( 1120 3136 784 ) ( 1136 3136 784 ) 3 0 0 0 1 1 +( 1136 3136 784 ) ( 1120 3136 784 ) ( 1120 3136 528 ) 3 0 0 0 1 1 +( 1168 3088 784 ) ( 1168 3136 784 ) ( 1168 3136 528 ) 3 0 0 0 1 1 +} +// brush 253 +{ +( 896 3248 720 ) ( 896 3249 720 ) ( 896 3248 721 ) 16 0 0 0 1 1 +( 1184 3232 720 ) ( 1184 3232 721 ) ( 1185 3232 720 ) 16 0 0 0 1 1 +( 1184 3248 704 ) ( 1185 3248 704 ) ( 1184 3249 704 ) 16 0 0 0 1 1 +( 1312 3296 832 ) ( 1312 3297 832 ) ( 1313 3296 832 ) 16 0 0 0 1 1 +( 1312 3296 736 ) ( 1313 3296 736 ) ( 1312 3296 737 ) 16 0 0 0 1 1 +( 1536 3296 736 ) ( 1536 3296 737 ) ( 1536 3297 736 ) 16 0 0 0 1 1 +} +// brush 254 +{ +( 896 144 848 ) ( 896 145 848 ) ( 896 144 849 ) 12 0 0 0 1 1 +( 1024 512 848 ) ( 1024 512 849 ) ( 1025 512 848 ) 12 0 0 0 1 1 +( 1024 144 832 ) ( 1025 144 832 ) ( 1024 145 832 ) 12 0 0 0 1 1 +( 1376 1248 864 ) ( 1376 1249 864 ) ( 1377 1248 864 ) 12 0 0 0 1 1 +( 1376 1248 864 ) ( 1377 1248 864 ) ( 1376 1248 865 ) 12 0 0 0 1 1 +( 1376 1248 864 ) ( 1376 1248 865 ) ( 1376 1249 864 ) 12 0 0 0 1 1 +} +// brush 255 +{ +( 928 128 816 ) ( 928 129 816 ) ( 928 128 817 ) 6 0 0 0 1 1 +( 928 32 816 ) ( 928 32 817 ) ( 929 32 816 ) 6 0 0 0 1 1 +( 928 128 816 ) ( 929 128 816 ) ( 928 129 816 ) 6 0 0 0 1 1 +( 1280 704 832 ) ( 1280 705 832 ) ( 1281 704 832 ) 6 0 0 0 1 1 +( 1280 512 832 ) ( 1281 512 832 ) ( 1280 512 833 ) 6 0 0 0 1 1 +( 1280 704 832 ) ( 1280 704 833 ) ( 1280 705 832 ) 6 0 0 0 1 1 +} +// brush 256 +{ +( 32 3136 496 ) ( 32 3137 496 ) ( 32 3136 497 ) 14 0 0 0 1 1 +( 32 3168 496 ) ( 32 3168 497 ) ( 33 3168 496 ) 14 0 0 0 1 1 +( 32 3136 496 ) ( 33 3136 496 ) ( 32 3137 496 ) 14 0 0 0 1 1 +( 112 3200 528 ) ( 112 3201 528 ) ( 113 3200 528 ) 14 0 0 0 1 1 +( 112 3200 512 ) ( 113 3200 512 ) ( 112 3200 513 ) 14 0 0 0 1 1 +( 64 3200 512 ) ( 64 3200 513 ) ( 64 3201 512 ) 14 0 0 0 1 1 +} +// brush 257 +{ +( 32 3104 496 ) ( 32 3105 496 ) ( 32 3104 497 ) 14 0 0 0 1 1 +( 32 3136 496 ) ( 32 3136 497 ) ( 33 3136 496 ) 14 0 0 0 1 1 +( 32 3104 496 ) ( 33 3104 496 ) ( 32 3105 496 ) 14 0 0 0 1 1 +( 112 3168 560 ) ( 112 3169 560 ) ( 113 3168 560 ) 14 0 0 0 1 1 +( 112 3168 512 ) ( 113 3168 512 ) ( 112 3168 513 ) 14 0 0 0 1 1 +( 96 3168 512 ) ( 96 3168 513 ) ( 96 3169 512 ) 14 0 0 0 1 1 +} +// brush 258 +{ +( 32 3040 496 ) ( 32 3041 496 ) ( 32 3040 497 ) 14 0 0 0 1 1 +( 32 3072 496 ) ( 32 3072 497 ) ( 33 3072 496 ) 14 0 0 0 1 1 +( 32 3040 496 ) ( 33 3040 496 ) ( 32 3041 496 ) 14 0 0 0 1 1 +( 112 3104 592 ) ( 112 3105 592 ) ( 113 3104 592 ) 14 0 0 0 1 1 +( 112 3104 512 ) ( 113 3104 512 ) ( 112 3104 513 ) 14 0 0 0 1 1 +( 64 3104 512 ) ( 64 3104 513 ) ( 64 3105 512 ) 14 0 0 0 1 1 +} +// brush 259 +{ +( 992 2560 432 ) ( 992 2561 432 ) ( 992 2560 433 ) 8 0 0 0 1 1 +( 992 2560 432 ) ( 992 2560 433 ) ( 993 2560 432 ) 8 0 0 0 1 1 +( 992 2560 432 ) ( 993 2560 432 ) ( 992 2561 432 ) 8 0 0 0 1 1 +( 1024 2592 464 ) ( 1024 2593 464 ) ( 1025 2592 464 ) 8 0 0 0 1 1 +( 1024 2592 448 ) ( 1025 2592 448 ) ( 1024 2592 449 ) 8 0 0 0 1 1 +( 1024 2592 448 ) ( 1024 2592 449 ) ( 1024 2593 448 ) 8 0 0 0 1 1 +} +// brush 260 +{ +( 672 3184 560 ) ( 672 3128 560 ) ( 672 3128 544 ) 16 0 0 0 1 1 +( 600 2992 560 ) ( 632 2992 560 ) ( 632 2992 544 ) 16 0 0 0 1 1 +( 640 3184 544 ) ( 608 3184 544 ) ( 608 3128 544 ) 16 0 0 0 1 1 +( 608 3128 560 ) ( 608 3184 560 ) ( 640 3184 560 ) 16 0 0 0 1 1 +( 648 3264 560 ) ( 616 3264 560 ) ( 616 3264 544 ) 16 0 0 0 1 1 +( 912 3128 560 ) ( 912 3184 560 ) ( 912 3184 544 ) 16 0 0 0 1 1 +} +// brush 261 +{ +( 576 3088 416 ) ( 576 3040 416 ) ( 576 3040 400 ) 6 0 0 0 1 1 +( 720 2976 304 ) ( 720 2976 656 ) ( 736 2976 656 ) 6 0 0 0 1 1 +( 848 3088 496 ) ( 624 3088 496 ) ( 624 3040 496 ) 6 0 0 0 1 1 +( 736 3056 544 ) ( 720 3056 544 ) ( 720 3072 544 ) 6 0 0 0 1 1 +( 736 3072 304 ) ( 736 3072 656 ) ( 720 3072 656 ) 6 0 0 0 1 1 +( 1120 3056 304 ) ( 1120 3056 656 ) ( 1120 3072 656 ) 6 0 0 0 1 1 +} +// brush 262 +{ +( 2048 2256 272 ) ( 2048 2256 304 ) ( 2048 2224 304 ) 7 0 0 0 1 1 +( 2048 2112 336 ) ( 2064 2112 336 ) ( 2064 2112 16 ) 7 0 0 0 1 1 +( 2064 2240 16 ) ( 2048 2240 16 ) ( 2048 2120 16 ) 7 0 0 0 1 1 +( 2048 2120 352 ) ( 2048 2240 352 ) ( 2064 2240 352 ) 7 0 0 0 1 1 +( 2064 2304 336 ) ( 2048 2304 336 ) ( 2048 2304 16 ) 7 0 0 0 1 1 +( 2080 2120 336 ) ( 2080 2240 336 ) ( 2080 2240 16 ) 7 0 0 0 1 1 +} +// brush 263 +{ +( 1536 2752 96 ) ( 1536 2753 96 ) ( 1536 2752 97 ) 16 0 0 0 1 1 +( 1536 2752 96 ) ( 1536 2752 97 ) ( 1537 2752 96 ) 16 0 0 0 1 1 +( 1536 2752 96 ) ( 1537 2752 96 ) ( 1536 2753 96 ) 16 0 0 0 1 1 +( 1632 2816 384 ) ( 1632 2817 384 ) ( 1633 2816 384 ) 16 0 0 0 1 1 +( 1632 2816 112 ) ( 1633 2816 112 ) ( 1632 2816 113 ) 16 0 0 0 1 1 +( 1632 2816 112 ) ( 1632 2816 113 ) ( 1632 2817 112 ) 16 0 0 0 1 1 +} +// brush 264 +{ +( 1248 3072 784 ) ( 1248 3048 784 ) ( 1248 3048 368 ) 7 0 0 0 1 1 +( 1616 2848 784 ) ( 1632 2848 784 ) ( 1632 2848 368 ) 7 0 0 0 1 1 +( 1632 2872 384 ) ( 1616 2872 384 ) ( 1616 2848 384 ) 7 0 0 0 1 1 +( 1616 2848 496 ) ( 1616 2872 496 ) ( 1632 2872 496 ) 7 0 0 0 1 1 +( 1296 3072 784 ) ( 1280 3072 784 ) ( 1280 3072 368 ) 7 0 0 0 1 1 +( 1632 2848 784 ) ( 1632 2872 784 ) ( 1632 2872 368 ) 7 0 0 0 1 1 +} +// brush 265 +{ +( 1344 2336 352 ) ( 1344 2112 352 ) ( 1344 2112 336 ) 7 0 0 0 1 1 +( 1360 2112 352 ) ( 1840 2112 352 ) ( 1840 2112 336 ) 7 0 0 0 1 1 +( 1840 2112 352 ) ( 1840 2336 352 ) ( 1360 2336 352 ) 7 0 0 0 1 1 +( 1360 2336 896 ) ( 1840 2336 896 ) ( 1840 2112 896 ) 7 0 0 0 1 1 +( 1840 2304 336 ) ( 1840 2304 352 ) ( 1360 2304 352 ) 7 0 0 0 1 1 +( 1824 2112 352 ) ( 1824 2336 352 ) ( 1824 2336 336 ) 7 0 0 0 1 1 +} +// brush 266 +{ +( 1856 2912 304 ) ( 1856 2913 304 ) ( 1856 2912 305 ) 8 0 0 0 1 1 +( 1856 2912 304 ) ( 1856 2912 305 ) ( 1857 2912 304 ) 8 0 0 0 1 1 +( 1856 2912 304 ) ( 1857 2912 304 ) ( 1856 2913 304 ) 8 0 0 0 1 1 +( 1888 2944 336 ) ( 1888 2945 336 ) ( 1889 2944 336 ) 8 0 0 0 1 1 +( 1888 2944 320 ) ( 1889 2944 320 ) ( 1888 2944 321 ) 8 0 0 0 1 1 +( 1888 2944 320 ) ( 1888 2944 321 ) ( 1888 2945 320 ) 8 0 0 0 1 1 +} +// brush 267 +{ +( 1856 2464 384 ) ( 1856 2465 384 ) ( 1856 2464 385 ) 8 0 0 0 1 1 +( 1856 2464 384 ) ( 1856 2464 385 ) ( 1857 2464 384 ) 8 0 0 0 1 1 +( 1856 2464 384 ) ( 1857 2464 384 ) ( 1856 2465 384 ) 8 0 0 0 1 1 +( 1888 2496 416 ) ( 1888 2497 416 ) ( 1889 2496 416 ) 8 0 0 0 1 1 +( 1888 2496 400 ) ( 1889 2496 400 ) ( 1888 2496 401 ) 8 0 0 0 1 1 +( 1888 2496 400 ) ( 1888 2496 401 ) ( 1888 2497 400 ) 8 0 0 0 1 1 +} +// brush 268 +{ +( 1408 2448 448 ) ( 1408 2449 448 ) ( 1408 2448 449 ) 8 0 0 0 1 1 +( 1408 2464 448 ) ( 1408 2464 449 ) ( 1409 2464 448 ) 8 0 0 0 1 1 +( 1408 2448 448 ) ( 1409 2448 448 ) ( 1408 2449 448 ) 8 0 0 0 1 1 +( 1440 2496 480 ) ( 1440 2497 480 ) ( 1441 2496 480 ) 8 0 0 0 1 1 +( 1440 2496 464 ) ( 1441 2496 464 ) ( 1440 2496 465 ) 8 0 0 0 1 1 +( 1440 2496 464 ) ( 1440 2496 465 ) ( 1440 2497 464 ) 8 0 0 0 1 1 +} +// brush 269 +{ +( 1824 2464 96 ) ( 1824 2465 96 ) ( 1824 2464 97 ) 16 0 0 0 1 1 +( 1824 2464 96 ) ( 1824 2464 97 ) ( 1825 2464 96 ) 16 0 0 0 1 1 +( 1824 2464 96 ) ( 1825 2464 96 ) ( 1824 2465 96 ) 16 0 0 0 1 1 +( 1888 2528 368 ) ( 1888 2529 368 ) ( 1889 2528 368 ) 16 0 0 0 1 1 +( 1888 2528 112 ) ( 1889 2528 112 ) ( 1888 2528 113 ) 16 0 0 0 1 1 +( 1888 2528 112 ) ( 1888 2528 113 ) ( 1888 2529 112 ) 16 0 0 0 1 1 +} +// brush 270 +{ +( 1824 2880 96 ) ( 1824 2881 96 ) ( 1824 2880 97 ) 16 0 0 0 1 1 +( 1840 2880 96 ) ( 1840 2880 97 ) ( 1841 2880 96 ) 16 0 0 0 1 1 +( 1840 2880 96 ) ( 1841 2880 96 ) ( 1840 2881 96 ) 16 0 0 0 1 1 +( 1888 2944 288 ) ( 1888 2945 288 ) ( 1889 2944 288 ) 16 0 0 0 1 1 +( 1888 2944 112 ) ( 1889 2944 112 ) ( 1888 2944 113 ) 16 0 0 0 1 1 +( 1888 2944 112 ) ( 1888 2944 113 ) ( 1888 2945 112 ) 16 0 0 0 1 1 +} +// brush 271 +{ +( 1408 2880 96 ) ( 1408 2881 96 ) ( 1408 2880 97 ) 16 0 0 0 1 1 +( 1408 2880 96 ) ( 1408 2880 97 ) ( 1409 2880 96 ) 16 0 0 0 1 1 +( 1408 2880 96 ) ( 1409 2880 96 ) ( 1408 2881 96 ) 16 0 0 0 1 1 +( 1472 2944 240 ) ( 1472 2945 240 ) ( 1473 2944 240 ) 16 0 0 0 1 1 +( 1472 2944 112 ) ( 1473 2944 112 ) ( 1472 2944 113 ) 16 0 0 0 1 1 +( 1472 2944 112 ) ( 1472 2944 113 ) ( 1472 2945 112 ) 16 0 0 0 1 1 +} +// brush 272 +{ +( 1408 2912 256 ) ( 1408 2913 256 ) ( 1408 2912 257 ) 8 0 0 0 1 1 +( 1408 2912 256 ) ( 1408 2912 257 ) ( 1409 2912 256 ) 8 0 0 0 1 1 +( 1408 2912 256 ) ( 1409 2912 256 ) ( 1408 2913 256 ) 8 0 0 0 1 1 +( 1440 2944 288 ) ( 1440 2945 288 ) ( 1441 2944 288 ) 8 0 0 0 1 1 +( 1440 2944 272 ) ( 1441 2944 272 ) ( 1440 2944 273 ) 8 0 0 0 1 1 +( 1440 2944 272 ) ( 1440 2944 273 ) ( 1440 2945 272 ) 8 0 0 0 1 1 +} +// brush 273 +{ +( 1632 2624 128 ) ( 1632 2528 128 ) ( 1632 2528 112 ) 9 0 0 0 1 1 +( 1632 2528 128 ) ( 1648 2528 128 ) ( 1648 2528 112 ) 9 0 0 0 1 1 +( 1648 2624 96 ) ( 1632 2624 96 ) ( 1632 2528 96 ) 9 0 0 0 1 1 +( 1632 2528 128 ) ( 1632 2624 128 ) ( 1648 2624 128 ) 9 0 0 0 1 1 +( 1648 2624 128 ) ( 1632 2624 128 ) ( 1632 2624 112 ) 9 0 0 0 1 1 +( 1664 2528 128 ) ( 1664 2624 128 ) ( 1664 2624 112 ) 9 0 0 0 1 1 +} +// brush 274 +{ +( 832 1088 608 ) ( 832 1089 608 ) ( 832 1088 609 ) 6 0 0 0 1 1 +( 832 1088 608 ) ( 832 1088 609 ) ( 833 1088 608 ) 6 0 0 0 1 1 +( 832 1088 624 ) ( 833 1088 624 ) ( 832 1089 624 ) 6 0 0 0 1 1 +( 896 1120 832 ) ( 896 1121 832 ) ( 897 1120 832 ) 6 0 0 0 1 1 +( 896 1120 640 ) ( 897 1120 640 ) ( 896 1120 641 ) 6 0 0 0 1 1 +( 928 1120 640 ) ( 928 1120 641 ) ( 928 1121 640 ) 6 0 0 0 1 1 +} +// brush 275 +{ +( 864 928 624 ) ( 864 929 624 ) ( 864 928 625 ) 6 0 0 0 1 1 +( 864 960 624 ) ( 864 960 625 ) ( 865 960 624 ) 6 0 0 0 1 1 +( 864 928 624 ) ( 865 928 624 ) ( 864 929 624 ) 6 0 0 0 1 1 +( 928 992 832 ) ( 928 993 832 ) ( 929 992 832 ) 6 0 0 0 1 1 +( 928 992 640 ) ( 929 992 640 ) ( 928 992 641 ) 6 0 0 0 1 1 +( 928 992 640 ) ( 928 992 641 ) ( 928 993 640 ) 6 0 0 0 1 1 +} +// brush 276 +{ +( 1632 2560 480 ) ( 1632 2432 480 ) ( 1632 2432 400 ) 9 0 0 0 1 1 +( 1600 2464 480 ) ( 1728 2464 480 ) ( 1728 2464 400 ) 9 0 0 0 1 1 +( 1728 2560 400 ) ( 1600 2560 400 ) ( 1600 2432 400 ) 9 0 0 0 1 1 +( 1600 2432 416 ) ( 1600 2560 416 ) ( 1728 2560 416 ) 9 0 0 0 1 1 +( 1728 2528 480 ) ( 1600 2528 480 ) ( 1600 2528 400 ) 9 0 0 0 1 1 +( 1728 2432 480 ) ( 1728 2560 480 ) ( 1728 2560 400 ) 9 0 0 0 1 1 +} +// brush 277 +{ +( 1568 2560 496 ) ( 1568 2432 496 ) ( 1568 2432 416 ) 9 0 0 0 1 1 +( 1536 2464 496 ) ( 1664 2464 496 ) ( 1664 2464 416 ) 9 0 0 0 1 1 +( 1664 2560 416 ) ( 1536 2560 416 ) ( 1536 2432 416 ) 9 0 0 0 1 1 +( 1536 2432 432 ) ( 1536 2560 432 ) ( 1664 2560 432 ) 9 0 0 0 1 1 +( 1664 2528 496 ) ( 1536 2528 496 ) ( 1536 2528 416 ) 9 0 0 0 1 1 +( 1664 2432 496 ) ( 1664 2560 496 ) ( 1664 2560 416 ) 9 0 0 0 1 1 +} +// brush 278 +{ +( 1408 2664 528 ) ( 1408 2536 528 ) ( 1408 2536 448 ) 9 0 0 0 1 1 +( 1392 2560 528 ) ( 1520 2560 528 ) ( 1520 2560 448 ) 9 0 0 0 1 1 +( 1520 2656 448 ) ( 1392 2656 448 ) ( 1392 2528 448 ) 9 0 0 0 1 1 +( 1392 2528 464 ) ( 1392 2656 464 ) ( 1520 2656 464 ) 9 0 0 0 1 1 +( 1520 2624 528 ) ( 1392 2624 528 ) ( 1392 2624 448 ) 9 0 0 0 1 1 +( 1504 2528 528 ) ( 1504 2656 528 ) ( 1504 2656 448 ) 9 0 0 0 1 1 +} +// brush 279 +{ +( 1408 2760 576 ) ( 1408 2632 576 ) ( 1408 2632 496 ) 9 0 0 0 1 1 +( 1392 2656 576 ) ( 1520 2656 576 ) ( 1520 2656 496 ) 9 0 0 0 1 1 +( 1520 2752 496 ) ( 1392 2752 496 ) ( 1392 2624 496 ) 9 0 0 0 1 1 +( 1392 2624 512 ) ( 1392 2752 512 ) ( 1520 2752 512 ) 9 0 0 0 1 1 +( 1520 2720 576 ) ( 1392 2720 576 ) ( 1392 2720 496 ) 9 0 0 0 1 1 +( 1504 2624 576 ) ( 1504 2752 576 ) ( 1504 2752 496 ) 9 0 0 0 1 1 +} +// brush 280 +{ +( 1408 2728 560 ) ( 1408 2600 560 ) ( 1408 2600 480 ) 9 0 0 0 1 1 +( 1392 2624 560 ) ( 1520 2624 560 ) ( 1520 2624 480 ) 9 0 0 0 1 1 +( 1520 2720 480 ) ( 1392 2720 480 ) ( 1392 2592 480 ) 9 0 0 0 1 1 +( 1392 2592 496 ) ( 1392 2720 496 ) ( 1520 2720 496 ) 9 0 0 0 1 1 +( 1520 2688 560 ) ( 1392 2688 560 ) ( 1392 2688 480 ) 9 0 0 0 1 1 +( 1504 2592 560 ) ( 1504 2720 560 ) ( 1504 2720 480 ) 9 0 0 0 1 1 +} +// brush 281 +{ +( 1408 2696 544 ) ( 1408 2568 544 ) ( 1408 2568 464 ) 9 0 0 0 1 1 +( 1392 2592 544 ) ( 1520 2592 544 ) ( 1520 2592 464 ) 9 0 0 0 1 1 +( 1520 2688 464 ) ( 1392 2688 464 ) ( 1392 2560 464 ) 9 0 0 0 1 1 +( 1392 2560 480 ) ( 1392 2688 480 ) ( 1520 2688 480 ) 9 0 0 0 1 1 +( 1520 2656 544 ) ( 1392 2656 544 ) ( 1392 2656 464 ) 9 0 0 0 1 1 +( 1504 2560 544 ) ( 1504 2688 544 ) ( 1504 2688 464 ) 9 0 0 0 1 1 +} +// brush 282 +{ +( 1696 2560 464 ) ( 1696 2432 464 ) ( 1696 2432 384 ) 9 0 0 0 1 1 +( 1664 2464 464 ) ( 1792 2464 464 ) ( 1792 2464 384 ) 9 0 0 0 1 1 +( 1792 2560 384 ) ( 1664 2560 384 ) ( 1664 2432 384 ) 9 0 0 0 1 1 +( 1664 2432 400 ) ( 1664 2560 400 ) ( 1792 2560 400 ) 9 0 0 0 1 1 +( 1792 2528 464 ) ( 1664 2528 464 ) ( 1664 2528 384 ) 9 0 0 0 1 1 +( 1792 2432 464 ) ( 1792 2560 464 ) ( 1792 2560 384 ) 9 0 0 0 1 1 +} +// brush 283 +{ +( 1824 2688 432 ) ( 1824 2560 432 ) ( 1824 2560 352 ) 9 0 0 0 1 1 +( 1792 2528 432 ) ( 1920 2528 432 ) ( 1920 2528 352 ) 9 0 0 0 1 1 +( 1920 2688 352 ) ( 1792 2688 352 ) ( 1792 2560 352 ) 9 0 0 0 1 1 +( 1792 2560 368 ) ( 1792 2688 368 ) ( 1920 2688 368 ) 9 0 0 0 1 1 +( 1920 2624 432 ) ( 1792 2624 432 ) ( 1792 2624 352 ) 9 0 0 0 1 1 +( 1888 2560 432 ) ( 1888 2688 432 ) ( 1888 2688 352 ) 9 0 0 0 1 1 +} +// brush 284 +{ +( 1824 2752 416 ) ( 1824 2624 416 ) ( 1824 2624 336 ) 9 0 0 0 1 1 +( 1792 2592 416 ) ( 1920 2592 416 ) ( 1920 2592 336 ) 9 0 0 0 1 1 +( 1920 2752 336 ) ( 1792 2752 336 ) ( 1792 2624 336 ) 9 0 0 0 1 1 +( 1792 2624 352 ) ( 1792 2752 352 ) ( 1920 2752 352 ) 9 0 0 0 1 1 +( 1920 2688 416 ) ( 1792 2688 416 ) ( 1792 2688 336 ) 9 0 0 0 1 1 +( 1888 2624 416 ) ( 1888 2752 416 ) ( 1888 2752 336 ) 9 0 0 0 1 1 +} +// brush 285 +{ +( 1824 2816 400 ) ( 1824 2688 400 ) ( 1824 2688 320 ) 9 0 0 0 1 1 +( 1792 2656 400 ) ( 1920 2656 400 ) ( 1920 2656 320 ) 9 0 0 0 1 1 +( 1920 2816 320 ) ( 1792 2816 320 ) ( 1792 2688 320 ) 9 0 0 0 1 1 +( 1792 2688 336 ) ( 1792 2816 336 ) ( 1920 2816 336 ) 9 0 0 0 1 1 +( 1920 2752 400 ) ( 1792 2752 400 ) ( 1792 2752 320 ) 9 0 0 0 1 1 +( 1888 2688 400 ) ( 1888 2816 400 ) ( 1888 2816 320 ) 9 0 0 0 1 1 +} +// brush 286 +{ +( 1824 2880 384 ) ( 1824 2752 384 ) ( 1824 2752 304 ) 9 0 0 0 1 1 +( 1792 2720 384 ) ( 1920 2720 384 ) ( 1920 2720 304 ) 9 0 0 0 1 1 +( 1920 2880 304 ) ( 1792 2880 304 ) ( 1792 2752 304 ) 9 0 0 0 1 1 +( 1792 2752 320 ) ( 1792 2880 320 ) ( 1920 2880 320 ) 9 0 0 0 1 1 +( 1920 2816 384 ) ( 1792 2816 384 ) ( 1792 2816 304 ) 9 0 0 0 1 1 +( 1888 2752 384 ) ( 1888 2880 384 ) ( 1888 2880 304 ) 9 0 0 0 1 1 +} +// brush 287 +{ +( 1632 2960 352 ) ( 1632 2832 352 ) ( 1632 2832 272 ) 9 0 0 0 1 1 +( 1760 2880 352 ) ( 1888 2880 352 ) ( 1888 2880 272 ) 9 0 0 0 1 1 +( 1888 2960 272 ) ( 1760 2960 272 ) ( 1760 2832 272 ) 9 0 0 0 1 1 +( 1760 2832 288 ) ( 1760 2960 288 ) ( 1888 2960 288 ) 9 0 0 0 1 1 +( 1888 2944 352 ) ( 1760 2944 352 ) ( 1760 2944 272 ) 9 0 0 0 1 1 +( 1824 2832 352 ) ( 1824 2960 352 ) ( 1824 2960 272 ) 9 0 0 0 1 1 +} +// brush 288 +{ +( 1472 2960 336 ) ( 1472 2832 336 ) ( 1472 2832 256 ) 9 0 0 0 1 1 +( 1600 2880 336 ) ( 1728 2880 336 ) ( 1728 2880 256 ) 9 0 0 0 1 1 +( 1728 2960 256 ) ( 1600 2960 256 ) ( 1600 2832 256 ) 9 0 0 0 1 1 +( 1600 2832 272 ) ( 1600 2960 272 ) ( 1728 2960 272 ) 9 0 0 0 1 1 +( 1728 2944 336 ) ( 1600 2944 336 ) ( 1600 2944 256 ) 9 0 0 0 1 1 +( 1664 2832 336 ) ( 1664 2960 336 ) ( 1664 2960 256 ) 9 0 0 0 1 1 +} +// brush 289 +{ +( 1408 2928 304 ) ( 1408 2800 304 ) ( 1408 2800 224 ) 9 0 0 0 1 1 +( 1392 2752 304 ) ( 1520 2752 304 ) ( 1520 2752 224 ) 9 0 0 0 1 1 +( 1520 2928 224 ) ( 1392 2928 224 ) ( 1392 2800 224 ) 9 0 0 0 1 1 +( 1392 2800 240 ) ( 1392 2928 240 ) ( 1520 2928 240 ) 9 0 0 0 1 1 +( 1520 2880 304 ) ( 1392 2880 304 ) ( 1392 2880 224 ) 9 0 0 0 1 1 +( 1472 2800 304 ) ( 1472 2928 304 ) ( 1472 2928 224 ) 9 0 0 0 1 1 +} +// brush 290 +{ +( 1408 2832 288 ) ( 1408 2704 288 ) ( 1408 2704 208 ) 9 0 0 0 1 1 +( 1392 2656 288 ) ( 1520 2656 288 ) ( 1520 2656 208 ) 9 0 0 0 1 1 +( 1520 2832 208 ) ( 1392 2832 208 ) ( 1392 2704 208 ) 9 0 0 0 1 1 +( 1392 2704 224 ) ( 1392 2832 224 ) ( 1520 2832 224 ) 9 0 0 0 1 1 +( 1520 2784 288 ) ( 1392 2784 288 ) ( 1392 2784 208 ) 9 0 0 0 1 1 +( 1472 2704 288 ) ( 1472 2832 288 ) ( 1472 2832 208 ) 9 0 0 0 1 1 +} +// brush 291 +{ +( 1408 2736 272 ) ( 1408 2608 272 ) ( 1408 2608 192 ) 9 0 0 0 1 1 +( 1392 2560 272 ) ( 1520 2560 272 ) ( 1520 2560 192 ) 9 0 0 0 1 1 +( 1520 2736 192 ) ( 1392 2736 192 ) ( 1392 2608 192 ) 9 0 0 0 1 1 +( 1392 2608 208 ) ( 1392 2736 208 ) ( 1520 2736 208 ) 9 0 0 0 1 1 +( 1520 2688 272 ) ( 1392 2688 272 ) ( 1392 2688 192 ) 9 0 0 0 1 1 +( 1472 2608 272 ) ( 1472 2736 272 ) ( 1472 2736 192 ) 9 0 0 0 1 1 +} +// brush 292 +{ +( 1248 3088 784 ) ( 1248 3072 784 ) ( 1248 3072 80 ) 6 0 0 0 1 1 +( 1984 3072 784 ) ( 2008 3072 784 ) ( 2008 3072 80 ) 6 0 0 0 1 1 +( 2008 3088 80 ) ( 1984 3088 80 ) ( 1984 3072 80 ) 6 0 0 0 1 1 +( 1984 3072 384 ) ( 1984 3088 384 ) ( 2008 3088 384 ) 6 0 0 0 1 1 +( 2008 3104 784 ) ( 1984 3104 784 ) ( 1984 3104 80 ) 6 0 0 0 1 1 +( 1568 3072 784 ) ( 1568 3088 784 ) ( 1568 3088 80 ) 6 0 0 0 1 1 +} +// brush 293 +{ +( 1696 2192 784 ) ( 1696 2176 784 ) ( 1696 2176 304 ) 16 0 0 270 1 -1 +( 1696 2112 784 ) ( 1760 2112 784 ) ( 1760 2112 304 ) 16 0 0 270 1 -1 +( 1760 2176 96 ) ( 1760 2192 96 ) ( 1696 2192 96 ) 16 0 0 270 1 -1 +( 1696 2192 336 ) ( 1760 2192 336 ) ( 1760 2176 336 ) 16 0 0 270 1 -1 +( 1760 2144 784 ) ( 1696 2144 784 ) ( 1696 2144 304 ) 16 0 0 270 1 -1 +( 1760 2176 784 ) ( 1760 2192 784 ) ( 1760 2192 304 ) 16 0 0 270 1 -1 +} +// brush 294 +{ +( 1536 2192 784 ) ( 1536 2176 784 ) ( 1536 2176 304 ) 16 0 0 270 1 -1 +( 1536 2112 784 ) ( 1600 2112 784 ) ( 1600 2112 304 ) 16 0 0 270 1 -1 +( 1600 2176 96 ) ( 1600 2192 96 ) ( 1536 2192 96 ) 16 0 0 270 1 -1 +( 1536 2192 336 ) ( 1600 2192 336 ) ( 1600 2176 336 ) 16 0 0 270 1 -1 +( 1600 2144 784 ) ( 1536 2144 784 ) ( 1536 2144 304 ) 16 0 0 270 1 -1 +( 1600 2176 784 ) ( 1600 2192 784 ) ( 1600 2192 304 ) 16 0 0 270 1 -1 +} +// brush 295 +{ +( 1344 2160 96 ) ( 1344 2161 96 ) ( 1344 2160 97 ) 16 0 0 0 1 1 +( 1344 2176 96 ) ( 1344 2176 97 ) ( 1345 2176 96 ) 16 0 0 0 1 1 +( 1344 2160 96 ) ( 1345 2160 96 ) ( 1344 2161 96 ) 16 0 0 0 1 1 +( 1376 2208 320 ) ( 1376 2209 320 ) ( 1377 2208 320 ) 16 0 0 0 1 1 +( 1376 2208 112 ) ( 1377 2208 112 ) ( 1376 2208 113 ) 16 0 0 0 1 1 +( 1376 2208 112 ) ( 1376 2208 113 ) ( 1376 2209 112 ) 16 0 0 0 1 1 +} +// brush 296 +{ +( 2016 2176 112 ) ( 2016 2177 112 ) ( 2016 2176 113 ) 16 0 0 0 1 1 +( 2016 2176 112 ) ( 2016 2176 113 ) ( 2017 2176 112 ) 16 0 0 0 1 1 +( 2016 2176 96 ) ( 2017 2176 96 ) ( 2016 2177 96 ) 16 0 0 0 1 1 +( 2048 2208 320 ) ( 2048 2209 320 ) ( 2049 2208 320 ) 16 0 0 0 1 1 +( 2048 2208 128 ) ( 2049 2208 128 ) ( 2048 2208 129 ) 16 0 0 0 1 1 +( 2048 2208 128 ) ( 2048 2208 129 ) ( 2048 2209 128 ) 16 0 0 0 1 1 +} +// brush 297 +{ +( 1856 1888 224 ) ( 1856 1856 224 ) ( 1856 1856 208 ) 4 0 0 0 1 1 +( 1968 1824 224 ) ( 1984 1824 224 ) ( 1984 1824 208 ) 4 0 0 0 1 1 +( 1984 1856 192 ) ( 1984 1888 192 ) ( 1968 1888 192 ) 4 0 0 0 1 1 +( 1968 1888 208 ) ( 1984 1888 208 ) ( 1984 1856 208 ) 4 0 0 0 1 1 +( 1984 1888 224 ) ( 1968 1888 224 ) ( 1968 1888 208 ) 4 0 0 0 1 1 +( 2016 1856 224 ) ( 2016 1888 224 ) ( 2016 1888 208 ) 4 0 0 0 1 1 +} +// brush 298 +{ +( 1856 1824 240 ) ( 1856 1792 240 ) ( 1856 1792 224 ) 4 0 0 0 1 1 +( 1968 1760 240 ) ( 1984 1760 240 ) ( 1984 1760 224 ) 4 0 0 0 1 1 +( 1984 1792 208 ) ( 1984 1824 208 ) ( 1968 1824 208 ) 4 0 0 0 1 1 +( 1968 1824 224 ) ( 1984 1824 224 ) ( 1984 1792 224 ) 4 0 0 0 1 1 +( 1984 1824 240 ) ( 1968 1824 240 ) ( 1968 1824 224 ) 4 0 0 0 1 1 +( 2016 1792 240 ) ( 2016 1824 240 ) ( 2016 1824 224 ) 4 0 0 0 1 1 +} +// brush 299 +{ +( 1856 1760 256 ) ( 1856 1728 256 ) ( 1856 1728 240 ) 4 0 0 0 1 1 +( 1968 1696 256 ) ( 1984 1696 256 ) ( 1984 1696 240 ) 4 0 0 0 1 1 +( 1984 1728 224 ) ( 1984 1760 224 ) ( 1968 1760 224 ) 4 0 0 0 1 1 +( 1968 1760 240 ) ( 1984 1760 240 ) ( 1984 1728 240 ) 4 0 0 0 1 1 +( 1984 1760 256 ) ( 1968 1760 256 ) ( 1968 1760 240 ) 4 0 0 0 1 1 +( 2016 1728 256 ) ( 2016 1760 256 ) ( 2016 1760 240 ) 4 0 0 0 1 1 +} +// brush 300 +{ +( 1856 1696 272 ) ( 1856 1664 272 ) ( 1856 1664 256 ) 4 0 0 0 1 1 +( 1968 1632 272 ) ( 1984 1632 272 ) ( 1984 1632 256 ) 4 0 0 0 1 1 +( 1984 1664 240 ) ( 1984 1696 240 ) ( 1968 1696 240 ) 4 0 0 0 1 1 +( 1968 1696 256 ) ( 1984 1696 256 ) ( 1984 1664 256 ) 4 0 0 0 1 1 +( 1984 1696 272 ) ( 1968 1696 272 ) ( 1968 1696 256 ) 4 0 0 0 1 1 +( 2016 1664 272 ) ( 2016 1696 272 ) ( 2016 1696 256 ) 4 0 0 0 1 1 +} +// brush 301 +{ +( 1792 1632 288 ) ( 1792 1600 288 ) ( 1792 1600 272 ) 4 0 0 0 1 1 +( 1968 1568 288 ) ( 1984 1568 288 ) ( 1984 1568 272 ) 4 0 0 0 1 1 +( 1984 1600 256 ) ( 1984 1632 256 ) ( 1968 1632 256 ) 4 0 0 0 1 1 +( 1968 1632 272 ) ( 1984 1632 272 ) ( 1984 1600 272 ) 4 0 0 0 1 1 +( 1984 1632 288 ) ( 1968 1632 288 ) ( 1968 1632 272 ) 4 0 0 0 1 1 +( 2080 1600 288 ) ( 2080 1632 288 ) ( 2080 1632 272 ) 4 0 0 0 1 1 +} +// brush 302 +{ +( 1792 1568 304 ) ( 1792 1536 304 ) ( 1792 1536 288 ) 4 0 0 0 1 1 +( 1968 1504 304 ) ( 1984 1504 304 ) ( 1984 1504 288 ) 4 0 0 0 1 1 +( 1984 1536 272 ) ( 1984 1568 272 ) ( 1968 1568 272 ) 4 0 0 0 1 1 +( 1968 1568 288 ) ( 1984 1568 288 ) ( 1984 1536 288 ) 4 0 0 0 1 1 +( 1984 1568 304 ) ( 1968 1568 304 ) ( 1968 1568 288 ) 4 0 0 0 1 1 +( 2080 1536 304 ) ( 2080 1568 304 ) ( 2080 1568 288 ) 4 0 0 0 1 1 +} +// brush 303 +{ +( 1824 2128 352 ) ( 1824 2129 352 ) ( 1824 2128 353 ) 7 0 0 0 1 1 +( 1824 1920 352 ) ( 1824 1920 353 ) ( 1825 1920 352 ) 7 0 0 0 1 1 +( 1824 2128 352 ) ( 1825 2128 352 ) ( 1824 2129 352 ) 7 0 0 0 1 1 +( 2080 2304 512 ) ( 2080 2305 512 ) ( 2081 2304 512 ) 7 0 0 0 1 1 +( 2080 2304 368 ) ( 2081 2304 368 ) ( 2080 2304 369 ) 7 0 0 0 1 1 +( 2080 2304 368 ) ( 2080 2304 369 ) ( 2080 2305 368 ) 7 0 0 0 1 1 +} +// brush 304 +{ +( 1920 1696 480 ) ( 1920 1697 480 ) ( 1920 1696 481 ) 6 0 0 0 1 1 +( 1920 1696 480 ) ( 1920 1696 481 ) ( 1921 1696 480 ) 6 0 0 0 1 1 +( 1920 1696 480 ) ( 1921 1696 480 ) ( 1920 1697 480 ) 6 0 0 0 1 1 +( 1952 1728 512 ) ( 1952 1729 512 ) ( 1953 1728 512 ) 6 0 0 0 1 1 +( 1952 1728 496 ) ( 1953 1728 496 ) ( 1952 1728 497 ) 6 0 0 0 1 1 +( 1952 1728 496 ) ( 1952 1728 497 ) ( 1952 1729 496 ) 6 0 0 0 1 1 +} +// brush 305 +{ +( 1728 1584 360 ) ( 1728 1520 360 ) ( 1728 1520 344 ) 1 0 0 0 1 1 +( 1728 1504 360 ) ( 1792 1504 360 ) ( 1792 1504 344 ) 1 0 0 0 1 1 +( 1792 1584 272 ) ( 1728 1584 272 ) ( 1728 1520 272 ) 1 0 0 0 1 1 +( 1728 1520 512 ) ( 1728 1584 512 ) ( 1792 1584 512 ) 1 0 0 0 1 1 +( 1792 1600 360 ) ( 1728 1600 360 ) ( 1728 1600 344 ) 1 0 0 0 1 1 +( 1792 1520 360 ) ( 1792 1584 360 ) ( 1792 1584 344 ) 1 0 0 0 1 1 +} +// brush 306 +{ +( 1728 1488 360 ) ( 1728 1424 360 ) ( 1728 1424 344 ) 1 0 0 0 1 1 +( 1696 1216 360 ) ( 1760 1216 360 ) ( 1760 1216 344 ) 1 0 0 0 1 1 +( 1760 1488 272 ) ( 1696 1488 272 ) ( 1696 1424 272 ) 1 0 0 0 1 1 +( 1696 1424 512 ) ( 1696 1488 512 ) ( 1760 1488 512 ) 1 0 0 0 1 1 +( 1760 1504 360 ) ( 1696 1504 360 ) ( 1696 1504 344 ) 1 0 0 0 1 1 +( 1760 1424 360 ) ( 1760 1488 360 ) ( 1760 1488 344 ) 1 0 0 0 1 1 +} +// brush 307 +{ +( 2112 1488 360 ) ( 2112 1424 360 ) ( 2112 1424 344 ) 1 0 0 0 1 1 +( 2080 1216 360 ) ( 2144 1216 360 ) ( 2144 1216 344 ) 1 0 0 0 1 1 +( 2144 1488 272 ) ( 2080 1488 272 ) ( 2080 1424 272 ) 1 0 0 0 1 1 +( 2080 1424 512 ) ( 2080 1488 512 ) ( 2144 1488 512 ) 1 0 0 0 1 1 +( 2144 1504 360 ) ( 2080 1504 360 ) ( 2080 1504 344 ) 1 0 0 0 1 1 +( 2144 1424 360 ) ( 2144 1488 360 ) ( 2144 1488 344 ) 1 0 0 0 1 1 +} +// brush 308 +{ +( 1856 1152 304 ) ( 1856 1153 304 ) ( 1856 1152 305 ) 4 0 0 0 1 1 +( 1856 1152 304 ) ( 1856 1152 305 ) ( 1857 1152 304 ) 4 0 0 0 1 1 +( 1856 1152 304 ) ( 1857 1152 304 ) ( 1856 1153 304 ) 4 0 0 0 1 1 +( 2016 1248 320 ) ( 2016 1249 320 ) ( 2017 1248 320 ) 4 0 0 0 1 1 +( 2016 1248 320 ) ( 2017 1248 320 ) ( 2016 1248 321 ) 4 0 0 0 1 1 +( 2016 1248 320 ) ( 2016 1248 321 ) ( 2016 1249 320 ) 4 0 0 0 1 1 +} +// brush 309 +{ +( 2080 832 336 ) ( 2080 833 336 ) ( 2080 832 337 ) 16 0 0 0 1 1 +( 2064 832 336 ) ( 2064 832 337 ) ( 2065 832 336 ) 16 0 0 0 1 1 +( 2064 832 336 ) ( 2065 832 336 ) ( 2064 833 336 ) 16 0 0 0 1 1 +( 2144 896 832 ) ( 2144 897 832 ) ( 2145 896 832 ) 16 0 0 0 1 1 +( 2144 896 352 ) ( 2145 896 352 ) ( 2144 896 353 ) 16 0 0 0 1 1 +( 2144 896 352 ) ( 2144 896 353 ) ( 2144 897 352 ) 16 0 0 0 1 1 +} +// brush 310 +{ +( 1760 832 336 ) ( 1760 833 336 ) ( 1760 832 337 ) 16 0 0 0 1 1 +( 1744 832 336 ) ( 1744 832 337 ) ( 1745 832 336 ) 16 0 0 0 1 1 +( 1744 832 336 ) ( 1745 832 336 ) ( 1744 833 336 ) 16 0 0 0 1 1 +( 1824 896 832 ) ( 1824 897 832 ) ( 1825 896 832 ) 16 0 0 0 1 1 +( 1824 896 352 ) ( 1825 896 352 ) ( 1824 896 353 ) 16 0 0 0 1 1 +( 1824 896 352 ) ( 1824 896 353 ) ( 1824 897 352 ) 16 0 0 0 1 1 +} +// brush 311 +{ +( 1792 1024 344 ) ( 1792 960 344 ) ( 1792 960 328 ) 14 0 0 0 1 1 +( 1808 960 344 ) ( 1872 960 344 ) ( 1872 960 328 ) 14 0 0 0 1 1 +( 1872 1024 336 ) ( 1808 1024 336 ) ( 1808 960 336 ) 14 0 0 0 1 1 +( 1808 960 368 ) ( 1808 1024 368 ) ( 1872 1024 368 ) 14 0 0 0 1 1 +( 1872 1024 344 ) ( 1808 1024 344 ) ( 1808 1024 328 ) 14 0 0 0 1 1 +( 1856 960 344 ) ( 1856 1024 344 ) ( 1856 1024 328 ) 14 0 0 0 1 1 +} +// brush 312 +{ +( 2048 1024 336 ) ( 2048 1025 336 ) ( 2048 1024 337 ) 14 0 0 0 1 1 +( 2032 1024 336 ) ( 2032 1024 337 ) ( 2033 1024 336 ) 14 0 0 0 1 1 +( 2032 1024 336 ) ( 2033 1024 336 ) ( 2032 1025 336 ) 14 0 0 0 1 1 +( 2080 1056 368 ) ( 2080 1057 368 ) ( 2081 1056 368 ) 14 0 0 0 1 1 +( 2080 1056 352 ) ( 2081 1056 352 ) ( 2080 1056 353 ) 14 0 0 0 1 1 +( 2080 1056 352 ) ( 2080 1056 353 ) ( 2080 1057 352 ) 14 0 0 0 1 1 +} +// brush 313 +{ +( 32 2848 640 ) ( 32 2849 640 ) ( 32 2848 641 ) 9 0 0 0 1 1 +( 32 2848 640 ) ( 32 2848 641 ) ( 33 2848 640 ) 9 0 0 0 1 1 +( 32 2848 640 ) ( 33 2848 640 ) ( 32 2849 640 ) 9 0 0 0 1 1 +( 128 3040 656 ) ( 128 3041 656 ) ( 129 3040 656 ) 9 0 0 0 1 1 +( 128 3040 656 ) ( 129 3040 656 ) ( 128 3040 657 ) 9 0 0 0 1 1 +( 160 3040 656 ) ( 160 3040 657 ) ( 160 3041 656 ) 9 0 0 0 1 1 +} +// brush 314 +{ +( 960 1184 688 ) ( 960 1185 688 ) ( 960 1184 689 ) 8 0 0 0 1 1 +( 960 1184 688 ) ( 960 1184 689 ) ( 961 1184 688 ) 8 0 0 0 1 1 +( 960 1184 688 ) ( 961 1184 688 ) ( 960 1185 688 ) 8 0 0 0 1 1 +( 992 1216 720 ) ( 992 1217 720 ) ( 993 1216 720 ) 8 0 0 0 1 1 +( 992 1216 704 ) ( 993 1216 704 ) ( 992 1216 705 ) 8 0 0 0 1 1 +( 992 1216 704 ) ( 992 1216 705 ) ( 992 1217 704 ) 8 0 0 0 1 1 +} +// brush 315 +{ +( 1088 672 816 ) ( 1088 673 816 ) ( 1088 672 817 ) 8 0 0 0 1 1 +( 1088 672 816 ) ( 1088 672 817 ) ( 1089 672 816 ) 8 0 0 0 1 1 +( 1088 672 800 ) ( 1089 672 800 ) ( 1088 673 800 ) 8 0 0 0 1 1 +( 1120 704 832 ) ( 1120 705 832 ) ( 1121 704 832 ) 8 0 0 0 1 1 +( 1120 704 832 ) ( 1121 704 832 ) ( 1120 704 833 ) 8 0 0 0 1 1 +( 1120 704 832 ) ( 1120 704 833 ) ( 1120 705 832 ) 8 0 0 0 1 1 +} +// brush 316 +{ +( 1152 416 640 ) ( 1152 417 640 ) ( 1152 416 641 ) 8 0 0 0 1 1 +( 1152 416 640 ) ( 1152 416 641 ) ( 1153 416 640 ) 8 0 0 0 1 1 +( 1152 416 640 ) ( 1153 416 640 ) ( 1152 417 640 ) 8 0 0 0 1 1 +( 1184 448 672 ) ( 1184 449 672 ) ( 1185 448 672 ) 8 0 0 0 1 1 +( 1184 448 656 ) ( 1185 448 656 ) ( 1184 448 657 ) 8 0 0 0 1 1 +( 1184 448 656 ) ( 1184 448 657 ) ( 1184 449 656 ) 8 0 0 0 1 1 +} +// brush 317 +{ +( 992 416 640 ) ( 992 417 640 ) ( 992 416 641 ) 8 0 0 0 1 1 +( 992 416 640 ) ( 992 416 641 ) ( 993 416 640 ) 8 0 0 0 1 1 +( 992 416 640 ) ( 993 416 640 ) ( 992 417 640 ) 8 0 0 0 1 1 +( 1024 448 672 ) ( 1024 449 672 ) ( 1025 448 672 ) 8 0 0 0 1 1 +( 1024 448 656 ) ( 1025 448 656 ) ( 1024 448 657 ) 8 0 0 0 1 1 +( 1024 448 656 ) ( 1024 448 657 ) ( 1024 449 656 ) 8 0 0 0 1 1 +} +// brush 318 +{ +( 1088 672 816 ) ( 1088 624 816 ) ( 1088 624 640 ) 7 0 0 270 1 -1 +( 960 384 816 ) ( 1000 384 816 ) ( 1000 384 640 ) 7 0 0 270 1 -1 +( 1000 672 800 ) ( 960 672 800 ) ( 960 624 800 ) 7 0 0 270 1 -1 +( 960 624 832 ) ( 960 672 832 ) ( 1000 672 832 ) 7 0 0 270 1 -1 +( 1000 672 816 ) ( 960 672 816 ) ( 960 672 640 ) 7 0 0 270 1 -1 +( 1120 624 816 ) ( 1120 672 816 ) ( 1120 672 640 ) 7 0 0 270 1 -1 +} +// brush 319 +{ +( 192 2848 464 ) ( 192 2849 464 ) ( 192 2848 465 ) 8 0 0 0 1 1 +( 192 2848 464 ) ( 192 2848 465 ) ( 193 2848 464 ) 8 0 0 0 1 1 +( 192 2848 464 ) ( 193 2848 464 ) ( 192 2849 464 ) 8 0 0 0 1 1 +( 224 2880 496 ) ( 224 2881 496 ) ( 225 2880 496 ) 8 0 0 0 1 1 +( 224 2880 480 ) ( 225 2880 480 ) ( 224 2880 481 ) 8 0 0 0 1 1 +( 224 2880 480 ) ( 224 2880 481 ) ( 224 2881 480 ) 8 0 0 0 1 1 +} +// brush 320 +{ +( 416 2848 464 ) ( 416 2849 464 ) ( 416 2848 465 ) 8 0 0 0 1 1 +( 416 2848 464 ) ( 416 2848 465 ) ( 417 2848 464 ) 8 0 0 0 1 1 +( 416 2848 464 ) ( 417 2848 464 ) ( 416 2849 464 ) 8 0 0 0 1 1 +( 448 2880 496 ) ( 448 2881 496 ) ( 449 2880 496 ) 8 0 0 0 1 1 +( 448 2880 480 ) ( 449 2880 480 ) ( 448 2880 481 ) 8 0 0 0 1 1 +( 448 2880 480 ) ( 448 2880 481 ) ( 448 2881 480 ) 8 0 0 0 1 1 +} +// brush 321 +{ +( 112 3232 496 ) ( 112 3233 496 ) ( 112 3232 497 ) 8 0 0 0 1 1 +( 112 3232 496 ) ( 112 3232 497 ) ( 113 3232 496 ) 8 0 0 0 1 1 +( 112 3232 496 ) ( 113 3232 496 ) ( 112 3233 496 ) 8 0 0 0 1 1 +( 144 3264 528 ) ( 144 3265 528 ) ( 145 3264 528 ) 8 0 0 0 1 1 +( 144 3264 512 ) ( 145 3264 512 ) ( 144 3264 513 ) 8 0 0 0 1 1 +( 144 3264 512 ) ( 144 3264 513 ) ( 144 3265 512 ) 8 0 0 0 1 1 +} +// brush 322 +{ +( 640 2784 784 ) ( 640 2785 784 ) ( 640 2784 785 ) 8 0 0 0 1 1 +( 640 2784 784 ) ( 640 2784 785 ) ( 641 2784 784 ) 8 0 0 0 1 1 +( 640 2784 784 ) ( 641 2784 784 ) ( 640 2785 784 ) 8 0 0 0 1 1 +( 672 2816 800 ) ( 672 2817 800 ) ( 673 2816 800 ) 8 0 0 0 1 1 +( 672 2816 800 ) ( 673 2816 800 ) ( 672 2816 801 ) 8 0 0 0 1 1 +( 672 2816 800 ) ( 672 2816 801 ) ( 672 2817 800 ) 8 0 0 0 1 1 +} +// brush 323 +{ +( 1792 1312 304 ) ( 1792 1313 304 ) ( 1792 1312 305 ) 14 0 0 0 1 1 +( 1792 1312 304 ) ( 1792 1312 305 ) ( 1793 1312 304 ) 14 0 0 0 1 1 +( 1792 1312 304 ) ( 1793 1312 304 ) ( 1792 1313 304 ) 14 0 0 0 1 1 +( 1824 1344 336 ) ( 1824 1345 336 ) ( 1825 1344 336 ) 14 0 0 0 1 1 +( 1824 1344 320 ) ( 1825 1344 320 ) ( 1824 1344 321 ) 14 0 0 0 1 1 +( 1824 1344 320 ) ( 1824 1344 321 ) ( 1824 1345 320 ) 14 0 0 0 1 1 +} +// brush 324 +{ +( 2048 1376 304 ) ( 2048 1377 304 ) ( 2048 1376 305 ) 14 0 0 0 1 1 +( 2048 1344 304 ) ( 2048 1344 305 ) ( 2049 1344 304 ) 14 0 0 0 1 1 +( 2048 1376 304 ) ( 2049 1376 304 ) ( 2048 1377 304 ) 14 0 0 0 1 1 +( 2080 1408 336 ) ( 2080 1409 336 ) ( 2081 1408 336 ) 14 0 0 0 1 1 +( 2080 1408 320 ) ( 2081 1408 320 ) ( 2080 1408 321 ) 14 0 0 0 1 1 +( 2080 1408 320 ) ( 2080 1408 321 ) ( 2080 1409 320 ) 14 0 0 0 1 1 +} +// brush 325 +{ +( 1248 2304 880 ) ( 1248 2305 880 ) ( 1248 2304 881 ) 12 0 0 0 1 1 +( 1248 2304 880 ) ( 1248 2304 881 ) ( 1249 2304 880 ) 12 0 0 0 1 1 +( 1248 2304 896 ) ( 1249 2304 896 ) ( 1248 2305 896 ) 12 0 0 0 1 1 +( 1824 2848 928 ) ( 1824 2849 928 ) ( 1825 2848 928 ) 12 0 0 0 1 1 +( 1824 3072 896 ) ( 1825 3072 896 ) ( 1824 3072 897 ) 12 0 0 0 1 1 +( 2048 2848 896 ) ( 2048 2848 897 ) ( 2048 2849 896 ) 12 0 0 0 1 1 +} +// brush 326 +{ +( 1504 2400 192 ) ( 1504 2401 192 ) ( 1504 2400 193 ) 8 0 0 0 1 1 +( 1504 2400 192 ) ( 1504 2400 193 ) ( 1505 2400 192 ) 8 0 0 0 1 1 +( 1504 2400 192 ) ( 1505 2400 192 ) ( 1504 2401 192 ) 8 0 0 0 1 1 +( 1536 2432 224 ) ( 1536 2433 224 ) ( 1537 2432 224 ) 8 0 0 0 1 1 +( 1536 2432 208 ) ( 1537 2432 208 ) ( 1536 2432 209 ) 8 0 0 0 1 1 +( 1536 2432 208 ) ( 1536 2432 209 ) ( 1536 2433 208 ) 8 0 0 0 1 1 +} +// brush 327 +{ +( 1664 3040 368 ) ( 1664 3041 368 ) ( 1664 3040 369 ) 9 0 0 0 1 1 +( 1760 3008 368 ) ( 1760 3008 369 ) ( 1761 3008 368 ) 9 0 0 0 1 1 +( 1760 3040 368 ) ( 1761 3040 368 ) ( 1760 3041 368 ) 9 0 0 0 1 1 +( 1800 3080 384 ) ( 1800 3081 384 ) ( 1801 3080 384 ) 9 0 0 0 1 1 +( 1800 3072 376 ) ( 1801 3072 376 ) ( 1800 3072 377 ) 9 0 0 0 1 1 +( 1792 3080 376 ) ( 1792 3080 377 ) ( 1792 3081 376 ) 9 0 0 0 1 1 +} +// brush 328 +{ +( 1632 2976 416 ) ( 1632 2977 416 ) ( 1632 2976 417 ) 9 0 0 0 1 1 +( 1760 2960 416 ) ( 1760 2960 417 ) ( 1761 2960 416 ) 9 0 0 0 1 1 +( 1760 2976 416 ) ( 1761 2976 416 ) ( 1760 2977 416 ) 9 0 0 0 1 1 +( 1800 3016 432 ) ( 1800 3017 432 ) ( 1801 3016 432 ) 9 0 0 0 1 1 +( 1800 3008 424 ) ( 1801 3008 424 ) ( 1800 3008 425 ) 9 0 0 0 1 1 +( 1696 3016 424 ) ( 1696 3016 425 ) ( 1696 3017 424 ) 9 0 0 0 1 1 +} +// brush 329 +{ +( 1632 2976 448 ) ( 1632 2977 448 ) ( 1632 2976 449 ) 9 0 0 0 1 1 +( 1760 2912 448 ) ( 1760 2912 449 ) ( 1761 2912 448 ) 9 0 0 0 1 1 +( 1760 2976 448 ) ( 1761 2976 448 ) ( 1760 2977 448 ) 9 0 0 0 1 1 +( 1800 3016 464 ) ( 1800 3017 464 ) ( 1801 3016 464 ) 9 0 0 0 1 1 +( 1800 2960 456 ) ( 1801 2960 456 ) ( 1800 2960 457 ) 9 0 0 0 1 1 +( 1696 3016 456 ) ( 1696 3016 457 ) ( 1696 3017 456 ) 9 0 0 0 1 1 +} +// brush 330 +{ +( 704 1696 608 ) ( 704 1697 608 ) ( 704 1696 609 ) 8 0 0 0 1 1 +( 704 1696 608 ) ( 704 1696 609 ) ( 705 1696 608 ) 8 0 0 0 1 1 +( 704 1696 624 ) ( 705 1696 624 ) ( 704 1697 624 ) 8 0 0 0 1 1 +( 768 1728 640 ) ( 768 1729 640 ) ( 769 1728 640 ) 8 0 0 0 1 1 +( 768 1728 640 ) ( 769 1728 640 ) ( 768 1728 641 ) 8 0 0 0 1 1 +( 800 1728 640 ) ( 800 1728 641 ) ( 800 1729 640 ) 8 0 0 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "1088 96 712" +} +// entity 2 +{ +"classname" "light" +"origin" "1144 440 696" +"light" "10" +"color" "255 192 64" +} +// entity 3 +{ +"classname" "light" +"origin" "1016 440 696" +"light" "10" +"color" "255 192 64" +} +// entity 4 +{ +"classname" "light" +"origin" "1112 696 760" +"light" "10" +"color" "255 192 64" +} +// entity 5 +{ +"classname" "light" +"origin" "1016 1128 760" +"light" "10" +"color" "255 192 64" +} +// entity 6 +{ +"classname" "light" +"origin" "664 1032 696" +"light" "10" +"color" "255 64 0" +} +// entity 7 +{ +"classname" "light" +"origin" "840 1416 632" +"light" "100" +"color" "192 192 255" +} +// entity 8 +{ +"classname" "light" +"origin" "888 1832 872" +"light" "150" +"color" "192 192 255" +} +// entity 9 +{ +"classname" "light" +"origin" "728 1672 536" +"light" "20" +"color" "255 192 64" +} +// entity 10 +{ +"classname" "light" +"origin" "248 2904 520" +"light" "10" +"color" "255 192 64" +} +// entity 11 +{ +"classname" "light" +"origin" "392 2904 520" +"light" "10" +"color" "255 192 64" +} +// entity 12 +{ +"classname" "light" +"origin" "280 2808 776" +"light" "10" +"color" "255 192 64" +} +// entity 13 +{ +"classname" "light" +"origin" "632 2792 728" +"light" "5" +"color" "255 192 64" +} +// entity 14 +{ +"classname" "light" +"origin" "184 3192 552" +"light" "10" +"color" "255 192 64" +} +// entity 15 +{ +"classname" "light" +"origin" "1464 2520 536" +"light" "20" +"color" "128 54 255" +"delay" "" +} +// entity 16 +{ +"classname" "light" +"origin" "1832 2520 472" +"light" "20" +"color" "128 54 255" +"delay" "" +} +// entity 17 +{ +"classname" "light" +"origin" "1848 2904 408" +"light" "20" +"color" "128 54 255" +"delay" "" +} +// entity 18 +{ +"classname" "light" +"origin" "1448 2872 328" +"light" "10" +"color" "128 54 255" +"delay" "" +} +// entity 19 +{ +"classname" "light" +"origin" "1928 2008 264" +"light" "10" +"color" "128 54 255" +"delay" "" +} +// entity 20 +{ +"classname" "light" +"origin" "1928 1720 408" +"light" "20" +"color" "128 54 255" +"delay" "" +} +// entity 21 +{ +"classname" "light" +"origin" "1944 1096 424" +"light" "20" +"color" "255 0 0" +"delay" "" +} +// entity 22 +{ +"classname" "light" +"origin" "1288 600 712" +"light" "1" +"color" "255 192 64" +} +// entity 23 +{ +"classname" "light" +"origin" "680 3128 1000" +"light" "150" +"color" "192 192 255" +} +// entity 24 +{ +"classname" "light" +"origin" "1480 2472 280" +"light" "10" +"color" "128 54 255" +"delay" "" +} +// entity 25 +{ +"classname" "light" +"origin" "1096 152 744" +"light" "5" +"color" "255 0 0" +} +// entity 26 +{ +"classname" "light" +"origin" "1688 2216 264" +"light" "1" +"color" "0 128 255" +"delay" "" +} +// entity 27 +{ +"classname" "light" +"origin" "1624 2896 552" +"light" "5" +"color" "0 0 255" +"delay" "" +} +// entity 28 +{ +"classname" "enemy_grunt" +"origin" "1072 976 664" +"patrol" "1" +} +// entity 29 +{ +"classname" "light" +"origin" "984 2536 520" +"light" "10" +"color" "128 54 255" +"delay" "" +} +// entity 30 +{ +"classname" "enemy_grunt" +"origin" "800 1040 648" +} +// entity 31 +{ +"classname" "enemy_grunt" +"origin" "560 1856 440" +} +// entity 32 +{ +"classname" "enemy_grunt" +"origin" "736 1632 440" +} +// entity 33 +{ +"classname" "enemy_grunt" +"origin" "1056 1920 440" +} +// entity 34 +{ +"classname" "enemy_grunt" +"origin" "1024 2400 456" +"patrol" "3" +} +// entity 35 +{ +"classname" "enemy_grunt" +"origin" "608 2416 456" +"patrol" "1" +} +// entity 36 +{ +"classname" "enemy_grunt" +"origin" "416 2720 520" +} +// entity 37 +{ +"classname" "enemy_grunt" +"origin" "448 3376 584" +} +// entity 38 +{ +"classname" "enemy_grunt" +"origin" "1056 3232 584" +} +// entity 39 +{ +"classname" "enemy_grunt" +"origin" "784 3200 600" +} +// entity 40 +{ +"classname" "enemy_grunt" +"origin" "576 2896 696" +} +// entity 41 +{ +"classname" "enemy_grunt" +"origin" "64 2912 680" +} +// entity 42 +{ +"classname" "enemy_grunt" +"origin" "576 2672 696" +} +// entity 43 +{ +"classname" "enemy_grunt" +"origin" "1328 2800 584" +} +// entity 44 +{ +"classname" "enemy_grunt" +"origin" "1456 2960 584" +} +// entity 45 +{ +"classname" "enemy_grunt" +"origin" "1488 2512 504" +} +// entity 46 +{ +"classname" "enemy_grunt" +"origin" "1856 2864 344" +} +// entity 47 +{ +"classname" "enemy_grunt" +"origin" "1648 2224 248" +"patrol" "1" +} +// entity 48 +{ +"classname" "enemy_grunt" +"origin" "1920 2064 248" +} +// entity 49 +{ +"classname" "enemy_grunt" +"origin" "1920 1792 248" +} +// entity 50 +{ +"classname" "enemy_grunt" +"origin" "1952 1728 280" +} +// entity 51 +{ +"classname" "enemy_grunt" +"origin" "2064 1440 328" +} +// entity 52 +{ +"classname" "enemy_grunt" +"origin" "1872 1360 328" +} +// entity 53 +{ +"classname" "enemy_grunt" +"origin" "1920 1232 360" +} +// entity 54 +{ +"classname" "barrel" +"origin" "720 2480 440" +} +// entity 55 +{ +"classname" "barrel" +"origin" "176 3056 520" +} +// entity 56 +{ +"classname" "barrel" +"origin" "1056 3408 568" +} +// entity 57 +{ +"classname" "barrel" +"origin" "1808 1440 328" +} +// entity 58 +{ +"classname" "pickup_health" +"origin" "1312 944 728" +} +// entity 59 +{ +"classname" "enemy_hound" +"origin" "656 1952 424" +} +// entity 60 +{ +"classname" "enemy_hound" +"origin" "208 2640 488" +} +// entity 61 +{ +"classname" "enemy_hound" +"origin" "352 2880 488" +} +// entity 62 +{ +"classname" "enemy_enforcer" +"origin" "992 3296 568" +} +// entity 63 +{ +"classname" "enemy_grunt" +"origin" "1008 3136 568" +} +// entity 64 +{ +"classname" "enemy_enforcer" +"origin" "1840 2528 408" +} +// entity 65 +{ +"classname" "enemy_enforcer" +"origin" "1520 2560 216" +} +// entity 66 +{ +"classname" "enemy_hound" +"origin" "2000 1408 328" +} +// entity 67 +{ +"classname" "enemy_hound" +"origin" "1968 1296 328" +} +// entity 68 +{ +"classname" "enemy_enforcer" +"origin" "1904 1408 328" +} +// entity 69 +{ +"classname" "pickup_health" +"origin" "1604 2876 508" +} +// entity 70 +{ +"classname" "pickup_nails" +"origin" "1604 2924 508" +} +// entity 71 +{ +"classname" "pickup_health" +"origin" "1524 2452 460" +} +// entity 72 +{ +"classname" "pickup_nails" +"origin" "1964 2236 124" +} +// entity 73 +{ +"classname" "pickup_health" +"origin" "1964 2180 124" +} +// entity 74 +{ +"classname" "pickup_health" +"origin" "1284 2796 572" +} +// entity 75 +{ +"classname" "pickup_health" +"origin" "356 3420 572" +} +// entity 76 +{ +"classname" "pickup_nails" +"origin" "844 2836 700" +} +// entity 77 +{ +"classname" "pickup_nailgun" +"origin" "684 2796 716" +} +// entity 78 +{ +"classname" "pickup_nails" +"origin" "844 2772 700" +} +// entity 79 +{ +"classname" "pickup_health" +"origin" "1212 2420 524" +} +// entity 80 +{ +"classname" "pickup_health" +"origin" "1212 2468 524" +} +// entity 81 +{ +"classname" "pickup_health" +"origin" "180 2452 476" +} +// entity 82 +{ +"classname" "pickup_health" +"origin" "780 2660 668" +} +// entity 83 +{ +"classname" "pickup_nails" +"origin" "1380 2436 204" +} +// entity 84 +{ +"classname" "pickup_health" +"origin" "1796 2164 204" +} +// entity 85 +{ +"classname" "pickup_health" +"origin" "2028 1316 316" +} +// entity 86 +{ +"classname" "pickup_nails" +"origin" "1796 1268 316" +} +// entity 87 +{ +"classname" "trigger_levelchange" +"origin" "1936 992 416" +} +// entity 88 +{ +"classname" "pickup_health" +"origin" "1312 464 696" +} +// entity 89 +{ +"classname" "pickup_health" +"origin" "292 1940 412" +} +// entity 90 +{ +"classname" "pickup_health" +"origin" "340 1940 412" +} +// entity 91 +{ +"classname" "door" +"origin" "756 2236 480" +"texture" "12" +"dir" "0" +} diff --git a/assets/maps/m2.map b/assets/maps/m2.map new file mode 100644 index 0000000..48a74c5 --- /dev/null +++ b/assets/maps/m2.map @@ -0,0 +1,2613 @@ +// Game: qu1k3 +// Format: Standard +// entity 0 +{ +"sounds" "9" +"message" "the Necropolis" +"worldtype" "0" +"wad" "gfx/wizard.wad" +"classname" "worldspawn" +"_tb_textures" "assets/textures" +// brush 0 +{ +( 832 528 720 ) ( 832 504 720 ) ( 832 504 640 ) 29 0 0 0 1 1 +( 896 512 720 ) ( 1224 512 720 ) ( 1224 512 640 ) 29 0 0 0 1 1 +( 1160 520 640 ) ( 832 520 640 ) ( 832 496 640 ) 29 0 0 0 1 1 +( 832 496 1016 ) ( 832 520 1016 ) ( 1160 520 1016 ) 29 0 0 0 1 1 +( 1160 544 720 ) ( 832 544 720 ) ( 832 544 640 ) 29 0 0 0 1 1 +( 1280 488 720 ) ( 1280 512 720 ) ( 1280 512 640 ) 29 0 0 0 1 1 +} +// brush 1 +{ +( 800 520 1008 ) ( 800 272 1008 ) ( 800 272 632 ) 29 0 0 0 1 1 +( 784 0 1008 ) ( 1296 0 1008 ) ( 1296 0 632 ) 29 0 0 0 1 1 +( 1312 520 544 ) ( 800 520 544 ) ( 800 272 544 ) 29 0 0 0 1 1 +( 800 272 640 ) ( 800 520 640 ) ( 1312 520 640 ) 29 0 0 0 1 1 +( 1312 672 1008 ) ( 800 672 1008 ) ( 800 672 632 ) 29 0 0 0 1 1 +( 1312 272 1008 ) ( 1312 520 1008 ) ( 1312 520 632 ) 29 0 0 0 1 1 +} +// brush 2 +{ +( 832 48 1016 ) ( 832 32 1016 ) ( 832 32 640 ) 29 0 0 0 1 1 +( 1168 0 1016 ) ( 1304 0 1016 ) ( 1304 0 640 ) 29 0 0 0 1 1 +( 1304 48 640 ) ( 1168 48 640 ) ( 1168 32 640 ) 29 0 0 0 1 1 +( 1168 32 1024 ) ( 1168 48 1024 ) ( 1304 48 1024 ) 29 0 0 0 1 1 +( 1304 32 1016 ) ( 1168 32 1016 ) ( 1168 32 640 ) 29 0 0 0 1 1 +( 1280 32 1016 ) ( 1280 48 1016 ) ( 1280 48 640 ) 29 0 0 0 1 1 +} +// brush 3 +{ +( 800 120 1016 ) ( 800 104 1016 ) ( 800 104 640 ) 29 0 0 0 1 1 +( 808 0 1016 ) ( 936 0 1016 ) ( 936 0 640 ) 29 0 0 0 1 1 +( 936 120 640 ) ( 808 120 640 ) ( 808 104 640 ) 29 0 0 0 1 1 +( 808 104 896 ) ( 808 120 896 ) ( 936 120 896 ) 29 0 0 0 1 1 +( 936 512 1016 ) ( 808 512 1016 ) ( 808 512 640 ) 29 0 0 0 1 1 +( 832 104 1016 ) ( 832 120 1016 ) ( 832 120 640 ) 29 0 0 0 1 1 +} +// brush 4 +{ +( 1312 280 1084 ) ( 1312 112 1084 ) ( 1312 112 664 ) 27 0 0 0 1 1 +( 1312 96 1084 ) ( 1336 96 1084 ) ( 1336 96 664 ) 27 0 0 0 1 1 +( 1328 280 864 ) ( 1304 280 864 ) ( 1304 112 864 ) 27 0 0 0 1 1 +( 1304 112 960 ) ( 1304 280 960 ) ( 1328 280 960 ) 27 0 0 0 1 1 +( 1328 640 1084 ) ( 1304 640 1084 ) ( 1304 640 664 ) 27 0 0 0 1 1 +( 1920 112 1084 ) ( 1920 280 1084 ) ( 1920 280 664 ) 27 0 0 0 1 1 +} +// brush 5 +{ +( 1312 280 664 ) ( 1312 152 664 ) ( 1312 152 640 ) 28 0 0 0 1 1 +( 1336 96 664 ) ( 1648 96 664 ) ( 1648 96 640 ) 28 0 0 0 1 1 +( 1640 280 608 ) ( 1328 280 608 ) ( 1328 152 608 ) 28 0 0 0 1 1 +( 1328 152 672 ) ( 1328 280 672 ) ( 1640 280 672 ) 28 0 0 0 1 1 +( 1640 640 664 ) ( 1328 640 664 ) ( 1328 640 640 ) 28 0 0 0 1 1 +( 1728 144 664 ) ( 1728 272 664 ) ( 1728 272 640 ) 28 0 0 0 1 1 +} +// brush 6 +{ +( 832 488 1016 ) ( 832 224 1016 ) ( 832 224 912 ) 11 0 0 0 1 1 +( 872 32 1016 ) ( 1064 32 1016 ) ( 1064 32 912 ) 11 0 0 0 1 1 +( 1056 496 864 ) ( 864 496 864 ) ( 864 232 864 ) 11 0 0 0 1 1 +( 864 232 960 ) ( 864 496 960 ) ( 1056 496 960 ) 11 0 0 0 1 1 +( 1056 512 1016 ) ( 864 512 1016 ) ( 864 512 912 ) 11 0 0 0 1 1 +( 1056 232 1016 ) ( 1056 496 1016 ) ( 1056 496 912 ) 11 0 0 0 1 1 +} +// brush 7 +{ +( 1312 336 896 ) ( 1312 320 896 ) ( 1312 320 656 ) 26 0 0 0 1 1 +( 1312 320 896 ) ( 1520 320 896 ) ( 1520 320 656 ) 26 0 0 0 1 1 +( 1520 336 656 ) ( 1312 336 656 ) ( 1312 320 656 ) 26 0 0 0 1 1 +( 1312 320 896 ) ( 1312 336 896 ) ( 1520 336 896 ) 26 0 0 0 1 1 +( 1520 576 896 ) ( 1312 576 896 ) ( 1312 576 656 ) 26 0 0 0 1 1 +( 1536 320 576 ) ( 1536 320 832 ) ( 1536 328 832 ) 26 0 0 0 1 1 +} +// brush 8 +{ +( 1696 600 896 ) ( 1696 392 896 ) ( 1696 392 656 ) 26 0 0 0 1 1 +( 1776 96 896 ) ( 1792 96 896 ) ( 1792 96 656 ) 26 0 0 0 1 1 +( 1760 408 608 ) ( 1760 616 608 ) ( 1744 616 608 ) 26 0 0 0 1 1 +( 1744 616 896 ) ( 1760 616 896 ) ( 1760 408 896 ) 26 0 0 0 1 1 +( 1760 608 896 ) ( 1744 608 896 ) ( 1744 608 656 ) 26 0 0 0 1 1 +( 1824 408 896 ) ( 1824 616 896 ) ( 1824 616 656 ) 26 0 0 0 1 1 +} +// brush 9 +{ +( 1920 888 1080 ) ( 1920 808 1080 ) ( 1920 808 704 ) 26 0 0 0 1 1 +( 1952 480 1080 ) ( 1968 480 1080 ) ( 1968 480 704 ) 26 0 0 0 1 1 +( 1952 656 480 ) ( 1952 576 480 ) ( 1968 576 480 ) 26 0 0 0 1 1 +( 1968 576 896 ) ( 1952 576 896 ) ( 1952 656 896 ) 26 0 0 0 1 1 +( 1960 800 1080 ) ( 1944 800 1080 ) ( 1944 800 704 ) 26 0 0 0 1 1 +( 1984 576 1080 ) ( 1984 656 1080 ) ( 1984 656 704 ) 26 0 0 0 1 1 +} +// brush 10 +{ +( 1280 888 1080 ) ( 1280 808 1080 ) ( 1280 808 704 ) 26 0 0 0 1 1 +( 1360 864 1080 ) ( 1376 864 1080 ) ( 1376 864 704 ) 26 0 0 0 1 1 +( 1360 656 624 ) ( 1360 576 624 ) ( 1376 576 624 ) 26 0 0 0 1 1 +( 1376 576 1168 ) ( 1360 576 1168 ) ( 1360 656 1168 ) 26 0 0 0 1 1 +( 1368 928 1080 ) ( 1352 928 1080 ) ( 1352 928 704 ) 26 0 0 0 1 1 +( 1408 576 1080 ) ( 1408 656 1080 ) ( 1408 656 704 ) 26 0 0 0 1 1 +} +// brush 11 +{ +( 1472 944 1080 ) ( 1472 928 1080 ) ( 1472 928 704 ) 26 0 0 0 1 1 +( 1352 928 1080 ) ( 1432 928 1080 ) ( 1432 928 704 ) 26 0 0 0 1 1 +( 1432 944 432 ) ( 1352 944 432 ) ( 1352 928 432 ) 26 0 0 0 1 1 +( 1352 928 640 ) ( 1352 944 640 ) ( 1432 944 640 ) 26 0 0 0 1 1 +( 1664 992 1080 ) ( 1584 992 1080 ) ( 1584 992 704 ) 26 0 0 0 1 1 +( 1952 928 1080 ) ( 1952 944 1080 ) ( 1952 944 704 ) 26 0 0 0 1 1 +} +// brush 12 +{ +( 1312 864 836 ) ( 1312 672 836 ) ( 1312 672 624 ) 26 0 0 0 1 1 +( 1344 640 836 ) ( 1392 640 836 ) ( 1392 640 624 ) 26 0 0 0 1 1 +( 1392 672 832 ) ( 1392 864 832 ) ( 1344 864 832 ) 26 0 0 0 1 1 +( 1344 864 1184 ) ( 1392 864 1184 ) ( 1392 672 1184 ) 26 0 0 0 1 1 +( 1392 928 836 ) ( 1344 928 836 ) ( 1344 928 624 ) 26 0 0 0 1 1 +( 1376 672 836 ) ( 1376 864 836 ) ( 1376 864 624 ) 26 0 0 0 1 1 +} +// brush 13 +{ +( 1216 856 624 ) ( 1216 680 624 ) ( 1216 680 608 ) 28 0 0 0 1 1 +( 1344 480 624 ) ( 1392 480 624 ) ( 1392 480 608 ) 28 0 0 0 1 1 +( 1392 680 384 ) ( 1392 856 384 ) ( 1344 856 384 ) 28 0 0 0 1 1 +( 1344 856 624 ) ( 1392 856 624 ) ( 1392 680 624 ) 28 0 0 0 1 1 +( 1400 800 624 ) ( 1352 800 624 ) ( 1352 800 608 ) 28 0 0 0 1 1 +( 1920 600 624 ) ( 1920 776 624 ) ( 1920 776 608 ) 28 0 0 0 1 1 +} +// brush 14 +{ +( 1280 632 1080 ) ( 1280 552 1080 ) ( 1280 552 704 ) 26 0 0 0 1 1 +( 1328 576 1080 ) ( 1344 576 1080 ) ( 1344 576 704 ) 26 0 0 0 1 1 +( 1328 400 624 ) ( 1328 320 624 ) ( 1344 320 624 ) 26 0 0 0 1 1 +( 1344 320 1168 ) ( 1328 320 1168 ) ( 1328 400 1168 ) 26 0 0 0 1 1 +( 1336 704 1080 ) ( 1320 704 1080 ) ( 1320 704 704 ) 26 0 0 0 1 1 +( 1408 320 1080 ) ( 1408 400 1080 ) ( 1408 400 704 ) 26 0 0 0 1 1 +} +// brush 15 +{ +( 1696 928 592 ) ( 1696 816 592 ) ( 1696 816 576 ) 27 0 0 0 1 1 +( 1680 800 592 ) ( 1704 800 592 ) ( 1704 800 576 ) 27 0 0 0 1 1 +( 1704 928 576 ) ( 1680 928 576 ) ( 1680 816 576 ) 27 0 0 0 1 1 +( 1680 816 592 ) ( 1680 928 592 ) ( 1704 928 592 ) 27 0 0 0 1 1 +( 1704 928 592 ) ( 1680 928 592 ) ( 1680 928 576 ) 27 0 0 0 1 1 +( 1728 816 592 ) ( 1728 928 592 ) ( 1728 928 576 ) 27 0 0 0 1 1 +} +// brush 16 +{ +( 1728 928 576 ) ( 1728 816 576 ) ( 1728 816 560 ) 27 0 0 0 1 1 +( 1720 800 576 ) ( 1744 800 576 ) ( 1744 800 560 ) 27 0 0 0 1 1 +( 1744 928 560 ) ( 1720 928 560 ) ( 1720 816 560 ) 27 0 0 0 1 1 +( 1720 816 576 ) ( 1720 928 576 ) ( 1744 928 576 ) 27 0 0 0 1 1 +( 1744 928 576 ) ( 1720 928 576 ) ( 1720 928 560 ) 27 0 0 0 1 1 +( 1760 816 576 ) ( 1760 928 576 ) ( 1760 928 560 ) 27 0 0 0 1 1 +} +// brush 17 +{ +( 1760 928 560 ) ( 1760 816 560 ) ( 1760 816 544 ) 27 0 0 0 1 1 +( 1760 800 560 ) ( 1784 800 560 ) ( 1784 800 544 ) 27 0 0 0 1 1 +( 1784 928 544 ) ( 1760 928 544 ) ( 1760 816 544 ) 27 0 0 0 1 1 +( 1760 816 560 ) ( 1760 928 560 ) ( 1784 928 560 ) 27 0 0 0 1 1 +( 1784 928 560 ) ( 1760 928 560 ) ( 1760 928 544 ) 27 0 0 0 1 1 +( 1792 816 560 ) ( 1792 928 560 ) ( 1792 928 544 ) 27 0 0 0 1 1 +} +// brush 18 +{ +( 1792 928 544 ) ( 1792 816 544 ) ( 1792 816 528 ) 27 0 0 0 1 1 +( 1800 800 544 ) ( 1824 800 544 ) ( 1824 800 528 ) 27 0 0 0 1 1 +( 1824 928 528 ) ( 1800 928 528 ) ( 1800 816 528 ) 27 0 0 0 1 1 +( 1800 816 544 ) ( 1800 928 544 ) ( 1824 928 544 ) 27 0 0 0 1 1 +( 1824 928 544 ) ( 1800 928 544 ) ( 1800 928 528 ) 27 0 0 0 1 1 +( 1824 816 544 ) ( 1824 928 544 ) ( 1824 928 528 ) 27 0 0 0 1 1 +} +// brush 19 +{ +( 1824 928 528 ) ( 1824 816 528 ) ( 1824 816 512 ) 27 0 0 0 1 1 +( 1872 800 528 ) ( 1896 800 528 ) ( 1896 800 512 ) 27 0 0 0 1 1 +( 1896 928 512 ) ( 1872 928 512 ) ( 1872 816 512 ) 27 0 0 0 1 1 +( 1872 816 528 ) ( 1872 928 528 ) ( 1896 928 528 ) 27 0 0 0 1 1 +( 1896 928 528 ) ( 1872 928 528 ) ( 1872 928 512 ) 27 0 0 0 1 1 +( 1856 816 528 ) ( 1856 928 528 ) ( 1856 928 512 ) 27 0 0 0 1 1 +} +// brush 20 +{ +( 1664 928 608 ) ( 1664 816 608 ) ( 1664 816 592 ) 27 0 0 0 1 1 +( 1672 800 608 ) ( 1696 800 608 ) ( 1696 800 592 ) 27 0 0 0 1 1 +( 1696 928 592 ) ( 1672 928 592 ) ( 1672 816 592 ) 27 0 0 0 1 1 +( 1672 816 608 ) ( 1672 928 608 ) ( 1696 928 608 ) 27 0 0 0 1 1 +( 1696 928 608 ) ( 1672 928 608 ) ( 1672 928 592 ) 27 0 0 0 1 1 +( 1696 816 608 ) ( 1696 928 608 ) ( 1696 928 592 ) 27 0 0 0 1 1 +} +// brush 21 +{ +( 1216 928 624 ) ( 1216 816 624 ) ( 1216 816 608 ) 28 0 0 0 1 1 +( 1376 800 624 ) ( 1672 800 624 ) ( 1672 800 608 ) 28 0 0 0 1 1 +( 1672 928 544 ) ( 1376 928 544 ) ( 1376 816 544 ) 28 0 0 0 1 1 +( 1376 816 624 ) ( 1376 928 624 ) ( 1672 928 624 ) 28 0 0 0 1 1 +( 1696 960 624 ) ( 1400 960 624 ) ( 1400 960 608 ) 28 0 0 0 1 1 +( 1664 816 624 ) ( 1664 928 624 ) ( 1664 928 608 ) 28 0 0 0 1 1 +} +// brush 22 +{ +( 1472 960 1008 ) ( 1472 928 1008 ) ( 1472 928 800 ) 26 0 0 0 1 1 +( 1360 928 1008 ) ( 1968 928 1008 ) ( 1968 928 800 ) 26 0 0 0 1 1 +( 1968 960 800 ) ( 1360 960 800 ) ( 1360 928 800 ) 26 0 0 0 1 1 +( 1360 928 896 ) ( 1360 960 896 ) ( 1968 960 896 ) 26 0 0 0 1 1 +( 1968 992 1008 ) ( 1360 992 1008 ) ( 1360 992 800 ) 26 0 0 0 1 1 +( 1824 928 1008 ) ( 1824 960 1008 ) ( 1824 960 800 ) 26 0 0 0 1 1 +} +// brush 23 +{ +( 1440 1152 904 ) ( 1440 960 904 ) ( 1440 960 800 ) 27 0 0 0 1 1 +( 1880 992 904 ) ( 1888 992 904 ) ( 1888 992 800 ) 27 0 0 0 1 1 +( 1888 1152 832 ) ( 1880 1152 832 ) ( 1880 960 832 ) 27 0 0 0 1 1 +( 1880 960 896 ) ( 1880 1152 896 ) ( 1888 1152 896 ) 27 0 0 0 1 1 +( 1896 1088 904 ) ( 1888 1088 904 ) ( 1888 1088 800 ) 27 0 0 0 1 1 +( 1952 944 904 ) ( 1952 1136 904 ) ( 1952 1136 800 ) 27 0 0 0 1 1 +} +// brush 24 +{ +( 1472 1080 904 ) ( 1472 1064 904 ) ( 1472 1064 608 ) 29 0 0 0 1 1 +( 1440 1088 904 ) ( 1888 1088 904 ) ( 1888 1088 608 ) 29 0 0 0 1 1 +( 1888 1088 512 ) ( 1440 1088 512 ) ( 1440 1072 512 ) 29 0 0 0 1 1 +( 1440 1072 896 ) ( 1440 1088 896 ) ( 1888 1088 896 ) 29 0 0 0 1 1 +( 1976 1120 904 ) ( 1528 1120 904 ) ( 1528 1120 608 ) 29 0 0 0 1 1 +( 1952 1072 904 ) ( 1952 1088 904 ) ( 1952 1088 608 ) 29 0 0 0 1 1 +} +// brush 25 +{ +( 1472 1136 624 ) ( 1472 960 624 ) ( 1472 960 608 ) 28 0 0 0 1 1 +( 1440 992 624 ) ( 1872 992 624 ) ( 1872 992 608 ) 28 0 0 0 1 1 +( 1872 1136 576 ) ( 1440 1136 576 ) ( 1440 960 576 ) 28 0 0 0 1 1 +( 1440 960 624 ) ( 1440 1136 624 ) ( 1872 1136 624 ) 28 0 0 0 1 1 +( 1872 1088 624 ) ( 1440 1088 624 ) ( 1440 1088 608 ) 28 0 0 0 1 1 +( 1952 960 624 ) ( 1952 1136 624 ) ( 1952 1136 608 ) 28 0 0 0 1 1 +} +// brush 26 +{ +( 1632 984 656 ) ( 1632 968 656 ) ( 1632 968 640 ) 7 0 0 0 1 1 +( 1632 960 656 ) ( 1648 960 656 ) ( 1648 960 640 ) 7 0 0 0 1 1 +( 1648 984 640 ) ( 1632 984 640 ) ( 1632 968 640 ) 7 0 0 0 1 1 +( 1632 968 800 ) ( 1632 984 800 ) ( 1648 984 800 ) 7 0 0 0 1 1 +( 1648 992 656 ) ( 1632 992 656 ) ( 1632 992 640 ) 7 0 0 0 1 1 +( 1664 968 656 ) ( 1664 984 656 ) ( 1664 984 640 ) 7 0 0 0 1 1 +} +// brush 27 +{ +( 1824 936 904 ) ( 1824 920 904 ) ( 1824 920 608 ) 26 0 0 0 1 1 +( 1888 928 904 ) ( 1952 928 904 ) ( 1952 928 608 ) 26 0 0 0 1 1 +( 1952 944 640 ) ( 1888 944 640 ) ( 1888 928 640 ) 26 0 0 0 1 1 +( 1888 928 896 ) ( 1888 944 896 ) ( 1952 944 896 ) 26 0 0 0 1 1 +( 1960 992 904 ) ( 1896 992 904 ) ( 1896 992 608 ) 26 0 0 0 1 1 +( 1952 928 904 ) ( 1952 944 904 ) ( 1952 944 608 ) 26 0 0 0 1 1 +} +// brush 28 +{ +( 1376 944 784 ) ( 1376 928 784 ) ( 1376 928 768 ) 26 0 0 0 1 1 +( 1360 928 784 ) ( 1488 928 784 ) ( 1488 928 768 ) 26 0 0 0 1 1 +( 1488 944 624 ) ( 1360 944 624 ) ( 1360 928 624 ) 26 0 0 0 1 1 +( 1360 928 896 ) ( 1360 944 896 ) ( 1488 944 896 ) 26 0 0 0 1 1 +( 1488 1088 784 ) ( 1360 1088 784 ) ( 1360 1088 768 ) 26 0 0 0 1 1 +( 1472 928 784 ) ( 1472 944 784 ) ( 1472 944 768 ) 26 0 0 0 1 1 +} +// brush 29 +{ +( 1056 632 836 ) ( 1056 616 836 ) ( 1056 616 624 ) 26 0 0 0 1 1 +( 1064 608 836 ) ( 1264 608 836 ) ( 1264 608 624 ) 26 0 0 0 1 1 +( 1264 632 624 ) ( 1064 632 624 ) ( 1064 616 624 ) 26 0 0 0 1 1 +( 1064 616 1088 ) ( 1064 632 1088 ) ( 1264 632 1088 ) 26 0 0 0 1 1 +( 1264 640 836 ) ( 1064 640 836 ) ( 1064 640 624 ) 26 0 0 0 1 1 +( 1312 616 836 ) ( 1312 632 836 ) ( 1312 632 624 ) 26 0 0 0 1 1 +} +// brush 30 +{ +( 1056 952 836 ) ( 1056 936 836 ) ( 1056 936 624 ) 26 0 0 0 1 1 +( 1064 928 836 ) ( 1264 928 836 ) ( 1264 928 624 ) 26 0 0 0 1 1 +( 1264 952 624 ) ( 1064 952 624 ) ( 1064 936 624 ) 26 0 0 0 1 1 +( 1064 936 1088 ) ( 1064 952 1088 ) ( 1264 952 1088 ) 26 0 0 0 1 1 +( 1264 960 836 ) ( 1064 960 836 ) ( 1064 960 624 ) 26 0 0 0 1 1 +( 1312 936 836 ) ( 1312 952 836 ) ( 1312 952 624 ) 26 0 0 0 1 1 +} +// brush 31 +{ +( 544 856 544 ) ( 544 680 544 ) ( 544 680 528 ) 26 0 0 0 1 1 +( 976 672 544 ) ( 1008 672 544 ) ( 1008 672 528 ) 26 0 0 0 1 1 +( 1008 856 512 ) ( 976 856 512 ) ( 976 680 512 ) 26 0 0 0 1 1 +( 976 680 544 ) ( 976 856 544 ) ( 1008 856 544 ) 26 0 0 0 1 1 +( 1008 1120 544 ) ( 976 1120 544 ) ( 976 1120 528 ) 26 0 0 0 1 1 +( 1216 680 544 ) ( 1216 856 544 ) ( 1216 856 528 ) 26 0 0 0 1 1 +} +// brush 32 +{ +( 544 1008 640 ) ( 544 992 640 ) ( 544 992 528 ) 29 0 0 0 1 1 +( 544 672 640 ) ( 800 672 640 ) ( 800 672 528 ) 29 0 0 0 1 1 +( 800 1008 544 ) ( 544 1008 544 ) ( 544 992 544 ) 29 0 0 0 1 1 +( 544 992 624 ) ( 544 1008 624 ) ( 800 1008 624 ) 29 0 0 0 1 1 +( 800 992 640 ) ( 544 992 640 ) ( 544 992 528 ) 29 0 0 0 1 1 +( 800 992 640 ) ( 800 1008 640 ) ( 800 1008 528 ) 29 0 0 0 1 1 +} +// brush 33 +{ +( 672 1096 640 ) ( 672 1080 640 ) ( 672 1080 528 ) 29 0 0 0 1 1 +( 688 1120 640 ) ( 944 1120 640 ) ( 944 1120 528 ) 29 0 0 0 1 1 +( 688 1120 192 ) ( 944 1120 192 ) ( 944 1136 192 ) 29 0 0 0 1 1 +( 944 1136 768 ) ( 944 1120 768 ) ( 688 1120 768 ) 29 0 0 0 1 1 +( 944 1152 640 ) ( 688 1152 640 ) ( 688 1152 528 ) 29 0 0 0 1 1 +( 1072 1120 640 ) ( 1072 1136 640 ) ( 1072 1136 528 ) 29 0 0 0 1 1 +} +// brush 34 +{ +( 512 1152 512 ) ( 512 1136 512 ) ( 512 1136 496 ) 26 0 0 0 1 1 +( 536 1120 512 ) ( 648 1120 512 ) ( 648 1120 496 ) 26 0 0 0 1 1 +( 656 1152 496 ) ( 544 1152 496 ) ( 544 1136 496 ) 26 0 0 0 1 1 +( 544 1136 528 ) ( 544 1152 528 ) ( 656 1152 528 ) 26 0 0 0 1 1 +( 656 1184 512 ) ( 544 1184 512 ) ( 544 1184 496 ) 26 0 0 0 1 1 +( 704 1136 512 ) ( 704 1152 512 ) ( 704 1152 496 ) 26 0 0 0 1 1 +} +// brush 35 +{ +( 512 1576 472 ) ( 512 1440 472 ) ( 512 1440 456 ) 27 0 0 0 1 1 +( 544 1408 472 ) ( 672 1408 472 ) ( 672 1408 456 ) 27 0 0 0 1 1 +( 632 1576 448 ) ( 504 1576 448 ) ( 504 1440 448 ) 27 0 0 0 1 1 +( 504 1440 464 ) ( 504 1576 464 ) ( 632 1576 464 ) 27 0 0 0 1 1 +( 632 1568 472 ) ( 504 1568 472 ) ( 504 1568 456 ) 27 0 0 0 1 1 +( 672 1408 472 ) ( 672 1544 472 ) ( 672 1544 456 ) 27 0 0 0 1 1 +} +// brush 36 +{ +( 440 1568 424 ) ( 296 1712 424 ) ( 440 1568 440 ) 26 0 0 0 1 1 +( 736 2152 424 ) ( 440 2152 424 ) ( 440 1568 424 ) 26 0 0 0 1 1 +( 440 1568 480 ) ( 440 2152 480 ) ( 736 2152 480 ) 26 0 0 0 1 1 +( 320 1712 64 ) ( 320 1712 1032 ) ( 296 1712 1032 ) 26 0 0 0 1 1 +( 320 1712 1032 ) ( 320 1736 1032 ) ( 320 1736 64 ) 26 0 0 0 1 1 +} +// brush 37 +{ +( 864 1944 472 ) ( 864 1808 472 ) ( 864 1808 456 ) 27 0 0 0 1 1 +( 920 1792 472 ) ( 1048 1792 472 ) ( 1048 1792 456 ) 27 0 0 0 1 1 +( 1008 1944 448 ) ( 880 1944 448 ) ( 880 1808 448 ) 27 0 0 0 1 1 +( 880 1808 464 ) ( 880 1944 464 ) ( 1008 1944 464 ) 27 0 0 0 1 1 +( 1008 1952 472 ) ( 880 1952 472 ) ( 880 1952 456 ) 27 0 0 0 1 1 +( 1152 1776 472 ) ( 1152 1912 472 ) ( 1152 1912 456 ) 27 0 0 0 1 1 +} +// brush 38 +{ +( 1248 1948 480 ) ( 1248 1948 692 ) ( 1248 1924 692 ) 7 0 0 0 1 1 +( 1320 1920 692 ) ( 1320 1920 480 ) ( 1256 1920 480 ) 7 0 0 0 1 1 +( 1320 1920 480 ) ( 1320 1948 480 ) ( 1256 1948 480 ) 7 0 0 0 1 1 +( 1320 1948 608 ) ( 1320 1920 608 ) ( 1256 1920 608 ) 7 0 0 0 1 1 +( 1320 1952 480 ) ( 1320 1952 692 ) ( 1256 1952 692 ) 7 0 0 0 1 1 +( 1312 1920 480 ) ( 1312 1920 692 ) ( 1312 1948 692 ) 7 0 0 0 1 1 +} +// brush 39 +{ +( 1248 1792 480 ) ( 1248 1792 692 ) ( 1248 1768 692 ) 7 0 0 0 1 1 +( 1320 1760 692 ) ( 1320 1760 480 ) ( 1256 1760 480 ) 7 0 0 0 1 1 +( 1320 1764 480 ) ( 1320 1792 480 ) ( 1256 1792 480 ) 7 0 0 0 1 1 +( 1320 1792 608 ) ( 1320 1764 608 ) ( 1256 1764 608 ) 7 0 0 0 1 1 +( 1320 1792 480 ) ( 1320 1792 692 ) ( 1256 1792 692 ) 7 0 0 0 1 1 +( 1312 1764 480 ) ( 1312 1764 692 ) ( 1312 1792 692 ) 7 0 0 0 1 1 +} +// brush 40 +{ +( 1184 1664 692 ) ( 1184 1472 692 ) ( 1184 1472 480 ) 11 0 0 0 1 1 +( 1224 1216 692 ) ( 1272 1216 692 ) ( 1272 1216 480 ) 11 0 0 0 1 1 +( 1272 1472 384 ) ( 1272 1664 384 ) ( 1224 1664 384 ) 11 0 0 0 1 1 +( 1224 1664 768 ) ( 1272 1664 768 ) ( 1272 1472 768 ) 11 0 0 0 1 1 +( 1272 1568 692 ) ( 1224 1568 692 ) ( 1224 1568 480 ) 11 0 0 0 1 1 +( 1600 1472 692 ) ( 1600 1664 692 ) ( 1600 1664 480 ) 11 0 0 0 1 1 +} +// brush 41 +{ +( 1280 2040 672 ) ( 1280 1928 672 ) ( 1280 1928 480 ) 11 0 0 0 1 1 +( 1336 1952 672 ) ( 1352 1952 672 ) ( 1352 1952 480 ) 11 0 0 0 1 1 +( 1352 2056 192 ) ( 1336 2056 192 ) ( 1336 1944 192 ) 11 0 0 0 1 1 +( 1336 1944 784 ) ( 1336 2056 784 ) ( 1352 2056 784 ) 11 0 0 0 1 1 +( 1352 2144 672 ) ( 1336 2144 672 ) ( 1336 2144 480 ) 11 0 0 0 1 1 +( 1312 1944 672 ) ( 1312 2056 672 ) ( 1312 2056 480 ) 11 0 0 0 1 1 +} +// brush 42 +{ +( 320 1136 832 ) ( 320 1112 832 ) ( 320 1112 64 ) 29 0 0 0 1 1 +( 208 992 832 ) ( 528 992 832 ) ( 528 992 64 ) 29 0 0 0 1 1 +( 528 1136 192 ) ( 208 1136 192 ) ( 208 1112 192 ) 29 0 0 0 1 1 +( 208 1112 832 ) ( 208 1136 832 ) ( 528 1136 832 ) 29 0 0 0 1 1 +( 528 1152 832 ) ( 208 1152 832 ) ( 208 1152 64 ) 29 0 0 0 1 1 +( 544 1112 832 ) ( 544 1136 832 ) ( 544 1136 64 ) 29 0 0 0 1 1 +} +// brush 43 +{ +( 672 1656 616 ) ( 672 1592 616 ) ( 672 1592 480 ) 26 0 0 0 1 1 +( 672 1600 616 ) ( 736 1600 616 ) ( 736 1600 480 ) 26 0 0 0 1 1 +( 736 1656 480 ) ( 672 1656 480 ) ( 672 1592 480 ) 26 0 0 0 1 1 +( 672 1592 832 ) ( 672 1656 832 ) ( 736 1656 832 ) 26 0 0 0 1 1 +( 744 1664 616 ) ( 680 1664 616 ) ( 680 1664 480 ) 26 0 0 0 1 1 +( 736 1592 616 ) ( 736 1656 616 ) ( 736 1656 480 ) 26 0 0 0 1 1 +} +// brush 44 +{ +( 448 1656 616 ) ( 448 1592 616 ) ( 448 1592 480 ) 26 0 0 0 1 1 +( 440 1600 616 ) ( 504 1600 616 ) ( 504 1600 480 ) 26 0 0 0 1 1 +( 504 1656 480 ) ( 440 1656 480 ) ( 440 1592 480 ) 26 0 0 0 1 1 +( 440 1592 832 ) ( 440 1656 832 ) ( 504 1656 832 ) 26 0 0 0 1 1 +( 512 1664 616 ) ( 448 1664 616 ) ( 448 1664 480 ) 26 0 0 0 1 1 +( 512 1592 616 ) ( 512 1656 616 ) ( 512 1656 480 ) 26 0 0 0 1 1 +} +// brush 45 +{ +( 768 1776 616 ) ( 768 1712 616 ) ( 768 1712 480 ) 26 0 0 0 1 1 +( 792 1728 616 ) ( 856 1728 616 ) ( 856 1728 480 ) 26 0 0 0 1 1 +( 856 1776 480 ) ( 792 1776 480 ) ( 792 1712 480 ) 26 0 0 0 1 1 +( 792 1712 832 ) ( 792 1776 832 ) ( 856 1776 832 ) 26 0 0 0 1 1 +( 864 1792 616 ) ( 800 1792 616 ) ( 800 1792 480 ) 26 0 0 0 1 1 +( 832 1712 616 ) ( 832 1776 616 ) ( 832 1776 480 ) 26 0 0 0 1 1 +} +// brush 46 +{ +( 768 2040 616 ) ( 768 1976 616 ) ( 768 1976 480 ) 26 0 0 0 1 1 +( 792 1952 616 ) ( 856 1952 616 ) ( 856 1952 480 ) 26 0 0 0 1 1 +( 856 2040 480 ) ( 792 2040 480 ) ( 792 1976 480 ) 26 0 0 0 1 1 +( 792 1976 832 ) ( 792 2040 832 ) ( 856 2040 832 ) 26 0 0 0 1 1 +( 864 2016 616 ) ( 800 2016 616 ) ( 800 2016 480 ) 26 0 0 0 1 1 +( 832 1976 616 ) ( 832 2040 616 ) ( 832 2040 480 ) 26 0 0 0 1 1 +} +// brush 47 +{ +( 768 1880 708 ) ( 768 1848 708 ) ( 768 1848 672 ) 26 0 0 0 1 1 +( 856 1824 712 ) ( 856 1824 676 ) ( 808 1824 676 ) 26 0 0 0 1 1 +( 856 1848 672 ) ( 856 1880 672 ) ( 808 1880 672 ) 26 0 0 0 1 1 +( 856 1880 704 ) ( 856 1848 704 ) ( 808 1848 704 ) 26 0 0 0 1 1 +( 856 1920 672 ) ( 856 1920 708 ) ( 808 1920 708 ) 26 0 0 0 1 1 +( 832 1848 672 ) ( 832 1848 708 ) ( 832 1880 708 ) 26 0 0 0 1 1 +} +// brush 48 +{ +( 544 1624 712 ) ( 544 1624 676 ) ( 544 1672 676 ) 26 0 0 0 1 1 +( 576 1600 672 ) ( 576 1600 708 ) ( 608 1600 708 ) 26 0 0 0 1 1 +( 576 1624 672 ) ( 608 1624 672 ) ( 608 1672 672 ) 26 0 0 0 1 1 +( 608 1624 704 ) ( 576 1624 704 ) ( 576 1672 704 ) 26 0 0 0 1 1 +( 608 1664 708 ) ( 576 1664 708 ) ( 576 1664 672 ) 26 0 0 0 1 1 +( 640 1624 672 ) ( 640 1624 708 ) ( 640 1672 708 ) 26 0 0 0 1 1 +} +// brush 49 +{ +( 496 2200 1040 ) ( 496 2176 1040 ) ( 496 2176 72 ) 11 0 0 0 1 1 +( 512 2144 1032 ) ( 1240 2144 1032 ) ( 1240 2144 64 ) 11 0 0 0 1 1 +( 1456 2200 64 ) ( 728 2200 64 ) ( 728 2176 64 ) 11 0 0 0 1 1 +( 728 2176 1032 ) ( 728 2200 1032 ) ( 1456 2200 1032 ) 11 0 0 0 1 1 +( 1352 2208 1032 ) ( 624 2208 1032 ) ( 624 2208 64 ) 11 0 0 0 1 1 +( 1360 2176 1032 ) ( 1360 2200 1032 ) ( 1360 2200 64 ) 11 0 0 0 1 1 +} +// brush 50 +{ +( 896 1736 64 ) ( 896 1736 1032 ) ( 896 1712 1032 ) 11 0 0 0 1 1 +( 1016 1120 784 ) ( 1496 1120 784 ) ( 1496 1120 768 ) 11 0 0 0 1 1 +( 1216 2200 768 ) ( 736 2200 768 ) ( 736 1920 768 ) 11 0 0 0 1 1 +( 736 1920 832 ) ( 736 2200 832 ) ( 1216 2200 832 ) 11 0 0 0 1 1 +( 320 2144 1032 ) ( 296 2144 1032 ) ( 296 2144 64 ) 11 0 0 0 1 1 +( 1440 1768 784 ) ( 1440 2048 784 ) ( 1440 2048 768 ) 11 0 0 0 1 1 +} +// brush 51 +{ +( 320 1800 616 ) ( 320 1736 616 ) ( 320 1736 480 ) 26 0 0 0 1 1 +( 320 1728 616 ) ( 384 1728 616 ) ( 384 1728 480 ) 26 0 0 0 1 1 +( 384 1800 480 ) ( 320 1800 480 ) ( 320 1736 480 ) 26 0 0 0 1 1 +( 320 1736 832 ) ( 320 1800 832 ) ( 384 1800 832 ) 26 0 0 0 1 1 +( 392 1792 616 ) ( 328 1792 616 ) ( 328 1792 480 ) 26 0 0 0 1 1 +( 384 1736 616 ) ( 384 1800 616 ) ( 384 1800 480 ) 26 0 0 0 1 1 +} +// brush 52 +{ +( 640 2136 616 ) ( 640 2072 616 ) ( 640 2072 480 ) 26 0 0 0 1 1 +( 648 2080 616 ) ( 712 2080 616 ) ( 712 2080 480 ) 26 0 0 0 1 1 +( 712 2136 480 ) ( 648 2136 480 ) ( 648 2072 480 ) 26 0 0 0 1 1 +( 648 2072 832 ) ( 648 2136 832 ) ( 712 2136 832 ) 26 0 0 0 1 1 +( 720 2144 616 ) ( 656 2144 616 ) ( 656 2144 480 ) 26 0 0 0 1 1 +( 704 2072 616 ) ( 704 2136 616 ) ( 704 2136 480 ) 26 0 0 0 1 1 +} +// brush 53 +{ +( 1280 2080 432 ) ( 1280 1656 432 ) ( 1280 1656 16 ) 11 0 0 0 1 1 +( 1336 1568 432 ) ( 1352 1568 432 ) ( 1352 1568 16 ) 11 0 0 0 1 1 +( 1352 2080 192 ) ( 1336 2080 192 ) ( 1336 1656 192 ) 11 0 0 0 1 1 +( 1336 1656 768 ) ( 1336 2080 768 ) ( 1352 2080 768 ) 11 0 0 0 1 1 +( 1352 1760 432 ) ( 1336 1760 432 ) ( 1336 1760 16 ) 11 0 0 0 1 1 +( 1376 1656 432 ) ( 1376 2080 432 ) ( 1376 2080 16 ) 11 0 0 0 1 1 +} +// brush 54 +{ +( 776 1736 600 ) ( 776 1736 576 ) ( 776 1752 576 ) 26 0 0 0 1 1 +( 792 1752 580 ) ( 776 1752 596 ) ( 792 1736 580 ) 26 0 0 0 1 1 +( 768 1736 580 ) ( 768 1736 604 ) ( 800 1736 604 ) 26 0 0 0 1 1 +( 800 1736 604 ) ( 768 1736 604 ) ( 768 1752 604 ) 26 0 0 0 1 1 +( 800 1752 604 ) ( 768 1752 604 ) ( 768 1752 580 ) 26 0 0 0 1 1 +( 792 1736 580 ) ( 792 1736 604 ) ( 792 1752 604 ) 26 0 0 0 1 1 +} +// brush 55 +{ +( 1216 1424 208 ) ( 1216 1368 208 ) ( 1216 1368 168 ) 11 0 0 0 1 1 +( 1336 1088 208 ) ( 1456 1088 208 ) ( 1456 1088 168 ) 11 0 0 0 1 1 +( 1376 1424 160 ) ( 1256 1424 160 ) ( 1256 1368 160 ) 11 0 0 0 1 1 +( 1256 1368 208 ) ( 1256 1424 208 ) ( 1376 1424 208 ) 11 0 0 0 1 1 +( 1376 1408 208 ) ( 1256 1408 208 ) ( 1256 1408 168 ) 11 0 0 0 1 1 +( 1888 1280 208 ) ( 1888 1336 208 ) ( 1888 1336 168 ) 11 0 0 0 1 1 +} +// brush 56 +{ +( 1376 1424 296 ) ( 1376 1416 296 ) ( 1376 1416 280 ) 29 0 0 0 1 1 +( 1384 1408 296 ) ( 1456 1408 296 ) ( 1456 1408 280 ) 29 0 0 0 1 1 +( 1456 1424 192 ) ( 1384 1424 192 ) ( 1384 1416 192 ) 29 0 0 0 1 1 +( 1384 1416 480 ) ( 1384 1424 480 ) ( 1456 1424 480 ) 29 0 0 0 1 1 +( 1456 1760 296 ) ( 1384 1760 296 ) ( 1384 1760 280 ) 29 0 0 0 1 1 +( 1856 1408 296 ) ( 1856 1416 296 ) ( 1856 1416 280 ) 29 0 0 0 1 1 +} +// brush 57 +{ +( 1888 936 904 ) ( 1888 808 904 ) ( 1888 808 512 ) 26 0 0 0 1 1 +( 1952 768 904 ) ( 1968 768 904 ) ( 1968 768 512 ) 26 0 0 0 1 1 +( 1968 944 672 ) ( 1952 944 672 ) ( 1952 816 672 ) 26 0 0 0 1 1 +( 1952 816 896 ) ( 1952 944 896 ) ( 1968 944 896 ) 26 0 0 0 1 1 +( 1968 928 904 ) ( 1952 928 904 ) ( 1952 928 512 ) 26 0 0 0 1 1 +( 1952 816 904 ) ( 1952 944 904 ) ( 1952 944 512 ) 26 0 0 0 1 1 +} +// brush 58 +{ +( 832 1688 216 ) ( 832 1624 216 ) ( 832 1624 184 ) 28 0 0 0 1 1 +( 856 1632 216 ) ( 912 1632 216 ) ( 912 1632 184 ) 28 0 0 0 1 1 +( 912 1688 192 ) ( 856 1688 192 ) ( 856 1624 192 ) 28 0 0 0 1 1 +( 856 1624 208 ) ( 856 1688 208 ) ( 912 1688 208 ) 28 0 0 0 1 1 +( 912 1696 216 ) ( 856 1696 216 ) ( 856 1696 184 ) 28 0 0 0 1 1 +( 896 1624 216 ) ( 896 1688 216 ) ( 896 1688 184 ) 28 0 0 0 1 1 +} +// brush 59 +{ +( 1824 464 904 ) ( 1824 448 904 ) ( 1824 448 608 ) 26 0 0 0 1 1 +( 1800 448 904 ) ( 1952 448 904 ) ( 1952 448 608 ) 26 0 0 0 1 1 +( 1952 464 608 ) ( 1800 464 608 ) ( 1800 448 608 ) 26 0 0 0 1 1 +( 1800 448 896 ) ( 1800 464 896 ) ( 1952 464 896 ) 26 0 0 0 1 1 +( 1952 480 904 ) ( 1800 480 904 ) ( 1800 480 608 ) 26 0 0 0 1 1 +( 1952 448 904 ) ( 1952 464 904 ) ( 1952 464 608 ) 26 0 0 0 1 1 +} +// brush 60 +{ +( 544 1120 640 ) ( 544 992 640 ) ( 544 992 624 ) 26 0 0 0 1 1 +( 928 608 640 ) ( 1056 608 640 ) ( 1056 608 624 ) 26 0 0 0 1 1 +( 1056 1120 624 ) ( 928 1120 624 ) ( 928 992 624 ) 26 0 0 0 1 1 +( 928 992 1088 ) ( 928 1120 1088 ) ( 1056 1120 1088 ) 26 0 0 0 1 1 +( 1056 1120 640 ) ( 928 1120 640 ) ( 928 1120 624 ) 26 0 0 0 1 1 +( 1056 992 640 ) ( 1056 1120 640 ) ( 1056 1120 624 ) 26 0 0 0 1 1 +} +// brush 61 +{ +( 928 992 624 ) ( 928 984 624 ) ( 928 984 528 ) 29 0 0 0 1 1 +( 952 832 624 ) ( 1064 832 624 ) ( 1064 832 528 ) 29 0 0 0 1 1 +( 1056 992 544 ) ( 944 992 544 ) ( 944 984 544 ) 29 0 0 0 1 1 +( 944 984 624 ) ( 944 992 624 ) ( 1056 992 624 ) 29 0 0 0 1 1 +( 1056 992 624 ) ( 944 992 624 ) ( 944 992 528 ) 29 0 0 0 1 1 +( 1056 984 624 ) ( 1056 992 624 ) ( 1056 992 528 ) 29 0 0 0 1 1 +} +// brush 62 +{ +( 256 1240 1032 ) ( 256 904 1032 ) ( 256 904 64 ) 11 0 0 0 1 1 +( 320 1088 1032 ) ( 336 1088 1032 ) ( 336 1088 64 ) 11 0 0 0 1 1 +( 320 1240 184 ) ( 304 1240 184 ) ( 304 904 184 ) 11 0 0 0 1 1 +( 304 904 832 ) ( 304 1240 832 ) ( 320 1240 832 ) 11 0 0 0 1 1 +( 320 1888 1032 ) ( 304 1888 1032 ) ( 304 1888 64 ) 11 0 0 0 1 1 +( 320 904 1032 ) ( 320 1240 1032 ) ( 320 1240 64 ) 11 0 0 0 1 1 +} +// brush 63 +{ +( 1216 336 656 ) ( 1216 256 784 ) ( 1216 256 656 ) 28 0 0 0 1 1 +( 1192 256 656 ) ( 1312 256 656 ) ( 1312 256 624 ) 28 0 0 0 1 1 +( 1312 248 640 ) ( 1312 344 640 ) ( 1200 344 640 ) 28 0 0 0 1 1 +( 1200 344 656 ) ( 1312 344 656 ) ( 1312 248 656 ) 28 0 0 0 1 1 +( 1312 352 624 ) ( 1312 352 656 ) ( 1200 352 656 ) 28 0 0 0 1 1 +( 1312 248 656 ) ( 1312 344 656 ) ( 1312 344 624 ) 28 0 0 0 1 1 +} +// brush 64 +{ +( 976 248 656 ) ( 976 128 784 ) ( 976 128 656 ) 28 0 0 0 1 1 +( 1000 32 656 ) ( 1088 32 656 ) ( 1088 32 640 ) 28 0 0 0 1 1 +( 1112 248 640 ) ( 1024 248 640 ) ( 1024 168 640 ) 28 0 0 0 1 1 +( 1024 168 656 ) ( 1024 248 656 ) ( 1112 248 656 ) 28 0 0 0 1 1 +( 1112 256 656 ) ( 1024 256 656 ) ( 1024 256 640 ) 28 0 0 0 1 1 +( 1312 160 656 ) ( 1312 240 656 ) ( 1312 240 640 ) 28 0 0 0 1 1 +} +// brush 65 +{ +( 1056 488 1112 ) ( 1056 224 1112 ) ( 1056 224 1008 ) 11 0 0 0 1 1 +( 1096 32 1112 ) ( 1288 32 1112 ) ( 1288 32 1008 ) 11 0 0 0 1 1 +( 1280 496 960 ) ( 1088 496 960 ) ( 1088 232 960 ) 11 0 0 0 1 1 +( 1088 232 1024 ) ( 1088 496 1024 ) ( 1280 496 1024 ) 11 0 0 0 1 1 +( 1280 512 1112 ) ( 1088 512 1112 ) ( 1088 512 1008 ) 11 0 0 0 1 1 +( 1344 232 1112 ) ( 1344 496 1112 ) ( 1344 496 1008 ) 11 0 0 0 1 1 +} +// brush 66 +{ +( 1280 352 640 ) ( 1280 353 640 ) ( 1280 352 641 ) 29 0 0 0 1 1 +( 1280 320 640 ) ( 1280 320 641 ) ( 1281 320 640 ) 29 0 0 0 1 1 +( 1280 352 640 ) ( 1281 352 640 ) ( 1280 353 640 ) 29 0 0 0 1 1 +( 1312 512 960 ) ( 1312 513 960 ) ( 1313 512 960 ) 29 0 0 0 1 1 +( 1312 512 672 ) ( 1313 512 672 ) ( 1312 512 673 ) 29 0 0 0 1 1 +( 1312 512 672 ) ( 1312 512 673 ) ( 1312 513 672 ) 29 0 0 0 1 1 +} +// brush 67 +{ +( 1248 288 640 ) ( 1248 289 640 ) ( 1248 288 641 ) 16 0 0 0 1 1 +( 1280 288 640 ) ( 1280 288 641 ) ( 1281 288 640 ) 16 0 0 0 1 1 +( 1280 288 640 ) ( 1281 288 640 ) ( 1280 289 640 ) 16 0 0 0 1 1 +( 1344 320 960 ) ( 1344 321 960 ) ( 1345 320 960 ) 16 0 0 0 1 1 +( 1344 320 672 ) ( 1345 320 672 ) ( 1344 320 673 ) 16 0 0 0 1 1 +( 1344 320 672 ) ( 1344 320 673 ) ( 1344 321 672 ) 16 0 0 0 1 1 +} +// brush 68 +{ +( 1248 96 640 ) ( 1248 97 640 ) ( 1248 96 641 ) 16 0 0 0 1 1 +( 1280 96 640 ) ( 1280 96 641 ) ( 1281 96 640 ) 16 0 0 0 1 1 +( 1280 96 640 ) ( 1281 96 640 ) ( 1280 97 640 ) 16 0 0 0 1 1 +( 1344 128 960 ) ( 1344 129 960 ) ( 1345 128 960 ) 16 0 0 0 1 1 +( 1344 128 672 ) ( 1345 128 672 ) ( 1344 128 673 ) 16 0 0 0 1 1 +( 1344 128 672 ) ( 1344 128 673 ) ( 1344 129 672 ) 16 0 0 0 1 1 +} +// brush 69 +{ +( 1280 64 640 ) ( 1280 65 640 ) ( 1280 64 641 ) 26 0 0 0 1 1 +( 1344 0 640 ) ( 1344 0 641 ) ( 1345 0 640 ) 26 0 0 0 1 1 +( 1344 64 640 ) ( 1345 64 640 ) ( 1344 65 640 ) 26 0 0 0 1 1 +( 1408 96 960 ) ( 1408 97 960 ) ( 1409 96 960 ) 26 0 0 0 1 1 +( 1408 96 672 ) ( 1409 96 672 ) ( 1408 96 673 ) 26 0 0 0 1 1 +( 1760 96 672 ) ( 1760 96 673 ) ( 1760 97 672 ) 26 0 0 0 1 1 +} +// brush 70 +{ +( 1504 656 640 ) ( 1504 608 768 ) ( 1504 608 640 ) 28 0 0 0 1 1 +( 1376 600 648 ) ( 1952 600 648 ) ( 1952 600 624 ) 28 0 0 0 1 1 +( 1952 928 640 ) ( 1376 928 640 ) ( 1376 600 640 ) 28 0 0 0 1 1 +( 1376 600 656 ) ( 1376 928 656 ) ( 1952 928 656 ) 28 0 0 0 1 1 +( 1536 672 640 ) ( 1536 672 624 ) ( 1752 672 624 ) 28 0 0 0 1 1 +( 1760 608 640 ) ( 1760 656 768 ) ( 1760 656 640 ) 28 0 0 0 1 1 +} +// brush 71 +{ +( 1472 712 640 ) ( 1472 640 768 ) ( 1472 640 640 ) 28 0 0 0 1 1 +( 1376 608 640 ) ( 1952 608 640 ) ( 1952 608 616 ) 28 0 0 0 1 1 +( 1952 960 624 ) ( 1376 960 624 ) ( 1376 632 624 ) 28 0 0 0 1 1 +( 1376 632 640 ) ( 1376 960 640 ) ( 1952 960 640 ) 28 0 0 0 1 1 +( 1536 704 632 ) ( 1536 704 616 ) ( 1752 704 616 ) 28 0 0 0 1 1 +( 1792 712 640 ) ( 1792 640 640 ) ( 1792 640 768 ) 28 0 0 0 1 1 +} +// brush 72 +{ +( 1728 984 656 ) ( 1728 968 656 ) ( 1728 968 640 ) 7 0 0 0 1 1 +( 1728 960 656 ) ( 1744 960 656 ) ( 1744 960 640 ) 7 0 0 0 1 1 +( 1744 984 640 ) ( 1728 984 640 ) ( 1728 968 640 ) 7 0 0 0 1 1 +( 1728 968 800 ) ( 1728 984 800 ) ( 1744 984 800 ) 7 0 0 0 1 1 +( 1744 992 656 ) ( 1728 992 656 ) ( 1728 992 640 ) 7 0 0 0 1 1 +( 1760 968 656 ) ( 1760 984 656 ) ( 1760 984 640 ) 7 0 0 0 1 1 +} +// brush 73 +{ +( 1056 896 624 ) ( 1056 856 736 ) ( 1056 856 608 ) 29 0 0 0 1 1 +( 1016 896 624 ) ( 1312 896 624 ) ( 1312 896 528 ) 29 0 0 0 1 1 +( 1312 904 528 ) ( 1016 904 528 ) ( 1016 856 528 ) 29 0 0 0 1 1 +( 1016 856 640 ) ( 1016 904 640 ) ( 1312 904 640 ) 29 0 0 0 1 1 +( 1312 1120 624 ) ( 1016 1120 624 ) ( 1016 1120 528 ) 29 0 0 0 1 1 +( 1312 896 624 ) ( 1312 856 608 ) ( 1312 856 736 ) 29 0 0 0 1 1 +} +// brush 74 +{ +( 1184 704 544 ) ( 1184 705 544 ) ( 1184 704 545 ) 14 0 0 0 1 1 +( 1168 768 544 ) ( 1168 768 545 ) ( 1169 768 544 ) 14 0 0 0 1 1 +( 1168 704 544 ) ( 1169 704 544 ) ( 1168 705 544 ) 14 0 0 0 1 1 +( 1216 816 576 ) ( 1216 817 576 ) ( 1217 816 576 ) 14 0 0 0 1 1 +( 1216 832 560 ) ( 1217 832 560 ) ( 1216 832 561 ) 14 0 0 0 1 1 +( 1216 816 560 ) ( 1216 816 561 ) ( 1216 817 560 ) 14 0 0 0 1 1 +} +// brush 75 +{ +( 1184 704 576 ) ( 1184 705 576 ) ( 1184 704 577 ) 14 0 0 0 1 1 +( 1168 800 576 ) ( 1168 800 577 ) ( 1169 800 576 ) 14 0 0 0 1 1 +( 1168 704 576 ) ( 1169 704 576 ) ( 1168 705 576 ) 14 0 0 0 1 1 +( 1216 816 608 ) ( 1216 817 608 ) ( 1217 816 608 ) 14 0 0 0 1 1 +( 1216 832 592 ) ( 1217 832 592 ) ( 1216 832 593 ) 14 0 0 0 1 1 +( 1216 816 592 ) ( 1216 816 593 ) ( 1216 817 592 ) 14 0 0 0 1 1 +} +// brush 76 +{ +( 1440 160 672 ) ( 1440 161 672 ) ( 1440 160 673 ) 9 0 0 0 1 1 +( 1440 160 672 ) ( 1440 160 673 ) ( 1441 160 672 ) 9 0 0 0 1 1 +( 1440 160 672 ) ( 1441 160 672 ) ( 1440 161 672 ) 9 0 0 0 1 1 +( 1504 224 688 ) ( 1504 225 688 ) ( 1505 224 688 ) 9 0 0 0 1 1 +( 1504 224 704 ) ( 1505 224 704 ) ( 1504 224 705 ) 9 0 0 0 1 1 +( 1504 224 704 ) ( 1504 224 705 ) ( 1504 225 704 ) 9 0 0 0 1 1 +} +// brush 77 +{ +( 480 1216 496 ) ( 480 1200 496 ) ( 480 1200 480 ) 26 0 0 0 1 1 +( 536 1152 496 ) ( 648 1152 496 ) ( 648 1152 480 ) 26 0 0 0 1 1 +( 656 1216 480 ) ( 544 1216 480 ) ( 544 1200 480 ) 26 0 0 0 1 1 +( 544 1200 512 ) ( 544 1216 512 ) ( 656 1216 512 ) 26 0 0 0 1 1 +( 656 1216 496 ) ( 544 1216 496 ) ( 544 1216 480 ) 26 0 0 0 1 1 +( 736 1200 496 ) ( 736 1216 496 ) ( 736 1216 480 ) 26 0 0 0 1 1 +} +// brush 78 +{ +( 296 2152 480 ) ( 296 1568 480 ) ( 296 1568 424 ) 26 0 0 0 1 1 +( 296 1568 64 ) ( 296 1568 1032 ) ( 320 1568 1032 ) 26 0 0 0 1 1 +( 736 2152 384 ) ( 440 2152 384 ) ( 440 1568 384 ) 26 0 0 0 1 1 +( 440 1568 480 ) ( 440 2152 480 ) ( 736 2152 480 ) 26 0 0 0 1 1 +( 736 2144 480 ) ( 440 2144 480 ) ( 440 2144 424 ) 26 0 0 0 1 1 +( 864 2144 480 ) ( 864 2048 480 ) ( 864 2048 608 ) 26 0 0 0 1 1 +} +// brush 79 +{ +( 448 1248 496 ) ( 448 1232 496 ) ( 448 1232 480 ) 26 0 0 0 1 1 +( 536 1152 496 ) ( 648 1152 496 ) ( 648 1152 480 ) 26 0 0 0 1 1 +( 656 1248 480 ) ( 544 1248 480 ) ( 544 1232 480 ) 26 0 0 0 1 1 +( 544 1232 496 ) ( 544 1248 496 ) ( 656 1248 496 ) 26 0 0 0 1 1 +( 656 1248 496 ) ( 544 1248 496 ) ( 544 1248 480 ) 26 0 0 0 1 1 +( 832 1232 496 ) ( 832 1248 496 ) ( 832 1248 480 ) 26 0 0 0 1 1 +} +// brush 80 +{ +( 384 1120 480 ) ( 384 1120 424 ) ( 384 1336 424 ) 26 0 0 0 1 1 +( 376 1152 424 ) ( 376 1152 480 ) ( 816 1152 480 ) 26 0 0 0 1 1 +( 320 1376 384 ) ( 352 1120 384 ) ( 816 1120 384 ) 26 0 0 0 1 1 +( 352 1120 480 ) ( 320 1376 480 ) ( 416 1440 480 ) 26 0 0 0 1 1 +( 384 1408 480 ) ( 512 1408 480 ) ( 512 1408 608 ) 26 0 0 0 1 1 +( 928 1096 480 ) ( 928 1360 480 ) ( 928 1360 368 ) 26 0 0 0 1 1 +} +// brush 81 +{ +( 480 1288 312 ) ( 480 1136 312 ) ( 480 1136 64 ) 26 0 0 0 1 1 +( 536 1152 312 ) ( 696 1152 312 ) ( 696 1152 64 ) 26 0 0 0 1 1 +( 696 1288 192 ) ( 536 1288 192 ) ( 536 1136 192 ) 26 0 0 0 1 1 +( 536 1136 384 ) ( 536 1288 384 ) ( 696 1288 384 ) 26 0 0 0 1 1 +( 704 1344 312 ) ( 576 1344 440 ) ( 576 1344 312 ) 26 0 0 0 1 1 +( 704 1136 312 ) ( 704 1288 312 ) ( 704 1288 64 ) 26 0 0 0 1 1 +} +// brush 82 +{ +( 320 2024 312 ) ( 320 1872 312 ) ( 320 1872 64 ) 11 0 0 0 1 1 +( 376 1888 312 ) ( 536 1888 312 ) ( 536 1888 64 ) 11 0 0 0 1 1 +( 536 2024 192 ) ( 376 2024 192 ) ( 376 1872 192 ) 11 0 0 0 1 1 +( 376 1872 832 ) ( 376 2024 832 ) ( 536 2024 832 ) 11 0 0 0 1 1 +( 544 2144 312 ) ( 416 2144 440 ) ( 416 2144 312 ) 11 0 0 0 1 1 +( 544 1872 312 ) ( 544 2024 312 ) ( 544 2024 64 ) 11 0 0 0 1 1 +} +// brush 83 +{ +( 928 1152 192 ) ( 928 1153 192 ) ( 928 1152 193 ) 11 0 0 0 1 1 +( 1024 1152 192 ) ( 1024 1152 193 ) ( 1025 1152 192 ) 11 0 0 0 1 1 +( 1024 1152 192 ) ( 1025 1152 192 ) ( 1024 1153 192 ) 11 0 0 0 1 1 +( 1056 1536 768 ) ( 1056 1537 768 ) ( 1057 1536 768 ) 11 0 0 0 1 1 +( 1056 1440 224 ) ( 1057 1440 224 ) ( 1056 1440 225 ) 11 0 0 0 1 1 +( 1216 1536 224 ) ( 1216 1536 225 ) ( 1216 1537 224 ) 11 0 0 0 1 1 +} +// brush 84 +{ +( 928 2016 800 ) ( 928 2017 800 ) ( 928 2016 801 ) 11 0 0 0 1 1 +( 928 2080 800 ) ( 928 2080 801 ) ( 929 2080 800 ) 11 0 0 0 1 1 +( 928 2016 192 ) ( 929 2016 192 ) ( 928 2017 192 ) 11 0 0 0 1 1 +( 1184 2208 768 ) ( 1184 2209 768 ) ( 1185 2208 768 ) 11 0 0 0 1 1 +( 1184 2144 832 ) ( 1185 2144 832 ) ( 1184 2144 833 ) 11 0 0 0 1 1 +( 1120 2208 832 ) ( 1120 2208 833 ) ( 1120 2209 832 ) 11 0 0 0 1 1 +} +// brush 85 +{ +( 480 1864 312 ) ( 480 1712 312 ) ( 480 1712 64 ) 26 0 0 0 1 1 +( 536 1728 312 ) ( 696 1728 312 ) ( 696 1728 64 ) 26 0 0 0 1 1 +( 696 1864 192 ) ( 536 1864 192 ) ( 536 1712 192 ) 26 0 0 0 1 1 +( 536 1712 384 ) ( 536 1864 384 ) ( 696 1864 384 ) 26 0 0 0 1 1 +( 704 1984 312 ) ( 576 1984 440 ) ( 576 1984 312 ) 26 0 0 0 1 1 +( 704 1712 312 ) ( 704 1864 312 ) ( 704 1864 64 ) 26 0 0 0 1 1 +} +// brush 86 +{ +( 1216 1960 312 ) ( 1216 1800 312 ) ( 1216 1800 64 ) 11 0 0 0 1 1 +( 1216 1760 312 ) ( 1120 1760 416 ) ( 1120 1760 544 ) 11 0 0 0 1 1 +( 1240 1960 192 ) ( 1240 1800 192 ) ( 1392 1800 192 ) 11 0 0 0 1 1 +( 1392 1800 352 ) ( 1240 1800 352 ) ( 1240 1960 352 ) 11 0 0 0 1 1 +( 1216 1952 312 ) ( 1280 1952 312 ) ( 1280 1952 440 ) 11 0 0 0 1 1 +( 1344 1800 312 ) ( 1344 1960 312 ) ( 1344 1960 64 ) 11 0 0 0 1 1 +} +// brush 87 +{ +( 1152 1696 480 ) ( 1152 1792 480 ) ( 1152 1792 608 ) 26 0 0 0 1 1 +( 1152 1664 480 ) ( 1216 1664 608 ) ( 1216 1664 480 ) 26 0 0 0 1 1 +( 1152 1584 352 ) ( 1408 1616 352 ) ( 1408 2080 352 ) 26 0 0 0 1 1 +( 1408 1616 480 ) ( 1152 1584 480 ) ( 1088 1680 480 ) 26 0 0 0 1 1 +( 1152 2016 480 ) ( 1216 2016 480 ) ( 1216 2016 608 ) 26 0 0 0 1 1 +( 1376 1624 424 ) ( 1376 1624 480 ) ( 1376 2064 480 ) 26 0 0 0 1 1 +} +// brush 88 +{ +( 1952 984 904 ) ( 1952 968 904 ) ( 1952 968 608 ) 26 0 0 0 1 1 +( 1920 928 904 ) ( 2368 928 904 ) ( 2368 928 608 ) 26 0 0 0 1 1 +( 2368 992 448 ) ( 1920 992 448 ) ( 1920 976 448 ) 26 0 0 0 1 1 +( 1920 976 832 ) ( 1920 992 832 ) ( 2368 992 832 ) 26 0 0 0 1 1 +( 2456 1376 904 ) ( 2008 1376 904 ) ( 2008 1376 608 ) 26 0 0 0 1 1 +( 2080 976 904 ) ( 2080 992 904 ) ( 2080 992 608 ) 26 0 0 0 1 1 +} +// brush 89 +{ +( 320 2136 576 ) ( 320 1464 576 ) ( 320 1464 168 ) 13 0 0 0 1 1 +( 392 1152 672 ) ( 1400 1152 672 ) ( 1400 1152 264 ) 13 0 0 0 1 1 +( 1440 2136 48 ) ( 432 2136 48 ) ( 432 1464 48 ) 13 0 0 0 1 1 +( 432 1464 192 ) ( 432 2136 192 ) ( 1440 2136 192 ) 13 0 0 0 1 1 +( 1440 2144 576 ) ( 432 2144 576 ) ( 432 2144 168 ) 13 0 0 0 1 1 +( 1440 1192 576 ) ( 1440 1864 576 ) ( 1440 1864 168 ) 13 0 0 0 1 1 +} +// brush 90 +{ +( 1216 1248 192 ) ( 1216 1249 192 ) ( 1216 1248 193 ) 11 0 0 0 1 1 +( 1216 1120 192 ) ( 1216 1120 193 ) ( 1217 1120 192 ) 11 0 0 0 1 1 +( 1216 1248 192 ) ( 1217 1248 192 ) ( 1216 1249 192 ) 11 0 0 0 1 1 +( 1344 1280 480 ) ( 1344 1281 480 ) ( 1345 1280 480 ) 11 0 0 0 1 1 +( 1344 1280 224 ) ( 1345 1280 224 ) ( 1344 1280 225 ) 11 0 0 0 1 1 +( 1472 1280 224 ) ( 1472 1280 225 ) ( 1472 1281 224 ) 11 0 0 0 1 1 +} +// brush 91 +{ +( 1216 1888 672 ) ( 1216 1889 672 ) ( 1216 1888 673 ) 26 0 0 0 1 1 +( 1248 1728 672 ) ( 1248 1728 673 ) ( 1249 1728 672 ) 26 0 0 0 1 1 +( 1248 1888 608 ) ( 1249 1888 608 ) ( 1248 1889 608 ) 26 0 0 0 1 1 +( 1312 1952 768 ) ( 1312 1953 768 ) ( 1313 1952 768 ) 26 0 0 0 1 1 +( 1312 1984 704 ) ( 1313 1984 704 ) ( 1312 1984 705 ) 26 0 0 0 1 1 +( 1472 1952 704 ) ( 1472 1952 705 ) ( 1472 1953 704 ) 26 0 0 0 1 1 +} +// brush 92 +{ +( 1664 1424 240 ) ( 1664 1368 240 ) ( 1664 1368 200 ) 28 0 0 0 1 1 +( 1784 1248 240 ) ( 1904 1248 240 ) ( 1904 1248 200 ) 28 0 0 0 1 1 +( 1824 1424 208 ) ( 1704 1424 208 ) ( 1704 1368 208 ) 28 0 0 0 1 1 +( 1704 1368 224 ) ( 1704 1424 224 ) ( 1824 1424 224 ) 28 0 0 0 1 1 +( 1824 1760 240 ) ( 1704 1760 240 ) ( 1704 1760 200 ) 28 0 0 0 1 1 +( 2112 1280 240 ) ( 2112 1336 240 ) ( 2112 1336 200 ) 28 0 0 0 1 1 +} +// brush 93 +{ +( 1472 1120 192 ) ( 1472 1121 192 ) ( 1472 1120 193 ) 11 0 0 0 1 1 +( 1472 1024 192 ) ( 1472 1024 193 ) ( 1473 1024 192 ) 11 0 0 0 1 1 +( 1472 1120 192 ) ( 1473 1120 192 ) ( 1472 1121 192 ) 11 0 0 0 1 1 +( 1600 1152 480 ) ( 1600 1153 480 ) ( 1601 1152 480 ) 11 0 0 0 1 1 +( 1600 1120 224 ) ( 1601 1120 224 ) ( 1600 1120 225 ) 11 0 0 0 1 1 +( 1888 1152 224 ) ( 1888 1152 225 ) ( 1888 1153 224 ) 11 0 0 0 1 1 +} +// brush 94 +{ +( 1344 1568 692 ) ( 1344 1376 692 ) ( 1344 1376 480 ) 26 0 0 0 1 1 +( 1416 1088 692 ) ( 1464 1088 692 ) ( 1464 1088 480 ) 26 0 0 0 1 1 +( 1464 1376 480 ) ( 1464 1568 480 ) ( 1416 1568 480 ) 26 0 0 0 1 1 +( 1416 1568 608 ) ( 1464 1568 608 ) ( 1464 1376 608 ) 26 0 0 0 1 1 +( 1464 1792 692 ) ( 1416 1792 692 ) ( 1416 1792 480 ) 26 0 0 0 1 1 +( 2048 1376 692 ) ( 2048 1568 692 ) ( 2048 1568 480 ) 26 0 0 0 1 1 +} +// brush 95 +{ +( 1888 1120 192 ) ( 1888 1121 192 ) ( 1888 1120 193 ) 11 0 0 0 1 1 +( 1856 1024 192 ) ( 1856 1024 193 ) ( 1857 1024 192 ) 11 0 0 0 1 1 +( 1856 1120 192 ) ( 1857 1120 192 ) ( 1856 1121 192 ) 11 0 0 0 1 1 +( 1984 1152 480 ) ( 1984 1153 480 ) ( 1985 1152 480 ) 11 0 0 0 1 1 +( 1984 1248 224 ) ( 1985 1248 224 ) ( 1984 1248 225 ) 11 0 0 0 1 1 +( 2048 1152 224 ) ( 2048 1152 225 ) ( 2048 1153 224 ) 11 0 0 0 1 1 +} +// brush 96 +{ +( 2048 1120 192 ) ( 2048 1121 192 ) ( 2048 1120 193 ) 26 0 0 0 1 1 +( 2016 928 192 ) ( 2016 928 193 ) ( 2017 928 192 ) 26 0 0 0 1 1 +( 2016 1120 192 ) ( 2017 1120 192 ) ( 2016 1121 192 ) 26 0 0 0 1 1 +( 2144 1152 480 ) ( 2144 1153 480 ) ( 2145 1152 480 ) 26 0 0 0 1 1 +( 2144 1504 224 ) ( 2145 1504 224 ) ( 2144 1504 225 ) 26 0 0 0 1 1 +( 2144 1152 224 ) ( 2144 1152 225 ) ( 2144 1153 224 ) 26 0 0 0 1 1 +} +// brush 97 +{ +( 1472 1776 296 ) ( 1472 1768 296 ) ( 1472 1768 280 ) 26 0 0 0 1 1 +( 1512 1760 296 ) ( 1584 1760 296 ) ( 1584 1760 280 ) 26 0 0 0 1 1 +( 1584 1776 224 ) ( 1512 1776 224 ) ( 1512 1768 224 ) 26 0 0 0 1 1 +( 1512 1768 704 ) ( 1512 1776 704 ) ( 1584 1776 704 ) 26 0 0 0 1 1 +( 1584 1824 296 ) ( 1512 1824 296 ) ( 1512 1824 280 ) 26 0 0 0 1 1 +( 2688 1760 296 ) ( 2688 1768 296 ) ( 2688 1768 280 ) 26 0 0 0 1 1 +} +// brush 98 +{ +( 2112 1424 240 ) ( 2112 1368 240 ) ( 2112 1368 200 ) 28 0 0 0 1 1 +( 2232 1120 240 ) ( 2352 1120 240 ) ( 2352 1120 200 ) 28 0 0 0 1 1 +( 2272 1424 192 ) ( 2152 1424 192 ) ( 2152 1368 192 ) 28 0 0 0 1 1 +( 2152 1368 240 ) ( 2152 1424 240 ) ( 2272 1424 240 ) 28 0 0 0 1 1 +( 2272 1760 240 ) ( 2152 1760 240 ) ( 2152 1760 200 ) 28 0 0 0 1 1 +( 2688 1280 240 ) ( 2688 1336 240 ) ( 2688 1336 200 ) 28 0 0 0 1 1 +} +// brush 99 +{ +( 2144 1216 352 ) ( 2144 1192 352 ) ( 2144 1192 336 ) 27 0 0 0 1 1 +( 2336 1184 352 ) ( 2448 1184 352 ) ( 2448 1184 336 ) 27 0 0 0 1 1 +( 2336 1216 256 ) ( 2336 1192 256 ) ( 2448 1192 256 ) 27 0 0 0 1 1 +( 2448 1192 352 ) ( 2336 1192 352 ) ( 2336 1216 352 ) 27 0 0 0 1 1 +( 2448 1216 352 ) ( 2336 1216 352 ) ( 2336 1216 336 ) 27 0 0 0 1 1 +( 2336 1192 352 ) ( 2336 1216 352 ) ( 2336 1216 336 ) 27 0 0 0 1 1 +} +// brush 100 +{ +( 2144 1224 336 ) ( 2144 1200 336 ) ( 2144 1200 320 ) 27 0 0 0 1 1 +( 2336 1216 336 ) ( 2448 1216 336 ) ( 2448 1216 320 ) 27 0 0 0 1 1 +( 2336 1224 256 ) ( 2336 1200 256 ) ( 2448 1200 256 ) 27 0 0 0 1 1 +( 2448 1200 336 ) ( 2336 1200 336 ) ( 2336 1224 336 ) 27 0 0 0 1 1 +( 2448 1248 336 ) ( 2336 1248 336 ) ( 2336 1248 320 ) 27 0 0 0 1 1 +( 2336 1200 336 ) ( 2336 1224 336 ) ( 2336 1224 320 ) 27 0 0 0 1 1 +} +// brush 101 +{ +( 2144 1264 320 ) ( 2144 1240 320 ) ( 2144 1240 304 ) 27 0 0 0 1 1 +( 2336 1248 320 ) ( 2448 1248 320 ) ( 2448 1248 304 ) 27 0 0 0 1 1 +( 2336 1264 256 ) ( 2336 1240 256 ) ( 2448 1240 256 ) 27 0 0 0 1 1 +( 2448 1240 320 ) ( 2336 1240 320 ) ( 2336 1264 320 ) 27 0 0 0 1 1 +( 2448 1280 320 ) ( 2336 1280 320 ) ( 2336 1280 304 ) 27 0 0 0 1 1 +( 2336 1240 320 ) ( 2336 1264 320 ) ( 2336 1264 304 ) 27 0 0 0 1 1 +} +// brush 102 +{ +( 2144 1304 304 ) ( 2144 1280 304 ) ( 2144 1280 288 ) 27 0 0 0 1 1 +( 2336 1280 304 ) ( 2448 1280 304 ) ( 2448 1280 288 ) 27 0 0 0 1 1 +( 2336 1304 256 ) ( 2336 1280 256 ) ( 2448 1280 256 ) 27 0 0 0 1 1 +( 2448 1280 304 ) ( 2336 1280 304 ) ( 2336 1304 304 ) 27 0 0 0 1 1 +( 2448 1312 304 ) ( 2336 1312 304 ) ( 2336 1312 288 ) 27 0 0 0 1 1 +( 2336 1280 304 ) ( 2336 1304 304 ) ( 2336 1304 288 ) 27 0 0 0 1 1 +} +// brush 103 +{ +( 2144 1344 288 ) ( 2144 1320 288 ) ( 2144 1320 272 ) 27 0 0 0 1 1 +( 2336 1312 288 ) ( 2448 1312 288 ) ( 2448 1312 272 ) 27 0 0 0 1 1 +( 2336 1344 256 ) ( 2336 1320 256 ) ( 2448 1320 256 ) 27 0 0 0 1 1 +( 2448 1320 288 ) ( 2336 1320 288 ) ( 2336 1344 288 ) 27 0 0 0 1 1 +( 2448 1344 288 ) ( 2336 1344 288 ) ( 2336 1344 272 ) 27 0 0 0 1 1 +( 2336 1320 288 ) ( 2336 1344 288 ) ( 2336 1344 272 ) 27 0 0 0 1 1 +} +// brush 104 +{ +( 2144 1416 272 ) ( 2144 1392 272 ) ( 2144 1392 256 ) 27 0 0 0 1 1 +( 2336 1344 272 ) ( 2448 1344 272 ) ( 2448 1344 256 ) 27 0 0 0 1 1 +( 2336 1416 256 ) ( 2336 1392 256 ) ( 2448 1392 256 ) 27 0 0 0 1 1 +( 2448 1392 272 ) ( 2336 1392 272 ) ( 2336 1416 272 ) 27 0 0 0 1 1 +( 2448 1376 272 ) ( 2336 1376 272 ) ( 2336 1376 256 ) 27 0 0 0 1 1 +( 2368 1392 272 ) ( 2368 1416 272 ) ( 2368 1416 256 ) 27 0 0 0 1 1 +} +// brush 105 +{ +( 2144 1224 368 ) ( 2144 1200 368 ) ( 2144 1200 352 ) 27 0 0 0 1 1 +( 2336 1152 368 ) ( 2448 1152 368 ) ( 2448 1152 352 ) 27 0 0 0 1 1 +( 2336 1224 256 ) ( 2336 1200 256 ) ( 2448 1200 256 ) 27 0 0 0 1 1 +( 2448 1200 368 ) ( 2336 1200 368 ) ( 2336 1224 368 ) 27 0 0 0 1 1 +( 2448 1184 368 ) ( 2336 1184 368 ) ( 2336 1184 352 ) 27 0 0 0 1 1 +( 2336 1200 368 ) ( 2336 1224 368 ) ( 2336 1224 352 ) 27 0 0 0 1 1 +} +// brush 106 +{ +( 2144 1152 384 ) ( 2144 1128 384 ) ( 2144 1128 368 ) 27 0 0 0 1 1 +( 2336 1120 384 ) ( 2448 1120 384 ) ( 2448 1120 368 ) 27 0 0 0 1 1 +( 2336 1152 256 ) ( 2336 1128 256 ) ( 2448 1128 256 ) 27 0 0 0 1 1 +( 2448 1128 384 ) ( 2336 1128 384 ) ( 2336 1152 384 ) 27 0 0 0 1 1 +( 2448 1152 384 ) ( 2336 1152 384 ) ( 2336 1152 368 ) 27 0 0 0 1 1 +( 2336 1128 384 ) ( 2336 1152 384 ) ( 2336 1152 368 ) 27 0 0 0 1 1 +} +// brush 107 +{ +( 2144 1112 400 ) ( 2144 1088 400 ) ( 2144 1088 384 ) 27 0 0 0 1 1 +( 2336 1088 400 ) ( 2448 1088 400 ) ( 2448 1088 384 ) 27 0 0 0 1 1 +( 2336 1112 384 ) ( 2336 1088 384 ) ( 2448 1088 384 ) 27 0 0 0 1 1 +( 2448 1088 400 ) ( 2336 1088 400 ) ( 2336 1112 400 ) 27 0 0 0 1 1 +( 2448 1120 400 ) ( 2336 1120 400 ) ( 2336 1120 384 ) 27 0 0 0 1 1 +( 2336 1088 400 ) ( 2336 1112 400 ) ( 2336 1112 384 ) 27 0 0 0 1 1 +} +// brush 108 +{ +( 2144 1072 416 ) ( 2144 1048 416 ) ( 2144 1048 400 ) 27 0 0 0 1 1 +( 2336 1056 416 ) ( 2448 1056 416 ) ( 2448 1056 400 ) 27 0 0 0 1 1 +( 2336 1072 400 ) ( 2336 1048 400 ) ( 2448 1048 400 ) 27 0 0 0 1 1 +( 2448 1048 416 ) ( 2336 1048 416 ) ( 2336 1072 416 ) 27 0 0 0 1 1 +( 2448 1088 416 ) ( 2336 1088 416 ) ( 2336 1088 400 ) 27 0 0 0 1 1 +( 2336 1048 416 ) ( 2336 1072 416 ) ( 2336 1072 400 ) 27 0 0 0 1 1 +} +// brush 109 +{ +( 2144 1032 432 ) ( 2144 1008 432 ) ( 2144 1008 416 ) 27 0 0 0 1 1 +( 2336 1024 432 ) ( 2448 1024 432 ) ( 2448 1024 416 ) 27 0 0 0 1 1 +( 2336 1032 416 ) ( 2336 1008 416 ) ( 2448 1008 416 ) 27 0 0 0 1 1 +( 2448 1008 432 ) ( 2336 1008 432 ) ( 2336 1032 432 ) 27 0 0 0 1 1 +( 2448 1056 432 ) ( 2336 1056 432 ) ( 2336 1056 416 ) 27 0 0 0 1 1 +( 2336 1008 432 ) ( 2336 1032 432 ) ( 2336 1032 416 ) 27 0 0 0 1 1 +} +// brush 110 +{ +( 2144 1024 448 ) ( 2144 1000 448 ) ( 2144 1000 432 ) 27 0 0 0 1 1 +( 2336 992 448 ) ( 2448 992 448 ) ( 2448 992 432 ) 27 0 0 0 1 1 +( 2336 1024 432 ) ( 2336 1000 432 ) ( 2448 1000 432 ) 27 0 0 0 1 1 +( 2448 1000 448 ) ( 2336 1000 448 ) ( 2336 1024 448 ) 27 0 0 0 1 1 +( 2448 1024 448 ) ( 2336 1024 448 ) ( 2336 1024 432 ) 27 0 0 0 1 1 +( 2336 1000 448 ) ( 2336 1024 448 ) ( 2336 1024 432 ) 27 0 0 0 1 1 +} +// brush 111 +{ +( 1888 800 384 ) ( 1888 801 384 ) ( 1888 800 385 ) 28 0 0 0 1 1 +( 2080 704 384 ) ( 2080 704 385 ) ( 2081 704 384 ) 28 0 0 0 1 1 +( 2080 800 384 ) ( 2081 800 384 ) ( 2080 801 384 ) 28 0 0 0 1 1 +( 2336 1024 496 ) ( 2336 1025 496 ) ( 2337 1024 496 ) 28 0 0 0 1 1 +( 2336 928 416 ) ( 2337 928 416 ) ( 2336 928 417 ) 28 0 0 0 1 1 +( 2688 1024 416 ) ( 2688 1024 417 ) ( 2688 1025 416 ) 28 0 0 0 1 1 +} +// brush 112 +{ +( 2144 992 464 ) ( 2144 968 464 ) ( 2144 968 448 ) 27 0 0 0 1 1 +( 2336 960 464 ) ( 2448 960 464 ) ( 2448 960 448 ) 27 0 0 0 1 1 +( 2336 992 448 ) ( 2336 968 448 ) ( 2448 968 448 ) 27 0 0 0 1 1 +( 2448 968 464 ) ( 2336 968 464 ) ( 2336 992 464 ) 27 0 0 0 1 1 +( 2448 992 464 ) ( 2336 992 464 ) ( 2336 992 448 ) 27 0 0 0 1 1 +( 2336 968 464 ) ( 2336 992 464 ) ( 2336 992 448 ) 27 0 0 0 1 1 +} +// brush 113 +{ +( 2144 960 480 ) ( 2144 936 480 ) ( 2144 936 464 ) 27 0 0 0 1 1 +( 2336 928 480 ) ( 2448 928 480 ) ( 2448 928 464 ) 27 0 0 0 1 1 +( 2336 960 464 ) ( 2336 936 464 ) ( 2448 936 464 ) 27 0 0 0 1 1 +( 2448 936 480 ) ( 2336 936 480 ) ( 2336 960 480 ) 27 0 0 0 1 1 +( 2448 960 480 ) ( 2336 960 480 ) ( 2336 960 464 ) 27 0 0 0 1 1 +( 2336 936 480 ) ( 2336 960 480 ) ( 2336 960 464 ) 27 0 0 0 1 1 +} +// brush 114 +{ +( 1856 928 512 ) ( 1856 816 512 ) ( 1856 816 496 ) 27 0 0 0 1 1 +( 1904 800 512 ) ( 1928 800 512 ) ( 1928 800 496 ) 27 0 0 0 1 1 +( 1928 928 496 ) ( 1904 928 496 ) ( 1904 816 496 ) 27 0 0 0 1 1 +( 1904 816 512 ) ( 1904 928 512 ) ( 1928 928 512 ) 27 0 0 0 1 1 +( 1928 928 512 ) ( 1904 928 512 ) ( 1904 928 496 ) 27 0 0 0 1 1 +( 1888 816 512 ) ( 1888 928 512 ) ( 1888 928 496 ) 27 0 0 0 1 1 +} +// brush 115 +{ +( 2336 1072 272 ) ( 2336 1073 272 ) ( 2336 1072 273 ) 26 0 0 0 1 1 +( 2336 896 272 ) ( 2336 896 273 ) ( 2337 896 272 ) 26 0 0 0 1 1 +( 2336 1072 224 ) ( 2337 1072 224 ) ( 2336 1073 224 ) 26 0 0 0 1 1 +( 2416 1136 800 ) ( 2416 1137 800 ) ( 2417 1136 800 ) 26 0 0 0 1 1 +( 2416 1120 288 ) ( 2417 1120 288 ) ( 2416 1120 289 ) 26 0 0 0 1 1 +( 2560 1136 288 ) ( 2560 1136 289 ) ( 2560 1137 288 ) 26 0 0 0 1 1 +} +// brush 116 +{ +( 2144 1168 240 ) ( 2144 1169 240 ) ( 2144 1168 241 ) 28 0 0 0 1 1 +( 2144 1120 240 ) ( 2144 1120 241 ) ( 2145 1120 240 ) 28 0 0 0 1 1 +( 2144 1168 240 ) ( 2145 1168 240 ) ( 2144 1169 240 ) 28 0 0 0 1 1 +( 2384 1440 256 ) ( 2384 1441 256 ) ( 2385 1440 256 ) 28 0 0 0 1 1 +( 2384 1472 256 ) ( 2385 1472 256 ) ( 2384 1472 257 ) 28 0 0 0 1 1 +( 2496 1440 256 ) ( 2496 1440 257 ) ( 2496 1441 256 ) 28 0 0 0 1 1 +} +// brush 117 +{ +( 1984 784 272 ) ( 1984 785 272 ) ( 1984 784 273 ) 26 0 0 0 1 1 +( 2304 640 272 ) ( 2304 640 273 ) ( 2305 640 272 ) 26 0 0 0 1 1 +( 2304 784 496 ) ( 2305 784 496 ) ( 2304 785 496 ) 26 0 0 0 1 1 +( 2384 848 768 ) ( 2384 849 768 ) ( 2385 848 768 ) 26 0 0 0 1 1 +( 2384 736 288 ) ( 2385 736 288 ) ( 2384 736 289 ) 26 0 0 0 1 1 +( 2336 848 288 ) ( 2336 848 289 ) ( 2336 849 288 ) 26 0 0 0 1 1 +} +// brush 118 +{ +( 1984 1408 544 ) ( 1984 1409 544 ) ( 1984 1408 545 ) 26 0 0 0 1 1 +( 1984 1376 544 ) ( 1984 1376 545 ) ( 1985 1376 544 ) 26 0 0 0 1 1 +( 1984 1408 608 ) ( 1985 1408 608 ) ( 1984 1409 608 ) 26 0 0 0 1 1 +( 2080 1760 800 ) ( 2080 1761 800 ) ( 2081 1760 800 ) 26 0 0 0 1 1 +( 2080 1760 576 ) ( 2081 1760 576 ) ( 2080 1760 577 ) 26 0 0 0 1 1 +( 2112 1760 576 ) ( 2112 1760 577 ) ( 2112 1761 576 ) 26 0 0 0 1 1 +} +// brush 119 +{ +( 2624 1280 224 ) ( 2624 1281 224 ) ( 2624 1280 225 ) 27 0 0 0 1 1 +( 2624 1280 224 ) ( 2624 1280 225 ) ( 2625 1280 224 ) 27 0 0 0 1 1 +( 2624 1280 240 ) ( 2625 1280 240 ) ( 2624 1281 240 ) 27 0 0 0 1 1 +( 2688 1344 736 ) ( 2688 1345 736 ) ( 2689 1344 736 ) 27 0 0 0 1 1 +( 2688 1344 256 ) ( 2689 1344 256 ) ( 2688 1344 257 ) 27 0 0 0 1 1 +( 2752 1344 256 ) ( 2752 1344 257 ) ( 2752 1345 256 ) 27 0 0 0 1 1 +} +// brush 120 +{ +( 2624 1536 224 ) ( 2624 1537 224 ) ( 2624 1536 225 ) 27 0 0 0 1 1 +( 2624 1536 224 ) ( 2624 1536 225 ) ( 2625 1536 224 ) 27 0 0 0 1 1 +( 2624 1536 240 ) ( 2625 1536 240 ) ( 2624 1537 240 ) 27 0 0 0 1 1 +( 2688 1600 736 ) ( 2688 1601 736 ) ( 2689 1600 736 ) 27 0 0 0 1 1 +( 2688 1600 256 ) ( 2689 1600 256 ) ( 2688 1600 257 ) 27 0 0 0 1 1 +( 2752 1600 256 ) ( 2752 1600 257 ) ( 2752 1601 256 ) 27 0 0 0 1 1 +} +// brush 121 +{ +( 2688 1264 296 ) ( 2688 1256 296 ) ( 2688 1256 280 ) 26 0 0 0 1 1 +( 1800 672 296 ) ( 1872 672 296 ) ( 1872 672 280 ) 26 0 0 0 1 1 +( 1872 1264 224 ) ( 1800 1264 224 ) ( 1800 1256 224 ) 26 0 0 0 1 1 +( 1800 1256 704 ) ( 1800 1264 704 ) ( 1872 1264 704 ) 26 0 0 0 1 1 +( 1872 1760 296 ) ( 1800 1760 296 ) ( 1800 1760 280 ) 26 0 0 0 1 1 +( 2752 1248 296 ) ( 2752 1256 296 ) ( 2752 1256 280 ) 26 0 0 0 1 1 +} +// brush 122 +{ +( 2048 1504 448 ) ( 2048 1505 448 ) ( 2048 1504 449 ) 26 0 0 0 1 1 +( 2048 1664 448 ) ( 2048 1664 449 ) ( 2049 1664 448 ) 26 0 0 0 1 1 +( 2048 1504 224 ) ( 2049 1504 224 ) ( 2048 1505 224 ) 26 0 0 0 1 1 +( 2144 1760 512 ) ( 2144 1761 512 ) ( 2145 1760 512 ) 26 0 0 0 1 1 +( 2144 1760 480 ) ( 2145 1760 480 ) ( 2144 1760 481 ) 26 0 0 0 1 1 +( 2176 1760 480 ) ( 2176 1760 481 ) ( 2176 1761 480 ) 26 0 0 0 1 1 +} +// brush 123 +{ +( 2496 1696 224 ) ( 2496 1697 224 ) ( 2496 1696 225 ) 27 0 0 0 1 1 +( 2496 1696 224 ) ( 2496 1696 225 ) ( 2497 1696 224 ) 27 0 0 0 1 1 +( 2496 1696 240 ) ( 2497 1696 240 ) ( 2496 1697 240 ) 27 0 0 0 1 1 +( 2560 1760 736 ) ( 2560 1761 736 ) ( 2561 1760 736 ) 27 0 0 0 1 1 +( 2560 1824 256 ) ( 2561 1824 256 ) ( 2560 1824 257 ) 27 0 0 0 1 1 +( 2560 1760 256 ) ( 2560 1760 257 ) ( 2560 1761 256 ) 27 0 0 0 1 1 +} +// brush 124 +{ +( 2336 1120 256 ) ( 2336 1121 256 ) ( 2336 1120 257 ) 7 0 0 0 1 1 +( 2336 1120 256 ) ( 2336 1120 257 ) ( 2337 1120 256 ) 7 0 0 0 1 1 +( 2336 1120 256 ) ( 2337 1120 256 ) ( 2336 1121 256 ) 7 0 0 0 1 1 +( 2368 1344 384 ) ( 2368 1345 384 ) ( 2369 1344 384 ) 7 0 0 0 1 1 +( 2368 1344 288 ) ( 2369 1344 288 ) ( 2368 1344 289 ) 7 0 0 0 1 1 +( 2368 1344 288 ) ( 2368 1344 289 ) ( 2368 1345 288 ) 7 0 0 0 1 1 +} +// brush 125 +{ +( 2080 1024 704 ) ( 2080 1025 704 ) ( 2080 1024 705 ) 27 0 0 0 1 1 +( 2048 1024 704 ) ( 2048 1024 705 ) ( 2049 1024 704 ) 27 0 0 0 1 1 +( 2048 1024 704 ) ( 2049 1024 704 ) ( 2048 1025 704 ) 27 0 0 0 1 1 +( 2336 1056 736 ) ( 2336 1057 736 ) ( 2337 1056 736 ) 27 0 0 0 1 1 +( 2336 1056 736 ) ( 2337 1056 736 ) ( 2336 1056 737 ) 27 0 0 0 1 1 +( 2336 1056 736 ) ( 2336 1056 737 ) ( 2336 1057 736 ) 27 0 0 0 1 1 +} +// brush 126 +{ +( 1952 832 704 ) ( 1952 833 704 ) ( 1952 832 705 ) 27 0 0 0 1 1 +( 2048 832 704 ) ( 2048 832 705 ) ( 2049 832 704 ) 27 0 0 0 1 1 +( 2048 832 704 ) ( 2049 832 704 ) ( 2048 833 704 ) 27 0 0 0 1 1 +( 2336 864 736 ) ( 2336 865 736 ) ( 2337 864 736 ) 27 0 0 0 1 1 +( 2336 864 736 ) ( 2337 864 736 ) ( 2336 864 737 ) 27 0 0 0 1 1 +( 2752 864 736 ) ( 2752 864 737 ) ( 2752 865 736 ) 27 0 0 0 1 1 +} +// brush 127 +{ +( 2176 736 736 ) ( 2176 737 736 ) ( 2176 736 737 ) 27 0 0 0 1 1 +( 2208 736 736 ) ( 2208 736 737 ) ( 2209 736 736 ) 27 0 0 0 1 1 +( 2208 736 736 ) ( 2209 736 736 ) ( 2208 737 736 ) 27 0 0 0 1 1 +( 2240 832 768 ) ( 2240 833 768 ) ( 2241 832 768 ) 27 0 0 0 1 1 +( 2240 1088 768 ) ( 2241 1088 768 ) ( 2240 1088 769 ) 27 0 0 0 1 1 +( 2240 832 768 ) ( 2240 832 769 ) ( 2240 833 768 ) 27 0 0 0 1 1 +} +// brush 128 +{ +( 2432 1344 640 ) ( 2432 1345 640 ) ( 2432 1344 641 ) 27 0 0 0 1 1 +( 2432 1344 640 ) ( 2432 1344 641 ) ( 2433 1344 640 ) 27 0 0 0 1 1 +( 2432 1344 608 ) ( 2433 1344 608 ) ( 2432 1345 608 ) 27 0 0 0 1 1 +( 2464 1568 704 ) ( 2464 1569 704 ) ( 2465 1568 704 ) 27 0 0 0 1 1 +( 2464 1536 672 ) ( 2465 1536 672 ) ( 2464 1536 673 ) 27 0 0 0 1 1 +( 2464 1568 672 ) ( 2464 1568 673 ) ( 2464 1569 672 ) 27 0 0 0 1 1 +} +// brush 129 +{ +( 2272 1344 640 ) ( 2272 1345 640 ) ( 2272 1344 641 ) 27 0 0 0 1 1 +( 2272 1344 640 ) ( 2272 1344 641 ) ( 2273 1344 640 ) 27 0 0 0 1 1 +( 2272 1344 608 ) ( 2273 1344 608 ) ( 2272 1345 608 ) 27 0 0 0 1 1 +( 2304 1568 704 ) ( 2304 1569 704 ) ( 2305 1568 704 ) 27 0 0 0 1 1 +( 2304 1536 672 ) ( 2305 1536 672 ) ( 2304 1536 673 ) 27 0 0 0 1 1 +( 2304 1568 672 ) ( 2304 1568 673 ) ( 2304 1569 672 ) 27 0 0 0 1 1 +} +// brush 130 +{ +( 2272 1376 640 ) ( 2272 1377 640 ) ( 2272 1376 641 ) 27 0 0 0 1 1 +( 2304 1536 640 ) ( 2304 1536 641 ) ( 2305 1536 640 ) 27 0 0 0 1 1 +( 2304 1376 608 ) ( 2305 1376 608 ) ( 2304 1377 608 ) 27 0 0 0 1 1 +( 2336 1600 704 ) ( 2336 1601 704 ) ( 2337 1600 704 ) 27 0 0 0 1 1 +( 2336 1568 672 ) ( 2337 1568 672 ) ( 2336 1568 673 ) 27 0 0 0 1 1 +( 2464 1600 672 ) ( 2464 1600 673 ) ( 2464 1601 672 ) 27 0 0 0 1 1 +} +// brush 131 +{ +( 2272 1152 640 ) ( 2272 1153 640 ) ( 2272 1152 641 ) 27 0 0 0 1 1 +( 2304 1312 640 ) ( 2304 1312 641 ) ( 2305 1312 640 ) 27 0 0 0 1 1 +( 2304 1152 608 ) ( 2305 1152 608 ) ( 2304 1153 608 ) 27 0 0 0 1 1 +( 2336 1376 704 ) ( 2336 1377 704 ) ( 2337 1376 704 ) 27 0 0 0 1 1 +( 2336 1344 672 ) ( 2337 1344 672 ) ( 2336 1344 673 ) 27 0 0 0 1 1 +( 2464 1376 672 ) ( 2464 1376 673 ) ( 2464 1377 672 ) 27 0 0 0 1 1 +} +// brush 132 +{ +( 2464 1376 640 ) ( 2464 1377 640 ) ( 2464 1376 641 ) 27 0 0 0 1 1 +( 2464 1376 640 ) ( 2464 1376 641 ) ( 2465 1376 640 ) 27 0 0 0 1 1 +( 2464 1376 640 ) ( 2465 1376 640 ) ( 2464 1377 640 ) 27 0 0 0 1 1 +( 2688 1408 672 ) ( 2688 1409 672 ) ( 2689 1408 672 ) 27 0 0 0 1 1 +( 2688 1408 672 ) ( 2689 1408 672 ) ( 2688 1408 673 ) 27 0 0 0 1 1 +( 2688 1408 672 ) ( 2688 1408 673 ) ( 2688 1409 672 ) 27 0 0 0 1 1 +} +// brush 133 +{ +( 2464 1472 640 ) ( 2464 1473 640 ) ( 2464 1472 641 ) 27 0 0 0 1 1 +( 2464 1472 640 ) ( 2464 1472 641 ) ( 2465 1472 640 ) 27 0 0 0 1 1 +( 2464 1472 640 ) ( 2465 1472 640 ) ( 2464 1473 640 ) 27 0 0 0 1 1 +( 2688 1504 672 ) ( 2688 1505 672 ) ( 2689 1504 672 ) 27 0 0 0 1 1 +( 2688 1504 672 ) ( 2689 1504 672 ) ( 2688 1504 673 ) 27 0 0 0 1 1 +( 2688 1504 672 ) ( 2688 1504 673 ) ( 2688 1505 672 ) 27 0 0 0 1 1 +} +// brush 134 +{ +( 2304 1568 640 ) ( 2304 1569 640 ) ( 2304 1568 641 ) 27 0 0 0 1 1 +( 2304 1568 640 ) ( 2304 1568 641 ) ( 2305 1568 640 ) 27 0 0 0 1 1 +( 2304 1568 640 ) ( 2305 1568 640 ) ( 2304 1569 640 ) 27 0 0 0 1 1 +( 2432 1760 672 ) ( 2432 1761 672 ) ( 2433 1760 672 ) 27 0 0 0 1 1 +( 2432 1760 672 ) ( 2433 1760 672 ) ( 2432 1760 673 ) 27 0 0 0 1 1 +( 2336 1760 672 ) ( 2336 1760 673 ) ( 2336 1761 672 ) 27 0 0 0 1 1 +} +// brush 135 +{ +( 2400 1568 640 ) ( 2400 1569 640 ) ( 2400 1568 641 ) 27 0 0 0 1 1 +( 2400 1568 640 ) ( 2400 1568 641 ) ( 2401 1568 640 ) 27 0 0 0 1 1 +( 2400 1568 640 ) ( 2401 1568 640 ) ( 2400 1569 640 ) 27 0 0 0 1 1 +( 2528 1760 672 ) ( 2528 1761 672 ) ( 2529 1760 672 ) 27 0 0 0 1 1 +( 2528 1760 672 ) ( 2529 1760 672 ) ( 2528 1760 673 ) 27 0 0 0 1 1 +( 2432 1760 672 ) ( 2432 1760 673 ) ( 2432 1761 672 ) 27 0 0 0 1 1 +} +// brush 136 +{ +( 320 1736 128 ) ( 320 1736 1096 ) ( 320 1712 1096 ) 11 0 0 0 1 1 +( 408 1120 848 ) ( 888 1120 848 ) ( 888 1120 832 ) 11 0 0 0 1 1 +( 608 2200 832 ) ( 128 2200 832 ) ( 128 1920 832 ) 11 0 0 0 1 1 +( 128 1920 864 ) ( 128 2200 864 ) ( 608 2200 864 ) 11 0 0 0 1 1 +( -288 2144 1096 ) ( -312 2144 1096 ) ( -312 2144 128 ) 11 0 0 0 1 1 +( 896 1768 848 ) ( 896 2048 848 ) ( 896 2048 832 ) 11 0 0 0 1 1 +} +// brush 137 +{ +( 1248 512 896 ) ( 1248 513 896 ) ( 1248 512 897 ) 27 0 0 0 1 1 +( 1312 640 896 ) ( 1312 640 897 ) ( 1313 640 896 ) 27 0 0 0 1 1 +( 1312 512 896 ) ( 1313 512 896 ) ( 1312 513 896 ) 27 0 0 0 1 1 +( 1952 960 928 ) ( 1952 961 928 ) ( 1953 960 928 ) 27 0 0 0 1 1 +( 1952 960 928 ) ( 1953 960 928 ) ( 1952 960 929 ) 27 0 0 0 1 1 +( 1952 960 928 ) ( 1952 960 929 ) ( 1952 961 928 ) 27 0 0 0 1 1 +} +// brush 138 +{ +( 1056 720 544 ) ( 1056 721 544 ) ( 1056 720 545 ) 28 0 0 0 1 1 +( 1040 736 544 ) ( 1040 736 545 ) ( 1041 736 544 ) 28 0 0 0 1 1 +( 1040 720 544 ) ( 1041 720 544 ) ( 1040 721 544 ) 28 0 0 0 1 1 +( 1104 784 560 ) ( 1104 785 560 ) ( 1105 784 560 ) 28 0 0 0 1 1 +( 1104 800 560 ) ( 1105 800 560 ) ( 1104 800 561 ) 28 0 0 0 1 1 +( 1120 784 560 ) ( 1120 784 561 ) ( 1120 785 560 ) 28 0 0 0 1 1 +} +// brush 139 +{ +( 1408 2120 504 ) ( 1408 1800 504 ) ( 1408 1800 32 ) 28 0 0 0 1 1 +( 1616 1792 504 ) ( 2032 1792 504 ) ( 2032 1792 32 ) 28 0 0 0 1 1 +( 1616 1744 416 ) ( 2032 1744 416 ) ( 2032 2064 416 ) 28 0 0 0 1 1 +( 2032 2064 512 ) ( 2032 1744 512 ) ( 1616 1744 512 ) 28 0 0 0 1 1 +( 2040 2144 504 ) ( 1624 2144 504 ) ( 1624 2144 32 ) 28 0 0 0 1 1 +( 2176 1760 504 ) ( 2176 2080 504 ) ( 2176 2080 32 ) 28 0 0 0 1 1 +} +// brush 140 +{ +( 1760 2160 488 ) ( 1760 2128 488 ) ( 1760 2128 472 ) 27 0 0 0 1 1 +( 1776 2144 488 ) ( 1904 2144 488 ) ( 1904 2144 472 ) 27 0 0 0 1 1 +( 1776 2128 480 ) ( 1904 2128 480 ) ( 1904 2160 480 ) 27 0 0 0 1 1 +( 1904 2160 496 ) ( 1904 2128 496 ) ( 1776 2128 496 ) 27 0 0 0 1 1 +( 1904 2176 488 ) ( 1776 2176 488 ) ( 1776 2176 472 ) 27 0 0 0 1 1 +( 1920 2128 488 ) ( 1920 2160 488 ) ( 1920 2160 472 ) 27 0 0 0 1 1 +} +// brush 141 +{ +( 1760 2224 472 ) ( 1760 2192 472 ) ( 1760 2192 456 ) 27 0 0 0 1 1 +( 1776 2176 472 ) ( 1904 2176 472 ) ( 1904 2176 456 ) 27 0 0 0 1 1 +( 1776 2192 464 ) ( 1904 2192 464 ) ( 1904 2224 464 ) 27 0 0 0 1 1 +( 1904 2224 480 ) ( 1904 2192 480 ) ( 1776 2192 480 ) 27 0 0 0 1 1 +( 1904 2208 472 ) ( 1776 2208 472 ) ( 1776 2208 456 ) 27 0 0 0 1 1 +( 1920 2192 472 ) ( 1920 2224 472 ) ( 1920 2224 456 ) 27 0 0 0 1 1 +} +// brush 142 +{ +( 1760 2256 456 ) ( 1760 2224 456 ) ( 1760 2224 440 ) 27 0 0 0 1 1 +( 1776 2208 456 ) ( 1904 2208 456 ) ( 1904 2208 440 ) 27 0 0 0 1 1 +( 1776 2208 448 ) ( 1904 2208 448 ) ( 1904 2240 448 ) 27 0 0 0 1 1 +( 1904 2240 464 ) ( 1904 2208 464 ) ( 1776 2208 464 ) 27 0 0 0 1 1 +( 1904 2240 456 ) ( 1776 2240 456 ) ( 1776 2240 440 ) 27 0 0 0 1 1 +( 1920 2200 456 ) ( 1920 2232 456 ) ( 1920 2232 440 ) 27 0 0 0 1 1 +} +// brush 143 +{ +( 1536 2232 880 ) ( 1536 2168 880 ) ( 1536 2168 240 ) 14 8 -16 0 1 1 +( 1544 2168 880 ) ( 1608 2168 880 ) ( 1608 2168 240 ) 14 8 -16 0 1 1 +( 1544 2168 440 ) ( 1608 2168 440 ) ( 1608 2232 440 ) 14 8 -16 0 1 1 +( 1608 2232 568 ) ( 1608 2168 568 ) ( 1544 2168 568 ) 14 48 -8 0 1 1 +( 1608 2232 880 ) ( 1544 2232 880 ) ( 1544 2232 240 ) 14 8 -16 0 1 1 +( 1600 2168 880 ) ( 1600 2232 880 ) ( 1600 2232 240 ) 14 8 -16 0 1 1 +} +// brush 144 +{ +( 1632 2032 632 ) ( 1632 1968 632 ) ( 1632 1968 504 ) 14 0 -16 0 1 1 +( 1608 1984 632 ) ( 1672 1984 632 ) ( 1672 1984 504 ) 14 0 -16 0 1 1 +( 1608 1968 512 ) ( 1672 1968 512 ) ( 1672 2032 512 ) 14 0 -16 0 1 1 +( 1672 2032 576 ) ( 1672 1968 576 ) ( 1608 1968 576 ) 14 0 0 0 1 1 +( 1672 2048 632 ) ( 1608 2048 632 ) ( 1608 2048 504 ) 14 0 -16 0 1 1 +( 1696 1968 632 ) ( 1696 2032 632 ) ( 1696 2032 504 ) 14 0 -16 0 1 1 +} +// brush 145 +{ +( 2016 2000 632 ) ( 2016 1936 632 ) ( 2016 1936 568 ) 14 32 48 0 1 1 +( 2008 1920 632 ) ( 2072 1920 632 ) ( 2072 1920 568 ) 14 48 48 0 1 1 +( 2008 1936 512 ) ( 2072 1936 512 ) ( 2072 2000 512 ) 14 32 48 0 1 1 +( 2072 2000 608 ) ( 2072 1936 608 ) ( 2008 1936 608 ) 14 48 32 0 1 1 +( 2072 1984 632 ) ( 2008 1984 632 ) ( 2008 1984 568 ) 14 48 48 0 1 1 +( 2080 1936 632 ) ( 2080 2000 632 ) ( 2080 2000 568 ) 14 32 48 0 1 1 +} +// brush 146 +{ +( 2048 2032 632 ) ( 2048 1968 632 ) ( 2048 1968 504 ) 14 32 -16 0 1 1 +( 2040 1984 632 ) ( 2104 1984 632 ) ( 2104 1984 504 ) 14 16 -16 0 1 1 +( 2040 1968 512 ) ( 2104 1968 512 ) ( 2104 2032 512 ) 14 32 -16 0 1 1 +( 2104 2032 576 ) ( 2104 1968 576 ) ( 2040 1968 576 ) 14 16 32 0 1 1 +( 2104 2048 632 ) ( 2040 2048 632 ) ( 2040 2048 504 ) 14 16 -16 0 1 1 +( 2112 1968 632 ) ( 2112 2032 632 ) ( 2112 2032 504 ) 14 32 -16 0 1 1 +} +// brush 147 +{ +( 2024 2288 568 ) ( 2024 2224 568 ) ( 2024 2224 440 ) 14 0 -16 0 1 1 +( 2024 2224 568 ) ( 2088 2224 568 ) ( 2088 2224 440 ) 14 32 -16 0 1 1 +( 2024 2224 440 ) ( 2088 2224 440 ) ( 2088 2288 440 ) 14 0 -16 0 1 1 +( 2088 2288 504 ) ( 2088 2224 504 ) ( 2024 2224 504 ) 14 32 0 0 1 1 +( 2088 2288 568 ) ( 2024 2288 568 ) ( 2024 2288 440 ) 14 32 -16 0 1 1 +( 2088 2224 568 ) ( 2088 2288 568 ) ( 2088 2288 440 ) 14 0 -16 0 1 1 +} +// brush 148 +{ +( 1312 2688 960 ) ( 1312 1616 960 ) ( 1312 1616 320 ) 26 0 0 0 1 1 +( 1520 1952 960 ) ( 1536 1952 960 ) ( 1536 1952 320 ) 26 0 0 0 1 1 +( 1504 1616 320 ) ( 1520 1616 320 ) ( 1520 2688 320 ) 26 0 0 0 1 1 +( 1520 2688 752 ) ( 1520 1616 752 ) ( 1504 1616 752 ) 26 0 0 0 1 1 +( 1520 2656 584 ) ( 1520 2656 600 ) ( 1480 2656 600 ) 26 0 0 0 1 1 +( 1536 1616 960 ) ( 1536 2688 960 ) ( 1536 2688 320 ) 26 0 0 0 1 1 +} +// brush 149 +{ +( 1536 2112 703 ) ( 1536 2080 703 ) ( 1536 2080 656 ) 27 0 0 0 1 1 +( 1536 2080 703 ) ( 1552 2080 703 ) ( 1552 2080 656 ) 27 0 0 0 1 1 +( 1536 2080 528 ) ( 1552 2080 528 ) ( 1552 2112 528 ) 27 0 0 0 1 1 +( 1552 2112 736 ) ( 1552 2080 736 ) ( 1536 2080 736 ) 27 0 0 0 1 1 +( 1552 2112 703 ) ( 1536 2112 703 ) ( 1536 2112 656 ) 27 0 0 0 1 1 +( 1568 2080 703 ) ( 1568 2112 703 ) ( 1568 2112 656 ) 27 0 0 0 1 1 +} +// brush 150 +{ +( 2144 2112 656 ) ( 2144 2112 703 ) ( 2144 2080 703 ) 27 0 0 0 1 1 +( 2160 2080 656 ) ( 2160 2080 703 ) ( 2176 2080 703 ) 27 0 0 0 1 1 +( 2160 2112 528 ) ( 2160 2080 528 ) ( 2176 2080 528 ) 27 0 0 0 1 1 +( 2176 2080 736 ) ( 2160 2080 736 ) ( 2160 2112 736 ) 27 0 0 0 1 1 +( 2176 2112 656 ) ( 2176 2112 703 ) ( 2160 2112 703 ) 27 0 0 0 1 1 +( 2176 2080 656 ) ( 2176 2080 703 ) ( 2176 2112 703 ) 27 0 0 0 1 1 +} +// brush 151 +{ +( 1472 2704 864 ) ( 1472 1616 864 ) ( 1472 1616 760 ) 26 0 0 0 1 1 +( 1928 1744 792 ) ( 1968 1744 792 ) ( 1968 1744 744 ) 26 0 0 0 1 1 +( 1520 1616 752 ) ( 2176 1616 752 ) ( 2176 2704 752 ) 26 0 0 0 1 1 +( 2176 2704 784 ) ( 2176 1616 784 ) ( 1520 1616 784 ) 26 0 0 0 1 1 +( 2224 2720 864 ) ( 1568 2720 864 ) ( 1568 2720 760 ) 26 0 0 0 1 1 +( 1696 1696 744 ) ( 1696 1696 792 ) ( 1696 2640 792 ) 26 0 0 0 1 1 +} +// brush 152 +{ +( 1984 2720 864 ) ( 1984 1632 864 ) ( 1984 1632 760 ) 26 0 0 0 1 1 +( 2376 1824 792 ) ( 2416 1824 792 ) ( 2416 1824 744 ) 26 0 0 0 1 1 +( 1968 1632 752 ) ( 2624 1632 752 ) ( 2624 2720 752 ) 26 0 0 0 1 1 +( 2624 2720 784 ) ( 2624 1632 784 ) ( 1968 1632 784 ) 26 0 0 0 1 1 +( 2672 2720 864 ) ( 2016 2720 864 ) ( 2016 2720 760 ) 26 0 0 0 1 1 +( 2176 1720 744 ) ( 2176 1720 792 ) ( 2176 2664 792 ) 26 0 0 0 1 1 +} +// brush 153 +{ +( 1696 1544 792 ) ( 1696 1504 792 ) ( 1696 1504 744 ) 26 0 0 0 1 1 +( 1648 1824 744 ) ( 1648 1824 792 ) ( 2592 1824 792 ) 26 0 0 0 1 1 +( 1568 1952 752 ) ( 1568 1296 752 ) ( 2656 1296 752 ) 26 0 0 0 1 1 +( 2656 1296 784 ) ( 1568 1296 784 ) ( 1568 1952 784 ) 26 0 0 0 1 1 +( 2656 2048 864 ) ( 1568 2048 864 ) ( 1568 2048 760 ) 26 0 0 0 1 1 +( 1984 1216 864 ) ( 1984 1872 864 ) ( 1984 1872 760 ) 26 0 0 0 1 1 +} +// brush 154 +{ +( 1696 2200 792 ) ( 1696 2160 792 ) ( 1696 2160 744 ) 26 0 0 0 1 1 +( 1624 2624 744 ) ( 1624 2624 792 ) ( 2568 2624 792 ) 26 0 0 0 1 1 +( 1568 2608 752 ) ( 1568 1952 752 ) ( 2656 1952 752 ) 26 0 0 0 1 1 +( 2656 1952 784 ) ( 1568 1952 784 ) ( 1568 2608 784 ) 26 0 0 0 1 1 +( 2656 2816 864 ) ( 1568 2816 864 ) ( 1568 2816 760 ) 26 0 0 0 1 1 +( 1984 1872 864 ) ( 1984 2528 864 ) ( 1984 2528 760 ) 26 0 0 0 1 1 +} +// brush 155 +{ +( 1728 2640 784 ) ( 1728 2600 784 ) ( 1728 2600 736 ) 27 0 0 0 1 1 +( 1280 2592 784 ) ( 2224 2592 784 ) ( 2224 2592 736 ) 27 0 0 0 1 1 +( 1280 2624 736 ) ( 1280 2584 736 ) ( 2224 2584 736 ) 27 0 0 0 1 1 +( 2224 2584 816 ) ( 1280 2584 816 ) ( 1280 2624 816 ) 27 0 0 0 1 1 +( 2224 2624 784 ) ( 1280 2624 784 ) ( 1280 2624 736 ) 27 0 0 0 1 1 +( 1952 2576 784 ) ( 1952 2616 784 ) ( 1952 2616 736 ) 27 0 0 0 1 1 +} +// brush 156 +{ +( 1696 2744 784 ) ( 1696 1800 784 ) ( 1696 1800 736 ) 27 0 0 0 1 1 +( 1720 2080 784 ) ( 1760 2080 784 ) ( 1760 2080 736 ) 27 0 0 0 1 1 +( 1704 1800 736 ) ( 1744 1800 736 ) ( 1744 2744 736 ) 27 0 0 0 1 1 +( 1744 2744 816 ) ( 1744 1800 816 ) ( 1704 1800 816 ) 27 0 0 0 1 1 +( 1744 2624 784 ) ( 1704 2624 784 ) ( 1704 2624 736 ) 27 0 0 0 1 1 +( 1728 1800 784 ) ( 1728 2744 784 ) ( 1728 2744 736 ) 27 0 0 0 1 1 +} +// brush 157 +{ +( 1952 2744 784 ) ( 1952 1800 784 ) ( 1952 1800 736 ) 27 0 0 0 1 1 +( 1952 2080 784 ) ( 1992 2080 784 ) ( 1992 2080 736 ) 27 0 0 0 1 1 +( 1928 1800 736 ) ( 1968 1800 736 ) ( 1968 2744 736 ) 27 0 0 0 1 1 +( 1968 2744 816 ) ( 1968 1800 816 ) ( 1928 1800 816 ) 27 0 0 0 1 1 +( 1976 2624 784 ) ( 1936 2624 784 ) ( 1936 2624 736 ) 27 0 0 0 1 1 +( 1984 1800 784 ) ( 1984 2744 784 ) ( 1984 2744 736 ) 27 0 0 0 1 1 +} +// brush 158 +{ +( 1920 2280 832 ) ( 1920 2248 832 ) ( 1920 2248 816 ) 7 0 0 0 1 1 +( 1920 2216 832 ) ( 1968 2216 832 ) ( 1968 2216 816 ) 7 0 0 0 1 1 +( 1928 2248 720 ) ( 1976 2248 720 ) ( 1976 2280 720 ) 7 0 0 0 1 1 +( 1976 2280 832 ) ( 1976 2248 832 ) ( 1928 2248 832 ) 7 0 0 0 1 1 +( 1976 2280 832 ) ( 1928 2280 832 ) ( 1928 2280 816 ) 7 0 0 0 1 1 +( 2016 2248 832 ) ( 2016 2280 832 ) ( 2016 2280 816 ) 7 0 0 0 1 1 +} +// brush 159 +{ +( 1808 2096 832 ) ( 1808 2048 832 ) ( 1808 2048 816 ) 7 0 0 0 1 1 +( 1840 2016 832 ) ( 1872 2016 832 ) ( 1872 2016 816 ) 7 0 0 0 1 1 +( 1840 2088 720 ) ( 1840 2040 720 ) ( 1872 2040 720 ) 7 0 0 0 1 1 +( 1872 2040 832 ) ( 1840 2040 832 ) ( 1840 2088 832 ) 7 0 0 0 1 1 +( 1872 2112 832 ) ( 1840 2112 832 ) ( 1840 2112 816 ) 7 0 0 0 1 1 +( 1872 2040 832 ) ( 1872 2088 832 ) ( 1872 2088 816 ) 7 0 0 0 1 1 +} +// brush 160 +{ +( 1696 2104 784 ) ( 1696 2064 784 ) ( 1696 2064 736 ) 27 0 0 0 1 1 +( 1280 2048 784 ) ( 2224 2048 784 ) ( 2224 2048 736 ) 27 0 0 0 1 1 +( 1280 2088 736 ) ( 1280 2048 736 ) ( 2224 2048 736 ) 27 0 0 0 1 1 +( 2224 2048 816 ) ( 1280 2048 816 ) ( 1280 2088 816 ) 27 0 0 0 1 1 +( 2224 2080 784 ) ( 1280 2080 784 ) ( 1280 2080 736 ) 27 0 0 0 1 1 +( 1984 2040 784 ) ( 1984 2080 784 ) ( 1984 2080 736 ) 27 0 0 0 1 1 +} +// brush 161 +{ +( 1664 2280 832 ) ( 1664 2248 832 ) ( 1664 2248 816 ) 7 0 0 0 1 1 +( 1696 2216 832 ) ( 1744 2216 832 ) ( 1744 2216 816 ) 7 0 0 0 1 1 +( 1704 2248 720 ) ( 1752 2248 720 ) ( 1752 2280 720 ) 7 0 0 0 1 1 +( 1752 2280 832 ) ( 1752 2248 832 ) ( 1704 2248 832 ) 7 0 0 0 1 1 +( 1752 2280 832 ) ( 1704 2280 832 ) ( 1704 2280 816 ) 7 0 0 0 1 1 +( 1760 2248 832 ) ( 1760 2280 832 ) ( 1760 2280 816 ) 7 0 0 0 1 1 +} +// brush 162 +{ +( 1920 2520 832 ) ( 1920 2488 832 ) ( 1920 2488 816 ) 7 0 0 0 1 1 +( 1920 2456 832 ) ( 1968 2456 832 ) ( 1968 2456 816 ) 7 0 0 0 1 1 +( 1928 2488 720 ) ( 1976 2488 720 ) ( 1976 2520 720 ) 7 0 0 0 1 1 +( 1976 2520 832 ) ( 1976 2488 832 ) ( 1928 2488 832 ) 7 0 0 0 1 1 +( 1976 2520 832 ) ( 1928 2520 832 ) ( 1928 2520 816 ) 7 0 0 0 1 1 +( 2016 2488 832 ) ( 2016 2520 832 ) ( 2016 2520 816 ) 7 0 0 0 1 1 +} +// brush 163 +{ +( 1808 2664 832 ) ( 1808 2616 832 ) ( 1808 2616 816 ) 7 0 0 0 1 1 +( 1840 2560 832 ) ( 1872 2560 832 ) ( 1872 2560 816 ) 7 0 0 0 1 1 +( 1840 2656 720 ) ( 1840 2608 720 ) ( 1872 2608 720 ) 7 0 0 0 1 1 +( 1872 2608 832 ) ( 1840 2608 832 ) ( 1840 2656 832 ) 7 0 0 0 1 1 +( 1872 2664 832 ) ( 1840 2664 832 ) ( 1840 2664 816 ) 7 0 0 0 1 1 +( 1872 2608 832 ) ( 1872 2656 832 ) ( 1872 2656 816 ) 7 0 0 0 1 1 +} +// brush 164 +{ +( 1664 2512 832 ) ( 1664 2480 832 ) ( 1664 2480 816 ) 7 0 0 0 1 1 +( 1696 2456 832 ) ( 1744 2456 832 ) ( 1744 2456 816 ) 7 0 0 0 1 1 +( 1704 2488 720 ) ( 1752 2488 720 ) ( 1752 2520 720 ) 7 0 0 0 1 1 +( 1752 2520 832 ) ( 1752 2488 832 ) ( 1704 2488 832 ) 7 0 0 0 1 1 +( 1752 2520 832 ) ( 1704 2520 832 ) ( 1704 2520 816 ) 7 0 0 0 1 1 +( 1760 2488 832 ) ( 1760 2520 832 ) ( 1760 2520 816 ) 7 0 0 0 1 1 +} +// brush 165 +{ +( 1520 2408 440 ) ( 1520 2312 440 ) ( 1520 2312 424 ) 26 0 0 0 1 1 +( 1512 2144 440 ) ( 1896 2144 440 ) ( 1896 2144 424 ) 26 0 0 0 1 1 +( 1520 2312 320 ) ( 1904 2312 320 ) ( 1904 2408 320 ) 26 0 0 0 1 1 +( 1904 2408 448 ) ( 1904 2312 448 ) ( 1520 2312 448 ) 26 0 0 0 1 1 +( 1904 2400 440 ) ( 1520 2400 440 ) ( 1520 2400 424 ) 26 0 0 0 1 1 +( 2144 2328 440 ) ( 2144 2424 440 ) ( 2144 2424 424 ) 26 0 0 0 1 1 +} +// brush 166 +{ +( 1792 2584 444 ) ( 1792 2328 444 ) ( 1792 2328 428 ) 27 0 0 0 1 1 +( 1784 2400 444 ) ( 1912 2400 444 ) ( 1912 2400 428 ) 27 0 0 0 1 1 +( 1776 2328 416 ) ( 1904 2328 416 ) ( 1904 2584 416 ) 27 0 0 0 1 1 +( 1904 2584 432 ) ( 1904 2328 432 ) ( 1776 2328 432 ) 27 0 0 0 1 1 +( 1912 2624 444 ) ( 1784 2624 444 ) ( 1784 2624 428 ) 27 0 0 0 1 1 +( 1888 2328 444 ) ( 1888 2584 444 ) ( 1888 2584 428 ) 27 0 0 0 1 1 +} +// brush 167 +{ +( 1536 2600 767 ) ( 1536 2568 767 ) ( 1536 2568 720 ) 27 0 0 0 1 1 +( 1520 2528 767 ) ( 1536 2528 767 ) ( 1536 2528 720 ) 27 0 0 0 1 1 +( 1520 2568 352 ) ( 1536 2568 352 ) ( 1536 2600 352 ) 27 0 0 0 1 1 +( 1536 2600 752 ) ( 1536 2568 752 ) ( 1520 2568 752 ) 27 0 0 0 1 1 +( 1536 2560 767 ) ( 1520 2560 767 ) ( 1520 2560 720 ) 27 0 0 0 1 1 +( 1568 2568 767 ) ( 1568 2600 767 ) ( 1568 2600 720 ) 27 0 0 0 1 1 +} +// brush 168 +{ +( 2080 2600 720 ) ( 2080 2600 767 ) ( 2080 2568 767 ) 26 0 0 0 1 1 +( 2144 2560 720 ) ( 2144 2560 767 ) ( 2160 2560 767 ) 26 0 0 0 1 1 +( 2144 2600 304 ) ( 2144 2568 304 ) ( 2160 2568 304 ) 26 0 0 0 1 1 +( 2160 2568 816 ) ( 2144 2568 816 ) ( 2144 2600 816 ) 26 0 0 0 1 1 +( 2160 2688 720 ) ( 2160 2688 767 ) ( 2144 2688 767 ) 26 0 0 0 1 1 +( 2176 2568 720 ) ( 2176 2568 767 ) ( 2176 2600 767 ) 26 0 0 0 1 1 +} +// brush 169 +{ +( 1536 2080 512 ) ( 1536 2081 512 ) ( 1536 2080 513 ) 7 0 0 0 1 1 +( 1568 2048 512 ) ( 1568 2048 513 ) ( 1569 2048 512 ) 7 0 0 0 1 1 +( 1568 2080 512 ) ( 1569 2080 512 ) ( 1568 2081 512 ) 7 0 0 0 1 1 +( 1600 2112 528 ) ( 1600 2113 528 ) ( 1601 2112 528 ) 7 0 0 0 1 1 +( 1600 2144 528 ) ( 1601 2144 528 ) ( 1600 2144 529 ) 7 0 0 0 1 1 +( 1600 2112 528 ) ( 1600 2112 529 ) ( 1600 2113 528 ) 7 0 0 0 1 1 +} +// brush 170 +{ +( 1536 2080 736 ) ( 1536 2081 736 ) ( 1536 2080 737 ) 7 0 0 0 1 1 +( 1568 2048 736 ) ( 1568 2048 737 ) ( 1569 2048 736 ) 7 0 0 0 1 1 +( 1568 2080 736 ) ( 1569 2080 736 ) ( 1568 2081 736 ) 7 0 0 0 1 1 +( 1600 2112 752 ) ( 1600 2113 752 ) ( 1601 2112 752 ) 7 0 0 0 1 1 +( 1600 2144 752 ) ( 1601 2144 752 ) ( 1600 2144 753 ) 7 0 0 0 1 1 +( 1600 2112 752 ) ( 1600 2112 753 ) ( 1600 2113 752 ) 7 0 0 0 1 1 +} +// brush 171 +{ +( 2112 2080 512 ) ( 2112 2081 512 ) ( 2112 2080 513 ) 7 0 0 0 1 1 +( 2112 2048 512 ) ( 2112 2048 513 ) ( 2113 2048 512 ) 7 0 0 0 1 1 +( 2112 2080 512 ) ( 2113 2080 512 ) ( 2112 2081 512 ) 7 0 0 0 1 1 +( 2144 2112 528 ) ( 2144 2113 528 ) ( 2145 2112 528 ) 7 0 0 0 1 1 +( 2144 2144 528 ) ( 2145 2144 528 ) ( 2144 2144 529 ) 7 0 0 0 1 1 +( 2176 2112 528 ) ( 2176 2112 529 ) ( 2176 2113 528 ) 7 0 0 0 1 1 +} +// brush 172 +{ +( 2112 2080 736 ) ( 2112 2081 736 ) ( 2112 2080 737 ) 7 0 0 0 1 1 +( 2112 2048 736 ) ( 2112 2048 737 ) ( 2113 2048 736 ) 7 0 0 0 1 1 +( 2112 2080 736 ) ( 2113 2080 736 ) ( 2112 2081 736 ) 7 0 0 0 1 1 +( 2144 2112 752 ) ( 2144 2113 752 ) ( 2145 2112 752 ) 7 0 0 0 1 1 +( 2144 2144 752 ) ( 2145 2144 752 ) ( 2144 2144 753 ) 7 0 0 0 1 1 +( 2176 2112 752 ) ( 2176 2112 753 ) ( 2176 2113 752 ) 7 0 0 0 1 1 +} +// brush 173 +{ +( 1984 1824 624 ) ( 1984 1825 624 ) ( 1984 1824 625 ) 7 0 0 0 1 1 +( 1984 1824 624 ) ( 1984 1824 625 ) ( 1985 1824 624 ) 7 0 0 0 1 1 +( 1984 1824 512 ) ( 1985 1824 512 ) ( 1984 1825 512 ) 7 0 0 0 1 1 +( 2048 1888 752 ) ( 2048 1889 752 ) ( 2049 1888 752 ) 7 0 0 0 1 1 +( 2048 1856 640 ) ( 2049 1856 640 ) ( 2048 1856 641 ) 7 0 0 0 1 1 +( 2048 1888 640 ) ( 2048 1888 641 ) ( 2048 1889 640 ) 7 0 0 0 1 1 +} +// brush 174 +{ +( 1600 1824 624 ) ( 1600 1825 624 ) ( 1600 1824 625 ) 7 0 0 0 1 1 +( 1600 1824 624 ) ( 1600 1824 625 ) ( 1601 1824 624 ) 7 0 0 0 1 1 +( 1600 1824 512 ) ( 1601 1824 512 ) ( 1600 1825 512 ) 7 0 0 0 1 1 +( 1664 1888 752 ) ( 1664 1889 752 ) ( 1665 1888 752 ) 7 0 0 0 1 1 +( 1664 1856 640 ) ( 1665 1856 640 ) ( 1664 1856 641 ) 7 0 0 0 1 1 +( 1664 1888 640 ) ( 1664 1888 641 ) ( 1664 1889 640 ) 7 0 0 0 1 1 +} +// brush 175 +{ +( 2016 2048 512 ) ( 2016 2049 512 ) ( 2016 2048 513 ) 14 0 0 0 1 1 +( 2016 2048 512 ) ( 2016 2048 513 ) ( 2017 2048 512 ) 14 0 0 0 1 1 +( 2016 2048 512 ) ( 2017 2048 512 ) ( 2016 2049 512 ) 14 0 0 0 1 1 +( 2080 2080 544 ) ( 2080 2081 544 ) ( 2081 2080 544 ) 14 0 0 0 1 1 +( 2080 2080 544 ) ( 2081 2080 544 ) ( 2080 2080 545 ) 14 0 0 0 1 1 +( 2048 2080 544 ) ( 2048 2080 545 ) ( 2048 2081 544 ) 14 0 0 0 1 1 +} +// brush 176 +{ +( 1728 2112 464 ) ( 1728 2113 464 ) ( 1728 2112 465 ) 9 0 0 0 1 1 +( 1728 2144 464 ) ( 1728 2144 465 ) ( 1729 2144 464 ) 9 0 0 0 1 1 +( 1728 2112 448 ) ( 1729 2112 448 ) ( 1728 2113 448 ) 9 0 0 0 1 1 +( 1760 2240 512 ) ( 1760 2241 512 ) ( 1761 2240 512 ) 9 0 0 0 1 1 +( 1760 2176 496 ) ( 1761 2176 496 ) ( 1760 2176 497 ) 9 0 0 0 1 1 +( 1760 2240 496 ) ( 1760 2240 497 ) ( 1760 2241 496 ) 9 0 0 0 1 1 +} +// brush 177 +{ +( 1728 2176 464 ) ( 1728 2177 464 ) ( 1728 2176 465 ) 9 0 0 0 1 1 +( 1728 2176 464 ) ( 1728 2176 465 ) ( 1729 2176 464 ) 9 0 0 0 1 1 +( 1728 2176 448 ) ( 1729 2176 448 ) ( 1728 2177 448 ) 9 0 0 0 1 1 +( 1760 2304 496 ) ( 1760 2305 496 ) ( 1761 2304 496 ) 9 0 0 0 1 1 +( 1760 2208 496 ) ( 1761 2208 496 ) ( 1760 2208 497 ) 9 0 0 0 1 1 +( 1760 2304 496 ) ( 1760 2304 497 ) ( 1760 2305 496 ) 9 0 0 0 1 1 +} +// brush 178 +{ +( 1728 2208 464 ) ( 1728 2209 464 ) ( 1728 2208 465 ) 9 0 0 0 1 1 +( 1728 2208 464 ) ( 1728 2208 465 ) ( 1729 2208 464 ) 9 0 0 0 1 1 +( 1728 2208 448 ) ( 1729 2208 448 ) ( 1728 2209 448 ) 9 0 0 0 1 1 +( 1760 2336 480 ) ( 1760 2337 480 ) ( 1761 2336 480 ) 9 0 0 0 1 1 +( 1760 2240 496 ) ( 1761 2240 496 ) ( 1760 2240 497 ) 9 0 0 0 1 1 +( 1760 2336 496 ) ( 1760 2336 497 ) ( 1760 2337 496 ) 9 0 0 0 1 1 +} +// brush 179 +{ +( 1728 2240 464 ) ( 1728 2241 464 ) ( 1728 2240 465 ) 9 0 0 0 1 1 +( 1728 2240 464 ) ( 1728 2240 465 ) ( 1729 2240 464 ) 9 0 0 0 1 1 +( 1728 2240 448 ) ( 1729 2240 448 ) ( 1728 2241 448 ) 9 0 0 0 1 1 +( 1760 2368 464 ) ( 1760 2369 464 ) ( 1761 2368 464 ) 9 0 0 0 1 1 +( 1760 2272 496 ) ( 1761 2272 496 ) ( 1760 2272 497 ) 9 0 0 0 1 1 +( 1760 2368 496 ) ( 1760 2368 497 ) ( 1760 2369 496 ) 9 0 0 0 1 1 +} +// brush 180 +{ +( 1920 2128 464 ) ( 1920 2129 464 ) ( 1920 2128 465 ) 9 0 0 0 1 1 +( 1920 2144 464 ) ( 1920 2144 465 ) ( 1921 2144 464 ) 9 0 0 0 1 1 +( 1920 2128 448 ) ( 1921 2128 448 ) ( 1920 2129 448 ) 9 0 0 0 1 1 +( 1952 2256 512 ) ( 1952 2257 512 ) ( 1953 2256 512 ) 9 0 0 0 1 1 +( 1952 2176 496 ) ( 1953 2176 496 ) ( 1952 2176 497 ) 9 0 0 0 1 1 +( 1952 2256 496 ) ( 1952 2256 497 ) ( 1952 2257 496 ) 9 0 0 0 1 1 +} +// brush 181 +{ +( 1920 2240 464 ) ( 1920 2241 464 ) ( 1920 2240 465 ) 9 0 0 0 1 1 +( 1920 2240 464 ) ( 1920 2240 465 ) ( 1921 2240 464 ) 9 0 0 0 1 1 +( 1920 2240 448 ) ( 1921 2240 448 ) ( 1920 2241 448 ) 9 0 0 0 1 1 +( 1952 2368 464 ) ( 1952 2369 464 ) ( 1953 2368 464 ) 9 0 0 0 1 1 +( 1952 2272 496 ) ( 1953 2272 496 ) ( 1952 2272 497 ) 9 0 0 0 1 1 +( 1952 2368 496 ) ( 1952 2368 497 ) ( 1952 2369 496 ) 9 0 0 0 1 1 +} +// brush 182 +{ +( 1920 2208 464 ) ( 1920 2209 464 ) ( 1920 2208 465 ) 9 0 0 0 1 1 +( 1920 2208 464 ) ( 1920 2208 465 ) ( 1921 2208 464 ) 9 0 0 0 1 1 +( 1920 2208 448 ) ( 1921 2208 448 ) ( 1920 2209 448 ) 9 0 0 0 1 1 +( 1952 2336 480 ) ( 1952 2337 480 ) ( 1953 2336 480 ) 9 0 0 0 1 1 +( 1952 2240 496 ) ( 1953 2240 496 ) ( 1952 2240 497 ) 9 0 0 0 1 1 +( 1952 2336 496 ) ( 1952 2336 497 ) ( 1952 2337 496 ) 9 0 0 0 1 1 +} +// brush 183 +{ +( 1920 2176 464 ) ( 1920 2177 464 ) ( 1920 2176 465 ) 9 0 0 0 1 1 +( 1920 2176 464 ) ( 1920 2176 465 ) ( 1921 2176 464 ) 9 0 0 0 1 1 +( 1920 2176 448 ) ( 1921 2176 448 ) ( 1920 2177 448 ) 9 0 0 0 1 1 +( 1952 2304 496 ) ( 1952 2305 496 ) ( 1953 2304 496 ) 9 0 0 0 1 1 +( 1952 2208 496 ) ( 1953 2208 496 ) ( 1952 2208 497 ) 9 0 0 0 1 1 +( 1952 2304 496 ) ( 1952 2304 497 ) ( 1952 2305 496 ) 9 0 0 0 1 1 +} +// brush 184 +{ +( 2176 1824 480 ) ( 2176 1825 480 ) ( 2176 1824 481 ) 26 0 0 0 1 1 +( 2176 1824 480 ) ( 2176 1824 481 ) ( 2177 1824 480 ) 26 0 0 0 1 1 +( 2176 1824 512 ) ( 2177 1824 512 ) ( 2176 1825 512 ) 26 0 0 0 1 1 +( 2208 2144 752 ) ( 2208 2145 752 ) ( 2209 2144 752 ) 26 0 0 0 1 1 +( 2208 2528 512 ) ( 2209 2528 512 ) ( 2208 2528 513 ) 26 0 0 0 1 1 +( 2208 2144 512 ) ( 2208 2144 513 ) ( 2208 2145 512 ) 26 0 0 0 1 1 +} +// brush 185 +{ +( 1920 2112 512 ) ( 1920 2113 512 ) ( 1920 2112 513 ) 9 0 0 0 1 1 +( 1904 2112 512 ) ( 1904 2112 513 ) ( 1905 2112 512 ) 9 0 0 0 1 1 +( 1904 2112 512 ) ( 1905 2112 512 ) ( 1904 2113 512 ) 9 0 0 0 1 1 +( 1952 2144 528 ) ( 1952 2145 528 ) ( 1953 2144 528 ) 9 0 0 0 1 1 +( 1952 2144 528 ) ( 1953 2144 528 ) ( 1952 2144 529 ) 9 0 0 0 1 1 +( 1952 2144 528 ) ( 1952 2144 529 ) ( 1952 2145 528 ) 9 0 0 0 1 1 +} +// brush 186 +{ +( 1728 2112 512 ) ( 1728 2113 512 ) ( 1728 2112 513 ) 9 0 0 0 1 1 +( 1712 2112 512 ) ( 1712 2112 513 ) ( 1713 2112 512 ) 9 0 0 0 1 1 +( 1712 2112 512 ) ( 1713 2112 512 ) ( 1712 2113 512 ) 9 0 0 0 1 1 +( 1760 2144 528 ) ( 1760 2145 528 ) ( 1761 2144 528 ) 9 0 0 0 1 1 +( 1760 2144 528 ) ( 1761 2144 528 ) ( 1760 2144 529 ) 9 0 0 0 1 1 +( 1760 2144 528 ) ( 1760 2144 529 ) ( 1760 2145 528 ) 9 0 0 0 1 1 +} +// brush 187 +{ +( 1888 2400 464 ) ( 1888 2401 464 ) ( 1888 2400 465 ) 9 0 0 0 1 1 +( 1888 2400 464 ) ( 1888 2400 465 ) ( 1889 2400 464 ) 9 0 0 0 1 1 +( 1888 2400 352 ) ( 1889 2400 352 ) ( 1888 2401 352 ) 9 0 0 0 1 1 +( 1920 2528 464 ) ( 1920 2529 464 ) ( 1921 2528 464 ) 9 0 0 0 1 1 +( 1920 2432 496 ) ( 1921 2432 496 ) ( 1920 2432 497 ) 9 0 0 0 1 1 +( 1920 2528 496 ) ( 1920 2528 497 ) ( 1920 2529 496 ) 9 0 0 0 1 1 +} +// brush 188 +{ +( 1760 2400 464 ) ( 1760 2401 464 ) ( 1760 2400 465 ) 9 0 0 0 1 1 +( 1760 2400 464 ) ( 1760 2400 465 ) ( 1761 2400 464 ) 9 0 0 0 1 1 +( 1760 2400 352 ) ( 1761 2400 352 ) ( 1760 2401 352 ) 9 0 0 0 1 1 +( 1792 2528 464 ) ( 1792 2529 464 ) ( 1793 2528 464 ) 9 0 0 0 1 1 +( 1792 2432 496 ) ( 1793 2432 496 ) ( 1792 2432 497 ) 9 0 0 0 1 1 +( 1792 2528 496 ) ( 1792 2528 497 ) ( 1792 2529 496 ) 9 0 0 0 1 1 +} +// brush 189 +{ +( 1760 2592 464 ) ( 1760 2593 464 ) ( 1760 2592 465 ) 9 0 0 0 1 1 +( 1760 2592 464 ) ( 1760 2592 465 ) ( 1761 2592 464 ) 9 0 0 0 1 1 +( 1760 2592 352 ) ( 1761 2592 352 ) ( 1760 2593 352 ) 9 0 0 0 1 1 +( 1792 2720 464 ) ( 1792 2721 464 ) ( 1793 2720 464 ) 9 0 0 0 1 1 +( 1792 2624 496 ) ( 1793 2624 496 ) ( 1792 2624 497 ) 9 0 0 0 1 1 +( 1792 2720 496 ) ( 1792 2720 497 ) ( 1792 2721 496 ) 9 0 0 0 1 1 +} +// brush 190 +{ +( 1888 2592 464 ) ( 1888 2593 464 ) ( 1888 2592 465 ) 9 0 0 0 1 1 +( 1888 2592 464 ) ( 1888 2592 465 ) ( 1889 2592 464 ) 9 0 0 0 1 1 +( 1888 2592 352 ) ( 1889 2592 352 ) ( 1888 2593 352 ) 9 0 0 0 1 1 +( 1920 2720 464 ) ( 1920 2721 464 ) ( 1921 2720 464 ) 9 0 0 0 1 1 +( 1920 2624 496 ) ( 1921 2624 496 ) ( 1920 2624 497 ) 9 0 0 0 1 1 +( 1920 2720 496 ) ( 1920 2720 497 ) ( 1920 2721 496 ) 9 0 0 0 1 1 +} +// brush 191 +{ +( 1600 2776 440 ) ( 1600 2648 440 ) ( 1600 2648 424 ) 28 0 0 0 1 1 +( 2080 2624 448 ) ( 2016 2624 448 ) ( 2016 2624 576 ) 28 0 0 0 1 1 +( 1744 2648 384 ) ( 1944 2648 384 ) ( 1944 2776 384 ) 28 0 0 0 1 1 +( 1944 2776 448 ) ( 1944 2648 448 ) ( 1744 2648 448 ) 28 0 0 0 1 1 +( 1944 2976 440 ) ( 1744 2976 440 ) ( 1744 2976 424 ) 28 0 0 0 1 1 +( 2176 2648 440 ) ( 2176 2776 440 ) ( 2176 2776 424 ) 28 0 0 0 1 1 +} +// brush 192 +{ +( 1536 2400 368 ) ( 1536 2401 368 ) ( 1536 2400 369 ) 13 0 0 0 1 1 +( 1632 2400 368 ) ( 1632 2400 369 ) ( 1633 2400 368 ) 13 0 0 0 1 1 +( 1632 2400 320 ) ( 1633 2400 320 ) ( 1632 2401 320 ) 13 0 0 0 1 1 +( 2064 2608 400 ) ( 2064 2609 400 ) ( 2065 2608 400 ) 13 0 0 0 1 1 +( 2064 2656 384 ) ( 2065 2656 384 ) ( 2064 2656 385 ) 13 0 0 0 1 1 +( 2144 2608 384 ) ( 2144 2608 385 ) ( 2144 2609 384 ) 13 0 0 0 1 1 +} +// brush 193 +{ +( 2336 1136 296 ) ( 2336 1128 296 ) ( 2336 1128 280 ) 26 0 0 0 1 1 +( 1736 672 296 ) ( 1808 672 296 ) ( 1808 672 280 ) 26 0 0 0 1 1 +( 1808 1136 224 ) ( 1736 1136 224 ) ( 1736 1128 224 ) 26 0 0 0 1 1 +( 1736 1128 704 ) ( 1736 1136 704 ) ( 1808 1136 704 ) 26 0 0 0 1 1 +( 1808 704 296 ) ( 1736 704 296 ) ( 1736 704 280 ) 26 0 0 0 1 1 +( 2688 1120 296 ) ( 2688 1128 296 ) ( 2688 1128 280 ) 26 0 0 0 1 1 +} +// brush 194 +{ +( 2464 1136 272 ) ( 2464 1137 272 ) ( 2464 1136 273 ) 26 0 0 0 1 1 +( 2464 928 272 ) ( 2464 928 273 ) ( 2465 928 272 ) 26 0 0 0 1 1 +( 2464 1136 224 ) ( 2465 1136 224 ) ( 2464 1137 224 ) 26 0 0 0 1 1 +( 2544 1200 496 ) ( 2544 1201 496 ) ( 2545 1200 496 ) 26 0 0 0 1 1 +( 2544 1168 288 ) ( 2545 1168 288 ) ( 2544 1168 289 ) 26 0 0 0 1 1 +( 2688 1200 288 ) ( 2688 1200 289 ) ( 2688 1201 288 ) 26 0 0 0 1 1 +} +// brush 195 +{ +( 2400 1088 480 ) ( 2400 1089 480 ) ( 2400 1088 481 ) 27 0 0 0 1 1 +( 2400 928 480 ) ( 2400 928 481 ) ( 2401 928 480 ) 27 0 0 0 1 1 +( 2400 1088 496 ) ( 2401 1088 496 ) ( 2400 1089 496 ) 27 0 0 0 1 1 +( 2688 1280 512 ) ( 2688 1281 512 ) ( 2689 1280 512 ) 27 0 0 0 1 1 +( 2688 1216 512 ) ( 2689 1216 512 ) ( 2688 1216 513 ) 27 0 0 0 1 1 +( 2688 1280 512 ) ( 2688 1280 513 ) ( 2688 1281 512 ) 27 0 0 0 1 1 +} +// brush 196 +{ +( 2560 1280 480 ) ( 2560 1281 480 ) ( 2560 1280 481 ) 27 0 0 0 1 1 +( 2400 1216 480 ) ( 2400 1216 481 ) ( 2401 1216 480 ) 27 0 0 0 1 1 +( 2400 1280 496 ) ( 2401 1280 496 ) ( 2400 1281 496 ) 27 0 0 0 1 1 +( 2688 1472 512 ) ( 2688 1473 512 ) ( 2689 1472 512 ) 27 0 0 0 1 1 +( 2688 1760 512 ) ( 2689 1760 512 ) ( 2688 1760 513 ) 27 0 0 0 1 1 +( 2688 1472 512 ) ( 2688 1472 513 ) ( 2688 1473 512 ) 27 0 0 0 1 1 +} +// brush 197 +{ +( 2176 1280 480 ) ( 2176 1281 480 ) ( 2176 1280 481 ) 27 0 0 0 1 1 +( 2272 1632 480 ) ( 2272 1632 481 ) ( 2273 1632 480 ) 27 0 0 0 1 1 +( 2272 1280 496 ) ( 2273 1280 496 ) ( 2272 1281 496 ) 27 0 0 0 1 1 +( 2560 1472 512 ) ( 2560 1473 512 ) ( 2561 1472 512 ) 27 0 0 0 1 1 +( 2560 1760 512 ) ( 2561 1760 512 ) ( 2560 1760 513 ) 27 0 0 0 1 1 +( 2560 1472 512 ) ( 2560 1472 513 ) ( 2560 1473 512 ) 27 0 0 0 1 1 +} +// brush 198 +{ +( 2432 864 704 ) ( 2432 865 704 ) ( 2432 864 705 ) 27 0 0 0 1 1 +( 2528 640 704 ) ( 2528 640 705 ) ( 2529 640 704 ) 27 0 0 0 1 1 +( 2528 864 704 ) ( 2529 864 704 ) ( 2528 865 704 ) 27 0 0 0 1 1 +( 2816 896 736 ) ( 2816 897 736 ) ( 2817 896 736 ) 27 0 0 0 1 1 +( 2816 896 736 ) ( 2817 896 736 ) ( 2816 896 737 ) 27 0 0 0 1 1 +( 2464 896 736 ) ( 2464 896 737 ) ( 2464 897 736 ) 27 0 0 0 1 1 +} +// brush 199 +{ +( 1472 1792 704 ) ( 1472 1793 704 ) ( 1472 1792 705 ) 27 0 0 0 1 1 +( 2080 1664 704 ) ( 2080 1664 705 ) ( 2081 1664 704 ) 27 0 0 0 1 1 +( 2080 1792 704 ) ( 2081 1792 704 ) ( 2080 1793 704 ) 27 0 0 0 1 1 +( 2144 1824 752 ) ( 2144 1825 752 ) ( 2145 1824 752 ) 27 0 0 0 1 1 +( 2144 1888 720 ) ( 2145 1888 720 ) ( 2144 1888 721 ) 27 0 0 0 1 1 +( 2272 1824 720 ) ( 2272 1824 721 ) ( 2272 1825 720 ) 27 0 0 0 1 1 +} +// brush 200 +{ +( 2112 2144 416 ) ( 2112 2145 416 ) ( 2112 2144 417 ) 28 0 0 0 1 1 +( 2144 2144 416 ) ( 2144 2144 417 ) ( 2145 2144 416 ) 28 0 0 0 1 1 +( 2144 2144 352 ) ( 2145 2144 352 ) ( 2144 2145 352 ) 28 0 0 0 1 1 +( 2176 2368 512 ) ( 2176 2369 512 ) ( 2177 2368 512 ) 28 0 0 0 1 1 +( 2176 2560 448 ) ( 2177 2560 448 ) ( 2176 2560 449 ) 28 0 0 0 1 1 +( 2176 2368 448 ) ( 2176 2368 449 ) ( 2176 2369 448 ) 28 0 0 0 1 1 +} +// brush 201 +{ +( 2144 2600 767 ) ( 2144 2568 767 ) ( 2144 2568 720 ) 27 0 0 0 1 1 +( 2128 2528 767 ) ( 2144 2528 767 ) ( 2144 2528 720 ) 27 0 0 0 1 1 +( 2128 2568 384 ) ( 2144 2568 384 ) ( 2144 2600 384 ) 27 0 0 0 1 1 +( 2144 2600 752 ) ( 2144 2568 752 ) ( 2128 2568 752 ) 27 0 0 0 1 1 +( 2144 2560 767 ) ( 2128 2560 767 ) ( 2128 2560 720 ) 27 0 0 0 1 1 +( 2176 2568 767 ) ( 2176 2600 767 ) ( 2176 2600 720 ) 27 0 0 0 1 1 +} +// brush 202 +{ +( 1376 1856 480 ) ( 1376 1857 480 ) ( 1376 1856 481 ) 27 0 0 0 1 1 +( 1376 1792 480 ) ( 1376 1792 481 ) ( 1377 1792 480 ) 27 0 0 0 1 1 +( 1376 1856 480 ) ( 1377 1856 480 ) ( 1376 1857 480 ) 27 0 0 0 1 1 +( 1408 1952 496 ) ( 1408 1953 496 ) ( 1409 1952 496 ) 27 0 0 0 1 1 +( 1408 1952 512 ) ( 1409 1952 512 ) ( 1408 1952 513 ) 27 0 0 0 1 1 +( 1408 1952 512 ) ( 1408 1952 513 ) ( 1408 1953 512 ) 27 0 0 0 1 1 +} +// brush 203 +{ +( 1440 2784 960 ) ( 1440 1712 960 ) ( 1440 1712 320 ) 26 0 0 0 1 1 +( 1648 2656 960 ) ( 1664 2656 960 ) ( 1664 2656 320 ) 26 0 0 0 1 1 +( 1632 1712 320 ) ( 1648 1712 320 ) ( 1648 2784 320 ) 26 0 0 0 1 1 +( 1648 2784 800 ) ( 1648 1712 800 ) ( 1632 1712 800 ) 26 0 0 0 1 1 +( 1648 2976 584 ) ( 1648 2976 600 ) ( 1608 2976 600 ) 26 0 0 0 1 1 +( 1632 1712 960 ) ( 1632 2784 960 ) ( 1632 2784 320 ) 26 0 0 0 1 1 +} +// brush 204 +{ +( 1760 2816 448 ) ( 1760 2817 448 ) ( 1760 2816 449 ) 16 0 0 0 1 1 +( 1760 2752 448 ) ( 1760 2752 449 ) ( 1761 2752 448 ) 16 0 0 0 1 1 +( 1760 2816 448 ) ( 1761 2816 448 ) ( 1760 2817 448 ) 16 0 0 0 1 1 +( 1952 2944 464 ) ( 1952 2945 464 ) ( 1953 2944 464 ) 16 0 0 0 1 1 +( 1952 2976 480 ) ( 1953 2976 480 ) ( 1952 2976 481 ) 16 0 0 0 1 1 +( 1952 2944 480 ) ( 1952 2944 481 ) ( 1952 2945 480 ) 16 0 0 0 1 1 +} +// brush 205 +{ +( 1632 2720 784 ) ( 1632 2721 784 ) ( 1632 2720 785 ) 16 0 0 0 1 1 +( 1984 2720 784 ) ( 1984 2720 785 ) ( 1985 2720 784 ) 16 0 0 0 1 1 +( 1984 2720 784 ) ( 1985 2720 784 ) ( 1984 2721 784 ) 16 0 0 0 1 1 +( 2064 2944 800 ) ( 2064 2945 800 ) ( 2065 2944 800 ) 16 0 0 0 1 1 +( 2064 2976 800 ) ( 2065 2976 800 ) ( 2064 2976 801 ) 16 0 0 0 1 1 +( 2176 2944 800 ) ( 2176 2944 801 ) ( 2176 2945 800 ) 16 0 0 0 1 1 +} +// brush 206 +{ +( 1664 2880 448 ) ( 1664 2881 448 ) ( 1664 2880 449 ) 15 0 0 0 1 1 +( 1696 2880 448 ) ( 1696 2880 449 ) ( 1697 2880 448 ) 15 0 0 0 1 1 +( 1696 2880 448 ) ( 1697 2880 448 ) ( 1696 2881 448 ) 15 0 0 0 1 1 +( 1728 2912 512 ) ( 1728 2913 512 ) ( 1729 2912 512 ) 15 0 0 0 1 1 +( 1728 2944 480 ) ( 1729 2944 480 ) ( 1728 2944 481 ) 15 0 0 0 1 1 +( 1728 2912 480 ) ( 1728 2912 481 ) ( 1728 2913 480 ) 15 0 0 0 1 1 +} +// brush 207 +{ +( 2016 2752 448 ) ( 2016 2753 448 ) ( 2016 2752 449 ) 14 0 0 0 1 1 +( 2016 2720 448 ) ( 2016 2720 449 ) ( 2017 2720 448 ) 14 0 0 0 1 1 +( 2016 2752 448 ) ( 2017 2752 448 ) ( 2016 2753 448 ) 14 0 0 0 1 1 +( 2048 2784 480 ) ( 2048 2785 480 ) ( 2049 2784 480 ) 14 0 0 0 1 1 +( 2048 2784 480 ) ( 2049 2784 480 ) ( 2048 2784 481 ) 14 0 0 0 1 1 +( 2048 2784 480 ) ( 2048 2784 481 ) ( 2048 2785 480 ) 14 0 0 0 1 1 +} +// brush 208 +{ +( 1664 2784 448 ) ( 1664 2785 448 ) ( 1664 2784 449 ) 14 0 0 0 1 1 +( 1664 2752 448 ) ( 1664 2752 449 ) ( 1665 2752 448 ) 14 0 0 0 1 1 +( 1664 2784 448 ) ( 1665 2784 448 ) ( 1664 2785 448 ) 14 0 0 0 1 1 +( 1696 2816 480 ) ( 1696 2817 480 ) ( 1697 2816 480 ) 14 0 0 0 1 1 +( 1696 2784 480 ) ( 1697 2784 480 ) ( 1696 2784 481 ) 14 0 0 0 1 1 +( 1696 2816 480 ) ( 1696 2816 481 ) ( 1696 2817 480 ) 14 0 0 0 1 1 +} +// brush 209 +{ +( 1984 2912 448 ) ( 1984 2913 448 ) ( 1984 2912 449 ) 15 0 0 0 1 1 +( 1984 2880 448 ) ( 1984 2880 449 ) ( 1985 2880 448 ) 15 0 0 0 1 1 +( 1984 2912 448 ) ( 1985 2912 448 ) ( 1984 2913 448 ) 15 0 0 0 1 1 +( 2016 2944 512 ) ( 2016 2945 512 ) ( 2017 2944 512 ) 15 0 0 0 1 1 +( 2016 2912 480 ) ( 2017 2912 480 ) ( 2016 2912 481 ) 15 0 0 0 1 1 +( 2016 2944 480 ) ( 2016 2944 481 ) ( 2016 2945 480 ) 15 0 0 0 1 1 +} +// brush 210 +{ +( 2016 2880 448 ) ( 2016 2881 448 ) ( 2016 2880 449 ) 15 0 0 0 1 1 +( 2016 2848 448 ) ( 2016 2848 449 ) ( 2017 2848 448 ) 15 0 0 0 1 1 +( 2016 2880 448 ) ( 2017 2880 448 ) ( 2016 2881 448 ) 15 0 0 0 1 1 +( 2048 2912 544 ) ( 2048 2913 544 ) ( 2049 2912 544 ) 15 0 0 0 1 1 +( 2048 2912 480 ) ( 2049 2912 480 ) ( 2048 2912 481 ) 15 0 0 0 1 1 +( 2048 2912 480 ) ( 2048 2912 481 ) ( 2048 2913 480 ) 15 0 0 0 1 1 +} +// brush 211 +{ +( 1664 2848 448 ) ( 1664 2849 448 ) ( 1664 2848 449 ) 15 0 0 0 1 1 +( 1696 2848 448 ) ( 1696 2848 449 ) ( 1697 2848 448 ) 15 0 0 0 1 1 +( 1696 2848 448 ) ( 1697 2848 448 ) ( 1696 2849 448 ) 15 0 0 0 1 1 +( 1728 2880 480 ) ( 1728 2881 480 ) ( 1729 2880 480 ) 15 0 0 0 1 1 +( 1728 2880 480 ) ( 1729 2880 480 ) ( 1728 2880 481 ) 15 0 0 0 1 1 +( 1696 2880 480 ) ( 1696 2880 481 ) ( 1696 2881 480 ) 15 0 0 0 1 1 +} +// brush 212 +{ +( 1792 2912 448 ) ( 1792 2913 448 ) ( 1792 2912 449 ) 7 0 0 0 1 1 +( 1824 2880 448 ) ( 1824 2880 449 ) ( 1825 2880 448 ) 7 0 0 0 1 1 +( 1824 2912 464 ) ( 1825 2912 464 ) ( 1824 2913 464 ) 7 0 0 0 1 1 +( 1920 2944 672 ) ( 1920 2945 672 ) ( 1921 2944 672 ) 7 0 0 0 1 1 +( 1920 2976 480 ) ( 1921 2976 480 ) ( 1920 2976 481 ) 7 0 0 0 1 1 +( 1920 2944 480 ) ( 1920 2944 481 ) ( 1920 2945 480 ) 7 0 0 0 1 1 +} +// brush 213 +{ +( 1824 2816 464 ) ( 1824 2817 464 ) ( 1824 2816 465 ) 8 0 0 0 1 1 +( 1824 2816 464 ) ( 1824 2816 465 ) ( 1825 2816 464 ) 8 0 0 0 1 1 +( 1824 2816 464 ) ( 1825 2816 464 ) ( 1824 2817 464 ) 8 0 0 0 1 1 +( 1888 2880 480 ) ( 1888 2881 480 ) ( 1889 2880 480 ) 8 0 0 0 1 1 +( 1888 2880 480 ) ( 1889 2880 480 ) ( 1888 2880 481 ) 8 0 0 0 1 1 +( 1888 2880 480 ) ( 1888 2880 481 ) ( 1888 2881 480 ) 8 0 0 0 1 1 +} +// brush 214 +{ +( 1824 2832 624 ) ( 1824 2833 624 ) ( 1824 2832 625 ) 8 0 0 0 1 1 +( 1792 2784 624 ) ( 1792 2784 625 ) ( 1793 2784 624 ) 8 0 0 0 1 1 +( 1792 2832 624 ) ( 1793 2832 624 ) ( 1792 2833 624 ) 8 0 0 0 1 1 +( 1936 2944 640 ) ( 1936 2945 640 ) ( 1937 2944 640 ) 8 0 0 0 1 1 +( 1936 2944 640 ) ( 1937 2944 640 ) ( 1936 2944 641 ) 8 0 0 0 1 1 +( 1888 2944 640 ) ( 1888 2944 641 ) ( 1888 2945 640 ) 8 0 0 0 1 1 +} +// brush 215 +{ +( 1920 2880 560 ) ( 1920 2881 560 ) ( 1920 2880 561 ) 9 0 0 0 1 1 +( 1920 2912 560 ) ( 1920 2912 561 ) ( 1921 2912 560 ) 9 0 0 0 1 1 +( 1920 2880 560 ) ( 1921 2880 560 ) ( 1920 2881 560 ) 9 0 0 0 1 1 +( 1952 2944 576 ) ( 1952 2945 576 ) ( 1953 2944 576 ) 9 0 0 0 1 1 +( 1952 2944 576 ) ( 1953 2944 576 ) ( 1952 2944 577 ) 9 0 0 0 1 1 +( 2144 2944 576 ) ( 2144 2944 577 ) ( 2144 2945 576 ) 9 0 0 0 1 1 +} +// brush 216 +{ +( 1632 2880 560 ) ( 1632 2881 560 ) ( 1632 2880 561 ) 9 0 0 0 1 1 +( 1632 2912 560 ) ( 1632 2912 561 ) ( 1633 2912 560 ) 9 0 0 0 1 1 +( 1632 2880 560 ) ( 1633 2880 560 ) ( 1632 2881 560 ) 9 0 0 0 1 1 +( 1664 2944 576 ) ( 1664 2945 576 ) ( 1665 2944 576 ) 9 0 0 0 1 1 +( 1664 2944 576 ) ( 1665 2944 576 ) ( 1664 2944 577 ) 9 0 0 0 1 1 +( 1792 2944 576 ) ( 1792 2944 577 ) ( 1792 2945 576 ) 9 0 0 0 1 1 +} +// brush 217 +{ +( 2112 2688 448 ) ( 2112 2689 448 ) ( 2112 2688 449 ) 1 0 0 0 1 1 +( 2144 2784 448 ) ( 2144 2784 449 ) ( 2145 2784 448 ) 1 0 0 0 1 1 +( 2144 2688 448 ) ( 2145 2688 448 ) ( 2144 2689 448 ) 1 0 0 0 1 1 +( 2176 2880 784 ) ( 2176 2881 784 ) ( 2177 2880 784 ) 1 0 0 0 1 1 +( 2176 2848 464 ) ( 2177 2848 464 ) ( 2176 2848 465 ) 1 0 0 0 1 1 +( 2176 2880 464 ) ( 2176 2880 465 ) ( 2176 2881 464 ) 1 0 0 0 1 1 +} +// brush 218 +{ +( 2144 2688 448 ) ( 2144 2689 448 ) ( 2144 2688 449 ) 2 0 0 0 1 1 +( 2144 2688 448 ) ( 2144 2688 449 ) ( 2145 2688 448 ) 2 0 0 0 1 1 +( 2144 2688 448 ) ( 2145 2688 448 ) ( 2144 2689 448 ) 2 0 0 0 1 1 +( 2176 2784 784 ) ( 2176 2785 784 ) ( 2177 2784 784 ) 2 0 0 0 1 1 +( 2176 2784 464 ) ( 2177 2784 464 ) ( 2176 2784 465 ) 2 0 0 0 1 1 +( 2176 2784 464 ) ( 2176 2784 465 ) ( 2176 2785 464 ) 2 0 0 0 1 1 +} +// brush 219 +{ +( 2144 2848 448 ) ( 2144 2849 448 ) ( 2144 2848 449 ) 2 0 0 0 1 1 +( 2144 2848 448 ) ( 2144 2848 449 ) ( 2145 2848 448 ) 2 0 0 0 1 1 +( 2144 2848 448 ) ( 2145 2848 448 ) ( 2144 2849 448 ) 2 0 0 0 1 1 +( 2176 2944 784 ) ( 2176 2945 784 ) ( 2177 2944 784 ) 2 0 0 0 1 1 +( 2176 2976 464 ) ( 2177 2976 464 ) ( 2176 2976 465 ) 2 0 0 0 1 1 +( 2176 2944 464 ) ( 2176 2944 465 ) ( 2176 2945 464 ) 2 0 0 0 1 1 +} +// brush 220 +{ +( 1968 2896 448 ) ( 1968 2897 448 ) ( 1968 2896 449 ) 2 0 0 0 1 1 +( 2144 2944 448 ) ( 2144 2944 449 ) ( 2145 2944 448 ) 2 0 0 0 1 1 +( 2144 2896 448 ) ( 2145 2896 448 ) ( 2144 2897 448 ) 2 0 0 0 1 1 +( 2176 2992 656 ) ( 2176 2993 656 ) ( 2177 2992 656 ) 2 0 0 0 1 1 +( 2176 2976 464 ) ( 2177 2976 464 ) ( 2176 2976 465 ) 2 0 0 0 1 1 +( 2176 2992 464 ) ( 2176 2992 465 ) ( 2176 2993 464 ) 2 0 0 0 1 1 +} +// brush 221 +{ +( 1440 3104 960 ) ( 1440 2032 960 ) ( 1440 2032 320 ) 26 0 0 0 1 1 +( 1648 2976 960 ) ( 1664 2976 960 ) ( 1664 2976 320 ) 26 0 0 0 1 1 +( 1632 2032 320 ) ( 1648 2032 320 ) ( 1648 3104 320 ) 26 0 0 0 1 1 +( 1648 3104 800 ) ( 1648 2032 800 ) ( 1632 2032 800 ) 26 0 0 0 1 1 +( 1648 3008 584 ) ( 1648 3008 600 ) ( 1608 3008 600 ) 26 0 0 0 1 1 +( 1728 2032 960 ) ( 1728 3104 960 ) ( 1728 3104 320 ) 26 0 0 0 1 1 +} +// brush 222 +{ +( 1728 3104 960 ) ( 1728 2032 960 ) ( 1728 2032 320 ) 2 0 0 0 1 1 +( 1936 2976 960 ) ( 1952 2976 960 ) ( 1952 2976 320 ) 2 0 0 0 1 1 +( 1920 2032 320 ) ( 1936 2032 320 ) ( 1936 3104 320 ) 2 0 0 0 1 1 +( 1936 3104 800 ) ( 1936 2032 800 ) ( 1920 2032 800 ) 2 0 0 0 1 1 +( 1936 3008 584 ) ( 1936 3008 600 ) ( 1896 3008 600 ) 2 0 0 0 1 1 +( 2144 2032 960 ) ( 2144 3104 960 ) ( 2144 3104 320 ) 2 0 0 0 1 1 +} +// brush 223 +{ +( 2048 2784 448 ) ( 2048 2785 448 ) ( 2048 2784 449 ) 14 0 0 0 1 1 +( 2048 2752 448 ) ( 2048 2752 449 ) ( 2049 2752 448 ) 14 0 0 0 1 1 +( 2048 2784 448 ) ( 2049 2784 448 ) ( 2048 2785 448 ) 14 0 0 0 1 1 +( 2080 2816 512 ) ( 2080 2817 512 ) ( 2081 2816 512 ) 14 0 0 0 1 1 +( 2080 2784 480 ) ( 2081 2784 480 ) ( 2080 2784 481 ) 14 0 0 0 1 1 +( 2080 2816 480 ) ( 2080 2816 481 ) ( 2080 2817 480 ) 14 0 0 0 1 1 +} +// brush 224 +{ +( 1856 2000 632 ) ( 1856 1936 632 ) ( 1856 1936 504 ) 14 32 -16 0 1 1 +( 1848 1952 632 ) ( 1912 1952 632 ) ( 1912 1952 504 ) 14 16 -16 0 1 1 +( 1848 1936 512 ) ( 1912 1936 512 ) ( 1912 2000 512 ) 14 32 -16 0 1 1 +( 1912 2000 576 ) ( 1912 1936 576 ) ( 1848 1936 576 ) 14 16 32 0 1 1 +( 1912 2016 632 ) ( 1848 2016 632 ) ( 1848 2016 504 ) 14 16 -16 0 1 1 +( 1920 1936 632 ) ( 1920 2000 632 ) ( 1920 2000 504 ) 14 32 -16 0 1 1 +} +// brush 225 +{ +( 1136 920 844 ) ( 1136 616 844 ) ( 1136 616 324 ) 27 0 0 0 1 1 +( 928 640 844 ) ( 1248 640 844 ) ( 1248 640 324 ) 27 0 0 0 1 1 +( 1248 920 832 ) ( 928 920 832 ) ( 928 616 832 ) 27 0 0 0 1 1 +( 928 616 848 ) ( 928 920 848 ) ( 1248 920 848 ) 27 0 0 0 1 1 +( 1248 928 844 ) ( 928 928 844 ) ( 928 928 324 ) 27 0 0 0 1 1 +( 1168 616 844 ) ( 1168 920 844 ) ( 1168 920 324 ) 27 0 0 0 1 1 +} +// brush 226 +{ +( 512 1624 696 ) ( 512 1624 660 ) ( 512 1672 660 ) 26 0 0 0 1 1 +( 544 1600 656 ) ( 544 1600 692 ) ( 576 1600 692 ) 26 0 0 0 1 1 +( 544 1624 656 ) ( 576 1624 656 ) ( 576 1672 656 ) 26 0 0 0 1 1 +( 576 1624 688 ) ( 544 1624 688 ) ( 544 1672 688 ) 26 0 0 0 1 1 +( 576 1664 692 ) ( 544 1664 692 ) ( 544 1664 656 ) 26 0 0 0 1 1 +( 544 1624 656 ) ( 544 1624 692 ) ( 544 1672 692 ) 26 0 0 0 1 1 +} +// brush 227 +{ +( 640 1624 696 ) ( 640 1624 660 ) ( 640 1672 660 ) 26 0 0 0 1 1 +( 672 1600 656 ) ( 672 1600 692 ) ( 704 1600 692 ) 26 0 0 0 1 1 +( 672 1624 656 ) ( 704 1624 656 ) ( 704 1672 656 ) 26 0 0 0 1 1 +( 704 1624 688 ) ( 672 1624 688 ) ( 672 1672 688 ) 26 0 0 0 1 1 +( 704 1664 692 ) ( 672 1664 692 ) ( 672 1664 656 ) 26 0 0 0 1 1 +( 672 1624 656 ) ( 672 1624 692 ) ( 672 1672 692 ) 26 0 0 0 1 1 +} +// brush 228 +{ +( 768 1848 692 ) ( 768 1816 692 ) ( 768 1816 656 ) 26 0 0 0 1 1 +( 856 1792 696 ) ( 856 1792 660 ) ( 808 1792 660 ) 26 0 0 0 1 1 +( 856 1816 656 ) ( 856 1848 656 ) ( 808 1848 656 ) 26 0 0 0 1 1 +( 856 1848 688 ) ( 856 1816 688 ) ( 808 1816 688 ) 26 0 0 0 1 1 +( 856 1824 656 ) ( 856 1824 692 ) ( 808 1824 692 ) 26 0 0 0 1 1 +( 832 1816 656 ) ( 832 1816 692 ) ( 832 1848 692 ) 26 0 0 0 1 1 +} +// brush 229 +{ +( 768 1976 692 ) ( 768 1944 692 ) ( 768 1944 656 ) 26 0 0 0 1 1 +( 856 1920 696 ) ( 856 1920 660 ) ( 808 1920 660 ) 26 0 0 0 1 1 +( 856 1944 656 ) ( 856 1976 656 ) ( 808 1976 656 ) 26 0 0 0 1 1 +( 856 1976 688 ) ( 856 1944 688 ) ( 808 1944 688 ) 26 0 0 0 1 1 +( 856 1952 656 ) ( 856 1952 692 ) ( 808 1952 692 ) 26 0 0 0 1 1 +( 832 1944 656 ) ( 832 1944 692 ) ( 832 1976 692 ) 26 0 0 0 1 1 +} +// brush 230 +{ +( 1184 1824 752 ) ( 1184 1825 752 ) ( 1184 1824 753 ) 26 0 0 0 1 1 +( 1216 1824 752 ) ( 1216 1824 753 ) ( 1217 1824 752 ) 26 0 0 0 1 1 +( 1216 1824 672 ) ( 1217 1824 672 ) ( 1216 1825 672 ) 26 0 0 0 1 1 +( 1248 1888 768 ) ( 1248 1889 768 ) ( 1249 1888 768 ) 26 0 0 0 1 1 +( 1248 1888 768 ) ( 1249 1888 768 ) ( 1248 1888 769 ) 26 0 0 0 1 1 +( 1216 1888 768 ) ( 1216 1888 769 ) ( 1216 1889 768 ) 26 0 0 0 1 1 +} +// brush 231 +{ +( 896 384 640 ) ( 896 385 640 ) ( 896 384 641 ) 8 0 0 0 1 1 +( 896 384 640 ) ( 896 384 641 ) ( 897 384 640 ) 8 0 0 0 1 1 +( 896 384 640 ) ( 897 384 640 ) ( 896 385 640 ) 8 0 0 0 1 1 +( 960 480 656 ) ( 960 481 656 ) ( 961 480 656 ) 8 0 0 0 1 1 +( 960 448 672 ) ( 961 448 672 ) ( 960 448 673 ) 8 0 0 0 1 1 +( 960 480 672 ) ( 960 480 673 ) ( 960 481 672 ) 8 0 0 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "928 416 664" +} +// entity 2 +{ +"classname" "pickup_grenadelauncher" +"origin" "1472 192 700" +} +// entity 3 +{ +"classname" "pickup_key" +"origin" "868 1660 220" +} +// entity 4 +{ +"classname" "door" +"origin" "1308 1852 544" +"dir" "1" +"texture" "3" +} +// entity 5 +{ +"classname" "torch" +"origin" "1244 112 716" +} +// entity 6 +{ +"classname" "torch" +"origin" "1244 304 716" +} +// entity 7 +{ +"classname" "torch" +"origin" "1692 304 716" +} +// entity 8 +{ +"classname" "torch" +"origin" "1884 848 780" +} +// entity 9 +{ +"classname" "torch" +"origin" "1148 928 780" +} +// entity 10 +{ +"classname" "torch" +"origin" "1148 656 780" +} +// entity 11 +{ +"classname" "torch" +"origin" "1488 1008 732" +} +// entity 12 +{ +"classname" "torch" +"origin" "688 1592 668" +} +// entity 13 +{ +"classname" "torch" +"origin" "496 1592 668" +} +// entity 14 +{ +"classname" "torch" +"origin" "848 1776 668" +} +// entity 15 +{ +"classname" "torch" +"origin" "848 1968 668" +} +// entity 16 +{ +"classname" "torch" +"origin" "1248 1936 572" +} +// entity 17 +{ +"classname" "torch" +"origin" "1248 1776 572" +} +// entity 18 +{ +"classname" "light" +"origin" "936 1048 584" +"light" "3" +"color" "32 32 255" +} +// entity 19 +{ +"classname" "light" +"origin" "616 1048 584" +"light" "3" +"color" "32 32 255" +} +// entity 20 +{ +"classname" "light" +"origin" "792 1464 584" +"light" "3" +"color" "32 32 255" +} +// entity 21 +{ +"classname" "light" +"origin" "888 1640 312" +"light" "10" +"color" "32 32 255" +} +// entity 22 +{ +"classname" "light" +"origin" "1288 1384 312" +"light" "15" +"color" "32 32 255" +} +// entity 23 +{ +"classname" "light" +"origin" "1608 1208 312" +"light" "15" +"color" "32 32 255" +} +// entity 24 +{ +"classname" "torch" +"origin" "1792 1392 336" +} +// entity 25 +{ +"classname" "light" +"origin" "2488 1592 824" +"light" "40" +"color" "192 192 255" +} +// entity 26 +{ +"classname" "light" +"origin" "2360 1464 488" +"light" "20" +"color" "192 192 255" +} +// entity 27 +{ +"classname" "torch" +"origin" "2192 752 624" +} +// entity 28 +{ +"classname" "torch" +"origin" "2144 1744 576" +} +// entity 29 +{ +"classname" "pickup_nailgun" +"origin" "1076 756 572" +} +// entity 30 +{ +"classname" "pickup_health" +"origin" "1900 1012 636" +} +// entity 31 +{ +"classname" "enemy_zombie" +"origin" "1104 1936 216" +} +// entity 32 +{ +"classname" "enemy_zombie" +"origin" "1056 1968 216" +} +// entity 33 +{ +"classname" "enemy_zombie" +"origin" "656 1456 216" +} +// entity 34 +{ +"classname" "enemy_zombie" +"origin" "1104 1584 216" +} +// entity 35 +{ +"classname" "enemy_zombie" +"origin" "1648 432 696" +} +// entity 36 +{ +"classname" "enemy_zombie" +"origin" "1616 496 696" +} +// entity 37 +{ +"classname" "enemy_zombie" +"origin" "1552 496 696" +} +// entity 38 +{ +"classname" "enemy_ogre" +"origin" "1552 1040 648" +} +// entity 39 +{ +"classname" "enemy_ogre" +"origin" "1872 592 648" +} +// entity 40 +{ +"classname" "enemy_ogre" +"origin" "688 1968 504" +} +// entity 41 +{ +"classname" "enemy_grunt" +"origin" "464 1744 504" +} +// entity 42 +{ +"classname" "enemy_zombie" +"origin" "1648 1168 232" +} +// entity 43 +{ +"classname" "enemy_zombie" +"origin" "1584 1296 232" +} +// entity 44 +{ +"classname" "enemy_ogre" +"origin" "2576 1456 264" +} +// entity 45 +{ +"classname" "enemy_grunt" +"origin" "2384 1616 264" +} +// entity 46 +{ +"classname" "light" +"origin" "1464 184 776" +"light" "3" +"color" "255 32 0" +"delay" "" +} +// entity 47 +{ +"classname" "enemy_zombie" +"origin" "1136 1632 216" +} +// entity 48 +{ +"classname" "torch" +"origin" "2640 720 624" +} +// entity 49 +{ +"classname" "torch" +"origin" "2672 1712 624" +} +// entity 50 +{ +"classname" "pickup_health" +"origin" "1900 500 636" +} +// entity 51 +{ +"classname" "pickup_grenades" +"origin" "1868 500 636" +} +// entity 52 +{ +"classname" "pickup_grenades" +"origin" "1900 1068 636" +} +// entity 53 +{ +"classname" "pickup_nails" +"origin" "1004 1036 556" +} +// entity 54 +{ +"classname" "pickup_nails" +"origin" "1004 1068 556" +} +// entity 55 +{ +"classname" "pickup_health" +"origin" "876 1204 492" +} +// entity 56 +{ +"classname" "pickup_health" +"origin" "364 1844 492" +} +// entity 57 +{ +"classname" "pickup_grenades" +"origin" "372 1836 204" +} +// entity 58 +{ +"classname" "pickup_grenades" +"origin" "436 1836 204" +} +// entity 59 +{ +"classname" "pickup_health" +"origin" "628 2060 204" +} +// entity 60 +{ +"classname" "pickup_nails" +"origin" "2660 1188 252" +} +// entity 61 +{ +"classname" "pickup_health" +"origin" "2004 1708 236" +} +// entity 62 +{ +"classname" "pickup_health" +"origin" "1940 1708 236" +} +// entity 63 +{ +"classname" "pickup_health" +"origin" "2100 1708 524" +} +// entity 64 +{ +"classname" "pickup_grenades" +"origin" "2164 1708 524" +} +// entity 65 +{ +"classname" "pickup_nails" +"origin" "2668 1420 524" +} +// entity 66 +{ +"classname" "pickup_nails" +"origin" "2004 756 508" +} +// entity 67 +{ +"classname" "enemy_grunt" +"origin" "2512 1616 264" +} +// entity 68 +{ +"classname" "enemy_grunt" +"origin" "2384 1680 552" +} +// entity 69 +{ +"classname" "torch" +"origin" "1808 1840 624" +} +// entity 70 +{ +"classname" "light" +"origin" "1976 2120 936" +"light" "50" +"color" "192 192 255" +} +// entity 71 +{ +"classname" "light" +"origin" "1864 2760 584" +"light" "20" +"color" "255 0 0" +"delay" "" +} +// entity 72 +{ +"classname" "light" +"origin" "1992 2792 584" +"light" "5" +"color" "0 128 255" +"delay" "" +} +// entity 73 +{ +"classname" "light" +"origin" "1704 2824 552" +"light" "5" +"color" "0 128 255" +"delay" "" +} +// entity 74 +{ +"classname" "pickup_nails" +"origin" "2124 1876 524" +} +// entity 75 +{ +"classname" "pickup_nails" +"origin" "2060 1876 524" +} +// entity 76 +{ +"classname" "pickup_health" +"origin" "2060 1940 620" +} +// entity 77 +{ +"classname" "pickup_health" +"origin" "1588 2292 460" +} +// entity 78 +{ +"classname" "pickup_grenades" +"origin" "1588 2356 460" +} +// entity 79 +{ +"classname" "pickup_nails" +"origin" "1652 2100 524" +} +// entity 80 +{ +"classname" "trigger_levelchange" +"origin" "1856 2880 544" +} +// entity 81 +{ +"classname" "enemy_grunt" +"origin" "496 1840 504" +} +// entity 82 +{ +"classname" "enemy_grunt" +"origin" "1200 1840 504" +} +// entity 83 +{ +"classname" "enemy_ogre" +"origin" "1680 2320 472" +} +// entity 84 +{ +"classname" "enemy_grunt" +"origin" "1968 2032 536" +} +// entity 85 +{ +"classname" "enemy_ogre" +"origin" "2000 2320 472" +} +// entity 86 +{ +"classname" "enemy_grunt" +"origin" "1648 2256 488" +} +// entity 87 +{ +"classname" "enemy_grunt" +"origin" "1824 2528 488" +} +// entity 88 +{ +"classname" "enemy_grunt" +"origin" "1984 2704 488" +} +// entity 89 +{ +"classname" "enemy_enforcer" +"origin" "2032 2672 472" +} +// entity 90 +{ +"classname" "enemy_enforcer" +"origin" "1776 2672 472" +} +// entity 91 +{ +"classname" "pickup_health" +"origin" "2156 2476 524" +} +// entity 92 +{ +"classname" "light" +"origin" "1928 2408 568" +"light" "20" +"color" "192 192 255" +} +// entity 93 +{ +"classname" "light" +"origin" "984 360 728" +"color" "255 0 0" +"delay" "" +"light" "10" +} +// entity 94 +{ +"classname" "light" +"origin" "1080 760 616" +"light" "3" +"color" "255 192 32" +"delay" "" +} +// entity 95 +{ +"classname" "pickup_grenades" +"origin" "1508 1156 220" +} diff --git a/assets/models/boulder.obj b/assets/models/boulder.obj new file mode 100755 index 0000000..819aac8 --- /dev/null +++ b/assets/models/boulder.obj @@ -0,0 +1,22 @@ +# Exported from Wings 3D 2.1.5 +mtllib boulder.mtl +o Cube2 +#7 vertices, 8 faces +v -1.76671199 -1.11166500 -1.27988643 +v -0.66717809 -1.13106144 0.80598548 +v -0.75547184 0.39059562 -1.03424222 +v 1.71502654 -1.25440865 -1.89713495 +v 1.00000000 -1.00000000 1.00000000 +v 0.43931125 8.8170497e-2 -1.22055291 +v 0.42936450 0.36758775 0.33316664 +g Cube2_default +usemtl default +s 1 +f 1// 6// 4// +f 2// 3// 1// +f 2// 7// 3// +f 3// 6// 1// +f 3// 7// 6// +f 4// 6// 5// +f 5// 6// 7// +f 5// 7// 2// diff --git a/assets/models/box.obj b/assets/models/box.obj new file mode 100644 index 0000000..4e9194f --- /dev/null +++ b/assets/models/box.obj @@ -0,0 +1,25 @@ +# Exported from Wings 3D 2.1.7 +mtllib box.mtl +o Cube1 +#8 vertices, 10 faces +v -1.00000000 -1.00000000 -1.00000000 +v -1.00000000 -1.00000000 1.00000000 +v -1.00000000 1.00000000 -1.00000000 +v -1.00000000 1.00000000 1.00000000 +v 1.00000000 -1.00000000 -1.00000000 +v 1.00000000 -1.00000000 1.00000000 +v 1.00000000 1.00000000 -1.00000000 +v 1.00000000 1.00000000 1.00000000 +g Cube1_default +usemtl default +s 1 +f 2// 3// 1// +f 2// 4// 3// +f 2// 8// 4// +f 3// 5// 1// +f 3// 7// 5// +f 3// 8// 7// +f 4// 8// 3// +f 5// 8// 6// +f 6// 8// 2// +f 7// 8// 5// diff --git a/assets/models/grenade.obj b/assets/models/grenade.obj new file mode 100644 index 0000000..3014d4a --- /dev/null +++ b/assets/models/grenade.obj @@ -0,0 +1,33 @@ +# Exported from Wings 3D 2.1.7 +mtllib grenade.mtl +o Cylinder1 +#10 vertices, 16 faces +v -1.50000000 1.00000000 0.0000000e+0 +v -1.50000000 0.30901699 0.95105652 +v -1.50000000 -0.80901699 0.58778525 +v -1.50000000 -0.80901699 -0.58778525 +v -1.50000000 0.30901699 -0.95105652 +v 1.50000000 1.00000000 0.0000000e+0 +v 1.50000000 0.30901699 0.95105652 +v 1.50000000 -0.80901699 0.58778525 +v 1.50000000 -0.80901699 -0.58778525 +v 1.50000000 0.30901699 -0.95105652 +g Cylinder1_default +usemtl default +s 1 +f 1// 4// 2// +f 1// 6// 5// +f 2// 4// 3// +f 2// 6// 1// +f 2// 8// 7// +f 3// 8// 2// +f 4// 8// 3// +f 4// 10// 9// +f 5// 4// 1// +f 5// 6// 10// +f 5// 10// 4// +f 6// 9// 10// +f 7// 6// 2// +f 7// 8// 6// +f 9// 6// 8// +f 9// 8// 4// diff --git a/assets/models/hound.obj b/assets/models/hound.obj new file mode 100644 index 0000000..eba2e48 --- /dev/null +++ b/assets/models/hound.obj @@ -0,0 +1,54 @@ +# Exported from Wings 3D 2.1.7 +mtllib hound.mtl +o Cube1 +#17 vertices, 30 faces +v -0.27414249 0.20231664 1.59224039 +v 0.24584539 0.20231664 1.59224039 +v -0.34489706 0.68997600 -5.9876242e-2 +v 0.31659996 0.68997600 -5.9876242e-2 +v -0.44658541 0.30520433 -1.66534505 +v 0.41828831 0.30520433 -1.66534505 +v -1.4148550e-2 -0.39042135 0.70643627 +v -1.4148550e-2 -6.9785484e-2 -2.34491358 +v -1.4148550e-2 -0.23375148 -0.42106184 +v -0.43375565 -1.00192308 -1.66343399 +v 0.40545855 -1.00192308 -1.66343399 +v -0.60915295 -0.99285579 0.59310583 +v 0.58085585 -0.99285579 0.59310583 +v -1.4148550e-2 -9.7830546e-3 -1.28127565 +v -1.4148550e-2 -5.9388855e-2 0.21094748 +v -0.45093850 0.58881440 1.65639487 +v 0.42264140 0.58881440 1.65639487 +g Cube1_default +usemtl default +s 1 +f 1// 7// 2// +f 1// 17// 16// +f 2// 7// 17// +f 2// 17// 1// +f 3// 5// 9// +f 3// 12// 7// +f 3// 17// 4// +f 4// 6// 3// +f 4// 13// 9// +f 4// 17// 7// +f 5// 3// 6// +f 5// 6// 8// +f 6// 11// 8// +f 7// 13// 4// +f 7// 15// 13// +f 7// 16// 3// +f 8// 10// 5// +f 8// 14// 10// +f 9// 5// 10// +f 9// 6// 4// +f 9// 12// 3// +f 9// 14// 11// +f 9// 15// 12// +f 10// 14// 9// +f 11// 6// 9// +f 11// 14// 8// +f 12// 15// 7// +f 13// 15// 9// +f 16// 7// 1// +f 16// 17// 3// diff --git a/assets/models/hound_run_1.obj b/assets/models/hound_run_1.obj new file mode 100644 index 0000000..0dc317c --- /dev/null +++ b/assets/models/hound_run_1.obj @@ -0,0 +1,54 @@ +# Exported from Wings 3D 2.1.7 +mtllib hound_run_1.mtl +o Cube1 +#17 vertices, 30 faces +v -0.27414249 0.20231664 1.59224039 +v 0.24584539 0.20231664 1.59224039 +v -0.34489706 0.68997600 -5.9876242e-2 +v 0.31659996 0.68997600 -5.9876242e-2 +v -0.44658541 0.30520433 -1.66534505 +v 0.41828831 0.30520433 -1.66534505 +v -1.4148550e-2 -0.39042135 0.70643627 +v -1.4148550e-2 -6.9785484e-2 -2.34491358 +v -1.4148550e-2 -0.23375148 -0.42106184 +v -0.43375565 -0.93382778 -0.95044611 +v 0.40545855 -0.83101396 -0.66615665 +v -0.60915295 -0.95696320 0.16541373 +v 0.58085585 -0.81540550 -7.0403956e-2 +v -1.4148550e-2 -9.7830546e-3 -1.28127565 +v -1.4148550e-2 -5.9388855e-2 0.21094748 +v -0.45093850 0.58881440 1.65639487 +v 0.42264140 0.58881440 1.65639487 +g Cube1_default +usemtl default +s 1 +f 1// 7// 2// +f 1// 17// 16// +f 2// 7// 17// +f 2// 17// 1// +f 3// 5// 9// +f 3// 12// 7// +f 3// 17// 4// +f 4// 6// 3// +f 4// 13// 9// +f 4// 17// 7// +f 5// 3// 6// +f 5// 6// 8// +f 6// 11// 8// +f 7// 13// 4// +f 7// 15// 13// +f 7// 16// 3// +f 8// 10// 5// +f 8// 14// 10// +f 9// 5// 10// +f 9// 6// 4// +f 9// 12// 3// +f 9// 14// 11// +f 9// 15// 12// +f 10// 14// 9// +f 11// 6// 9// +f 11// 14// 8// +f 12// 15// 7// +f 13// 15// 9// +f 16// 7// 1// +f 16// 17// 3// diff --git a/assets/models/hound_run_2.obj b/assets/models/hound_run_2.obj new file mode 100644 index 0000000..5b5623a --- /dev/null +++ b/assets/models/hound_run_2.obj @@ -0,0 +1,54 @@ +# Exported from Wings 3D 2.1.7 +mtllib hound_run_2.mtl +o Cube1 +#17 vertices, 30 faces +v -0.27414249 0.32374765 1.53588567 +v 0.24584539 0.32374765 1.53588567 +v -0.34489706 0.87178707 -2.8008988e-2 +v 0.31659996 0.87178707 -2.8008988e-2 +v -0.44658541 0.48701540 -1.63347780 +v 0.41828831 0.48701540 -1.63347780 +v -1.4148550e-2 -0.20861028 0.73830352 +v -1.4148550e-2 0.11202559 -2.31304633 +v -1.4148550e-2 -5.1940403e-2 -0.38919459 +v -0.43375565 -0.70455128 -2.48896361 +v 0.40545855 -0.68576637 -2.05640756 +v -0.60915295 -0.59619234 1.41092021 +v 0.58085585 -0.54855918 1.19422288 +v -1.4148550e-2 0.17202802 -1.24940840 +v -1.4148550e-2 0.12242222 0.24281474 +v -0.45093850 0.71024542 1.60004015 +v 0.42264140 0.71024542 1.60004015 +g Cube1_default +usemtl default +s 1 +f 1// 7// 2// +f 1// 17// 16// +f 2// 7// 17// +f 2// 17// 1// +f 3// 5// 9// +f 3// 12// 7// +f 3// 17// 4// +f 4// 6// 3// +f 4// 13// 9// +f 4// 17// 7// +f 5// 3// 6// +f 5// 6// 8// +f 6// 11// 8// +f 7// 13// 4// +f 7// 15// 13// +f 7// 16// 3// +f 8// 10// 5// +f 8// 14// 10// +f 9// 5// 10// +f 9// 6// 4// +f 9// 12// 3// +f 9// 14// 11// +f 9// 15// 12// +f 10// 14// 9// +f 11// 6// 9// +f 11// 14// 8// +f 12// 15// 7// +f 13// 15// 9// +f 16// 7// 1// +f 16// 17// 3// diff --git a/assets/models/nailgun.obj b/assets/models/nailgun.obj new file mode 100644 index 0000000..dbecbb9 --- /dev/null +++ b/assets/models/nailgun.obj @@ -0,0 +1,46 @@ +# Exported from Wings 3D 2.1.7 +mtllib nailgun.mtl +o Cube1 +#17 vertices, 22 faces +v -0.49808545 7.0738526e-4 -0.35027558 +v 0.73207036 7.0738526e-4 -0.35027558 +v -0.49808545 7.0738526e-4 0.23452442 +v 0.73207036 7.0738526e-4 0.23452442 +v 0.73207036 -0.70631483 -5.7875579e-2 +v 0.93949391 -0.16061271 0.49790863 +v -1.14322716 -0.16061271 0.49790863 +v 0.93949391 0.26298729 0.49790863 +v -1.14322716 0.26298729 0.49790863 +v 0.93949391 3.7539161e-2 9.6285961e-2 +v -1.14322716 3.7539161e-2 9.6285961e-2 +v 0.93949391 -0.16061271 -0.61738635 +v -1.14322716 -0.16061271 -0.61738635 +v 0.93949391 0.26298729 -0.61738635 +v -1.14322716 0.26298729 -0.61738635 +v 0.93949391 3.7539161e-2 -0.21576367 +v -1.14322716 3.7539161e-2 -0.21576367 +g Cube1_default +usemtl default +s 1 +f 1// 3// 2// +f 1// 5// 3// +f 2// 5// 1// +f 3// 4// 2// +f 3// 5// 4// +f 4// 5// 2// +f 6// 8// 7// +f 6// 10// 8// +f 7// 10// 6// +f 7// 11// 10// +f 8// 9// 7// +f 8// 10// 9// +f 9// 11// 7// +f 10// 11// 9// +f 12// 15// 14// +f 12// 17// 13// +f 13// 15// 12// +f 13// 17// 15// +f 14// 16// 12// +f 14// 17// 16// +f 15// 17// 14// +f 16// 17// 12// diff --git a/assets/models/q.obj b/assets/models/q.obj new file mode 100644 index 0000000..f1f73ef --- /dev/null +++ b/assets/models/q.obj @@ -0,0 +1,55 @@ +# Exported from Wings 3D 2.1.7 +mtllib q.mtl +o entity0_brush3 +#25 vertices, 23 faces +v -1.47660400 0.89508300 -2.93151200 +v -4.41993200 2.36674700 -2.93151100 +v 1.46672400 0.89508300 -2.93151200 +v 4.41005200 2.36674700 -2.93151100 +v 1.46672400 -2.78407800 -2.93151200 +v 1.46672400 -7.19907000 -2.93151200 +v 7.35338000 -0.57658200 -2.93151200 +v 10.29670800 -2.78407800 -2.93151200 +v 7.35338000 -0.57658200 2.95514500 +v 5.88171600 15.61172400 -2.93151100 +v 11.03254000 6.78173800 -2.93151100 +v 11.03254000 6.78173800 2.95514500 +v 13.24003700 7.51757000 -2.93151100 +v -7.36326000 -0.57658200 -2.93151200 +v -10.30658800 -2.78407800 -2.93151200 +v -7.36326000 -0.57658200 2.95514500 +v -1.47660400 -7.19907000 -2.93151200 +v -1.47660400 -2.78407800 -2.93151200 +v -13.24991700 7.51757000 -2.93151100 +v -11.04242000 6.78173800 2.95514500 +v -11.04242000 6.78173800 -2.93151100 +v -5.89159600 15.61172400 -2.93151100 +v -1.47660400 -9.40656600 -2.93151200 +v -4.9400000e-3 -18.23655100 -2.93151200 +v 1.46672400 -9.40656600 -2.93151200 +g entity0_brush3_default +usemtl default +s 1 +f 1// 4// 3// +f 1// 25// 23// +f 2// 4// 1// +f 3// 25// 1// +f 5// 7// 6// +f 5// 9// 7// +f 7// 8// 6// +f 7// 11// 8// +f 9// 11// 7// +f 9// 12// 11// +f 10// 13// 11// +f 11// 12// 10// +f 11// 13// 8// +f 14// 17// 15// +f 14// 18// 17// +f 14// 20// 16// +f 14// 21// 20// +f 15// 21// 14// +f 16// 18// 14// +f 19// 21// 15// +f 19// 22// 21// +f 21// 22// 20// +f 23// 25// 24// diff --git a/assets/models/torch_1.obj b/assets/models/torch_1.obj new file mode 100644 index 0000000..4afe3d3 --- /dev/null +++ b/assets/models/torch_1.obj @@ -0,0 +1,27 @@ +# Exported from Wings 3D 2.1.7 +mtllib torch.mtl +o cone2 +#4 vertices, 3 faces +v 0.56160000 0.93902222 4.8672177e-17 +v -0.28080000 0.93902222 0.48635987 +v -0.28080000 0.93902222 -0.48635987 +v 0.0000000e+0 2.15875556 0.0000000e+0 +g cone2_default +usemtl default +s 1 +f 1// 4// 2// +f 2// 4// 3// +f 3// 4// 1// +o cone1 +#4 vertices, 4 faces +v 1.00000000 1.00000000 0.0000000e+0 +v -0.50000000 1.00000000 0.86602540 +v -0.50000000 1.00000000 -0.86602540 +v 0.0000000e+0 -1.00000000 0.0000000e+0 +g cone1_default +usemtl default +s 1 +f 5// 7// 6// +f 5// 8// 7// +f 6// 8// 5// +f 7// 8// 6// diff --git a/assets/models/torch_2.obj b/assets/models/torch_2.obj new file mode 100644 index 0000000..05837dd --- /dev/null +++ b/assets/models/torch_2.obj @@ -0,0 +1,27 @@ +# Exported from Wings 3D 2.1.7 +mtllib torch2.mtl +o cone2 +#4 vertices, 3 faces +v 0.56160000 0.93902222 4.8672177e-17 +v -0.28080000 0.93902222 0.48635987 +v -0.28080000 0.93902222 -0.48635987 +v 0.37141710 2.34754042 -0.37242647 +g cone2_default +usemtl default +s 1 +f 1// 4// 2// +f 2// 4// 3// +f 3// 4// 1// +o cone1 +#4 vertices, 4 faces +v 1.00000000 1.00000000 0.0000000e+0 +v -0.50000000 1.00000000 0.86602540 +v -0.50000000 1.00000000 -0.86602540 +v 0.0000000e+0 -1.00000000 0.0000000e+0 +g cone1_default +usemtl default +s 1 +f 5// 7// 6// +f 5// 8// 7// +f 6// 8// 5// +f 7// 8// 6// diff --git a/assets/models/torch_3.obj b/assets/models/torch_3.obj new file mode 100644 index 0000000..443d8be --- /dev/null +++ b/assets/models/torch_3.obj @@ -0,0 +1,27 @@ +# Exported from Wings 3D 2.1.7 +mtllib torch_3.mtl +o cone2 +#4 vertices, 3 faces +v 0.56160000 0.93902222 4.8672177e-17 +v -0.28080000 0.93902222 0.48635987 +v -0.28080000 0.93902222 -0.48635987 +v 0.10185419 1.89578758 0.31045814 +g cone2_default +usemtl default +s 1 +f 1// 4// 2// +f 2// 4// 3// +f 3// 4// 1// +o cone1 +#4 vertices, 4 faces +v 1.00000000 1.00000000 0.0000000e+0 +v -0.50000000 1.00000000 0.86602540 +v -0.50000000 1.00000000 -0.86602540 +v 0.0000000e+0 -1.00000000 0.0000000e+0 +g cone1_default +usemtl default +s 1 +f 5// 7// 6// +f 5// 8// 7// +f 6// 8// 5// +f 7// 8// 6// diff --git a/assets/models/unit_fire.obj b/assets/models/unit_fire.obj new file mode 100755 index 0000000..a00c63f --- /dev/null +++ b/assets/models/unit_fire.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib unit_fire.mtl +o idle +#36 vertices, 68 faces +v -9.7072365e-2 0.56526052 0.14813200 +v -5.1174828e-3 0.58241863 3.6241454e-2 +v -7.3432045e-2 0.41571136 8.8730558e-2 +v -2.7773366e-3 0.38195589 0.18768463 +v -0.16457846 0.28956454 0.14866615 +v -0.22256966 0.36820969 6.5821860e-2 +v -2.2042426e-3 0.20761891 0.17635056 +v -0.16376325 0.24789118 2.7255653e-2 +v -3.2828151e-3 -5.9558653e-2 -3.2466908e-2 +v -0.11705512 -1.8998070e-2 0.10033982 +v -5.2468113e-2 -0.37762396 0.11261478 +v -0.12733850 -0.38368582 0.11398771 +v -0.11232770 -0.31817914 4.0267488e-2 +v -0.18392516 0.29905284 0.36931274 +v -0.21375240 0.22504257 0.28526370 +v -0.16363894 0.20062898 0.33478576 +v -3.1666221e-3 0.58110829 0.22659559 +v -4.3491030e-3 0.40731243 4.3715603e-2 +v -1.6209207e-3 -0.12923391 0.10318519 +v -0.13664447 0.22269181 0.71114277 +v -6.2110567e-2 -0.72441694 1.6821488e-2 +v -4.2262828e-3 0.60741476 0.13309524 +v 8.9237988e-2 0.56599678 0.14622765 +v 6.5570994e-2 0.41626067 8.7309755e-2 +v 7.8519940e-2 0.28988820 0.20138750 +v 0.14416942 0.38159031 0.14693994 +v 0.17385655 0.30958720 9.0735796e-2 +v 8.1999016e-2 -1.8089508e-2 9.1851922e-2 +v 5.1369741e-2 -0.37721362 0.11155341 +v 0.12629811 -0.38268350 0.11139519 +v 0.10926638 -0.31730344 3.8002490e-2 +v 4.7935402e-2 0.20296119 0.35368779 +v 9.7607717e-2 0.13718946 0.30493926 +v 2.5761572e-2 0.15405508 0.25758703 +v -0.28779708 0.20832952 0.44720995 +v 6.1792415e-2 -0.72392731 1.5555028e-2 +g idle_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 26// 27// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 25// 27// 32// +f 25// 32// 26// +f 26// 18// 24// +f 26// 24// 25// +f 27// 25// 28// +f 27// 26// 34// +f 28// 9// 27// +f 28// 19// 29// +f 28// 31// 9// +f 29// 9// 31// +f 30// 28// 29// +f 30// 36// 31// +f 31// 28// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 34// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/models/unit_idle.obj b/assets/models/unit_idle.obj new file mode 100755 index 0000000..c21ab82 --- /dev/null +++ b/assets/models/unit_idle.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib u42-idle.mtl +o idle +#36 vertices, 68 faces +v -9.7072365e-2 0.56526052 0.14813200 +v -5.1174828e-3 0.58241863 3.6241454e-2 +v -7.3432045e-2 0.41571136 8.8730558e-2 +v -2.7773366e-3 0.38195589 0.18768463 +v -0.16457846 0.28956454 0.14866615 +v -0.22256966 0.36820969 6.5821860e-2 +v -2.2042426e-3 0.20761891 0.17635056 +v -0.12240829 0.27200369 1.9776168e-2 +v -3.2828151e-3 -5.9558653e-2 -3.2466908e-2 +v -0.11705512 -1.8998070e-2 0.10033982 +v -5.2468113e-2 -0.37762396 0.11261478 +v -0.12733850 -0.38368582 0.11398771 +v -0.11232770 -0.31817914 4.0267488e-2 +v -0.26195311 6.1200154e-2 8.9171027e-2 +v -0.27269328 7.0984903e-2 2.8453086e-2 +v -0.19946210 8.9864434e-2 3.4271377e-3 +v -3.1666221e-3 0.58110829 0.22659559 +v -4.3491030e-3 0.40731243 4.3715603e-2 +v -1.6209207e-3 -0.12923391 0.10318519 +v -0.26237064 -0.27025472 0.23936610 +v -6.2110567e-2 -0.72441694 1.6821488e-2 +v -4.2262828e-3 0.60741476 0.13309524 +v 8.9237988e-2 0.56599678 0.14622765 +v 6.5570994e-2 0.41626067 8.7309755e-2 +v 0.15891751 0.29084293 0.14535957 +v 0.21457992 0.36993722 6.1353587e-2 +v 0.11426169 0.27293896 1.7357074e-2 +v 0.11285624 -1.8089508e-2 9.7989805e-2 +v 5.1369741e-2 -0.37721362 0.11155341 +v 0.12629811 -0.38268350 0.11139519 +v 0.10926638 -0.31730344 3.8002490e-2 +v 0.25685736 6.3250386e-2 8.3868066e-2 +v 0.26627654 7.3114801e-2 2.2944069e-2 +v 0.19240220 9.1413002e-2 -5.7825739e-4 +v 0.26296420 -0.26817871 0.23399645 +v 6.1792415e-2 -0.72392731 1.5555028e-2 +g idle_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 26// 27// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 25// 27// 32// +f 25// 32// 26// +f 26// 18// 24// +f 26// 24// 25// +f 27// 25// 28// +f 27// 26// 34// +f 28// 9// 27// +f 28// 19// 29// +f 28// 31// 9// +f 29// 9// 31// +f 30// 28// 29// +f 30// 36// 31// +f 31// 28// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 34// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/models/unit_run_1.obj b/assets/models/unit_run_1.obj new file mode 100755 index 0000000..62cc958 --- /dev/null +++ b/assets/models/unit_run_1.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib u42-run-1.mtl +o run_1 +#36 vertices, 68 faces +v -9.5272919e-2 0.58320065 0.23895644 +v -3.3180374e-3 0.62435371 0.13350350 +v -7.1632599e-2 0.45021114 0.14836243 +v -9.7789112e-4 0.39568245 0.23756984 +v -0.17307984 0.32466544 0.13174644 +v -0.20495298 0.42235179 5.5243521e-2 +v -2.6982217e-2 0.25733845 0.18552924 +v -9.5805943e-2 0.33183820 1.9155900e-2 +v -3.2828150e-3 1.1936972e-2 -2.9445966e-2 +v -0.11705512 5.2497554e-2 0.10336076 +v -5.5121527e-2 -0.21726415 0.30762026 +v -0.12999191 -0.21814619 0.31377274 +v -0.11393341 -0.25917247 0.23816510 +v -0.23980691 0.24937442 -6.0965392e-2 +v -0.23273167 0.23590209 -0.12151453 +v -0.15540189 0.25233529 -0.13129183 +v -1.3671766e-3 0.58155046 0.31898745 +v -2.5496575e-3 0.45183419 0.10259941 +v -1.6209207e-3 -5.7738288e-2 0.10620614 +v -0.22503228 -2.6466381e-2 0.19543165 +v -6.2140773e-2 -0.49248177 0.54917297 +v -2.4268373e-3 0.62761985 0.23347747 +v 9.1037433e-2 0.58433460 0.23725856 +v 6.7370439e-2 0.45105716 0.14709568 +v 0.13784712 0.30642002 0.21923207 +v 0.21521175 0.39769622 0.17346542 +v 0.13166854 0.31848984 8.3160476e-2 +v 0.11285624 5.3406116e-2 0.10101075 +v 5.6280724e-2 -0.26007502 -2.0635962e-2 +v 0.13120909 -0.26515311 -2.2674963e-2 +v 0.11417736 -0.17843586 -6.8947620e-2 +v 0.21505817 0.24739267 0.31347123 +v 0.24150950 0.20354683 0.27775525 +v 0.18039399 0.17439735 0.24201011 +v 8.5574373e-2 0.14637362 0.54237953 +v 8.9212783e-2 -0.30204016 -0.43882211 +g run_1_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 26// 27// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 25// 27// 32// +f 25// 32// 26// +f 26// 18// 24// +f 26// 24// 25// +f 27// 25// 28// +f 27// 26// 34// +f 28// 9// 27// +f 28// 19// 29// +f 29// 9// 31// +f 30// 9// 28// +f 30// 28// 29// +f 30// 36// 31// +f 31// 9// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 34// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/models/unit_run_2.obj b/assets/models/unit_run_2.obj new file mode 100755 index 0000000..673e560 --- /dev/null +++ b/assets/models/unit_run_2.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib u42-run-2.mtl +o run_2 +#36 vertices, 68 faces +v -9.4991472e-2 0.52373540 0.23964533 +v -3.0365897e-3 0.56488846 0.13419239 +v -7.1351151e-2 0.39074589 0.14905133 +v -6.9644348e-4 0.33621720 0.23825873 +v -0.17267823 0.26520019 0.15406434 +v -0.21436437 0.36288654 8.2434335e-2 +v -2.0762743e-2 0.19787320 0.18810538 +v -0.11093143 0.27237295 3.2264433e-2 +v -3.0013674e-3 -4.7528279e-2 -2.8757072e-2 +v -0.11677367 -6.9676967e-3 0.10404965 +v -6.1941435e-2 -0.36213984 0.21486963 +v -0.13681182 -0.36634357 0.21944779 +v -0.12075331 -0.35747908 0.13388442 +v -0.27214113 0.16564009 1.8179960e-2 +v -0.27311477 0.14229232 -3.9713862e-2 +v -0.19775045 0.15521696 -6.2045768e-2 +v -1.0857290e-3 0.52208521 0.31967635 +v -2.2682098e-3 0.39236894 0.10328831 +v -1.3394730e-3 -0.11720354 0.10689503 +v -0.21276320 -3.2220363e-2 0.25209224 +v -9.3144493e-2 -0.70483668 0.17970538 +v -2.1453897e-3 0.56815460 0.23416636 +v 9.1318881e-2 0.52486934 0.23794745 +v 6.7651887e-2 0.39159191 0.14778457 +v 0.14707201 0.24695477 0.19977100 +v 0.21772350 0.33823097 0.14419908 +v 0.12299816 0.25902459 6.5703468e-2 +v 0.11313769 -6.0591343e-3 0.10169964 +v 5.6562172e-2 -0.34172597 8.3847930e-2 +v 0.13149054 -0.34717436 8.4357499e-2 +v 0.11445881 -0.29122596 3.5440300e-3 +v 0.25704387 0.13904658 0.16957344 +v 0.27855275 8.9755721e-2 0.13786319 +v 0.21325613 5.6754116e-2 0.11528535 +v 0.15532922 -3.1631277e-2 0.40939898 +v 8.9494231e-2 -0.52086355 -0.28286119 +g run_2_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 26// 27// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 25// 27// 32// +f 25// 32// 26// +f 26// 18// 24// +f 26// 24// 25// +f 27// 25// 28// +f 27// 26// 34// +f 28// 9// 27// +f 28// 19// 29// +f 29// 9// 31// +f 30// 9// 28// +f 30// 28// 29// +f 30// 36// 31// +f 31// 9// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 34// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/models/unit_run_3.obj b/assets/models/unit_run_3.obj new file mode 100755 index 0000000..e70a356 --- /dev/null +++ b/assets/models/unit_run_3.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib u42-run-3.mtl +o run_3 +#36 vertices, 68 faces +v -9.7534954e-2 0.58537971 0.23727152 +v -5.5800717e-3 0.62207596 0.13434820 +v -7.3894633e-2 0.44530355 0.15807461 +v -3.2399255e-3 0.39839816 0.25151563 +v -0.14811650 0.30785729 0.23172695 +v -0.22184769 0.39518773 0.17386227 +v 2.9874070e-2 0.25219372 0.18896602 +v -0.13324204 0.30880016 9.5796106e-2 +v -3.0261434e-3 1.2834357e-2 -2.8933793e-2 +v -0.10962990 5.0988036e-2 0.10517160 +v -4.1698825e-2 -0.26559037 -1.8795665e-2 +v -0.11656921 -0.27177960 -1.9365307e-2 +v -0.10155841 -0.18668084 -6.9205025e-2 +v -0.24752637 0.24555925 0.31401265 +v -0.27201893 0.22587890 0.26943932 +v -0.20708582 0.17323236 0.24465303 +v -3.6292110e-3 0.58033840 0.31604327 +v -4.8116918e-3 0.45317336 0.10171045 +v 4.8726959e-5 -5.7632780e-2 0.10082565 +v -0.15387665 0.14921342 0.53804817 +v -8.6656471e-2 -0.30440046 -0.43683459 +v -4.6888717e-3 0.62918786 0.22811015 +v 8.8775399e-2 0.58636824 0.23548505 +v 6.5108405e-2 0.45331084 0.14611670 +v 0.17212974 0.33058228 0.13766338 +v 0.20940429 0.42167997 5.5669264e-2 +v 0.10220107 0.32864714 2.0166273e-2 +v 0.11389002 5.2669771e-2 9.9938702e-2 +v 5.2010784e-2 -0.22039388 0.29971756 +v 0.12924803 -0.21231946 0.30276019 +v 0.11527123 -0.26319363 0.23743150 +v 0.22868222 0.25165315 -6.1196965e-2 +v 0.22720815 0.23037277 -0.11930067 +v 0.15008199 0.25256058 -0.13060470 +v 0.21252622 -3.0157464e-2 0.20240516 +v 6.2049086e-2 -0.49335414 0.55060042 +g run_3_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 24// 27// 18// +f 25// 27// 32// +f 25// 32// 26// +f 26// 24// 25// +f 26// 27// 24// +f 27// 25// 28// +f 27// 33// 34// +f 28// 9// 27// +f 28// 19// 29// +f 28// 31// 9// +f 29// 9// 31// +f 30// 28// 29// +f 30// 36// 31// +f 31// 28// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 27// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/models/unit_run_4.obj b/assets/models/unit_run_4.obj new file mode 100755 index 0000000..6fdc3a1 --- /dev/null +++ b/assets/models/unit_run_4.obj @@ -0,0 +1,111 @@ +# Exported from Wings 3D 2.1.5 +mtllib u42-run-4.mtl +o run_4 +#36 vertices, 68 faces +v -8.7448640e-2 0.52260968 0.23811789 +v 1.1106415e-2 0.56619990 0.13601636 +v -5.6652628e-2 0.39253244 0.14723325 +v 4.7983532e-3 0.33685461 0.23791788 +v -0.14201056 0.24676130 0.19890273 +v -0.21395473 0.33766742 0.14321628 +v 1.5828108e-2 0.25132493 0.18909199 +v -0.11559322 0.25643607 6.3974881e-2 +v 5.8659423e-3 -4.6614671e-2 -2.8852696e-2 +v -0.12367586 5.0119248e-2 0.10529757 +v -5.9869043e-2 -0.34160511 8.3280232e-2 +v -0.13473943 -0.34779433 8.2710589e-2 +v -0.11085266 -0.29407513 4.8260947e-3 +v -0.25132952 0.13731816 0.17143274 +v -0.27232641 8.9198561e-2 0.13324630 +v -0.20953794 5.7890222e-2 0.11187209 +v 5.7439754e-3 0.52158520 0.32087826 +v 1.4994713e-2 0.38418936 0.11355618 +v 9.5050338e-3 -0.11737256 9.6571469e-2 +v -0.15147117 -2.8967763e-2 0.40656236 +v -8.6836875e-2 -0.51910125 -0.27711023 +v 8.1007774e-3 0.56742535 0.23507916 +v 0.10858180 0.52745008 0.23670572 +v 7.4975063e-2 0.38772831 0.14527201 +v 0.17898781 0.26745693 0.15584951 +v 0.22056911 0.36000702 8.3859511e-2 +v 0.11885495 0.26917230 2.9631907e-2 +v 9.9844063e-2 4.2294354e-2 9.3354108e-2 +v 6.9120406e-2 -0.36382724 0.20320527 +v 0.14171710 -0.36592997 0.21060239 +v 0.12317708 -0.35863673 0.13900796 +v 0.27620662 0.16435731 1.6758612e-2 +v 0.28008560 0.14336818 -3.9632239e-2 +v 0.20394231 0.15390316 -6.2704812e-2 +v 0.21981481 -3.0190650e-2 0.24883182 +v 9.2836181e-2 -0.69912263 0.18131087 +g run_4_default +usemtl default +s 1 +f 1// 22// 2// +f 2// 3// 1// +f 2// 24// 18// +f 3// 4// 1// +f 3// 8// 6// +f 4// 23// 17// +f 5// 3// 6// +f 5// 4// 3// +f 5// 10// 7// +f 6// 8// 15// +f 6// 14// 5// +f 7// 4// 5// +f 7// 25// 4// +f 7// 28// 25// +f 8// 9// 10// +f 8// 14// 16// +f 8// 18// 9// +f 9// 13// 10// +f 9// 29// 19// +f 10// 5// 8// +f 10// 19// 7// +f 11// 10// 12// +f 11// 12// 21// +f 11// 19// 10// +f 11// 21// 13// +f 12// 10// 13// +f 13// 9// 11// +f 13// 21// 12// +f 14// 6// 15// +f 14// 8// 5// +f 15// 20// 14// +f 16// 15// 8// +f 16// 20// 15// +f 17// 1// 4// +f 17// 22// 1// +f 17// 23// 22// +f 18// 3// 2// +f 18// 8// 3// +f 18// 26// 27// +f 18// 27// 9// +f 19// 11// 9// +f 19// 28// 7// +f 20// 16// 14// +f 22// 23// 2// +f 23// 4// 24// +f 23// 24// 2// +f 24// 4// 25// +f 25// 27// 32// +f 25// 32// 26// +f 26// 18// 24// +f 26// 24// 25// +f 27// 25// 28// +f 27// 26// 34// +f 28// 9// 27// +f 28// 19// 29// +f 29// 9// 31// +f 30// 9// 28// +f 30// 28// 29// +f 30// 36// 31// +f 31// 9// 30// +f 31// 36// 29// +f 32// 34// 35// +f 32// 35// 33// +f 33// 26// 32// +f 33// 34// 26// +f 33// 35// 34// +f 34// 32// 27// +f 36// 30// 29// diff --git a/assets/textures/0.png b/assets/textures/0.png new file mode 100644 index 0000000..0a4d056 Binary files /dev/null and b/assets/textures/0.png differ diff --git a/assets/textures/1.png b/assets/textures/1.png new file mode 100644 index 0000000..7d08737 Binary files /dev/null and b/assets/textures/1.png differ diff --git a/assets/textures/10.png b/assets/textures/10.png new file mode 100644 index 0000000..fdf3f77 Binary files /dev/null and b/assets/textures/10.png differ diff --git a/assets/textures/11.png b/assets/textures/11.png new file mode 100644 index 0000000..7e8f360 Binary files /dev/null and b/assets/textures/11.png differ diff --git a/assets/textures/12.png b/assets/textures/12.png new file mode 100644 index 0000000..eac6d4f Binary files /dev/null and b/assets/textures/12.png differ diff --git a/assets/textures/13.png b/assets/textures/13.png new file mode 100644 index 0000000..a7b17b7 Binary files /dev/null and b/assets/textures/13.png differ diff --git a/assets/textures/14.png b/assets/textures/14.png new file mode 100644 index 0000000..6ef20c6 Binary files /dev/null and b/assets/textures/14.png differ diff --git a/assets/textures/15.png b/assets/textures/15.png new file mode 100644 index 0000000..5c7a11a Binary files /dev/null and b/assets/textures/15.png differ diff --git a/assets/textures/16.png b/assets/textures/16.png new file mode 100644 index 0000000..738aea7 Binary files /dev/null and b/assets/textures/16.png differ diff --git a/assets/textures/2.png b/assets/textures/2.png new file mode 100644 index 0000000..ff34bfe Binary files /dev/null and b/assets/textures/2.png differ diff --git a/assets/textures/20.png b/assets/textures/20.png new file mode 100644 index 0000000..e10882d Binary files /dev/null and b/assets/textures/20.png differ diff --git a/assets/textures/21.png b/assets/textures/21.png new file mode 100644 index 0000000..f53b849 Binary files /dev/null and b/assets/textures/21.png differ diff --git a/assets/textures/22.png b/assets/textures/22.png new file mode 100644 index 0000000..f87026f Binary files /dev/null and b/assets/textures/22.png differ diff --git a/assets/textures/25.png b/assets/textures/25.png new file mode 100644 index 0000000..b017c13 Binary files /dev/null and b/assets/textures/25.png differ diff --git a/assets/textures/26.png b/assets/textures/26.png new file mode 100644 index 0000000..3c97e1a Binary files /dev/null and b/assets/textures/26.png differ diff --git a/assets/textures/27.png b/assets/textures/27.png new file mode 100644 index 0000000..dfb9adf Binary files /dev/null and b/assets/textures/27.png differ diff --git a/assets/textures/28.png b/assets/textures/28.png new file mode 100644 index 0000000..ee060ad Binary files /dev/null and b/assets/textures/28.png differ diff --git a/assets/textures/29.png b/assets/textures/29.png new file mode 100644 index 0000000..de32e53 Binary files /dev/null and b/assets/textures/29.png differ diff --git a/assets/textures/3.png b/assets/textures/3.png new file mode 100644 index 0000000..cb7ea1d Binary files /dev/null and b/assets/textures/3.png differ diff --git a/assets/textures/4.png b/assets/textures/4.png new file mode 100644 index 0000000..4d02e45 Binary files /dev/null and b/assets/textures/4.png differ diff --git a/assets/textures/5.png b/assets/textures/5.png new file mode 100644 index 0000000..44dff3e Binary files /dev/null and b/assets/textures/5.png differ diff --git a/assets/textures/6.png b/assets/textures/6.png new file mode 100644 index 0000000..389099e Binary files /dev/null and b/assets/textures/6.png differ diff --git a/assets/textures/7.png b/assets/textures/7.png new file mode 100644 index 0000000..526de1d Binary files /dev/null and b/assets/textures/7.png differ diff --git a/assets/textures/8.png b/assets/textures/8.png new file mode 100644 index 0000000..1138773 Binary files /dev/null and b/assets/textures/8.png differ diff --git a/assets/textures/9.png b/assets/textures/9.png new file mode 100644 index 0000000..5623827 Binary files /dev/null and b/assets/textures/9.png differ diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..b36798b --- /dev/null +++ b/build.sh @@ -0,0 +1,124 @@ +set -e + +# Compile the pack_map +gcc -std=c99 pack_map.c -lm -o pack_map + +# Pack maps +./pack_map assets/maps/m1.map build/m1.plb +./pack_map assets/maps/m2.map build/m2.plb + +# Concat all maps into one file +cat \ + build/m1.plb \ + build/m2.plb \ + > build/l + +# Pack models +php pack_model.php assets/models/boulder.obj build/boulder.rmf +php pack_model.php assets/models/q.obj build/q.rmf +php pack_model.php assets/models/grenade.obj build/grenade.rmf +php pack_model.php \ + assets/models/hound_run_1.obj \ + assets/models/hound_run_2.obj \ + build/hound.rmf +php pack_model.php \ + assets/models/unit_idle.obj \ + assets/models/unit_run_1.obj \ + assets/models/unit_run_2.obj \ + assets/models/unit_run_3.obj \ + assets/models/unit_run_4.obj \ + assets/models/unit_fire.obj \ + build/unit.rmf + +php pack_model.php assets/models/box.obj build/box.rmf +php pack_model.php assets/models/nailgun.obj build/nailgun.rmf +php pack_model.php \ + assets/models/torch_1.obj \ + assets/models/torch_2.obj \ + assets/models/torch_3.obj \ + build/torch.rmf + +# Concat all models into one file +cat \ + build/boulder.rmf \ + build/unit.rmf \ + build/grenade.rmf \ + build/q.rmf \ + build/hound.rmf \ + build/box.rmf \ + build/nailgun.rmf \ + build/torch.rmf \ + > build/m + + +# Concat js Source +cat \ + source/wrap_pre.js \ + source/document.js \ + source/textures.js \ + source/music.js \ + source/audio.js \ + source/input.js \ + source/ttt.js \ + source/math_utils.js \ + source/renderer.js \ + source/model.js \ + source/map.js \ + source/entity.js \ + source/entity_player.js \ + source/entity_door.js \ + source/entity_light.js \ + source/entity_torch.js \ + source/entity_barrel.js \ + source/entity_particle.js \ + source/entity_projectile_grenade.js \ + source/entity_projectile_nail.js \ + source/entity_projectile_plasma.js \ + source/entity_projectile_gib.js \ + source/entity_projectile_shell.js \ + source/entity_enemy.js \ + source/entity_enemy_grunt.js \ + source/entity_enemy_enforcer.js \ + source/entity_enemy_ogre.js \ + source/entity_enemy_zombie.js \ + source/entity_enemy_hound.js \ + source/entity_pickup.js \ + source/entity_pickup_key.js \ + source/entity_pickup_nailgun.js \ + source/entity_pickup_grenadelauncher.js \ + source/entity_pickup_health.js \ + source/entity_pickup_nails.js \ + source/entity_pickup_grenades.js \ + source/entity_trigger_level.js \ + source/weapons.js \ + source/game.js \ + source/main.js \ + source/wrap_post.js \ + > build/game.js + + +# Compress WebGL calls, remove DEBUG[...] +php pack_js.php build/game.js > build/game.packed.js + +# Uglify JS +npx uglify-js build/game.packed.js \ + --compress --mangle toplevel -c --beautify --mangle-props regex=/^_/ \ + -o build/game.min.beauty.js + +npx uglify-js build/game.packed.js \ + --compress --mangle toplevel --mangle-props regex=/^_/ \ + -o build/game.min.js + +npx roadroller -Zab14 -Zlr1113 -Zmd16 -Zpr14 -S0,1,2,3,6,7,13,21,25,50,235,333 build/game.min.js -o build/game.roadrolled.js + +# Embed source into HTML +sed -e '/GAME_SOURCE/{r build/game.roadrolled.js' -e 'd}' source/html_template.html > build/index.html + +# Build ZIP +rm -f -- build/game.zip +cd build +zip game.zip index.html l m +cd .. + +advzip -z -4 build/game.zip +ls -la build/ diff --git a/build/dummy.txt b/build/dummy.txt new file mode 100644 index 0000000..2995a4d --- /dev/null +++ b/build/dummy.txt @@ -0,0 +1 @@ +dummy \ No newline at end of file diff --git a/index.html b/index.html new file mode 100755 index 0000000..ab7bfa2 --- /dev/null +++ b/index.html @@ -0,0 +1,55 @@ + + + + Q1K3 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pack_js.php b/pack_js.php new file mode 100644 index 0000000..0e86c4e --- /dev/null +++ b/pack_js.php @@ -0,0 +1,449 @@ + 35721, + 'ACTIVE_ATTRIBUTE_MAX_LENGTH' => 35722, + 'ACTIVE_TEXTURE' => 34016, + 'ACTIVE_UNIFORMS' => 35718, + 'ACTIVE_UNIFORM_MAX_LENGTH' => 35719, + 'ALIASED_LINE_WIDTH_RANGE' => 33902, + 'ALIASED_POINT_SIZE_RANGE' => 33901, + 'ALPHA' => 6406, + 'ALPHA_BITS' => 3413, + 'ALWAYS' => 519, + 'ARRAY_BUFFER' => 34962, + 'ARRAY_BUFFER_BINDING' => 34964, + 'ATTACHED_SHADERS' => 35717, + 'BACK' => 1029, + 'BLEND' => 3042, + 'BLEND_COLOR' => 32773, + 'BLEND_DST_ALPHA' => 32970, + 'BLEND_DST_RGB' => 32968, + 'BLEND_EQUATION' => 32777, + 'BLEND_EQUATION_ALPHA' => 34877, + 'BLEND_EQUATION_RGB' => 32777, + 'BLEND_SRC_ALPHA' => 32971, + 'BLEND_SRC_RGB' => 32969, + 'BLUE_BITS' => 3412, + 'BOOL' => 35670, + 'BOOL_VEC2' => 35671, + 'BOOL_VEC3' => 35672, + 'BOOL_VEC4' => 35673, + 'BROWSER_DEFAULT_WEBGL' => 37444, + 'BUFFER_SIZE' => 34660, + 'BUFFER_USAGE' => 34661, + 'BYTE' => 5120, + 'CCW' => 2305, + 'CLAMP_TO_EDGE' => 33071, + 'COLOR_ATTACHMENT0' => 36064, + 'COLOR_BUFFER_BIT' => 16384, + 'COLOR_CLEAR_VALUE' => 3106, + 'COLOR_WRITEMASK' => 3107, + 'COMPILE_STATUS' => 35713, + 'COMPRESSED_TEXTURE_FORMATS' => 34467, + 'CONSTANT_ALPHA' => 32771, + 'CONSTANT_COLOR' => 32769, + 'CONTEXT_LOST_WEBGL' => 37442, + 'CULL_FACE' => 2884, + 'CULL_FACE_MODE' => 2885, + 'CURRENT_PROGRAM' => 35725, + 'CURRENT_VERTEX_ATTRIB' => 34342, + 'CW' => 2304, + 'DECR' => 7683, + 'DECR_WRAP' => 34056, + 'DELETE_STATUS' => 35712, + 'DEPTH_ATTACHMENT' => 36096, + 'DEPTH_BITS' => 3414, + 'DEPTH_BUFFER_BIT' => 256, + 'DEPTH_CLEAR_VALUE' => 2931, + 'DEPTH_COMPONENT' => 6402, + 'DEPTH_COMPONENT16' => 33189, + 'DEPTH_FUNC' => 2932, + 'DEPTH_RANGE' => 2928, + 'DEPTH_STENCIL' => 34041, + 'DEPTH_STENCIL_ATTACHMENT' => 33306, + 'DEPTH_TEST' => 2929, + 'DEPTH_WRITEMASK' => 2930, + 'DITHER' => 3024, + 'DONT_CARE' => 4352, + 'DST_ALPHA' => 772, + 'DST_COLOR' => 774, + 'DYNAMIC_DRAW' => 35048, + 'ELEMENT_ARRAY_BUFFER' => 34963, + 'ELEMENT_ARRAY_BUFFER_BINDING' => 34965, + 'EQUAL' => 514, + 'FASTEST' => 4353, + 'FLOAT' => 5126, + 'FLOAT_MAT2' => 35674, + 'FLOAT_MAT3' => 35675, + 'FLOAT_MAT4' => 35676, + 'FLOAT_VEC2' => 35664, + 'FLOAT_VEC3' => 35665, + 'FLOAT_VEC4' => 35666, + 'FRAGMENT_SHADER' => 35632, + 'FRAMEBUFFER' => 36160, + 'FRAMEBUFFER_ATTACHMENT_OBJECT_NAME' => 36049, + 'FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE' => 36048, + 'FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE' => 36051, + 'FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL' => 36050, + 'FRAMEBUFFER_BINDING' => 36006, + 'FRAMEBUFFER_COMPLETE' => 36053, + 'FRAMEBUFFER_INCOMPLETE_ATTACHMENT' => 36054, + 'FRAMEBUFFER_INCOMPLETE_DIMENSIONS' => 36057, + 'FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT' => 36055, + 'FRAMEBUFFER_UNSUPPORTED' => 36061, + 'FRONT' => 1028, + 'FRONT_AND_BACK' => 1032, + 'FRONT_FACE' => 2886, + 'FUNC_ADD' => 32774, + 'FUNC_REVERSE_SUBTRACT' => 32779, + 'FUNC_SUBTRACT' => 32778, + 'GENERATE_MIPMAP_HINT' => 33170, + 'GEQUAL' => 518, + 'GREATER' => 516, + 'GREEN_BITS' => 3411, + 'HIGH_FLOAT' => 36338, + 'HIGH_INT' => 36341, + 'INCR' => 7682, + 'INCR_WRAP' => 34055, + 'INFO_LOG_LENGTH' => 35716, + 'INT' => 5124, + 'INT_VEC2' => 35667, + 'INT_VEC3' => 35668, + 'INT_VEC4' => 35669, + 'INVALID_ENUM' => 1280, + 'INVALID_FRAMEBUFFER_OPERATION' => 1286, + 'INVALID_OPERATION' => 1282, + 'INVALID_VALUE' => 1281, + 'INVERT' => 5386, + 'KEEP' => 7680, + 'LEQUAL' => 515, + 'LESS' => 513, + 'LINEAR' => 9729, + 'LINEAR_MIPMAP_LINEAR' => 9987, + 'LINEAR_MIPMAP_NEAREST' => 9985, + 'LINES' => 1, + 'LINE_LOOP' => 2, + 'LINE_STRIP' => 3, + 'LINE_WIDTH' => 2849, + 'LINK_STATUS' => 35714, + 'LOW_FLOAT' => 36336, + 'LOW_INT' => 36339, + 'LUMINANCE' => 6409, + 'LUMINANCE_ALPHA' => 6410, + 'MAX_COMBINED_TEXTURE_IMAGE_UNITS' => 35661, + 'MAX_CUBE_MAP_TEXTURE_SIZE' => 34076, + 'MAX_FRAGMENT_UNIFORM_VECTORS' => 36349, + 'MAX_RENDERBUFFER_SIZE' => 34024, + 'MAX_TEXTURE_IMAGE_UNITS' => 34930, + 'MAX_TEXTURE_SIZE' => 3379, + 'MAX_VARYING_VECTORS' => 36348, + 'MAX_VERTEX_ATTRIBS' => 34921, + 'MAX_VERTEX_TEXTURE_IMAGE_UNITS' => 35660, + 'MAX_VERTEX_UNIFORM_VECTORS' => 36347, + 'MAX_VIEWPORT_DIMS' => 3386, + 'MEDIUM_FLOAT' => 36337, + 'MEDIUM_INT' => 36340, + 'MIRRORED_REPEAT' => 33648, + 'NEAREST' => 9728, + 'NEAREST_MIPMAP_LINEAR' => 9986, + 'NEAREST_MIPMAP_NEAREST' => 9984, + 'NEVER' => 512, + 'NICEST' => 4354, + 'NONE' => 0, + 'NOTEQUAL' => 517, + 'NO_ERROR' => 0, + 'NUM_COMPRESSED_TEXTURE_FORMATS' => 34466, + 'ONE' => 1, + 'ONE_MINUS_CONSTANT_ALPHA' => 32772, + 'ONE_MINUS_CONSTANT_COLOR' => 32770, + 'ONE_MINUS_DST_ALPHA' => 773, + 'ONE_MINUS_DST_COLOR' => 775, + 'ONE_MINUS_SRC_ALPHA' => 771, + 'ONE_MINUS_SRC_COLOR' => 769, + 'OUT_OF_MEMORY' => 1285, + 'PACK_ALIGNMENT' => 3333, + 'POINTS' => 0, + 'POLYGON_OFFSET_FACTOR' => 32824, + 'POLYGON_OFFSET_FILL' => 32823, + 'POLYGON_OFFSET_UNITS' => 10752, + 'RED_BITS' => 3410, + 'RENDERBUFFER' => 36161, + 'RENDERBUFFER_ALPHA_SIZE' => 36179, + 'RENDERBUFFER_BINDING' => 36007, + 'RENDERBUFFER_BLUE_SIZE' => 36178, + 'RENDERBUFFER_DEPTH_SIZE' => 36180, + 'RENDERBUFFER_GREEN_SIZE' => 36177, + 'RENDERBUFFER_HEIGHT' => 36163, + 'RENDERBUFFER_INTERNAL_FORMAT' => 36164, + 'RENDERBUFFER_RED_SIZE' => 36176, + 'RENDERBUFFER_STENCIL_SIZE' => 36181, + 'RENDERBUFFER_WIDTH' => 36162, + 'RENDERER' => 7937, + 'REPEAT' => 10497, + 'REPLACE' => 7681, + 'RGB' => 6407, + 'RGB5_A1' => 32855, + 'RGB565' => 36194, + 'RGBA' => 6408, + 'RGBA4' => 32854, + 'SAMPLER_2D' => 35678, + 'SAMPLER_CUBE' => 35680, + 'SAMPLES' => 32937, + 'SAMPLE_ALPHA_TO_COVERAGE' => 32926, + 'SAMPLE_BUFFERS' => 32936, + 'SAMPLE_COVERAGE' => 32928, + 'SAMPLE_COVERAGE_INVERT' => 32939, + 'SAMPLE_COVERAGE_VALUE' => 32938, + 'SCISSOR_BOX' => 3088, + 'SCISSOR_TEST' => 3089, + 'SHADER_COMPILER' => 36346, + 'SHADER_SOURCE_LENGTH' => 35720, + 'SHADER_TYPE' => 35663, + 'SHADING_LANGUAGE_VERSION' => 35724, + 'SHORT' => 5122, + 'SRC_ALPHA' => 770, + 'SRC_ALPHA_SATURATE' => 776, + 'SRC_COLOR' => 768, + 'STATIC_DRAW' => 35044, + 'STENCIL_ATTACHMENT' => 36128, + 'STENCIL_BACK_FAIL' => 34817, + 'STENCIL_BACK_FUNC' => 34816, + 'STENCIL_BACK_PASS_DEPTH_FAIL' => 34818, + 'STENCIL_BACK_PASS_DEPTH_PASS' => 34819, + 'STENCIL_BACK_REF' => 36003, + 'STENCIL_BACK_VALUE_MASK' => 36004, + 'STENCIL_BACK_WRITEMASK' => 36005, + 'STENCIL_BITS' => 3415, + 'STENCIL_BUFFER_BIT' => 1024, + 'STENCIL_CLEAR_VALUE' => 2961, + 'STENCIL_FAIL' => 2964, + 'STENCIL_FUNC' => 2962, + 'STENCIL_INDEX' => 6401, + 'STENCIL_INDEX8' => 36168, + 'STENCIL_PASS_DEPTH_FAIL' => 2965, + 'STENCIL_PASS_DEPTH_PASS' => 2966, + 'STENCIL_REF' => 2967, + 'STENCIL_TEST' => 2960, + 'STENCIL_VALUE_MASK' => 2963, + 'STENCIL_WRITEMASK' => 2968, + 'STREAM_DRAW' => 35040, + 'SUBPIXEL_BITS' => 3408, + 'TEXTURE' => 5890, + 'TEXTURE0' => 33984, + 'TEXTURE1' => 33985, + 'TEXTURE2' => 33986, + 'TEXTURE3' => 33987, + 'TEXTURE4' => 33988, + 'TEXTURE5' => 33989, + 'TEXTURE6' => 33990, + 'TEXTURE7' => 33991, + 'TEXTURE8' => 33992, + 'TEXTURE9' => 33993, + 'TEXTURE10' => 33994, + 'TEXTURE11' => 33995, + 'TEXTURE12' => 33996, + 'TEXTURE13' => 33997, + 'TEXTURE14' => 33998, + 'TEXTURE15' => 33999, + 'TEXTURE16' => 34000, + 'TEXTURE17' => 34001, + 'TEXTURE18' => 34002, + 'TEXTURE19' => 34003, + 'TEXTURE20' => 34004, + 'TEXTURE21' => 34005, + 'TEXTURE22' => 34006, + 'TEXTURE23' => 34007, + 'TEXTURE24' => 34008, + 'TEXTURE25' => 34009, + 'TEXTURE26' => 34010, + 'TEXTURE27' => 34011, + 'TEXTURE28' => 34012, + 'TEXTURE29' => 34013, + 'TEXTURE30' => 34014, + 'TEXTURE31' => 34015, + 'TEXTURE_2D' => 3553, + 'TEXTURE_BINDING_2D' => 32873, + 'TEXTURE_BINDING_CUBE_MAP' => 34068, + 'TEXTURE_CUBE_MAP' => 34067, + 'TEXTURE_CUBE_MAP_NEGATIVE_X' => 34070, + 'TEXTURE_CUBE_MAP_NEGATIVE_Y' => 34072, + 'TEXTURE_CUBE_MAP_NEGATIVE_Z' => 34074, + 'TEXTURE_CUBE_MAP_POSITIVE_X' => 34069, + 'TEXTURE_CUBE_MAP_POSITIVE_Y' => 34071, + 'TEXTURE_CUBE_MAP_POSITIVE_Z' => 34073, + 'TEXTURE_MAG_FILTER' => 10240, + 'TEXTURE_MIN_FILTER' => 10241, + 'TEXTURE_WRAP_S' => 10242, + 'TEXTURE_WRAP_T' => 10243, + 'TRIANGLES' => 4, + 'TRIANGLE_FAN' => 6, + 'TRIANGLE_STRIP' => 5, + 'UNPACK_ALIGNMENT' => 3317, + 'UNPACK_COLORSPACE_CONVERSION_WEBGL' => 37443, + 'UNPACK_FLIP_Y_WEBGL' => 37440, + 'UNPACK_PREMULTIPLY_ALPHA_WEBGL' => 37441, + 'UNSIGNED_BYTE' => 5121, + 'UNSIGNED_INT' => 5125, + 'UNSIGNED_SHORT' => 5123, + 'UNSIGNED_SHORT_4_4_4_4' => 32819, + 'UNSIGNED_SHORT_5_5_5_1' => 32820, + 'UNSIGNED_SHORT_5_6_5' => 33635, + 'VALIDATE_STATUS' => 35715, + 'VENDOR' => 7936, + 'VERSION' => 7938, + 'VERTEX_ATTRIB_ARRAY_BUFFER_BINDING' => 34975, + 'VERTEX_ATTRIB_ARRAY_ENABLED' => 34338, + 'VERTEX_ATTRIB_ARRAY_NORMALIZED' => 34922, + 'VERTEX_ATTRIB_ARRAY_POINTER' => 34373, + 'VERTEX_ATTRIB_ARRAY_SIZE' => 34339, + 'VERTEX_ATTRIB_ARRAY_STRIDE' => 34340, + 'VERTEX_ATTRIB_ARRAY_TYPE' => 34341, + 'VERTEX_SHADER' => 35633, + 'VIEWPORT' => 2978, + 'ZERO' => 0, + + 'activeTexture' => "gl.acT", + 'attachShader' => "gl.atS", + 'bindAttribLocation' => "gl.biAL", + 'bindBuffer' => "gl.biB", + 'bindFramebuffer' => "gl.biF", + 'bindRenderbuffer' => "gl.biR", + 'bindTexture' => "gl.biT", + 'blendColor' => "gl.blC", + 'blendEquation' => "gl.blE", + 'blendEquationSeparate' => "gl.blES", + 'blendFunc' => "gl.blF", + 'blendFuncSeparate' => "gl.blFS", + 'bufferData' => "gl.buD", + 'bufferSubData' => "gl.buSD", + 'checkFramebufferStatus' => "gl.chFS", + 'clear' => "gl.cl", + 'clearColor' => "gl.clC", + 'clearDepth' => "gl.clD", + 'clearStencil' => "gl.clS", + 'colorMask' => "gl.coM", + 'compileShader' => "gl.coS", + 'compressedTexImage2D' => "gl.coTI2D", + 'compressedTexSubImage2D' => "gl.coTSI2D", + 'copyTexImage2D' => "gl.coTI2D", + 'copyTexSubImage2D' => "gl.coTSI2D", + 'createBuffer' => "gl.crB", + 'createFramebuffer' => "gl.crF", + 'createProgram' => "gl.crP", + 'createRenderbuffer' => "gl.crR", + 'createShader' => "gl.crS", + 'createTexture' => "gl.crT", + 'cullFace' => "gl.cuF", + 'deleteBuffer' => "gl.deB", + 'deleteFramebuffer' => "gl.deF", + 'deleteProgram' => "gl.deP", + 'deleteRenderbuffer' => "gl.deR", + 'deleteShader' => "gl.deS", + 'deleteTexture' => "gl.deT", + 'depthFunc' => "gl.deF", + 'depthMask' => "gl.deM", + 'depthRange' => "gl.deR", + 'detachShader' => "gl.deS", + 'disable' => "gl.di", + 'disableVertexAttribArray' => "gl.diVAA", + 'drawArrays' => "gl.drA", + 'drawElements' => "gl.drE", + 'enable' => "gl.en", + 'enableVertexAttribArray' => "gl.enVAA", + 'finish' => "gl.fi", + 'flush' => "gl.fl", + 'framebufferRenderbuffer' => "gl.frR", + 'framebufferTexture2D' => "gl.frT2D", + 'frontFace' => "gl.frF", + 'generateMipmap' => "gl.geM", + 'getActiveAttrib' => "gl.geAA", + 'getActiveUniform' => "gl.geAU", + 'getAttachedShaders' => "gl.geAS", + 'getAttribLocation' => "gl.geAL", + 'getBufferParameter' => "gl.geBP", + 'getContextAttributes' => "gl.geCA", + 'getError' => "gl.geE", + 'getExtension' => "gl.geE", + 'getFramebufferAttachmentParameter' => "gl.geFAP", + 'getParameter' => "gl.geP", + 'getProgramParameter' => "gl.gePP", + 'getProgramInfoLog' => "gl.gePIL", + 'getRenderbufferParameter' => "gl.geRP", + 'getShaderParameter' => "gl.geSP", + 'getShaderInfoLog' => "gl.geSIL", + 'getShaderPrecisionFormat' => "gl.geSPF", + 'getShaderSource' => "gl.geSS", + 'getSupportedExtensions' => "gl.geSE", + 'getTexParameter' => "gl.geTP", + 'getUniform' => "gl.geU", + 'getUniformLocation' => "gl.geUL", + 'getVertexAttrib' => "gl.geVA", + 'getVertexAttribOffset' => "gl.geVAO", + 'hint' => "gl.hi", + 'isBuffer' => "gl.isB", + 'isContextLost' => "gl.isCL", + 'isEnabled' => "gl.isE", + 'isFramebuffer' => "gl.isF", + 'isProgram' => "gl.isP", + 'isRenderbuffer' => "gl.isR", + 'isShader' => "gl.isS", + 'isTexture' => "gl.isT", + 'lineWidth' => "gl.liW", + 'linkProgram' => "gl.liP", + 'pixelStorei' => "gl.piS", + 'polygonOffset' => "gl.poO", + 'readPixels' => "gl.reP", + 'renderbufferStorage' => "gl.reS", + 'sampleCoverage' => "gl.saC", + 'scissor' => "gl.sc", + 'shaderSource' => "gl.shS", + 'stencilFunc' => "gl.stF", + 'stencilFuncSeparate' => "gl.stFS", + 'stencilMask' => "gl.stM", + 'stencilMaskSeparate' => "gl.stMS", + 'stencilOp' => "gl.stO", + 'stencilOpSeparate' => "gl.stOS", + 'texParameterf' => "gl.teP", + 'texParameteri' => "gl.teP", + 'texImage2D' => "gl.teI2D", + 'texSubImage2D' => "gl.teSI2D", + 'uniform1f' => "gl.un1f", + 'uniform1fv' => "gl.un1fv", + 'uniform1i' => "gl.un1i", + 'uniform1iv' => "gl.un1iv", + 'uniform2f' => "gl.un2f", + 'uniform2fv' => "gl.un2fv", + 'uniform2i' => "gl.un2i", + 'uniform2iv' => "gl.un2iv", + 'uniform3f' => "gl.un3f", + 'uniform3fv' => "gl.un3fv", + 'uniform3i' => "gl.un3i", + 'uniform3iv' => "gl.un3iv", + 'uniform4f' => "gl.un4f", + 'uniform4fv' => "gl.un4fv", + 'uniform4i' => "gl.un4i", + 'uniform4iv' => "gl.un4iv", + 'uniformMatrix2fv' => "gl.unM2fv", + 'uniformMatrix3fv' => "gl.unM3fv", + 'uniformMatrix4fv' => "gl.unM4fv", + 'useProgram' => "gl.usP", + 'validateProgram' => "gl.vaP", + 'vertexAttrib1f' => "gl.veA1f", + 'vertexAttrib1fv' => "gl.veA1fv", + 'vertexAttrib2f' => "gl.veA2f", + 'vertexAttrib2fv' => "gl.veA2fv", + 'vertexAttrib3f' => "gl.veA3f", + 'vertexAttrib3fv' => "gl.veA3fv", + 'vertexAttrib4f' => "gl.veA4f", + 'vertexAttrib4fv' => "gl.veA4fv", + 'vertexAttribPointer' => "gl.veAP", + 'viewport' => "gl.vi" +]; + +$js = file_get_contents($argv[1]); +foreach ($WEBGL_REPLACE as $search => $replace) { + $js = preg_replace('/\bgl\.'.$search.'\b/', $replace, $js); +} +$js = preg_replace('/\/\*DEBUG\[.*?\/\*\]\*\//sm', '', $js); +echo $js; + diff --git a/pack_map.c b/pack_map.c new file mode 100644 index 0000000..101b75c --- /dev/null +++ b/pack_map.c @@ -0,0 +1,1077 @@ +// Compile with +// gcc -std=c99 map_packer.c -lm -o map_packer + +#include +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// Utils, Vec2/3 + +typedef uint8_t u8; +typedef int8_t i8; +typedef uint16_t u16; +typedef int16_t i16; +typedef uint32_t u32; +typedef int32_t i32; +typedef uint64_t u64; +typedef int64_t i64; + +typedef float f32; +typedef double f64; + +#define F32_COMPARE_EPSILON 0.001 + +bool equals(f32 a, f32 b) { + return fabs(a - b) < F32_COMPARE_EPSILON; +} + +#define M_PI 3.14159265358 + +f32 deg_to_rad(f32 deg) { + return (deg/180.0) * M_PI; +} + +#define max(a,b) \ + ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a > _b ? _a : _b; }) +#define min(a,b) \ + ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a < _b ? _a : _b; }) + + +typedef struct { + char *ptr; + i32 length; +} string_t; + +#define string(PTR, LENGTH) ((string_t){.ptr = PTR, .length = LENGTH}) +#define s(STR) ((string_t){.ptr = STR, .length = sizeof(STR)-1}) + +bool string_equals(string_t a, string_t b) { + if (a.length != b.length) { + return false; + } + return memcmp(a.ptr, b.ptr, a.length) == 0; +} + +char string_temp[1024]; +char *string_cstring(string_t s) { + i32 length = min(sizeof(string_temp)-1, s.length); + memcpy(string_temp, s.ptr, length); + string_temp[length] = '\0'; + return string_temp; +} + + + +typedef struct { + f32 x, y, z; +} vec3_t; + +#define vec3(X, Y, Z) ((vec3_t){.x = X, .y = Y, .z = Z}) + +vec3_t vec3_add(vec3_t a, vec3_t b) { + return vec3(a.x + b.x, a.y + b.y, a.z + b.z); +} + +vec3_t vec3_sub(vec3_t a, vec3_t b) { + return vec3(a.x - b.x, a.y - b.y, a.z - b.z); +} + +vec3_t vec3_mul(vec3_t a, vec3_t b) { + return vec3(a.x * b.x, a.y * b.y, a.z * b.z); +} + +vec3_t vec3_mulf(vec3_t a, f32 f) { + return vec3(a.x * f, a.y * f, a.z * f); +} + +vec3_t vec3_divf(vec3_t a, f32 f) { + return vec3(a.x / f, a.y / f, a.z / f); +} + +bool vec3_equals(vec3_t a, vec3_t b) { + return (equals(a.x, b.x) && equals(a.y, b.y) && equals(a.z, b.z)); +} + +f32 vec3_length(vec3_t a) { + return sqrt(a.x * a.x + a.y * a.y + a.z * a.z); +} + +vec3_t vec3_cross(vec3_t a, vec3_t b) { + return vec3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); +} + +f32 vec3_dot(vec3_t a, vec3_t b) { + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +vec3_t vec3_normalize(vec3_t a) { + f32 length = vec3_length(a); + return vec3(a.x / length, a.y / length, a.z / length); +} + +vec3_t vec3_face_normal(vec3_t v0, vec3_t v1, vec3_t v2) { + vec3_t a = vec3_sub(v0, v1); + vec3_t b = vec3_sub(v2, v1); + + vec3_t pn = vec3_cross(a, b); + return vec3_normalize(pn); +} + + +typedef struct { + f32 x, y; +} vec2_t; + +#define vec2(X, Y) ((vec2_t){.x = X, .y = Y}) + +vec2_t vec2_add(vec2_t a, vec2_t b) { + return vec2(a.x + b.x, a.y + b.y); +} + +vec2_t vec2_rotate(vec2_t a, f32 rad) { + return vec2(a.x * cos(rad) - a.y * sin(rad), a.x * sin(rad) + a.y * cos(rad)); +} + +vec2_t vec2_sub(vec2_t a, vec2_t b) { + return vec2(a.x - b.x, a.y - b.y); +} + +vec2_t vec2_mul(vec2_t a, vec2_t b) { + return vec2(a.x * b.x, a.y * b.y); +} + +vec2_t vec2_mulf(vec2_t a, float f) { + return vec2(a.x * f, a.y * f); +} + +vec2_t vec2_div(vec2_t a, vec2_t b) { + return vec2(a.x / b.x, a.y / b.y); +} + +vec2_t vec2_divf(vec2_t a, float f) { + return vec2(a.x / f, a.y / f); +} + + +// ----------------------------------------------------------------------------- +// Memvec + +#define memvec_declare(TYPE) struct { u32 length; u32 capacity; TYPE *data; } +#define memvec_alloc(MV, c) \ + MV.capacity = max(1, c); \ + MV.length = 0; \ + MV.data = calloc(MV.capacity, sizeof(MV.data[0])); + +#define memvec_ensure_capacity(MV, CAPACITY) ( \ + (CAPACITY > MV.capacity) \ + ? \ + MV.data = realloc(MV.data, sizeof(MV.data[0]) * max(CAPACITY, MV.capacity * 2)), \ + memset(MV.data + MV.capacity, 0, MV.capacity * sizeof(MV.data[0])), \ + MV.capacity *= 2, 0 \ + : 0) + +#define memvec_get(MV, i) &MV.data[i] +#define memvec_clear(MV) MV.length = 0 +#define memvec_free(MV) (MV.data ? free(MV.data), 0 : 0); +#define memvec_push(MV, ...) ( \ + memvec_ensure_capacity(MV, MV.length + 1), \ + MV.data[MV.length] = (__typeof__(*MV.data)) __VA_ARGS__, \ + MV.length++ \ +) +#define memvec_add_n(MV, n) (memvec_ensure_capacity(MV, MV.length + n), MV.length += n, &MV.data[MV.length-n]) +#define memvec_add(MV) memvec_add_n(MV, 1) + + +// ----------------------------------------------------------------------------- +// Winding + +#define WINDING_MAX_VERTS 32 + +typedef struct { + vec3_t pos; + vec2_t uv; +} winding_vertex_t; + +typedef struct { + vec3_t normal; + u32 num_vertices; + winding_vertex_t vertices[WINDING_MAX_VERTS]; +} winding_t; + +void winding_copy(winding_t *dst, winding_t *src) { + u32 base_size = sizeof(winding_t) - sizeof(winding_vertex_t) * WINDING_MAX_VERTS; + memcpy(dst, src, base_size + src->num_vertices * sizeof(winding_vertex_t)); +} + +void winding_add(winding_t *self, vec3_t pos, vec3_t normal, vec2_t uv) { + // Find duplicate + for (u32 i = 0; i < self->num_vertices; i++) { + if (vec3_equals(self->vertices[i].pos, pos)) { + return; + } + } + + // We may need one extra vertex when splitting! + assert(self->num_vertices < WINDING_MAX_VERTS-1); + + self->normal = normal; + self->vertices[self->num_vertices++] = (winding_vertex_t){ + .pos = pos, + .uv = uv + }; +} + +vec3_t winding_sort_center; +vec3_t winding_sort_basis; +vec3_t winding_sort_normal; + +i32 winding_compare(const void *vlp, const void *vrp) { + winding_vertex_t *vl = (winding_vertex_t *)vlp; + winding_vertex_t *vr = (winding_vertex_t *)vrp; + + vec3_t u = vec3_normalize(winding_sort_basis); + vec3_t v = vec3_normalize(vec3_cross(u, winding_sort_normal)); + + vec3_t local_lhs = vec3_sub(vl->pos, winding_sort_center); + f32 lhs_pu = vec3_dot(local_lhs, u); + f32 lhs_pv = vec3_dot(local_lhs, v); + + vec3_t local_rhs = vec3_sub(vr->pos, winding_sort_center); + f32 rhs_pu = vec3_dot(local_rhs, u); + f32 rhs_pv = vec3_dot(local_rhs, v); + + f32 lhs_angle = atan2(lhs_pv, lhs_pu); + f32 rhs_angle = atan2(rhs_pv, rhs_pu); + + if (lhs_angle < rhs_angle) { + return 1; + } + else if (lhs_angle > rhs_angle) { + return -1; + } + return 0; +} + +void winding_sort_ccw(winding_t *self) { + winding_sort_normal = self->normal; + winding_sort_basis = vec3_sub(self->vertices[1].pos, self->vertices[0].pos); + winding_sort_center = vec3(0, 0, 0); + for (u32 i = 0; i < self->num_vertices; i++) { + winding_sort_center = vec3_add(winding_sort_center, self->vertices[i].pos); + } + winding_sort_center = vec3_divf(winding_sort_center, self->num_vertices); + + qsort(self->vertices, self->num_vertices, sizeof(winding_vertex_t), winding_compare); +} + + +// ----------------------------------------------------------------------------- +// Interface + +typedef struct { + vec3_t pos; + vec3_t normal; + vec2_t uv; +} vertex_t; + +typedef struct { + vertex_t vertices[3]; +} face_t; + +typedef struct { + vec3_t vertices[3]; + vec3_t normal; + vec2_t uv_offset; + vec2_t uv_scale; + f32 uv_rotation; + f32 dist; + string_t texture_name; +} map_plane_t; + +typedef struct { + u32 planes_index; + u32 planes_length; + map_plane_t *planes; + + u32 faces_index; + u32 faces_length; + face_t *faces; +} map_brush_t; + +typedef struct { + u32 kvs_index; + u32 kvs_length; + + u32 brushes_index; + u32 brushes_length; + + u32 faces_index; + u32 faces_length; +} map_entity_t; + +typedef struct { + string_t key; + string_t value; +} entity_kv_t; + +typedef struct { + entity_kv_t *kvs; + u32 kvs_length; + + map_brush_t *brushes; + u32 brushes_length; + + face_t *faces; + u32 faces_length; +} entity_t; + +string_t entity_get(entity_t *entity, string_t key) { + for (u32 i = 0; i < entity->kvs_length; i++) { + if (string_equals(key, entity->kvs[i].key)) { + return entity->kvs[i].value; + } + } + return s(""); +} + +typedef struct { + string_t file; + char *char_ptr; + + char *error; + char *error_at; + + memvec_declare(map_entity_t) map_entities; + memvec_declare(map_brush_t) brushes; + memvec_declare(map_plane_t) planes; + memvec_declare(face_t) faces; + memvec_declare(entity_kv_t) entity_kvs; + + entity_t *entities; + u32 entities_length; +} map_t; + +void map_delete(map_t *self); +void map_parse(map_t *self); +void map_build(map_t *self); + + +map_t *map_new(char *file_name, char **error, u32 *error_at) { + FILE *fh = fopen(file_name, "rb"); + if (!fh) { + *error = "Couldn't open file"; + *error_at = 0; + return NULL; + } + + map_t *self = calloc(1, sizeof(map_t)); + + fseek(fh, 0, SEEK_END); + i32 size = ftell(fh); + fseek(fh, 0, SEEK_SET); + + self->file = string(calloc(size+1, sizeof(char)), size); + fread(self->file.ptr, 1, size, fh); + fclose(fh); + self->file.ptr[size] = '\0'; + + self->char_ptr = self->file.ptr; + + // Make some educated guesses of the buffer sizes we might need + memvec_alloc(self->map_entities, self->file.length / 1000); + memvec_alloc(self->brushes, self->file.length / 300); + memvec_alloc(self->planes, self->file.length / 50); + memvec_alloc(self->entity_kvs, self->map_entities.capacity * 3); + + map_parse(self); + + if (self->error) { + *error = self->error; + *error_at = self->error_at - self->file.ptr; + free(self); + return NULL; + } + + memvec_alloc(self->faces, self->planes.length * 3); + map_build(self); + + // Fill the entity_desc array for clients, now that we are sure we + // don't need to realloc any data and pointers stay fixed + self->entities_length = self->map_entities.length; + self->entities = calloc(self->entities_length, sizeof(entity_t)); + for (u32 i = 0; i < self->map_entities.length; i++) { + map_entity_t *entity = memvec_get(self->map_entities, i); + + self->entities[i] = (entity_t){ + .kvs = (entity->kvs_length > 0) + ? &self->entity_kvs.data[entity->kvs_index] + : NULL, + .kvs_length = entity->kvs_length, + .brushes = (entity->brushes_length > 0) + ? &self->brushes.data[entity->brushes_index] + : NULL, + .brushes_length = entity->brushes_length, + .faces = (entity->faces_length > 0) + ? &self->faces.data[entity->faces_index] + : NULL, + .faces_length = entity->faces_length, + }; + + for (u32 b = 0; b < entity->brushes_length; b++) { + map_brush_t *brush = &self->brushes.data[entity->brushes_index + b]; + brush->faces = (brush->faces_length > 0) + ? &self->faces.data[brush->faces_index] + : NULL; + brush->planes = (brush->planes_length > 0) + ? &self->planes.data[brush->planes_index] + : NULL; + } + } + + return self; +} + +void map_delete(map_t *self) { + memvec_free(self->brushes); + memvec_free(self->planes); + memvec_free(self->map_entities); + memvec_free(self->entity_kvs); + memvec_free(self->faces); + free(self->entities); + free(self->file.ptr); +} + + +// ----------------------------------------------------------------------------- +// Vertex Builder + +void map_build_entity(map_t *self, map_entity_t *entity); +void map_build_brush(map_t *self, map_brush_t *brush); +void map_build_planes(map_t *self, map_brush_t *brush, u32 i0, u32 i1, u32 i2, winding_t *winding); +void map_build_faces(map_t *self, map_plane_t *plane, winding_t *winding); +void map_insert_winding(map_t *self, winding_t *winding); + +void map_build(map_t *self) { + + // Load textures + for (int i = 0; i < self->planes.length; i++) { + // Unused + // self->planes.data[i].texture_name + } + + // Build all map_entities + for (int i = 0; i < self->map_entities.length; i++) { + map_entity_t *entity = memvec_get(self->map_entities, i); + map_build_entity(self, entity); + } +} + +void map_build_entity(map_t *self, map_entity_t *entity) { + entity->faces_index = self->faces.length; + + for (int i = 0; i < entity->brushes_length; i++) { + map_brush_t *brush = &self->brushes.data[entity->brushes_index + i]; + map_build_brush(self, brush); + } + + entity->faces_length = self->faces.length - entity->faces_index; +} + +void map_build_brush(map_t *self, map_brush_t *brush) { + winding_t windings[brush->planes_length]; + memset(windings, 0, sizeof(windings)); + + // Test all plane combinations to find intersection points + for (u32 i0 = 0; i0 < brush->planes_length; i0++) { + for (u32 i1 = i0 + 1; i1 < brush->planes_length; i1++) { + for (u32 i2 = i1 + 1; i2 < brush->planes_length; i2++) { + map_build_planes(self, brush, i0, i1, i2, windings); + } + } + } + + // Sort the raw vertices and fill the self->faces buffer + brush->faces_index = self->faces.length; + brush->faces_length = brush->planes_length; + for (u32 i = 0; i < brush->planes_length; i++) { + map_plane_t *plane = &self->planes.data[brush->planes_index + i]; + map_build_faces(self, plane, &windings[i]); + } +} + +void map_build_planes(map_t *self, map_brush_t *brush, u32 i0, u32 i1, u32 i2, winding_t *winding) { + map_plane_t *p0 = &self->planes.data[brush->planes_index + i0]; + map_plane_t *p1 = &self->planes.data[brush->planes_index + i1]; + map_plane_t *p2 = &self->planes.data[brush->planes_index + i2]; + + // Plane intersection + f32 denom = vec3_dot(vec3_cross(p0->normal, p1->normal), p2->normal); + if (equals(denom, 0)) { + return; + } + + vec3_t p0d = vec3_mulf(vec3_cross(p1->normal, p2->normal), p0->dist); + vec3_t p1d = vec3_mulf(vec3_cross(p2->normal, p0->normal), p1->dist); + vec3_t p2d = vec3_mulf(vec3_cross(p0->normal, p1->normal), p2->dist); + vec3_t intersection = vec3_divf(vec3_add(vec3_add(p0d, p1d), p2d), denom); + + // Make sure the produced intersection point is within the hull + for (u32 i = 0; i < brush->planes_length; i++) { + map_plane_t *plane = &self->planes.data[brush->planes_index + i]; + f32 proj = vec3_dot(plane->normal, intersection); + if (proj - plane->dist > F32_COMPARE_EPSILON) { + return; + } + } + + // Add the intersection point to all 3 planes + winding_add(&winding[i0], intersection, p0->normal, vec2(0, 0)); + winding_add(&winding[i1], intersection, p1->normal, vec2(0, 0)); + winding_add(&winding[i2], intersection, p2->normal, vec2(0, 0)); +} + +void map_build_faces(map_t *self, map_plane_t *plane, winding_t *winding) { + // Sort vertices by winding + winding_sort_ccw(winding); + + // Compute UV coords + f32 du = fabs(vec3_dot(plane->normal, vec3(0, 0, 1))); + f32 dr = fabs(vec3_dot(plane->normal, vec3(0, 1, 0))); + f32 df = fabs(vec3_dot(plane->normal, vec3(1, 0, 0))); + + vec3_t axis_u, axis_v; + if (du >= dr && du >= df) { // project z axis + axis_u = vec3(1, 0, 0); + axis_v = vec3(0, 1, 0); + } + else if (dr > du && dr > df) { // project y axis + axis_u = vec3(1, 0, 0); + axis_v = vec3(0, 0, 1); + } + else { // (df >= du && df >= dr) project x axis + axis_u = vec3(0, -1, 0); + axis_v = vec3(0, 0, 1); + } + + vec2_t tsize = vec2(64, 64); + for (u32 i = 0; i < winding->num_vertices; i++) { + vec3_t p = winding->vertices[i].pos; + vec2_t uv = vec2(vec3_dot(p, axis_u), vec3_dot(p, axis_v)); + + uv = vec2_rotate(uv, deg_to_rad(plane->uv_rotation)); + uv = vec2_div(uv, plane->uv_scale); + uv = vec2_add(uv, plane->uv_offset); + uv = vec2_div(uv, tsize); + + winding->vertices[i].uv = uv; + } + + map_insert_winding(self, winding); +} + +void map_insert_winding(map_t *self, winding_t *winding) { + for (u32 vi = 2; vi < winding->num_vertices; vi++) { + face_t *face = memvec_add(self->faces); + + face->vertices[0] = (vertex_t){ + .pos = winding->vertices[0].pos, + .normal = winding->normal, + .uv = winding->vertices[0].uv + }; + + face->vertices[1] = (vertex_t){ + .pos = winding->vertices[vi-1].pos, + .normal = winding->normal, + .uv = winding->vertices[vi-1].uv + }; + face->vertices[2] = (vertex_t){ + .pos = winding->vertices[vi].pos, + .normal = winding->normal, + .uv = winding->vertices[vi].uv + }; + } +} + +// ----------------------------------------------------------------------------- +// Parser + +#define peek() (*self->char_ptr) +#define next() (self->char_ptr++) +#define invalid(msg) self->error = msg; self->error_at = self->char_ptr; +#define expect(c) if (peek() != c) { invalid("Unexpected char"); } else { next(); } +#define skip_whitespace()\ + while (\ + peek() == ' ' || peek() == '\n' || peek() == '\r' || peek() == '\t' \ + ) { next(); } +#define skip_until(c) while (peek() && peek() != c) { next(); } + +void map_parse_entity(map_t *self); +void map_parse_brush(map_t *self, map_entity_t *entity); +void map_parse_key_value(map_t *self, map_entity_t *entity); +string_t map_parse_quoted_string(map_t *self); +void map_parse_plane(map_t *self, map_brush_t *brush); +vec3_t map_parse_vec3(map_t *self); +f32 map_parse_f32(map_t *self); +string_t map_parse_texture(map_t *self); + +void map_parse(map_t *self) { + while (!self->error && peek()) { + skip_whitespace(); + + switch (peek()) { + case '/': skip_until('\n'); break; + case '{': map_parse_entity(self); break; + case '\0': break; + default: invalid("Unexpected char in global scope"); break; + } + } +} + +void map_parse_entity(map_t *self) { + expect('{'); + + map_entity_t *entity = memvec_add(self->map_entities); + entity->kvs_index = self->entity_kvs.length; + entity->brushes_index = self->brushes.length; + + while (!self->error && peek()) { + skip_whitespace(); + + switch (peek()) { + case '/': skip_until('\n'); break; + case '"': map_parse_key_value(self, entity); break; + case '{': map_parse_brush(self, entity); break; + case '}': next(); return; + default: invalid("Unexpected char in entity scope") break; + } + } +} + +void map_parse_brush(map_t *self, map_entity_t *entity) { + expect('{'); + entity->brushes_length++; + + map_brush_t *brush = memvec_add(self->brushes); + brush->planes_index = self->planes.length; + + while (!self->error && peek()) { + skip_whitespace(); + + switch (peek()) { + case '(': map_parse_plane(self, brush); break; + case '}': next(); return; + default: invalid("Unexpected char in brush scope"); break; + } + } +} + +void map_parse_key_value(map_t *self, map_entity_t *entity) { + entity->kvs_length++; + + entity_kv_t *kv = memvec_add(self->entity_kvs); + kv->key = map_parse_quoted_string(self); + kv->value = map_parse_quoted_string(self); +} + +string_t map_parse_quoted_string(map_t *self) { + skip_whitespace(); + expect('"'); + + char *start = self->char_ptr; + skip_until('"'); + u32 length = self->char_ptr - start; + expect('"'); + return string(start, length); +} + +void map_parse_plane(map_t *self, map_brush_t *brush) { + brush->planes_length++; + + map_plane_t *plane = memvec_add(self->planes); + + plane->vertices[0] = map_parse_vec3(self); + plane->vertices[1] = map_parse_vec3(self); + plane->vertices[2] = map_parse_vec3(self); + plane->normal = vec3_face_normal(plane->vertices[0], plane->vertices[1], plane->vertices[2]); + + plane->texture_name = map_parse_texture(self); + + plane->uv_offset.x = map_parse_f32(self); + plane->uv_offset.y = map_parse_f32(self); + plane->uv_rotation = map_parse_f32(self); + plane->uv_scale.x = map_parse_f32(self); + plane->uv_scale.y = map_parse_f32(self); + plane->dist = vec3_dot(plane->normal, plane->vertices[1]); +} + +vec3_t map_parse_vec3(map_t *self) { + skip_whitespace(); + expect('('); + + vec3_t v = vec3( + map_parse_f32(self), + map_parse_f32(self), + map_parse_f32(self) + ); + + skip_whitespace(); + expect(')'); + return v; +} + +f32 map_parse_f32(map_t *self) { + skip_whitespace(); + + char *start = self->char_ptr; + while ((peek() >= '0' && peek() <= '9') || peek() == '.' || peek() == '-') { + next(); + } + u32 length = self->char_ptr - start; + + if (length == 0 || length > 16) { + invalid("Expected float") + return 0; + } + + char buf[length+1]; + memcpy((void *)buf, start, length); + buf[length] = '\0'; + return atof(buf); +} + +string_t map_parse_texture(map_t *self) { + skip_whitespace(); + + char *start = self->char_ptr; + skip_until(' '); + u32 length = self->char_ptr - start; + + return string(start, length); +} + +#undef peek +#undef next +#undef invalid +#undef expect +#undef skip_whitespace +#undef skip_until + + + + +// ----------------------------------------------------------------------------- + +#define BLOCK_RES_XZ 32 +#define BLOCK_RES_Y 16 + +#define BLOCK_POS_MAX_XZ ((1<<8) * BLOCK_RES_XZ) +#define BLOCK_POS_MAX_Y ((1<<8) * BLOCK_RES_Y) + +#define BLOCK_SIZE_MAX_XZ ((1<<8) * BLOCK_RES_XZ) +#define BLOCK_SIZE_MAX_Y ((1<<8) * BLOCK_RES_Y) + +typedef struct { + u8 x, y, z; + u8 sx, sy, sz; + u8 tex; +} block_t; + +typedef struct { + u8 x, y, z; + u8 sx, sy, sz; +} block_out_t; + +typedef struct { + u8 sentinel; + u8 tex; +} block_texture_t; + +typedef struct { + char type; + u8 x, y, z; + u8 data1, data2; +} block_entity_t; + +u32 brushes_to_blocks(block_t *blocks, map_brush_t *brushes, u32 brushes_length) { + u32 blocks_length = 0; + for (u32 b = 0; b < brushes_length; b++) { + map_brush_t *brush = &brushes[b]; + + // Find min, max vert of this brush + vec3_t vmin = vec3(INFINITY, INFINITY, INFINITY); + vec3_t vmax = vec3(-INFINITY, -INFINITY, -INFINITY); + for (u32 f = 0; f < brush->faces_length; f++) { + face_t *face = &brush->faces[f]; + + for (u32 v = 0; v < 3; v++) { + vmin.x = min(vmin.x, round(face->vertices[v].pos.x)); + vmin.y = min(vmin.y, round(face->vertices[v].pos.y)); + vmin.z = min(vmin.z, round(face->vertices[v].pos.z)); + + vmax.x = max(vmax.x, round(face->vertices[v].pos.x)); + vmax.y = max(vmax.y, round(face->vertices[v].pos.y)); + vmax.z = max(vmax.z, round(face->vertices[v].pos.z)); + } + } + + vec3_t vsize = vec3_sub(vmax, vmin); + if ( + (vmin.x < 0 || vmin.y < 0 || vmin.z < 0) || + (vmin.x >= BLOCK_POS_MAX_XZ || vmin.y >= BLOCK_POS_MAX_XZ || vmin.z >= BLOCK_POS_MAX_Y) || + (vsize.x >= BLOCK_SIZE_MAX_XZ || vsize.y >= BLOCK_SIZE_MAX_XZ || vsize.z >= BLOCK_SIZE_MAX_Y) || + (vsize.x < BLOCK_RES_XZ || vsize.y < BLOCK_RES_XZ || vsize.z < BLOCK_RES_Y) + ) { + printf( + "Brush %d has unsupported dimensions: pos(%g %g %g) size(%g %g %g)\n", + b, vmin.x, vmin.y, vmin.z, vsize.x, vsize.y, vsize.z + ); + continue; + } + + // This assumes all textures are name XX.png + u8 tex = atoi(string_cstring(brush->planes[0].texture_name)); + + // Build block, swap y<>z + block_t block = (block_t){ + .x = (u8)(round(vmin.x / BLOCK_RES_XZ)), + .y = (u8)(round(vmin.z / BLOCK_RES_Y)), + .z = (u8)(round(vmin.y / BLOCK_RES_XZ)), + + .sx = (u8)(round(vsize.x / BLOCK_RES_XZ)), + .sy = (u8)(round(vsize.z / BLOCK_RES_Y)), + .sz = (u8)(round(vsize.y / BLOCK_RES_XZ)), + + .tex = tex + }; + blocks[blocks_length++] = block; + } + return blocks_length; +} + +i32 block_compare(const void *vlp, const void *vrp) { + block_t *bl = (block_t *)vlp; + block_t *br = (block_t *)vrp; + + i32 lt = bl->tex; + i32 rt = br->tex; + + return lt == rt ? bl->sx - br->sx : lt - rt; +} + +i32 block_entity_compare(const void *vlp, const void *vrp) { + block_entity_t *bl = (block_entity_t *)vlp; + block_entity_t *br = (block_entity_t *)vrp; + + return bl->type - br->type; +} + +i32 main(i32 argc, char **argv) { + if (argc < 3) { + printf("Usage: ./map_packer infile.map outfile.plblocks\n"); + exit(1); + } + + printf("sizeof(block_out_t) = %d\n", sizeof(block_out_t)); + + char *error; + u32 error_at; + map_t *map = map_new(argv[1], &error, &error_at); + if (!map) { + printf("Error loading %s: %s at %d\n", argv[1], error, error_at); + exit(1); + } + + printf( + "Loaded %s: %d entities, %d brushes, %d planes, %d faces\n", + argv[1], + map->entities_length, map->brushes.length, + map->planes.length, map->faces.length + ); + + FILE *fh = fopen(argv[2], "wb"); + if (!fh) { + printf("Failed to open %s for writing\n", argv[2]); + exit(1); + } + + // Find worldspawn, build brushes + for (u32 i = 0; i < map->entities_length; i++) { + entity_t *entity = &map->entities[i]; + string_t classname = entity_get(entity, s("classname")); + + if (!string_equals(classname, s("worldspawn"))) { + continue; + } + + block_t *blocks = calloc(entity->brushes_length, sizeof(block_t)); + u16 blocks_length = brushes_to_blocks(blocks, entity->brushes, entity->brushes_length); + + + // Sort blocks by texture index + qsort(blocks, blocks_length, sizeof(block_t), block_compare); + + // Write blocks length + u16 num_textures = 0; + u8 last_texture_index = 255; + for (u32 j = 0; j < blocks_length; j++) { + if (blocks[j].tex != last_texture_index) { + last_texture_index = blocks[j].tex; + num_textures++; + } + } + + u32 blocks_size = blocks_length * sizeof(block_out_t) + num_textures * sizeof(block_texture_t); + printf("%d blocks, size: %d\n", blocks_length, blocks_size); + fwrite(&blocks_size, sizeof(u16), 1, fh); + + // Go through all blocks, write the block and the texture_t whenever + // the texture changes. + last_texture_index = 255; + for (u32 j = 0; j < blocks_length; j++) { + if (blocks[j].tex != last_texture_index) { + last_texture_index = blocks[j].tex; + block_texture_t bt = {255, last_texture_index}; + fwrite(&bt, sizeof(block_texture_t), 1, fh); + } + block_out_t bo = { + .x = blocks[j].x, + .y = blocks[j].y, + .z = blocks[j].z, + .sx = blocks[j].sx, + .sy = blocks[j].sy, + .sz = blocks[j].sz + }; + fwrite(&bo, sizeof(block_out_t), 1, fh); + } + + free(blocks); + break; + } + + // Gather all entities + block_entity_t *block_entities = calloc(map->entities_length, sizeof(block_entity_t)); + u16 block_entities_length = 0; + for (u32 i = 0; i < map->entities_length; i++) { + entity_t *entity = &map->entities[i]; + string_t classname = entity_get(entity, s("classname")); + + char type; + u8 extra_data1 = 0; + u8 extra_data2 = 0; + if (string_equals(classname, s("worldspawn"))) { + continue; + } + if (string_equals(classname, s("info_player_start"))) { + type = 0; + } + else if (string_equals(classname, s("enemy_grunt"))) { + type = 1; + extra_data1 = atoi(string_cstring(entity_get(entity, s("patrol")))); + } + else if (string_equals(classname, s("enemy_enforcer"))) { + type = 2; + extra_data1 = atoi(string_cstring(entity_get(entity, s("patrol")))); + } + else if (string_equals(classname, s("enemy_ogre"))) { + type = 3; + extra_data1 = atoi(string_cstring(entity_get(entity, s("patrol")))); + } + else if (string_equals(classname, s("enemy_zombie"))) { + type = 4; + extra_data1 = atoi(string_cstring(entity_get(entity, s("patrol")))); + } + else if (string_equals(classname, s("enemy_hound"))) { + type = 5; + extra_data1 = atoi(string_cstring(entity_get(entity, s("patrol")))); + } + else if (string_equals(classname, s("pickup_nailgun"))) { + type = 6; + } + else if (string_equals(classname, s("pickup_grenadelauncher"))) { + type = 7; + } + else if (string_equals(classname, s("pickup_health"))) { + type = 8; + } + else if (string_equals(classname, s("pickup_nails"))) { + type = 9; + } + else if (string_equals(classname, s("pickup_grenades"))) { + type = 10; + } + else if (string_equals(classname, s("barrel"))) { + type = 11; + } + else if (string_equals(classname, s("light"))) { + type = 12; + extra_data1 = atoi(string_cstring(entity_get(entity, s("light")))); + + // Convert 24 bit r g b string into 8 bit color value + char *color = string_cstring(entity_get(entity, s("color"))); + i32 r, g, b; + sscanf(color, "%d %d %d", &r, &g, &b); + + union { + struct { + u8 r: 3; + u8 g: 3; + u8 b: 2; + } rgb; + u8 v; + } rgb8 = {.rgb = {r >> 5, g >> 5, b >> 6}}; + extra_data2 = rgb8.v; + } + else if (string_equals(classname, s("trigger_levelchange"))) { + type = 13; + } + else if (string_equals(classname, s("door"))) { + type = 14; + extra_data1 = atoi(string_cstring(entity_get(entity, s("texture")))); + extra_data2 = atoi(string_cstring(entity_get(entity, s("dir")))); + } + else if (string_equals(classname, s("pickup_key"))) { + type = 15; + } + else if (string_equals(classname, s("torch"))) { + type = 16; + } + else { + printf("Unknown entity %s\n", string_cstring(classname)); + continue; + } + + f32 x, y, z; + char *origin = string_cstring(entity_get(entity, s("origin"))); + sscanf(origin, "%f %f %f", &x, &y, &z); + + // Build entity, swap y<>z + block_entity_t be = { + .type = type, + .x = (u8)(round(x / BLOCK_RES_XZ)), + .y = (u8)(round(z / BLOCK_RES_Y)), + .z = (u8)(round(y / BLOCK_RES_XZ)), + .data1 = extra_data1, + .data2 = extra_data2, + }; + block_entities[block_entities_length++] = be; + } + + qsort(block_entities, block_entities_length, sizeof(block_entity_t), block_entity_compare); + + printf("%d entities, size: %d\n", block_entities_length, block_entities_length * sizeof(block_entity_t)); + fwrite(&block_entities_length, sizeof(u16), 1, fh); + fwrite(block_entities, sizeof(block_entity_t), block_entities_length, fh); + + fclose(fh); + map_delete(map); +} diff --git a/pack_model.php b/pack_model.php new file mode 100755 index 0000000..6e2ac7a --- /dev/null +++ b/pack_model.php @@ -0,0 +1,103 @@ + $v) { + $x = round(($v[0]/$max)*15)+15; + $y = round(($v[1]/$max)*15)+15; + $z = round(($v[2]/$max)*15)+15; + + // echo "Vertex $i => ($x, $y, $z)\n"; + $packed .= + pack('C', $x). + pack('C', $y). + pack('C', $z); + +} + +// Pack indices w. vertex index +$a_last_index = 0; +foreach ($indices as $i => $f) { + $a_address_inc = $f[0] - $a_last_index; + if ($a_address_inc > 3) { + die("Face $i index a increment exceeds 2 bits ($a_address_inc)\n"); + } + $a_last_index = $f[0]; + + if ($f[1] > 127 || $f[2] > 127) { + die("Face $i index exceeds 7 bits ({$f[1]}, {$f[1]}, {$f[2]})\n"); + } + + // echo "Face $i => ({$f[1]}, {$f[1]}, {$f[2]})\n"; + // $packed .= pack('v', ($a_address_inc << 14) | ($f[1] << 7) | $f[2]); + $packed .= + pack('C', $a_address_inc). + pack('C', $f[1]). + pack('C', $f[2]); +} + +// Write +$packedfile = $argv[count($argv)-1]; +file_put_contents($packedfile, $packed); + +echo "Wrote $packedfile: ". + count($infiles)." frame(s), ". + count($verts)." verts, ". + count($indices)." indices, ". + strlen($packed)." bytes\n"; diff --git a/source/audio.js b/source/audio.js new file mode 100644 index 0000000..af22ae1 --- /dev/null +++ b/source/audio.js @@ -0,0 +1,240 @@ + +// Gutted for js13k and modified to use Float32 buffers directly +// ~ Dominic Szablewski, phoboslab.org, Sep 2018 + +// Almost re-written for for jsk13 2019. Oscilators now use a lookup table +// instead of calling functions. This and various other changes result in a +// ~10x performance increase and smaller file size. +// ~ Dominic Szablewski, phoboslab.org, Sep 2019 + +// Again updated for js13k 2021. Song and sound definitions are now just arrays +// instead of objects. + + +// +// Sonant-X +// +// Copyr (c) 2014 Nicolas Vanhoren +// +// Sonant-X is a fork of js-sonant by Marcus Geelnard and Jake Taylor. It is +// still published using the same license (zlib license, see below). +// +// Copyr (c) 2011 Marcus Geelnard +// Copyr (c) 2008-2009 Jake Taylor +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + +let +audio_ctx, +AUDIO_SAMPLERATE = 44100, // Samples per second +AUDIO_TAB_SIZE = 4096, +AUDIO_TAB_MASK = AUDIO_TAB_SIZE-1, +AUDIO_TAB = new Float32Array(AUDIO_TAB_SIZE*4), // 4 oscilators + +audio_init = () => { + // This function needs to be called in response to a user action, as it + // tries to activate the audio context. + audio_ctx = new AudioContext(); + audio_ctx.resume(); + + // Generate the lookup tables + for (let i = 0; i < AUDIO_TAB_SIZE; i++) { + AUDIO_TAB[i ] = Math.sin(i*6.283184/AUDIO_TAB_SIZE); // sin + AUDIO_TAB[i + AUDIO_TAB_SIZE ] = AUDIO_TAB[i] < 0 ? -1 : 1; // square + AUDIO_TAB[i + AUDIO_TAB_SIZE * 2] = i / AUDIO_TAB_SIZE - 0.5; // saw + AUDIO_TAB[i + AUDIO_TAB_SIZE * 3] = i < AUDIO_TAB_SIZE/2 ? (i/(AUDIO_TAB_SIZE/4)) - 1 : 3 - (i/(AUDIO_TAB_SIZE/4)); // tri + } +}, + +audio_play = (buffer, volume = 1, loop = 0, pan = 0) => { + let gain = audio_ctx.createGain(), + source = audio_ctx.createBufferSource(), + panner = audio_ctx.createStereoPanner(); + gain.gain.value = volume; + gain.connect(audio_ctx.destination); + panner.connect(gain); + panner.pan.value = pan; + source.buffer = buffer; + source.loop = loop; + source.connect(panner); + source.start(); +}, + +audio_get_ctx_buffer = (buf_l, buf_r) => { + let buffer = audio_ctx.createBuffer(2, buf_l.length, AUDIO_SAMPLERATE); + buffer.getChannelData(0).set(buf_l); + buffer.getChannelData(1).set(buf_r); + return buffer; +}, + +audio_generate_sound = ( + row_len, note, buf_l, buf_r, write_pos, + + // Instrument properties + osc1_oct, osc1_det, osc1_detune, osc1_xenv, osc1_vol, osc1_waveform, + osc2_oct, osc2_det, osc2_detune, osc2_xenv, osc2_vol, osc2_waveform, + noise_fader, attack, sustain, release, master, + fx_filter, fx_freq, fx_resonance, fx_delay_time, fx_delay_amt, fx_pan_freq_p, fx_pan_amt, + lfo_osc1_freq, lfo_fx_freq, lfo_freq_p, lfo_amt, lfo_waveform +) => { + let osc_lfo_offset = lfo_waveform * AUDIO_TAB_SIZE, + osc1_offset = osc1_waveform * AUDIO_TAB_SIZE, + osc2_offset = osc2_waveform * AUDIO_TAB_SIZE, + fx_pan_freq = Math.pow(2, fx_pan_freq_p - 8) / row_len, + lfo_freq = Math.pow(2, lfo_freq_p - 8) / row_len, + + c1 = 0, + c2 = 0, + + q = fx_resonance / 255, + low = 0, + band = 0, + high = 0, + + buf_length = buf_l.length, + num_samples = attack + sustain + release - 1, + + osc1_freq = + Math.pow(1.059463094, (note + (osc1_oct - 8) * 12 + osc1_det) - 128) + * 0.00390625 * (1 + 0.0008 * osc1_detune), + osc2_freq = + Math.pow(1.059463094, (note + (osc2_oct - 8) * 12 + osc2_det) - 128) + * 0.00390625 * (1 + 0.0008 * osc2_detune); + + for (let j = num_samples; j >= 0; --j) { + let + // Buffer positions + k = j + write_pos, + + // LFO + lfor = AUDIO_TAB[osc_lfo_offset + ((k * lfo_freq * AUDIO_TAB_SIZE) & AUDIO_TAB_MASK)] * lfo_amt / 512 + 0.5, + + sample = 0, + filter_f = fx_freq, + temp_f, + envelope = 1; + + // Envelope + if (j < attack) { + envelope = j / attack; + } + else if (j >= attack + sustain) { + envelope -= (j - attack - sustain) / release; + } + + // Oscillator 1 + temp_f = osc1_freq; + if (lfo_osc1_freq) { + temp_f *= lfor; + } + if (osc1_xenv) { + temp_f *= envelope * envelope; + } + c1 += temp_f; + sample += AUDIO_TAB[osc1_offset + ((c1 * AUDIO_TAB_SIZE) & AUDIO_TAB_MASK)] * osc1_vol; + + // Oscillator 2 + temp_f = osc2_freq; + if (osc2_xenv) { + temp_f *= envelope * envelope; + } + c2 += temp_f; + sample += AUDIO_TAB[osc2_offset + ((c2 * AUDIO_TAB_SIZE) & AUDIO_TAB_MASK)] * osc2_vol; + + // Noise oscillator + if (noise_fader) { + sample += (2*Math.random()-1) * noise_fader * envelope; + } + + sample *= envelope / 255; + + // State variable filter + if (lfo_fx_freq) { + filter_f *= lfor; + } + + filter_f = 1.5 * AUDIO_TAB[(filter_f * 0.5 / AUDIO_SAMPLERATE * AUDIO_TAB_SIZE) & AUDIO_TAB_MASK]; + low += filter_f * band; + high = q * (sample - band) - low; + band += filter_f * high; + sample = [sample, high, low, band, low + high][fx_filter]; + + // Panning & master volume + temp_f = AUDIO_TAB[(k * fx_pan_freq * AUDIO_TAB_SIZE) & AUDIO_TAB_MASK] * fx_pan_amt / 512 + 0.5; + sample *= 0.00476 * master; // 39 / 8192 = 0.00476 + + buf_l[k] += sample * (1-temp_f); + buf_r[k] += sample * temp_f; + } +}, + +audio_create_song = (row_len, pattern_len, song_len, tracks) => { + let num_samples = AUDIO_SAMPLERATE * song_len, + mix_buf_l = new Float32Array(num_samples), + mix_buf_r = new Float32Array(num_samples); + + for (let track of tracks) { + let buf_l = new Float32Array(num_samples), + buf_r = new Float32Array(num_samples), + write_pos = 0, + delay_shift = (track[0/*instrument*/][20/*fx_delay_time*/] * row_len) >> 1, + delay_amount = track[0/*instrument*/][21/*fx_delay_amt*/] / 255; + + for (let p = 0; p < pattern_len; p++) { + for (let row = 0; row < 32; row++) { + let note = track[2/*notes*/][track[1/*pattern*/][p] - 1]?.[row]; + if (note) { + audio_generate_sound(row_len, note, buf_l, buf_r, write_pos, ...track[0/*instrument*/]); + } + write_pos += row_len; + } + } + + audio_apply_delay(delay_shift, delay_amount, buf_l, buf_r); + for (let b = 0; b < num_samples; b++) { + mix_buf_l[b] += buf_l[b]; + mix_buf_r[b] += buf_r[b]; + } + } + return audio_get_ctx_buffer(mix_buf_l, mix_buf_r); +}, + +audio_create_sound = (note, instrument, row_len = 5605) => { + let delay_shift = (instrument[20/*fx_delay_time*/] * row_len) >> 1, + delay_amount = instrument[21/*fx_delay_amt*/] / 255, + num_samples = + instrument[13/*env_attack*/] + + instrument[14/*env_sustain*/] + + instrument[15/*env_release*/] + + delay_shift * 32 * delay_amount, + buf_l = new Float32Array(num_samples), + buf_r = new Float32Array(num_samples); + audio_generate_sound(row_len, note, buf_l, buf_r, 0, ...instrument); + audio_apply_delay(delay_shift, delay_amount, buf_l, buf_r); + return audio_get_ctx_buffer(buf_l, buf_r); +}, + +audio_apply_delay = (shift, amount, buf_l, buf_r) => { + for (let i = 0; i < buf_l.length - shift; i++) { + buf_l[i + shift] += buf_r[i] * amount; + buf_r[i + shift] += buf_l[i] * amount; + } +}; + diff --git a/source/document.js b/source/document.js new file mode 100644 index 0000000..22c1c30 --- /dev/null +++ b/source/document.js @@ -0,0 +1,24 @@ + +document.body.innerHTML += + ''+ + '
'+ + ''+ + '

Q1K3

CLICK TO START
'+ + '
'+ + '
'+ + '
'+ + '

MOUSE SPEED:

'+ + '

'+ + '

'+ + 'code: phoboslab.org / music: no-fate.net'+ + '

'; \ No newline at end of file diff --git a/source/entity.js b/source/entity.js new file mode 100755 index 0000000..99b2264 --- /dev/null +++ b/source/entity.js @@ -0,0 +1,226 @@ + +let ENTITY_GROUP_NONE = 0, + ENTITY_GROUP_PLAYER = 1, + ENTITY_GROUP_ENEMY = 2; + +class entity_t { + constructor(pos, p1, p2) { + this.a = vec3(); + this.v = vec3(); + this.p = pos; + this.s = vec3(2,2,2); + this.f = 0; + + this._health = 50; + this._dead = 0; + this._die_at = 0; + this._step_height = 0; + this._bounciness = 0; + this._gravity = 1; + this._yaw = 0; + this._pitch = 0; + this._anim = [1, [0]]; + this._anim_time = Math.random(); + this._on_ground = 0; + this._keep_off_ledges = 0; + + this._check_against = ENTITY_GROUP_NONE; + this._stepped_up_at = 0; + + this._init(p1, p2); + } + + _init(p1, p2) {} + + _update() { + if (this._model) { + this._draw_model(); + } + } + + _update_physics() { + if (this._die_at && this._die_at < game_time) { + this._kill(); + return; + } + + // Apply Gravity + this.a.y = -1200 * this._gravity; + + // Integrate acceleration & friction into velocity + let ff = Math.min(this.f * game_tick, 1); + this.v = vec3_add( + this.v, vec3_sub( + vec3_mulf(this.a, game_tick), + vec3_mul(this.v, vec3(ff, 0, ff)) + ) + ); + + + // Set up the _check_entities array for entity collisions + this._check_entities = [ + [], + game_entities_friendly, + game_entities_enemies + ][this._check_against]; + + // Divide the physics integration into 16 unit steps; otherwise fast + // projectiles may just move through walls. + let + original_step_height = this._step_height, + move_dist = vec3_mulf(this.v, game_tick), + steps = Math.ceil(vec3_length(move_dist) / 16), + move_step_height = vec3_mulf(move_dist, 1/steps); + + for (let s = 0; s < steps; s++) { + // Remember last position so we can roll back + let lp = vec3_clone(this.p); + + // Integrate velocity into position + this.p = vec3_add(this.p, move_step_height); + + // Collision with walls, horizonal + if (this._collides(vec3(this.p.x, lp.y, lp.z))) { + + // Can we step up? + if ( + !this._step_height || !this._on_ground || this.v.y > 0 || + this._collides(vec3(this.p.x, lp.y+this._step_height, lp.z)) + ) { + this._did_collide(0); + this.p.x = lp.x; + this.v.x = -this.v.x * this._bounciness; + } + else { + lp.y += this._step_height; + this._stepped_up_at = game_time; + } + + s = steps; // stop after this iteration + } + + // Collision with walls, vertical + if (this._collides(vec3(this.p.x, lp.y, this.p.z))) { + + // Can we step up? + if ( + !this._step_height || !this._on_ground || this.v.y > 0 || + this._collides(vec3(this.p.x, lp.y+this._step_height, this.p.z)) + ) { + this._did_collide(2); + this.p.z = lp.z; + this.v.z = -this.v.z * this._bounciness; + } + else { + lp.y += this._step_height; + this._stepped_up_at = game_time; + } + + s = steps; // stop after this iteration + } + + // Collision with ground/Ceiling + if (this._collides(this.p)) { + this._did_collide(1); + this.p.y = lp.y; + + // Only bounce from ground/ceiling if we have enough velocity + let bounce = Math.abs(this.v.y) > 200 ? this._bounciness : 0; + this._on_ground = this.v.y < 0 && !bounce; + this.v.y = -this.v.y * bounce; + + s = steps; // stop after this iteration + } + + this._step_height = original_step_height; + } + + } + + _collides(p) { + if (this._dead) { + return; + } + for (let entity of this._check_entities) { + if (vec3_dist(p, entity.p) < this.s.y + entity.s.y) { + // If we collide with an entity set the step height to 0, + // so we don't climb up on its shoulders :/ + this._step_height = 0; + this._did_collide_with_entity(entity); + return true; + } + } + + // Check if there's no block beneath this point. We want the AI to keep + // off of ledges. + if ( + this._on_ground && this._keep_off_ledges && + !map_block_at(p.x >> 5, (p.y-this.s.y-8) >> 4, p.z >>5) && + !map_block_at(p.x >> 5, (p.y-this.s.y-24) >> 4, p.z >>5) + ) { + return true; + } + + // Do the normal collision check with the whole box + return map_block_at_box(vec3_sub(p, this.s), vec3_add(p, this.s)); + } + + _did_collide(axis) {} + + _did_collide_with_entity(other) {} + + _draw_model() { + this._anim_time += game_tick; + + // Calculate which frames to use and how to mix them + let f = (this._anim_time / this._anim[0]), + mix = f - (f|0), + frame_cur = this._anim[1][(f|0) % this._anim[1].length], + frame_next = this._anim[1][((f+1)|0) % this._anim[1].length]; + + // Swap frames if we're looping to the first frame again + if (frame_next < frame_cur) { + [frame_next, frame_cur] = [frame_cur, frame_next]; + mix = 1-mix; + } + r_draw( + this.p, this._yaw, this._pitch, this._texture, + this._model.f[frame_cur], this._model.f[frame_next], mix, + this._model.nv + ); + } + + _spawn_particles(amount, speed = 1, model, texture, lifetime) { + for (let i = 0; i < amount; i++) { + let particle = game_spawn(entity_particle_t, this.p); + particle._model = model; + particle._texture = texture; + particle._die_at = game_time + lifetime + Math.random() * lifetime * 0.2; + particle.v = vec3( + (Math.random() - 0.5) * speed, + Math.random() * speed, + (Math.random() - 0.5) * speed + ); + } + } + + _receive_damage(from, amount) { + if (this._dead) { + return; + } + this._health -= amount; + if (this._health <= 0) { + this._kill(); + } + } + + _play_sound(sound) { + let volume = clamp(scale(vec3_dist(this.p, r_camera), 64, 1200, 1, 0),0,1), + pan = Math.sin(vec3_2d_angle(this.p, r_camera)-r_camera_yaw)*-1; + audio_play(sound, volume, 0, pan); + } + + _kill() { + this._dead = 1; + } +} diff --git a/source/entity_barrel.js b/source/entity_barrel.js new file mode 100644 index 0000000..987519f --- /dev/null +++ b/source/entity_barrel.js @@ -0,0 +1,30 @@ + +class entity_barrel_t extends entity_t { + _init() { + this._model = model_barrel; + this._texture = 21; + this._pitch = Math.PI/2; + this._health = 10; + this.s = vec3(8, 32, 8); + + game_entities_enemies.push(this); + } + + _kill() { + // Deal some damage to nearby entities + for (let entity of game_entities_enemies) { + let dist = vec3_dist(this.p, entity.p); + if (entity !== this && dist < 256) { + entity._receive_damage(this, scale(dist, 0, 256, 60, 0)); + } + } + + super._kill(); + this._play_sound(sfx_grenade_explode); + for (let m of model_gib_pieces) { + this._spawn_particles(2, 600, m, 21, 1); + } + game_spawn(entity_light_t, vec3_add(this.p, vec3(0,16,0)), 250, 0x08f)._die_at = game_time + 0.2; + game_entities_enemies = game_entities_enemies.filter(e => e != this); + } +} diff --git a/source/entity_door.js b/source/entity_door.js new file mode 100644 index 0000000..6b23f38 --- /dev/null +++ b/source/entity_door.js @@ -0,0 +1,44 @@ + +class entity_door_t extends entity_t { + _init(texture, dir) { + this._model = model_door; + this._texture = texture; + this._health = 10; + this.s = vec3(64, 64, 64); + this._start_pos = vec3_clone(this.p); + + this._reset_state_at = 0; + this._yaw = dir * Math.PI/2; + this._open = 0; + + // Map 1 only has one door and it needs a key. Should be a flag + // in the entity data instead :/ + this._needs_key = game_map_index == 1; + + // Doors block enemies and players + game_entities_enemies.push(this); + game_entities_friendly.push(this); + } + + _update() { + this._draw_model(); + if (vec3_dist(this.p, game_entity_player.p) < 128) { + if (this._needs_key) { + game_show_message('YOU NEED THE KEY...'); + return; + } + this._reset_state_at = game_time + 3; + } + + if (this._reset_state_at < game_time) { + this._open = Math.max(0, this._open-game_tick); + } + else { + this._open = Math.min(1, this._open+game_tick); + } + + this.p = vec3_add(this._start_pos, vec3_rotate_y(vec3(96 * this._open,0,0), this._yaw)); + } + + _receive_damage() {} +} diff --git a/source/entity_enemy.js b/source/entity_enemy.js new file mode 100644 index 0000000..615db48 --- /dev/null +++ b/source/entity_enemy.js @@ -0,0 +1,199 @@ + +class entity_enemy_t extends entity_t { + _init(patrol_dir) { + + // Animations + this._ANIMS =[ + [1, [0]], // 0: Idle + [0.40, [1,2,3,4]], // 1: Walk + [0.20, [1,2,3,4]], // 2: Run + [0.25, [0,5,5,5]], // 3: Attack prepare + [0.25, [5,0,0,0]], // 4: Attack + ]; + + // State definitions + // [0: anim_index, 1: speed, 2: next_state_update, 3: next_state] + this._STATE_IDLE = [0, 0, 0.1]; + this._STATE_PATROL = [1, 0.5, 0.5]; + this._STATE_FOLLOW = [2, 1, 0.3]; + this._STATE_ATTACK_RECOVER = [0, 0, 0.1, this._STATE_FOLLOW]; + this._STATE_ATTACK_EXEC = [4, 0, 0.4, this._STATE_ATTACK_RECOVER]; + this._STATE_ATTACK_PREPARE = [3, 0, 0.4, this._STATE_ATTACK_EXEC]; + this._STATE_ATTACK_AIM = [0, 0, 0.1, this._STATE_ATTACK_PREPARE]; + this._STATE_EVADE = [2, 1, 0.8, this._STATE_ATTACK_AIM]; + + this.s = vec3(12,28,12); + + this._step_height = 17; + this._speed = 196; + + this._target_yaw = this._yaw; + this._state_update_at = 0; + this._attack_distance = 800; + this._evade_distance = 96; + this._attack_chance = 0.65; + this._keep_off_ledges = 1; + this._turn_bias = 1; + + this._check_against = ENTITY_GROUP_PLAYER; + + game_entities_enemies.push(this); + + // If patrol_dir is non-zero it determines the partrol direction in + // increments of 90°. Otherwise we just idle. + if (patrol_dir) { + this._set_state(this._STATE_PATROL); + this._target_yaw = (Math.PI/2) * patrol_dir; + this._anim_time = Math.random(); + } + else { + this._set_state(this._STATE_IDLE); + } + } + + _set_state(state) { + this._state = state; + this._anim = this._ANIMS[state[0]]; + this._anim_time = 0; + this._state_update_at = game_time + state[2] + state[2]/4 * Math.random(); + } + + _update() { + // Is it time for a state update? + if (this._state_update_at < game_time) { + + // Choose a new turning bias for FOLLOW/EVADE when we hit a wall + this._turn_bias = Math.random() > 0.5 ? 0.5 : -0.5; + + let distance_to_player = vec3_dist(this.p, game_entity_player.p), + angle_to_player = vec3_2d_angle(this.p, game_entity_player.p); + + if (this._state[3]) { + this._set_state(this._state[3]); + } + + // Try to minimize distance to the player + if (this._state == this._STATE_FOLLOW) { + + // Do we have a line of sight? + if (!map_trace(this.p, game_entity_player.p)) { + this._target_yaw = angle_to_player; + } + + // Are we close enough to attack? + if (distance_to_player < this._attack_distance) { + + // Are we too close? Evade! + if ( + distance_to_player < this._evade_distance || + Math.random() > this._attack_chance + ) { + this._set_state(this._STATE_EVADE); + this._target_yaw += Math.PI/2 + Math.random() * Math.PI; + } + + // Just the right distance to attack! + else { + this._set_state(this._STATE_ATTACK_AIM); + } + } + } + + // We just attacked; just keep looking at the player 0_o + if (this._state == this._STATE_ATTACK_RECOVER) { + this._target_yaw = angle_to_player; + } + + // Wake up from patroling or idlyng if we have a line of sight + // and are near enough + if (this._state == this._STATE_PATROL || this._state == this._STATE_IDLE) { + if ( + distance_to_player < 700 && + !map_trace(this.p, game_entity_player.p) + ) { + this._set_state(this._STATE_ATTACK_AIM); + } + } + + // Aiming - reorient the entity towards the player, check + // if we have a line of sight + if (this._state == this._STATE_ATTACK_AIM) { + this._target_yaw = angle_to_player; + + // No line of sight? Randomly shuffle around :/ + if (map_trace(this.p, game_entity_player.p)) { + this._set_state(this._STATE_EVADE); + } + } + + // Execute the attack! + if (this._state == this._STATE_ATTACK_EXEC) { + this._attack(); + } + } + + // Rotate to desired angle + this._yaw += anglemod(this._target_yaw - this._yaw) * 0.1; + + + // Move along the yaw direction with the current speed (which might be 0) + if (this._on_ground) { + this.v = vec3_rotate_y(vec3(0, this.v.y, this._state[1] * this._speed), this._target_yaw); + } + + this._update_physics(); + this._draw_model(); + } + + _spawn_projectile(type, speed, yaw_offset, pitch_offset) { + let projectile = game_spawn(type, this.p); + projectile._check_against = ENTITY_GROUP_PLAYER; + projectile._yaw = this._yaw + Math.PI/2; + + projectile.v = vec3_rotate_yaw_pitch( + vec3(0, 0, speed), + this._yaw + yaw_offset, + Math.atan2( + this.p.y-game_entity_player.p.y, + vec3_dist(this.p, game_entity_player.p) + ) + pitch_offset + ); + return projectile; + } + + _receive_damage(from, amount) { + super._receive_damage(from, amount); + this._play_sound(sfx_enemy_hit); + + // Wake up if we're idle or patrolling + if (this._state == this._STATE_IDLE || this._state == this._STATE_PATROL) { + this._target_yaw = vec3_2d_angle(this.p, game_entity_player.p); + this._set_state(this._STATE_FOLLOW); + } + + this._spawn_particles(2, 200, model_blood, 18, 0.5); + } + + _kill() { + super._kill(); + for (let m of model_gib_pieces) { + this._spawn_particles(2, 300, m, 18, 1); + } + this._play_sound(sfx_enemy_gib); + game_entities_enemies = game_entities_enemies.filter(e => e != this); + } + + _did_collide(axis) { + if (axis == 1) { + return; + } + + // If we hit a wall/ledge while patrolling just turn around 180 + if (this._state == this._STATE_PATROL) { + this._target_yaw += Math.PI; + } + else { + this._target_yaw += this._turn_bias; + } + } +} diff --git a/source/entity_enemy_enforcer.js b/source/entity_enemy_enforcer.js new file mode 100644 index 0000000..cb8ae00 --- /dev/null +++ b/source/entity_enemy_enforcer.js @@ -0,0 +1,15 @@ + +class entity_enemy_enforcer_t extends entity_enemy_t { + _init(patrol_dir) { + super._init(patrol_dir); + this._model = model_enforcer; + this._texture = 19; + this._health = 80; + this.s = vec3(14,44,14); + } + + _attack() { + this._play_sound(sfx_plasma_shoot); + this._spawn_projectile(entity_projectile_plasma_t, 800, 0, 0); + } +} diff --git a/source/entity_enemy_grunt.js b/source/entity_enemy_grunt.js new file mode 100644 index 0000000..a265ca3 --- /dev/null +++ b/source/entity_enemy_grunt.js @@ -0,0 +1,21 @@ + +class entity_enemy_grunt_t extends entity_enemy_t { + _init(patrol_dir) { + super._init(patrol_dir); + this._model = model_grunt; + this._texture = 17; + this._health = 40; + } + + _attack() { + this._play_sound(sfx_shotgun_shoot); + game_spawn(entity_light_t, vec3_add(this.p, vec3(0,30,0)), 10, 0xff)._die_at = game_time + 0.1; + + for (let i = 0; i < 3; i++) { + this._spawn_projectile( + entity_projectile_shell_t, 10000, + Math.random()*0.08-0.04, Math.random()*0.08-0.04 + ); + } + } +} diff --git a/source/entity_enemy_hound.js b/source/entity_enemy_hound.js new file mode 100644 index 0000000..ef5bd6a --- /dev/null +++ b/source/entity_enemy_hound.js @@ -0,0 +1,53 @@ + +class entity_enemy_hound_t extends entity_enemy_t { + _init(patrol_dir) { + super._init(patrol_dir); + this._model = model_hound; + this._texture = 22; + this._health = 25; + this._check_against = ENTITY_GROUP_PLAYER; + + this.s = vec3(12,16,12); + + this._attack_distance = 200; + this._evade_distance = 64; + this._attack_chance = 0.7; + this._speed = 256; + + this._ANIMS = [ + [1, [0]], // 0: Idle + [0.15, [0,1]], // 2: Run + [0.15, [0,1]], // 2: Run + [1, [0]], // 3: Attack prepare + [0.1, [0,1,1,1,0,0,0]], // 4: Attack + ]; + + this._STATE_PATROL = [1, 0.2, 0.5]; + this._STATE_ATTACK_RECOVER = [0, 0, 0.5, this._STATE_FOLLOW]; + this._STATE_ATTACK_EXEC = [4, 0, 1, this._STATE_ATTACK_RECOVER]; + this._STATE_ATTACK_PREPARE = [3, 0, 0.0, this._STATE_ATTACK_EXEC]; + this._STATE_ATTACK_AIM = [0, 0, 0.0, this._STATE_ATTACK_PREPARE]; + this._STATE_EVADE = [2, 1, 0.3, this._STATE_ATTACK_AIM]; + + this._set_state(this._STATE_IDLE); + } + + _did_collide_with_entity(other) { + if (!this._did_hit && this._state == this._STATE_ATTACK_EXEC) { + this._did_hit = 1; + other._receive_damage(this, 14); + } + } + + _attack() { + this._play_sound(sfx_enemy_hound_attack); + this.v = vec3_rotate_y(vec3(0, 250, 600), this._target_yaw); + this._on_ground = 0; + this._did_hit = 0; + + // Ignore ledges while attacking + this._keep_off_ledges = 0; + clearTimeout(this._reset_ledges); + this._reset_ledges = setTimeout(()=>this._keep_off_ledges = 1, 1000); + } +} diff --git a/source/entity_enemy_ogre.js b/source/entity_enemy_ogre.js new file mode 100644 index 0000000..f962a49 --- /dev/null +++ b/source/entity_enemy_ogre.js @@ -0,0 +1,25 @@ + +class entity_enemy_ogre_t extends entity_enemy_t { + _init(patrol_dir) { + super._init(patrol_dir); + this._model = model_ogre; + this._texture = 20; + this._speed = 96; + this._health = 200; + this.s = vec3(14,36,14); + + this._attack_distance = 350; + this._ANIMS =[ + [1, [0]], // 0: Idle + [0.80, [1,2,3,4]], // 1: Walk + [0.40, [1,2,3,4]], // 2: Run + [0.35, [0,5,5,5]], // 3: Attack prepare + [0.35, [5,0,0,0]], // 4: Attack + ]; + } + + _attack() { + this._play_sound(sfx_grenade_shoot); + this._spawn_projectile(entity_projectile_grenade_t, 600, 0, -0.4)._damage = 40; + } +} diff --git a/source/entity_enemy_zombie.js b/source/entity_enemy_zombie.js new file mode 100644 index 0000000..eec07f8 --- /dev/null +++ b/source/entity_enemy_zombie.js @@ -0,0 +1,34 @@ + +class entity_enemy_zombie_t extends entity_enemy_t { + _init(patrol_dir) { + super._init(patrol_dir); + this._model = model_zombie; + this._texture = 18; + this._speed = 0; + this._attack_distance = 350; + this._health = 60; + + this._ANIMS[3] = [0.25, [0,0,5,5]]; // 3: Attack prepare + + this._STATE_FOLLOW = [0, 0, 0.1]; + this._STATE_ATTACK_RECOVER = [0, 0, 1.1, this._STATE_IDLE]; + this._STATE_ATTACK_EXEC = [4, 0, 0.4, this._STATE_ATTACK_RECOVER]; + this._STATE_ATTACK_PREPARE = [3, 0, 0.4, this._STATE_ATTACK_EXEC]; + this._STATE_ATTACK_AIM = [0, 0, 0.1, this._STATE_ATTACK_PREPARE]; + this._STATE_EVADE = [0, 0, 0.1, this._STATE_ATTACK_AIM]; + + this._set_state(this._STATE_IDLE); + } + + _receive_damage(from, amount) { + // Ignore damage that's not large enough to gib us + if (amount > 60) { + super._receive_damage(from, amount) + } + } + + _attack() { + this._play_sound(sfx_enemy_hit); + this._spawn_projectile(entity_projectile_gib_t, 600, 0, -0.5); + } +} diff --git a/source/entity_light.js b/source/entity_light.js new file mode 100644 index 0000000..94de48a --- /dev/null +++ b/source/entity_light.js @@ -0,0 +1,35 @@ + +class entity_light_t extends entity_t { + _init(light, color) { + this._light = light; + this._spawn_time = game_time; + if (light == 1) { + this._flicker = true; + } + if (!color) { + console.log('no color!') + } + this._color = [ + ((color & 0x7) << 5), + ((color & 0x1c) << 3), + (color & 0xc0) + ]; + } + + _update() { + if (this._flicker && Math.random() > 0.9) { + this._light = Math.random() > 0.5 ? 10 : 0; + } + let intensity = this._light; + + // If this light is a temporary one, fade it out over its lifetime + if (this._die_at) { + if (this._die_at < game_time) { + this._kill(); + } + intensity = scale(game_time, this._spawn_time, this._die_at, 1, 0) * this._light; + } + + r_push_light(this.p, intensity, this._color[0], this._color[1], this._color[2]); + } +} diff --git a/source/entity_particle.js b/source/entity_particle.js new file mode 100755 index 0000000..e9faade --- /dev/null +++ b/source/entity_particle.js @@ -0,0 +1,14 @@ + +class entity_particle_t extends entity_t { + _init() { + this._bounciness = 0.5; + this.f = 0.1; + } + + _update() { + this._yaw += this.v.y * 0.001; + this._pitch += this.v.x * 0.001; + this._update_physics(); + this._draw_model(); + } +} diff --git a/source/entity_pickup.js b/source/entity_pickup.js new file mode 100644 index 0000000..54c0e73 --- /dev/null +++ b/source/entity_pickup.js @@ -0,0 +1,18 @@ + +class entity_pickup_t extends entity_t { + _init() { + this._model = model_pickup_box; + this.s = vec3(12,12,12); + this._yaw += Math.PI/2; + } + + _update() { + if (!this._on_ground) { + this._update_physics(); + } + this._draw_model(); + if (vec3_dist(this.p, game_entity_player.p) < 40) { + this._pickup(); + } + } +} diff --git a/source/entity_pickup_grenadelauncher.js b/source/entity_pickup_grenadelauncher.js new file mode 100644 index 0000000..70f25cf --- /dev/null +++ b/source/entity_pickup_grenadelauncher.js @@ -0,0 +1,19 @@ + +class entity_pickup_grenadelauncher_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 21; + this._model = model_pickup_grenadelauncher; + } + + _update() { + this._yaw += 0.02; + super._update(); + } + + _pickup() { + audio_play(sfx_pickup); + game_entity_player._weapon_index = game_entity_player._weapons.push(new weapon_grenadelauncher_t) - 1; + this._kill(); + } +} diff --git a/source/entity_pickup_grenades.js b/source/entity_pickup_grenades.js new file mode 100644 index 0000000..7e591e1 --- /dev/null +++ b/source/entity_pickup_grenades.js @@ -0,0 +1,18 @@ + +class entity_pickup_grenades_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 25; + this._model = model_pickup_grenades; + } + + _pickup() { + for (let w of game_entity_player._weapons) { + if (w instanceof(weapon_grenadelauncher_t)) { + w._ammo += 10; + audio_play(sfx_pickup); + this._kill(); + } + } + } +} diff --git a/source/entity_pickup_health.js b/source/entity_pickup_health.js new file mode 100644 index 0000000..5f23824 --- /dev/null +++ b/source/entity_pickup_health.js @@ -0,0 +1,13 @@ + +class entity_pickup_health_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 23; + } + + _pickup() { + audio_play(sfx_pickup); + game_entity_player._health += 25; + this._kill(); + } +} diff --git a/source/entity_pickup_key.js b/source/entity_pickup_key.js new file mode 100644 index 0000000..6b0f3d2 --- /dev/null +++ b/source/entity_pickup_key.js @@ -0,0 +1,25 @@ + +class entity_pickup_key_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 21; + this._model = model_pickup_key; + } + + _update() { + this._yaw += 0.02; + super._update(); + } + + _pickup() { + audio_play(sfx_pickup); + game_show_message('YOU GOT THE KEY!'); + for (let e of game_entities) { + if (e._needs_key) { + e._needs_key = 0; + break; + } + } + this._kill(); + } +} diff --git a/source/entity_pickup_nailgun.js b/source/entity_pickup_nailgun.js new file mode 100644 index 0000000..3af0a34 --- /dev/null +++ b/source/entity_pickup_nailgun.js @@ -0,0 +1,19 @@ + +class entity_pickup_nailgun_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 12; + this._model = model_pickup_nailgun; + } + + _update() { + this._yaw += 0.02; + super._update(); + } + + _pickup() { + audio_play(sfx_pickup); + game_entity_player._weapon_index = game_entity_player._weapons.push(new weapon_nailgun_t) - 1; + this._kill(); + } +} diff --git a/source/entity_pickup_nails.js b/source/entity_pickup_nails.js new file mode 100644 index 0000000..55e2f1c --- /dev/null +++ b/source/entity_pickup_nails.js @@ -0,0 +1,17 @@ + +class entity_pickup_nails_t extends entity_pickup_t { + _init() { + super._init(); + this._texture = 24; + } + + _pickup() { + for (let w of game_entity_player._weapons) { + if (w instanceof(weapon_nailgun_t)) { + w._ammo += 50; + audio_play(sfx_pickup); + this._kill(); + } + } + } +} diff --git a/source/entity_player.js b/source/entity_player.js new file mode 100755 index 0000000..875992d --- /dev/null +++ b/source/entity_player.js @@ -0,0 +1,125 @@ + +class entity_player_t extends entity_t { + _init() { + this.s = vec3(12,24,12); + this.f = 10; + this._speed = 3000; + this._step_height = 17; + this._can_jump = 0; + this._can_shoot_at = 0; + this._health = 100; + + this._check_against = ENTITY_GROUP_ENEMY; + + this._weapons = [new weapon_shotgun_t]; + this._weapon_index = 0; + + // Map 1 needs some rotation of the starting look-at direction + this._yaw += game_map_index * Math.PI; + this._bob = 0; + + game_entity_player = this; + game_entities_friendly.push(this); + } + + _update() { + // Mouse look + this._pitch = clamp(this._pitch + mouse_y * m.value * 0.00015, -1.5, 1.5); + this._yaw = (this._yaw + mouse_x * m.value * 0.00015) % (Math.PI*2); + + // Acceleration in movement direction + this.a = vec3_mulf( + vec3_rotate_y( + vec3( + keys[key_right] - keys[key_left], + 0, + keys[key_up] - keys[key_down] + ), + this._yaw + ), + this._speed * (this._on_ground ? 1 : 0.3) + ); + + if (keys[key_jump] && this._on_ground && this._can_jump) { + this.v.y = 400; + this._on_ground = 0; + this._can_jump = 0; + } + if (!keys[key_jump]) { + this._can_jump = 1; + } + + this._weapon_index = ( + this._weapon_index + keys[key_next] + this._weapons.length - keys[key_prev] + ) % this._weapons.length; + + let shoot_wait = this._can_shoot_at - game_time, + weapon = this._weapons[this._weapon_index]; + + // Shoot Weapon + if (keys[key_action] && shoot_wait < 0) { + this._can_shoot_at = game_time + weapon._reload; + + if (weapon._needs_ammo && weapon._ammo == 0) { + audio_play(sfx_no_ammo); + } + else { + weapon._shoot(this.p, this._yaw, this._pitch); + game_spawn(entity_light_t, this.p, 10, 0xff)._die_at = game_time + 0.1; + } + } + + this._bob += vec3_length(this.a) * 0.0001; + this.f = this._on_ground ? 10 : 2.5; + this._update_physics(); + + r_camera.x = this.p.x; + r_camera.z = this.p.z; + + // Smooth step up on stairs + r_camera.y = this.p.y + 8 - clamp(game_time - this._stepped_up_at, 0, 0.1) * -160; + + r_camera_yaw = this._yaw; + r_camera_pitch = this._pitch; + + + // Draw weapon at camera position at an offset and add the current + // recoil (calculated from shoot_wait and weapon._reload) accounting + // for the current view yaw/pitch + + r_draw( + vec3_add( + r_camera, + vec3_rotate_yaw_pitch( + vec3( + 0, + -10 + Math.sin(this._bob)*0.3, + 12 + clamp(scale(shoot_wait, 0, weapon._reload, 5, 0), 0, 5) + ), + this._yaw, this._pitch + ) + ), + this._yaw + Math.PI/2, this._pitch, + weapon._texture, weapon._model.f[0], weapon._model.f[0], 0, + weapon._model.nv + ); + + h.textContent = this._health|0; + a.textContent = weapon._needs_ammo ? weapon._ammo : '∞'; + + // Debug: a light around the player + // r_push_light(vec3_add(this.p, vec3(0,64,0)), 10, 255, 192, 32); + } + + _receive_damage(from, amount) { + audio_play(sfx_hurt); + super._receive_damage(from, amount); + } + + _kill() { + super._kill(); + h.textContent = this._health|0; + title_show_message('YOU DIED'); + setTimeout(() => game_init(game_map_index), 2000); + } +} diff --git a/source/entity_projectile_gib.js b/source/entity_projectile_gib.js new file mode 100644 index 0000000..4d7d709 --- /dev/null +++ b/source/entity_projectile_gib.js @@ -0,0 +1,29 @@ + +class entity_projectile_gib_t extends entity_t { + _init() { + this._texture = 18; + this._bounciness = 0; + this._die_at = game_time + 2; + this._model = model_gib; + + this._yaw = Math.random(); + this._pitch = Math.random(); + } + + _update() { + super._update_physics(); + this._draw_model(); + this.f = this._on_ground ? 15 : 0; + } + + _did_collide(axis) { + if (axis == 1 && this.v.y < -128) { + this._play_sound(sfx_enemy_hit); + } + } + + _did_collide_with_entity(other) { + other._receive_damage(this, 10); + this._kill(); + } +} diff --git a/source/entity_projectile_grenade.js b/source/entity_projectile_grenade.js new file mode 100644 index 0000000..bff4882 --- /dev/null +++ b/source/entity_projectile_grenade.js @@ -0,0 +1,43 @@ + +class entity_projectile_grenade_t extends entity_t { + _init() { + this._texture = 8; + this._model = model_grenade; + this._die_at = game_time + 2; + this._bounciness = 0.5; + this._damage = 120; + } + + _update() { + super._update_physics(); + this._draw_model(); + r_push_light(vec3_add(this.p, vec3(0,16,0)), (Math.sin(game_time*10)+2)*0.5, 255, 32, 0); + this.f = this._on_ground ? 5 : 0.5; + } + + _did_collide(axis) { + if (axis != 1 || this.v.y < -128) { + this._yaw += Math.random(); + this._play_sound(sfx_grenade_bounce); + } + } + + _did_collide_with_entity(other) { + this._kill(); + } + + _kill() { + // Deal some damage to nearby entities + for (let entity of this._check_entities) { + let dist = vec3_dist(this.p, entity.p); + if (dist < 196) { + entity._receive_damage(this, scale(dist, 0, 196, this._damage, 0)); + } + } + + super._kill(); + this._play_sound(sfx_grenade_explode); + this._spawn_particles(20, 800, model_explosion, 8, 1); + game_spawn(entity_light_t, vec3_add(this.p, vec3(0,16,0)), 250, 0x08f)._die_at = game_time + 0.2; + } +} diff --git a/source/entity_projectile_nail.js b/source/entity_projectile_nail.js new file mode 100755 index 0000000..9153180 --- /dev/null +++ b/source/entity_projectile_nail.js @@ -0,0 +1,26 @@ + +class entity_projectile_nail_t extends entity_t { + _init() { + this._texture = 2; + this._model = model_nail; + this._gravity = 0; + this._die_at = game_time + 3; + } + + _update() { + this._update_physics(); + this._draw_model(); + } + + _did_collide(axis) { + this._kill(); + this._play_sound(sfx_nailgun_hit); + this._spawn_particles(2, 80, model_explosion, 8, 0.4); + game_spawn(entity_light_t, this.p, 1, 0xff)._die_at = game_time + 0.1; + } + + _did_collide_with_entity(other) { + this._kill(); + other._receive_damage(this, 9); + } +} diff --git a/source/entity_projectile_plasma.js b/source/entity_projectile_plasma.js new file mode 100644 index 0000000..fc5c769 --- /dev/null +++ b/source/entity_projectile_plasma.js @@ -0,0 +1,27 @@ + +class entity_projectile_plasma_t extends entity_t { + _init() { + this._texture = 21; + this._model = model_nail; + this._gravity = 0; + this._die_at = game_time + 3; + } + + _update() { + this._update_physics(); + this._draw_model(); + r_push_light(this.p, 5, 255, 128, 0); + } + + _did_collide(axis) { + this._kill(); + this._play_sound(sfx_nailgun_hit); + this._spawn_particles(2, 80, model_explosion, 8, 0.4); + game_spawn(entity_light_t, vec3_add(this.p, vec3(0,10,0)), 5, 0xf5)._die_at = game_time + 0.1; + } + + _did_collide_with_entity(other) { + this._kill(); + other._receive_damage(this, 15); + } +} diff --git a/source/entity_projectile_shell.js b/source/entity_projectile_shell.js new file mode 100644 index 0000000..f3cbee7 --- /dev/null +++ b/source/entity_projectile_shell.js @@ -0,0 +1,22 @@ + +class entity_projectile_shell_t extends entity_t { + _init() { + this._gravity = 0; + this._die_at = game_time + 0.1; + } + + _update() { + this._update_physics(); + } + + _did_collide(axis) { + this._kill(); + this._spawn_particles(2, 80, model_explosion, 4, 0.4); + game_spawn(entity_light_t, this.p, 0.5, 0xff)._die_at = game_time + 0.1; + } + + _did_collide_with_entity(other) { + this._kill(); + other._receive_damage(this, 4); + } +} diff --git a/source/entity_torch.js b/source/entity_torch.js new file mode 100644 index 0000000..bf16539 --- /dev/null +++ b/source/entity_torch.js @@ -0,0 +1,35 @@ + +class entity_torch_t extends entity_t { + _init() { + this._texture = 30; + this._model = model_torch; + + this._anim = [0.05, [0,1,2,1,2,0,0,1,2]]; + + this.p.x -= 16; + this.p.z -= 16; + this._light_pos = this.p; + + // Find which wall we're on; move to the torch model towards the wall + // and the light position outwards + for (let trace_dir of [vec3(-32,0,0), vec3(32,0,0), vec3(0,0,-32), vec3(0,0,32)]) { + let trace_end = vec3_add(this.p, trace_dir); + if (map_trace(this.p, vec3_add(this.p, trace_dir))) { + this.p = vec3_add(this.p, vec3_mulf(trace_dir, 0.4)); + this._light_pos = vec3_sub(this.p, vec3_mulf(trace_dir, 2)); + break; + } + } + + this._light = 0; + } + + _update() { + super._update(); + + if (Math.random() > 0.8) { + this._light = Math.random(); + } + r_push_light(this._light_pos, Math.sin(game_time)+this._light+6, 255,192,16); + } +} diff --git a/source/entity_trigger_level.js b/source/entity_trigger_level.js new file mode 100644 index 0000000..7d8bbe9 --- /dev/null +++ b/source/entity_trigger_level.js @@ -0,0 +1,9 @@ + +class entity_trigger_level_t extends entity_t { + _update() { + if (!this._dead && vec3_dist(this.p, game_entity_player.p) < 64) { + game_next_level(); + this._dead = 1; + } + } +} diff --git a/source/game.js b/source/game.js new file mode 100755 index 0000000..efc524e --- /dev/null +++ b/source/game.js @@ -0,0 +1,92 @@ + +let +game_tick = 0, +game_time = 0.016, +game_real_time_last, +game_message_timeout = 0, + +game_entities, +game_entities_enemies, +game_entities_friendly, +game_entity_player, +game_map_index, +game_jump_to_next_level, + +game_init = (map_index) => { + ts.style.display = 'none', + + game_entities = []; + game_entities_enemies = []; + game_entities_friendly = []; + + game_map_index = map_index; + map_init(map_data[game_map_index]); +}, + +game_next_level = () => { + game_jump_to_next_level = 1; +}, + +game_spawn = (type, pos, p1, p2) => { + let entity = new (type)(pos, p1, p2) + game_entities.push(entity); + return entity; +}, + +game_show_message = (text) => { + msg.textContent = text; + msg.style.display = 'block'; + clearTimeout(game_message_timeout); + game_message_timeout = setTimeout(()=>msg.style.display = 'none', 2000); +}, + +title_show_message = (msg, sub = '') => { + ts.innerHTML = '

'+msg+'

' + sub; + ts.style.display = 'block'; +}, + +game_run = (time_now) => { + requestAnimationFrame(game_run); + + time_now *= 0.001; + game_tick = Math.min((time_now - (game_real_time_last||time_now)),0.05); + game_real_time_last = time_now; + game_time += game_tick; + + r_prepare_frame(0.1, 0.2, 0.5); + + // Update and render entities + let alive_entities = []; + for (let entity of game_entities) { + if (!entity._dead) { + entity._update(); + alive_entities.push(entity); + } + } + game_entities = alive_entities; + + map_draw(); + r_end_frame(); + + // Reset mouse movement and buttons that should be pressed, not held. + mouse_x = mouse_y = 0; + keys[key_next] = keys[key_prev] = 0; + + if (game_jump_to_next_level) { + game_jump_to_next_level = 0; + game_map_index++; + if (game_map_index == 2) { + title_show_message('THE END', 'THANKS FOR PLAYING ❤'); + h.textContent = a.textContent = ''; + game_entity_player._dead = 1; + + // Set camera position for end screen + r_camera = vec3(1856,784,2272); + r_camera_yaw = 0; + r_camera_pitch = 0.5; + } + else { + game_init(game_map_index); + } + } +}; diff --git a/source/html_template.html b/source/html_template.html new file mode 100755 index 0000000..9c5faa8 --- /dev/null +++ b/source/html_template.html @@ -0,0 +1,3 @@ +Q1K3 \ No newline at end of file diff --git a/source/input.js b/source/input.js new file mode 100755 index 0000000..0265870 --- /dev/null +++ b/source/input.js @@ -0,0 +1,83 @@ + +// We use the ev.code for keyboard input. This contains a string like "KeyW" +// or "ArrowLeft", which is awkward to use, but it's keyboard layout neutral, +// so that WASD should work with any layout. + +// We detect the 6th or 3rd char for each of those strings and map them to an +// in-game button. + +// Movement, Action, Prev/Next, Jump +let keymap = { + W: 1, p: 1, // Key[W] or ArrowU[p] + A: 2, e: 2, // Key[A] or ArrowL[e]ft + S: 3, o: 3, // Key[S] or ArrowR[i]ght + D: 4, i: 4, // Key[D] or ArrowD[o]wn + Q: 5, // Key[Q] + E: 6, // Key[E] + c: 9, // KeySpa[c]e + }, + keys = [ + // Unused zeroth key, so we can test the keymap result for truthiness + 0, + + // WASD/Arrow Keys and prev next have to be set to zero, because we use + // the value (0 or 1) to calculate the move direction or weapon switch + 0,0,0,0, + 0,0 + + // Following Keys (action, jump) to not have to be set here + // as they are just tested for truthiness + ], + key_up = 1, + key_down = 3, + key_left = 2, + key_right = 4, + key_prev = 5, + key_next = 6, + key_action = 7, // ev.button = 0 + key_jump = 9, // ev.button = 2 + mouse_x = 0, + mouse_y = 0, + last_wheel_event = 0; + +document.onkeydown = (ev) => { + let k = keymap[ev.code[6] || ev.code[3]]; + if (k) { + ev.preventDefault(); + keys[k] = 1; + } +}; + +document.onkeyup = (ev) => { + let k = keymap[ev.code[6] || ev.code[3]]; + if (k) { + ev.preventDefault(); + keys[k] = 0; + } +}; + +document.onwheel = (ev) => { + // Allow for one wheel event every 0.1s. This sucks, but prevents free + // spinning or touch scrolling mouses (eg. Apple Magic Mouse) from doing + // wild things. + if (game_time - last_wheel_event > 0.1) { + keys[key_prev + (ev.deltaY > 1 ? 1 : 0)] = 1; + last_wheel_event = game_time; + } +}; + +c.onmousemove = (ev) => { + mouse_x += ev.movementX; + mouse_y += ev.movementY; +}; + +c.onmousedown = (ev) => { + ev.preventDefault(); + keys[key_action + ev.button] = 1; +}; + +c.onmouseup = (ev) => { + ev.preventDefault(); + keys[key_action + ev.button] = 0; +}; + diff --git a/source/main.js b/source/main.js new file mode 100755 index 0000000..cbfc87c --- /dev/null +++ b/source/main.js @@ -0,0 +1,189 @@ + +let +map_data, +model_data, + +// Particles +model_explosion, +model_blood, +model_gib, +model_gib_pieces = [], + +// Enemies +model_grunt, +model_enforcer, +model_ogre, +model_zombie, +model_hound, + +// Map Objects +model_barrel, +model_torch, + +// Weapon view models +model_shotgun, +model_nailgun, +model_grenadelauncher, + +// Pickups +model_pickup_nailgun, +model_pickup_grenadelauncher, +model_pickup_box, +model_pickup_grenades, +model_pickup_key, +model_door, + +// Projectiles +model_grenade, +model_plasma, // aka. nail + +// Sounds +sfx_enemy_hit, +sfx_enemy_gib, +sfx_enemy_hound_attack, + +sfx_no_ammo, +sfx_hurt, + +sfx_plasma_shoot, + +sfx_shotgun_shoot, +sfx_shotgun_reload, + +sfx_nailgun_shoot, +sfx_nailgun_hit, + +sfx_grenade_shoot, +sfx_grenade_bounce, +sfx_grenade_explode, + +game_load = async () => { + r_init(); + + // Create textures + ttt(texture_data).map(r_create_texture); + + // Load map & model containers + map_data = await map_load_container(/*DEBUG[*/ 'build/' + /*]*/ 'l'); + model_data = await model_load_container(/*DEBUG[*/ 'build/' + /*]*/ 'm'); + + // Create models. Many models share the same geometry just with different + // sizes and textures. + // 0: generic blob + // 1: humanoid + // 2: barrel + // 3: q logo + // 4: hound + // 5: box + // 6: nailgun + // 7: torch + + model_q = model_init(model_data[3]); + + model_explosion = model_init(model_data[0], 0.1,0.1,0.1); + model_blood = model_init(model_data[0], 0.1,0.2,0.1); + model_gib = model_init(model_data[0], 0.3,0.6,0.3); + + model_grunt = model_init(model_data[1], 2.5,2.2,2.5); + model_enforcer = model_init(model_data[1], 3,2.7,3); + model_zombie = model_init(model_data[1], 1.5,2,1.5); + model_ogre = model_init(model_data[1], 4,3,4); + model_hound = model_init(model_data[4],2.5,2.5,2.5); + + model_barrel = model_init(model_data[2], 2, 2, 2); + model_torch = model_init(model_data[7], 0.6,1,0.6); + + model_pickup_nailgun = model_init(model_data[6], 1, 1, 1); + model_pickup_grenadelauncher = model_init(model_data[2], 1, 0.5, 0.5); + model_pickup_box = model_init(model_data[5], 0.7, 0.7, 0.7); + model_pickup_grenades = model_init(model_data[5], 0.5, 1, 0.5); + model_pickup_key = model_init(model_data[5], 0.1, 0.7, 0.1); + + model_door = model_init(model_data[5], 5, 5, 0.5); + + model_shotgun = model_init(model_data[2], 1,0.2,0.2); + model_grenadelauncher = model_init(model_data[2], 0.7,0.4,0.4); + model_nailgun = model_init(model_data[6], 0.7,0.7,0.7); + + model_grenade = model_init(model_data[2], 0.3,0.3,0.3); + model_nail = model_init(model_data[2], 0.5,0.1,0.1); + + // Take some parts from the grunt model and build individual giblet models + // from it. Arms and legs and stuff... + for (let i = 0; i < 204; i+=34) { + let m = model_init(model_data[1], 2,1,2); + m.f[0] += i; + m.nv = 34; + model_gib_pieces.push(m); + } + + + r_submit_buffer(); + requestAnimationFrame(run_frame); + + f.onclick = () => g.requestFullscreen(); + g.onclick = () => { + g.onclick = () => c.requestPointerLock(); + g.onclick(); + // title_show_message('...'); + + audio_init(); + + setTimeout(()=> { + // Generate sounds + sfx_enemy_hit = audio_create_sound(135, [8,0,0,1,148,1,3,5,0,0,139,1,0,2653,0,2193,255,2,639,119,2,23,0,0,0,0,0,0,0]); + sfx_enemy_gib = audio_create_sound(140, [7,0,0,1,148,1,7,5,0,1,139,1,0,4611,789,15986,195,2,849,119,3,60,0,0,0,1,10,176,1]); + sfx_enemy_hound_attack = audio_create_sound(132, [8,0,0,1,192,1,8,0,0,1,120,1,0,5614,0,20400,192,1,329,252,1,55,0,0,1,1,8,192,3]); + + sfx_no_ammo = audio_create_sound(120, [8,0,0,0,96,1,8,0,0,0,0,0,255,0,0,1075,232,1,2132,255,0,0,0,0,0,0,0,0,0]); + sfx_hurt = audio_create_sound(135, [7,3,140,1,232,3,8,0,9,1,139,3,0,4611,1403,34215,256,4,1316,255,0,0,0,1,0,1,7,255,0]); + sfx_pickup = audio_create_sound(140, [7,0,0,1,187,3,8,0,0,1,204,3,0,4298,927,1403,255,0,0,0,3,35,0,0,0,0,0,0,0]); + + sfx_plasma_shoot = audio_create_sound(135, [8,0,0,1,147,1,6,0,0,1,159,1,0,197,1234,21759,232,2,2902,255,2,53,0,0,0,0,0,0,0]); + + sfx_shotgun_shoot = audio_create_sound(135, [7,3,0,1,255,1,6,0,0,1,255,1,112,548,1979,11601,255,2,2902,176,2,77,0,0,1,0,10,255,1]); + sfx_shotgun_reload = audio_create_sound(125, [9,0,0,1,131,1,0,0,0,0,0,3,255,137,22,1776,255,2,4498,176,2,36,2,84,0,0,3,96,0]); + + sfx_nailgun_shoot = audio_create_sound(130, [7,0,0,1,132,1,8,4,0,1,132,2,162,0,0,8339,232,2,2844,195,2,40,0,0,0,0,0,0,0]); + sfx_nailgun_hit = audio_create_sound(135, [8,0,0,1,148,1,0,0,0,0,0,1,255,0,0,2193,128,2,6982,119,2,23,0,0,0,0,0,0,0]); + + sfx_grenade_shoot = audio_create_sound(127, [8,0,0,1,171,1,9,3,0,1,84,3,96,2653,0,13163,159,2,3206,255,2,64,0,0,0,1,9,226,0]); + sfx_grenade_bounce = audio_create_sound(168, [7,0,124,0,128,0,8,5,127,0,128,0,125,88,0,2193,125,1,1238,240,1,91,3,47,0,0,0,0,0]); + sfx_grenade_explode = audio_create_sound(135, [8,0,0,1,195,1,6,0,0,1,127,1,255,197,1234,21759,232,2,1052,255,4,73,3,25,1,0,10,227,1]); + + + audio_play(audio_create_song(...music_data), 1, 1); + game_init(0); + run_frame = game_run; + },100); // Not sure why such a long delay is needed. Ideally we would + // want to use requestAnimationFrame, but the previous DOM + // update (...) never makes it to the screen then ;/ + }; +}, + +run_frame = (time_now) => { + r_prepare_frame(); + + r_draw( + vec3(0,0,0), 0, 0, 1, + model_q.f[0], model_q.f[0], 0, + model_q.nv + ); + r_push_light( + vec3(Math.sin(time_now*0.00033)*200, 100, -100), + 10, 255,192,32 + ); + r_push_light( + vec3_rotate_y(vec3(0, 0, 100),time_now*0.00063), + 10, 32,64,255 + ); + r_push_light( + vec3_rotate_y(vec3(100, 0, 0),time_now*0.00053), + 10, 196,128,255 + ); + + r_end_frame(); + requestAnimationFrame(run_frame); +}; + +game_load(); \ No newline at end of file diff --git a/source/map.js b/source/map.js new file mode 100755 index 0000000..63bdb43 --- /dev/null +++ b/source/map.js @@ -0,0 +1,170 @@ + +let +map, +map_size = 128, + +map_load_container = async (path) => { + /* Parse map container format + typedef struct { + u8 x, y, z; + u8 sx, sy, sz; + } block_t; + + typedef struct { + u8 sentinel; + u8 tex; + } block_texture_t; + + typedef struct { + char type; + u8 x, y, z; + u8 data1, data2; + } entity_t; + + struct { + u16 blocks_size; + block_t blocks[]; + u16 num_entities; + entity_t entities[num_entities]; + } map_data; + + Block data is interleaved with the block_texture_t struct to denote + the texture index to use for the following blocks. + */ + + let data = new Uint8Array(await (await fetch(path)).arrayBuffer()), + maps = []; + for (let i = 0; i < data.length;) { + let blocks_size = data[i++] | (data[i++] << 8), + cm = new Uint8Array(map_size * map_size * map_size >> 3), // collision map + nm = new Uint8Array(map_size * map_size * map_size >> 3), // nav map + b = data.subarray(i, i += blocks_size), + r = [], + t; + + // Parse block data and construct geometry and the collision map + for (let j = 0; j < b.length;) { + + // First value is either the x coordinate or a texture change + // sentinel value (255) followed by the texture coordinate + if (b[j] == 255) { + j++; + t = b[j++]; + } + let + x = b[j++], y = b[j++], z = b[j++], + sx = b[j++], sy = b[j++], sz = b[j++]; + + // Submit the block to the render buffer; we get the vertex offset + // of this block within the buffer back, so we can draw it later + r.push({ + t, + b: r_push_block( + x << 5, y << 4, z << 5, + sx << 5, sy << 4, sz << 5, + t + ) + }); + + // The collision map is a bitmap; 8 x blocks per byte + for (let cz = z; cz < z + sz; cz++) { + for (let cy = y; cy < y + sy; cy++) { + for (let cx = x; cx < x + sx; cx++) { + cm[ + ( + cz * map_size * map_size + + cy * map_size + + cx + ) >> 3 + ] |= 1 << (cx & 7); + } + } + } + } + + // Slice of entity data; we parse it when we actually spawn + // the entities in map_init() + let num_entities = data[i++] | (data[i++] << 8), + e = data.subarray(i, i += num_entities * 6 /*sizeof(entity_t)*/); + maps.push({cm, e, r}); + } + return maps; +}, + +map_init = (m) => { + map = m; + + // Entity Id to class - must be consistent with map_packer.c line ~900 + let spawn_class = [ + /* 00 */ entity_player_t, + /* 01 */ entity_enemy_grunt_t, + /* 02 */ entity_enemy_enforcer_t, + /* 03 */ entity_enemy_ogre_t, + /* 04 */ entity_enemy_zombie_t, + /* 05 */ entity_enemy_hound_t, + /* 06 */ entity_pickup_nailgun_t, + /* 07 */ entity_pickup_grenadelauncher_t, + /* 08 */ entity_pickup_health_t, + /* 09 */ entity_pickup_nails_t, + /* 10 */ entity_pickup_grenades_t, + /* 11 */ entity_barrel_t, + /* 12 */ entity_light_t, + /* 13 */ entity_trigger_level_t, + /* 14 */ entity_door_t, + /* 15 */ entity_pickup_key_t, + /* 16 */ entity_torch_t, + ]; + + // Parse entity data and spawn all entities for this map + for (let i = 0; i < map.e.length;) { + let type = spawn_class[m.e[i++]]; + game_spawn( + type, + vec3(m.e[i++] * 32, m.e[i++] * 16, m.e[i++] * 32), + m.e[i++], m.e[i++] + ); + } +}, + +map_block_at = (x, y, z) => + map.cm[ + ( + z * map_size * map_size + + y * map_size + + x + ) >> 3 + ] & (1 << (x & 7)), + +map_trace = (a, b) => { + let diff = vec3_sub(b, a), + step_dir = vec3_mulf(vec3_normalize(diff), 16), + steps = vec3_length(diff)/16; + + for (let i = 0; i < steps; i++) { + a = vec3_add(a, step_dir); + if (map_block_at(a.x >> 5, a.y >> 4, a.z >> 5)) { + return a; + } + } + return null; +}, + +map_block_at_box = (box_start, box_end) => { + for (let z = box_start.z >> 5; z <= box_end.z >> 5; z++) { + for (let y = box_start.y >> 4; y <= box_end.y >> 4; y++) { + for (let x = box_start.x >> 5; x <= box_end.x >> 5; x++) { + if (map_block_at(x, y, z)) { + return true; + } + } + } + } + return false; +}, + +map_draw = () => { + let p = vec3(); + for (let r of map.r) { + r_draw(p, 0, 0, r.t, r.b,r.b,0,36); + } +}; diff --git a/source/math_utils.js b/source/math_utils.js new file mode 100755 index 0000000..e8a71da --- /dev/null +++ b/source/math_utils.js @@ -0,0 +1,21 @@ + +let +clamp = (v, min, max) => v < min ? min : (v > max ? max : v), +scale = (v, in_min, in_max, out_min, out_max) => out_min + ((out_max) - out_min) * (((v) - in_min) / ((in_max) - in_min)), +anglemod = (r) => Math.atan2(Math.sin(r), Math.cos(r)), +vec3 = (x = 0, y = 0, z = 0) => ({x, y, z}), +vec3_rotate_yaw_pitch = (p, yaw, pitch) => vec3_rotate_y(vec3_rotate_x(p, pitch), yaw), +vec3_rotate_y = (p, rad) => vec3(p.z * Math.sin(rad) + p.x * Math.cos(rad), p.y, p.z * Math.cos(rad) - p.x * Math.sin(rad)), +vec3_rotate_x = (p, rad) => vec3(p.x, p.y * Math.cos(rad) - p.z * Math.sin(rad), p.y * Math.sin(rad) + p.z * Math.cos(rad)), +vec3_2d_angle = (a, b) => Math.atan2(b.x - a.x, b.z - a.z), +vec3_clone = (a) => vec3(a.x,a.y,a.z), +vec3_length = (a) => Math.hypot(a.x,a.y,a.z), +vec3_dist = (a, b) => vec3_length(vec3_sub(a, b)), +vec3_dot = (a, b) => (a.x * b.x + a.y * b.y + a.z * b.z), +vec3_add = (a, b) => vec3(a.x + b.x, a.y + b.y, a.z + b.z), +vec3_sub = (a, b) => vec3(a.x - b.x, a.y - b.y, a.z - b.z), +vec3_mul = (a, b) => vec3(a.x * b.x, a.y * b.y, a.z * b.z), +vec3_mulf = (a, b) => vec3(a.x * b, a.y * b, a.z * b), +vec3_cross = (a, b) => vec3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x), +vec3_normalize = (v) => vec3_mulf(v, 1/vec3_length(v)), +vec3_face_normal = (v0, v1, v2) => vec3_normalize(vec3_cross(vec3_sub(v0, v1), vec3_sub(v2, v1))); diff --git a/source/model.js b/source/model.js new file mode 100755 index 0000000..9972004 --- /dev/null +++ b/source/model.js @@ -0,0 +1,107 @@ + +let +model_load_container = async (path) => { + /* Parse Retarded Model Format (.rmf): + struct { + u8 num_frames; + u8 num_verts; // per frame + u8 num_indices; + struct { + u8 x, y, z; + } verts[num_frames * num_verts]; + struct { + u8 a_address_inc, b_index, c_index; + } indices[num_indices]; + } rmf_data; + */ + let data = new Uint8Array(await (await fetch(path)).arrayBuffer()), + models = []; + + for (let i = 0; i < data.length;) { + // let model_size = num_frames * num_verts * 3 + num_indices * 3 + let model_size = (data[i++] * data[i++] + data[i++]) * 3; + models.push(data.subarray(i-3, i += model_size)); + } + return models; +}, + +model_init = (data, sx = 1, sy = 1, sz = 1) => { + // Load header, prepare buffers + let j = 0, + num_frames = data[j++], + num_vertices = data[j++], + num_indices = data[j++], + vertices = new Float32Array(num_vertices * num_frames * 3), + indices = new Uint8Array(num_indices * 3), + + index_increment = 0, + offset = 2, + + // Load vertices, center on origin (-15), scale, find the + // min/max x and y to compute our UV coords accordingly. + min_x = 16, + max_x = -16, + min_y = 16, + max_y = -16; + + for (let i = 0; i < num_vertices * num_frames * 3; i += 3) { + vertices[i] = (data[j++] - 15) * sx; + vertices[i+1] = (data[j++] - 15) * sy; + vertices[i+2] = (data[j++] - 15) * sz; + + // Find min/max only for the first frame + if (i < num_vertices * 3) { + min_x = Math.min(min_x, vertices[i]); + max_x = Math.max(max_x, vertices[i]); + min_y = Math.min(min_y, vertices[i+1]); + max_y = Math.max(max_y, vertices[i+1]); + } + } + + // Load indices, 1x 2bit increment, 2x 7bit absolute + for (let i = 0; i < num_indices * 3; i += 3) { + index_increment += data[j++]; + indices[i] = index_increment; + indices[i+1] = data[j++]; + indices[i+2] = data[j++]; + } + + // UV coords in texture space and width/height as fraction of model size + let uf = 1 / (max_x - min_x), + u = -min_x * uf, + vf = -1 / (max_y - min_y), + v = max_y * vf; + + // Compute normals for each frame and face and submit to render buffer. + // Capture the current vertex offset for the first vertex of each frame. + let frames = []; + + for (let frame_index = 0; frame_index < num_frames; frame_index++) { + frames.push(r_num_verts); + + let vertex_offset = frame_index * num_vertices * 3; + for (let i = 0; i < num_indices * 3; i += 3) { + + let mv = [], uv = []; + for (let face_vertex = 0, o = 0; face_vertex < 3; face_vertex++) { + let idx = indices[i + face_vertex] * 3; + mv[face_vertex] = vec3( + vertices[vertex_offset + idx + 0], + vertices[vertex_offset + idx + 1], + vertices[vertex_offset + idx + 2] + ); + uv[face_vertex] = { + u: vertices[idx + 0] * uf + u, + v: vertices[idx + 1] * vf + v + }; + } + + let n = vec3_face_normal(mv[2], mv[1], mv[0]); + r_push_vert(mv[2], n, uv[2].u, uv[2].v); + r_push_vert(mv[1], n, uv[1].u, uv[1].v); + r_push_vert(mv[0], n, uv[0].u, uv[0].v); + } + } + + return {f: frames, nv: num_indices * 3}; +} diff --git a/source/music.js b/source/music.js new file mode 100644 index 0000000..7e93c06 --- /dev/null +++ b/source/music.js @@ -0,0 +1,2 @@ + +let music_data = [6014,21,88,[[[7,0,0,1,255,0,7,0,0,1,255,0,0,100,0,3636,254,2,1199,254,4,71,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1],[[126,126,0,0,126,0,0,0,0,0,0,0,0,0,0,0,126,126,0,0,126,0,0,0,0,0,0,0,0,0,0,0]]],[[6,0,0,0,255,2,6,0,18,0,255,2,0,100000,56363,100000,199,2,200,254,8,24,0,0,0,0,0,0,0],[0,0,2,2,3,4,2,2,3,5,2,2,3,4,2,2,3,5],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]],[[7,0,0,0,87,2,8,0,0,0,16,3,8,0,22,2193,255,3,1162,51,10,182,2,190,0,1,10,96,0],[0,0,0,0,0,0,1,1,1,1,1,1,1,1],[[149,149,0,0,149,0,149,0,149,149,0,0,149,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]],[[8,0,0,0,65,2,6,0,0,0,243,3,0,200,7505,20000,204,4,6180,81,4,198,0,0,0,0,6,131,0],[0,0,0,0,0,0,0,0,0,0,1,1,2,3,1,1,2,3],[[132,0,0,0,0,0,0,0,133,0,0,0,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[132,0,0,0,0,0,0,0,133,0,0,0,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[132,0,0,0,0,0,0,0,133,0,0,0,125,0,0,0,0,0,0,0,125,0,0,0,0,0,0,0,0,0,0,0]]]]]; \ No newline at end of file diff --git a/source/renderer.js b/source/renderer.js new file mode 100755 index 0000000..e7c75bf --- /dev/null +++ b/source/renderer.js @@ -0,0 +1,354 @@ + +let +options = {antialias: false}, +gl = (c.getContext('webgl', options) || c.getContext('experimental-webgl', options)), + +R_MAX_VERTS = 1024 * 64, // allow 512k verts max +R_MAX_LIGHT_V3 = 64, + +// Vertex shader source. This translates the model position & rotation and also +// mixes positions of two buffers for animations. +R_SOURCE_VS = + 'precision highp float;' + + + // Vertex positions, normals and uv coords for the fragment shader + 'varying vec3 vp,vn;' + + 'varying vec2 vt;' + + + // Input vertex positions & normals and blend vertex positions & normals + 'attribute vec3 p,n,p2,n2;' + + + // Input UV coords + 'attribute vec2 t;' + + + // Camera position (x, y, z) and aspect ratio (w) + 'uniform vec4 c;' + + + // Model position (x, y, z) + 'uniform vec3 mp;' + + + // Model rotation (yaw, pitch) + 'uniform vec2 mr;' + + + // Mouse rotation yaw (x), pitch (y) + 'uniform vec2 m;' + + + // Blend factor between the two vertex positions + 'uniform float f;' + + + // Generate a rotation Matrix around the x,y,z axis; + // Used for model rotation and camera yaw + 'mat4 rx(float r){' + + 'return mat4(' + + '1,0,0,0,' + + '0,cos(r),sin(r),0,' + + '0,-sin(r),cos(r),0,' + + '0,0,0,1' + + ');' + + '}' + + + 'mat4 ry(float r){' + + 'return mat4(' + + 'cos(r),0,-sin(r),0,' + + '0,1,0,0,' + + 'sin(r),0,cos(r),0,' + + '0,0,0,1' + + ');' + + '}' + + + 'mat4 rz(float r){' + + 'return mat4(' + + 'cos(r),sin(r),0,0,' + + '-sin(r),cos(r),0,0,' + + '0,0,1,0,' + + '0,0,0,1' + + ');' + + '}' + + + 'void main(void){' + + // Rotation Matrixes for model rotation + 'mat4 '+ + 'mry=ry(mr.x),' + + 'mrz=rz(mr.y);' + + + // Mix vertex positions, rotate and add the model position + 'vp=(mry*mrz*vec4(mix(p,p2,f),1.)).xyz+mp;' + + + // Mix normals + 'vn=(mry*mrz*vec4(mix(n,n2,f),1.)).xyz;' + + + // UV coords are handed over to the fragment shader as is + 'vt=t;' + + + // Final vertex position is transformed by the projection matrix, + // rotated around mouse yaw/pitch and offset by the camera position + // We use a FOV of 90, so the matrix[0] and [5] are conveniently 1. + // (1 / Math.tan((90/180) * Math.PI / 2) === 1) + 'gl_Position=' + + 'mat4(' + + '1,0,0,0,' + + '0,c.w,0,0,' + + '0,0,1,1,' + + '0,0,-2,0' + + ')*' + // projection + 'rx(-m.y)*ry(-m.x)*' + + 'vec4(vp-c.xyz,1.);' + + '}', + +// Fragment shader source. Calculates the lighting, does some cheesy gamma +// correction and reduces the colors of the final output. +R_SOURCE_FS = + 'precision highp float;' + + + // Vertex positions, normals and uv coords + 'varying vec3 vp,vn;' + + 'varying vec2 vt;' + + + 'uniform sampler2D s;' + + + // Lights [(x,y,z), [r,g,b], ...] + 'uniform vec3 l['+R_MAX_LIGHT_V3+'];' + + + 'void main(void){' + + 'gl_FragColor=texture2D(s,vt);' + + + // Debug: no textures + // 'gl_FragColor=vec4(1.0,1.0,1.0,1.0);' + + + // Calculate all lights + 'vec3 vl;' + + 'for(int i=0;i<'+R_MAX_LIGHT_V3+';i+=2) {' + + 'vl+=' + + // Angle to normal + 'max('+ + 'dot('+ + 'vn, normalize(l[i]-vp)' + + ')' + + ',0.)*' + + '(1./pow(length(l[i]-vp),2.))' + // Inverse distance squared + '*l[i+1];' + // Light color/intensity + '}' + + + // Debug: full bright lights + // 'vl = vec3(2,2,2);' + + + 'gl_FragColor.rgb=floor('+ + 'gl_FragColor.rgb*pow(vl,vec3(0.75))'+ // Light, Gamma + '*16.0+0.5'+ + ')/16.0;' + // Reduce final output color for some extra dirty looks + '}', + +// 8 properties per vert [x,y,z, u,v, nx,ny,nz] +r_buffer = new Float32Array(R_MAX_VERTS*8), +r_num_verts = 0, + +// 2 vec3 per light [(x,y,z), [r,g,b], ...] +r_light_buffer = new Float32Array(R_MAX_LIGHT_V3*3), +r_num_lights = 0, + +// Uniform locations +r_u_camera, +r_u_lights, +r_u_mouse, +r_u_pos, +r_u_rotation, +r_u_frame_mix, + +// Vertex attribute location for mixing +r_va_p2, r_va_n2, + +// Texture handles +r_textures = [], + +// Camera position +r_camera = vec3(0, 0,-50), +r_camera_pitch = 0.2, +r_camera_yaw = 0, + +// We collect all draw calls in an array and draw them all at once at the end +// the frame. This way the lights buffer will be completely filled and we +// only need to set it once for all geometry +r_draw_calls = [], + +r_init = () => { + // Create shorthand WebGL function names + // let webglShortFunctionNames = {}; + for (let name in gl) { + if (gl[name].length != undefined) { + gl[name.match(/(^..|[A-Z]|\d.|v$)/g).join('')] = gl[name]; + // webglShortFunctionNames[name] = 'gl.' +name.match(/(^..|[A-Z]|\d.|v$)/g).join(''); + } + } + // console.log(JSON.stringify(webglShortFunctionNames, null, '\t')); + + let shader_program = gl.createProgram(); + gl.attachShader(shader_program, r_compile_shader(gl.VERTEX_SHADER, R_SOURCE_VS)); + gl.attachShader(shader_program, r_compile_shader(gl.FRAGMENT_SHADER, R_SOURCE_FS)); + gl.linkProgram(shader_program); + gl.useProgram(shader_program); + + r_u_camera = gl.getUniformLocation(shader_program, 'c'); + r_u_lights = gl.getUniformLocation(shader_program, 'l'); + r_u_mouse = gl.getUniformLocation(shader_program, 'm'); + r_u_pos = gl.getUniformLocation(shader_program, 'mp'); + r_u_rotation = gl.getUniformLocation(shader_program, 'mr'); + r_u_frame_mix = gl.getUniformLocation(shader_program, 'f'); + + gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer()); + + r_vertex_attrib(shader_program, 'p', 3, 8, 0); // position + r_vertex_attrib(shader_program, 't', 2, 8, 3); // texture coord + r_vertex_attrib(shader_program, 'n', 3, 8, 5); // normals + + r_va_p2 = r_vertex_attrib(shader_program, 'p2', 3, 8, 0); // mix position + r_va_n2 = r_vertex_attrib(shader_program, 'n2', 3, 8, 5); // mix normals + + gl.enable(gl.DEPTH_TEST); + gl.enable(gl.BLEND); + gl.enable(gl.CULL_FACE); + gl.viewport(0,0,c.width,c.height); +}, + +r_compile_shader = (shader_type, shader_source) => { + let shader = gl.createShader(shader_type); + gl.shaderSource(shader, shader_source); + gl.compileShader(shader); + // console.log(gl.getShaderInfoLog(shader)); + return shader; +}, + +r_vertex_attrib = (shader_program, attrib_name, count, vertex_size, offset) => { + let location = gl.getAttribLocation(shader_program, attrib_name); + gl.enableVertexAttribArray(location); + gl.vertexAttribPointer(location, count, gl.FLOAT, false, vertex_size * 4, offset * 4); + return location; +}, + +r_create_texture = (c) => { + let t = {t:gl.createTexture(), c}; + gl.bindTexture(gl.TEXTURE_2D, t.t); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, c); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + gl.generateMipmap(gl.TEXTURE_2D); + r_textures.push(t); +}, + +r_prepare_frame = (r,g,b) => { + gl.clearColor(r,g,b,1); + gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT); + + r_num_lights = 0; + r_light_buffer.fill(0); +}, + +r_end_frame = () => { + gl.uniform4f(r_u_camera, r_camera.x, r_camera.y, r_camera.z, 16/9); + gl.uniform2f(r_u_mouse, r_camera_yaw, r_camera_pitch); + gl.uniform3fv(r_u_lights, r_light_buffer); + + let vo = 0, + last_texture = -1; + for (let c of r_draw_calls) { + + // c = [x, y, z, yaw, pitch, texture, offset1, offset2, mix, length] + + // Bind new texture only if it changed from the previous one. The map + // is sorted by texture indices, so this helps. + if (last_texture != c[5]) { + last_texture = c[5]; + gl.bindTexture(gl.TEXTURE_2D, r_textures[last_texture].t); + } + + gl.uniform3f(r_u_pos, c[0], c[1], c[2]); + gl.uniform2f(r_u_rotation, c[3], c[4]); + gl.uniform1f(r_u_frame_mix, c[8]); + + // If we have two different frames, calculate the offset from the + // drawArrays call to the mix frame. + // Setting the vertexAttribPointer is quite expensive, so we only + // do this if we have to; i.e. for animated models. + if (vo != (c[7]-c[6])) { + vo = (c[7]-c[6]); + gl.vertexAttribPointer(r_va_p2, 3, gl.FLOAT, false, 8 * 4, vo*8*4); + gl.vertexAttribPointer(r_va_n2, 3, gl.FLOAT, false, 8 * 4, (vo*8+5)*4); + } + gl.drawArrays(gl.TRIANGLES, c[6], c[9]); + } + + // Reset draw calls + r_draw_calls = []; +}, + +r_draw = (pos, yaw, pitch, texture, f1, f2, mix, num_verts) => { + r_draw_calls.push([ + pos.x, pos.y, pos.z, yaw, pitch, + texture, f1, f2, mix, num_verts + ]); +}, + +r_submit_buffer = () => { + gl.bufferData(gl.ARRAY_BUFFER, r_buffer.subarray(0, r_num_verts*8), gl.STATIC_DRAW); +}, + +r_push_vert = (pos, normal, u, v) => { + r_buffer.set([pos.x, pos.y, pos.z, u, v, normal.x, normal.y, normal.z], r_num_verts * 8); + r_num_verts++; +}, + +r_push_quad = (v0, v1, v2, v3, u, v) => { + let n = vec3_face_normal(v0, v1, v2); + r_push_vert(v0, n, u, 0); + r_push_vert(v1, n, 0, 0); + r_push_vert(v2, n, u, v); + r_push_vert(v3, n, 0, v); + r_push_vert(v2, n, u, v); + r_push_vert(v1, n, 0, 0); +}, + +r_push_block = (x, y, z, sx, sy, sz, texture) => { + let canvas = r_textures[texture].c, + index = r_num_verts, + tx = sx/canvas.width, + ty = sy/canvas.height, + tz = sz/canvas.width, + + // top + v0 = vec3(x, y + sy, z), + v1 = vec3(x + sx, y + sy, z), + v2 = vec3(x, y + sy, z + sz), + v3 = vec3(x + sx, y + sy, z + sz), + + // bottom + v4 = vec3(x, y, z + sz), + v5 = vec3(x + sx, y, z + sz), + v6 = vec3(x, y, z), + v7 = vec3(x + sx, y, z); + + r_push_quad(v0, v1, v2, v3, tx, tz); // top + r_push_quad(v4, v5, v6, v7, tx, tz); // bottom + r_push_quad(v2, v3, v4, v5, tx, ty); // front + r_push_quad(v1, v0, v7, v6, tx, ty); // back + r_push_quad(v3, v1, v5, v7, tz, ty); // right + r_push_quad(v0, v2, v6, v4, tz, ty); // left + return index; +}, + +r_push_light = (pos, intensity, r, g, b) => { + // Calculate the distance to the light, fade it out between 768--1024 + let fade = clamp( + scale( + vec3_dist(pos, r_camera), + 768, 1024, 1, 0 + ), + 0, 1 + ) * intensity * 10; + + if (fade && r_num_lights < R_MAX_LIGHT_V3/2) { + r_light_buffer.set([pos.x, pos.y, pos.z, r*fade, g*fade, b*fade], r_num_lights*6); + r_num_lights++; + } +}; + diff --git a/source/textures.js b/source/textures.js new file mode 100644 index 0000000..89b7230 --- /dev/null +++ b/source/textures.js @@ -0,0 +1,2 @@ + +let texture_data = [[64,64,0,2,3,1.4,2,17176,1.3],[64,64,38751,1,18,4,2,2,27,9,65530,0,7,1,-1,9,13,5,52,8,8,65528,39039,4,0,0,0,64,512,15,4,0,0,0,64,64,14],[64,64,38751,1,18,4,2,2,27,9,65530,0,7,1,-1,0,13,64,52,64,8,65531,39039,4,0,0,0,64,512,15,4,0,0,0,64,64,14],[64,64,13119,4,1,0,0,64,64,15,0,24,11,17,50,65523,2,8],[32,32,21839,1,0,2,10,2,11,4,65528,10,25931,4,0,0,0,32,32,14],[32,32,17487,0,1,1,30,30,65528,11,21580,4,0,0,0,32,32,15],[32,32,30015,4,5,0,0,32,32,15,1,5,4,2,2,22,6,65522,0,8],[32,32,8751,1,1,1,8,4,11,5,65524,15,17487,4,0,0,0,64,64,15],[32,32,13119,4,4,0,0,32,32,15,1,10,3,11,6,25,10,64536,64568,65519],[32,32,8751,1,1,1,3,3,4,4,65524,14,21565,1,1,-1,15,1,16,16,65522,7,0,1,-1,0,1,15,16,6,65521,0,4,4,0,0,0,32,32,15],[32,32,8719,2,63506,1,4,0,0,0,32,32,12],[32,32,21295,4,10,0,-4,32,298,10,2,4372,1],[32,32,8463,1,-1,1,35,1,35,4,65522,10,34399,0,-1,6,34,6,65526,2,34399,2,29479,1,4,6,0,0,32,32,5],[32,32,5535,4,0,0,0,128,64,14],[32,32,8463,1,0,0,3,3,4,4,0,10,65521,0,4,4,23,23,10,64885,21551,3,4,16,13,0,11,"::][::",4,0,4,4,26,26,15],[32,32,8751,1,1,1,8,3,11,5,65524,15,17487,0,9,6,14,13,15,65525,4383,4,0,0,0,64,64,12,3,10,11,20267,0,8,"---"],[32,32,17487,4,5,0,0,32,32,15,1,4,4,3,3,22,22,65523,7,30587],[64,64,38767,2,36875,2.5,1,4,10,15,8,39,59,15,15,8463,1,3,30,14,5,15,6,12813,4367,38671,0,20,1,22,6,13119,10,38671,4,0,0,0,64,64,11],[32,32,40975,2,63308,1.5,2,63751,7.3],[64,64,13119,4,17,0,0,64,64,15,0,0,29,64,64,0,0,89,4,4,21,-6,22,24,15],[32,32,13119,4,9,0,0,32,32,15,4,8,6,-22,21,32,15,4,18,0,0,32,32,4],[64,64,13119,0,0,0,64,64,0,0,64271,3,-1,50,33795,0,32,"XXX",4,7,0,0,64,64,6],[64,64,34063,4,7,0,0,64,64,12,2,12554,1],[32,32,65535,4,12,0,0,32,32,9,3,6,30,61455,0,25,"+"],[32,32,5903,4,12,0,0,32,32,9,3,5,14,65529,0,12,"NIИ"],[32,32,64271,0,12,1,7,30,65528,8,63247,4,7,0,0,32,32,8],[32,32,13119,1,1,1,14,14,16,32,56328,15,26399,1,-7,17,14,14,16,32,56328,8,26159,2,29706,1,4,0,0,0,32,320,14],[32,32,33567,1,1,1,6,30,16,31,65526,15,33823,1,9,-14,6,30,16,32,65526,15,29743,2,55625,1.5,4,0,0,0,32,320,15],[32,32,12559,1,1,1,14,14,16,16,65525,7,21295,0,1,1,14,14,65525,0,34399,0,17,17,14,14,65524,0,34399,2,8,1.5],[32,32,9503,4,11,0,0,32,32,12,1,1,1,6,7,6,8,65521,0,4],[32,32,15,4,18,0,16,32,32,15,4,27,0,-16,32,32,10]]; diff --git a/source/ttt.js b/source/ttt.js new file mode 100644 index 0000000..ca665df --- /dev/null +++ b/source/ttt.js @@ -0,0 +1,111 @@ +/* +TTT Tiny Texture Tumbler +Dominic Szablewski - https://phoboslab.org + +-- LICENSE: The MIT License(MIT) +Copyright(c) 2019 Dominic Szablewski +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files(the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions : +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +// Compress with: +// uglifyjs ttt.js --compress --screw-ie8 --mangle toplevel -o ttt.min.js +let +ttt=(td, only_this_index = -1,stack_depth = 0) => { + return td.filter((d,i) => only_this_index < 0 || i == only_this_index).map(d => { + let i = 0, + e = document.createElement('canvas'), + c = e.getContext('2d'), + rgba_from_2byte = (c) => + 'rgba(' + [ + ((c>>12)&15) * 17, + ((c>>8)&15) * 17, + ((c>>4)&15) * 17, + (c&15)/15 + ].join() + ')', + fill_rect = (x, y, w, h, ...colors) => + colors.map((color, j) => { + c.fillStyle = rgba_from_2byte(color); + c.fillRect(x+[-1,1,0][j], y+[-1,1,0][j], w, h); + }) + ; + // Set up canvas width and height + e.width = d[i++]; + e.height = d[i++]; + + // Fill with background color + fill_rect(0, 0, e.width, e.height, 0,0, d[i++]); + + // Perform all the steps for this texture + while (i < d.length) { + let f = [ + // 0 - rectangle: x, y, width, height, top, bottom, fill + (x, y, width, height, top, bottom, fill) => { + fill_rect(x, y, width, height, top, bottom, fill) + }, + + // 1 - rectangle_multiple: start_x, start_y, width, height, + // inc_x, inc_y, top, bottom, fill + (sx, sy, w, h, inc_x, inc_y, top, bottom, fill) => { + for (let x = sx; x < e.width; x += inc_x) { + for (let y = sy; y < e.height; y += inc_y) { + fill_rect(x, y, w, h, top, bottom, fill); + } + } + }, + + // 2 - random noise: color, size + (color, size) => { + for (let x = 0; x < e.width; x += size) { + for (let y = 0; y < e.height; y += size) { + // Take the color value (first 3 nibbles) and + // randomize the alpha value (last nibble) + // between 0 and the input alpha. + fill_rect( + x, y, size, size, 0, 0, + (color&0xfff0) + Math.random()*(color&15) + ); + } + } + }, + + // 3 - text: x, y, color, font,size, text + (x, y, color, font, size, text) => { + c.fillStyle = rgba_from_2byte(color); + c.font = size + 'px ' + ['sans-',''][font]+'serif'; + c.fillText(text, x, y); + }, + + // 4 - draw a previous texture + // We limit the stack depth here to not end up in an infinite + // loop by accident + (texture_index, x, y, w, h, alpha) => { + c.globalAlpha = alpha/15; + ( + texture_index < td.length && stack_depth < 16 && + c.drawImage( + ttt(td, texture_index, stack_depth+1)[0], + x, y, w, h + ) + ); + c.globalAlpha = 1; + } + ][d[i++]]; + f(...d.slice(i, i+=f.length)); + } + return e; + }); +}; diff --git a/source/weapons.js b/source/weapons.js new file mode 100644 index 0000000..1f64d4c --- /dev/null +++ b/source/weapons.js @@ -0,0 +1,86 @@ + +class weapon_t { + constructor() { + this._needs_ammo = 1; + this._projectile_offset = vec3(0,0,8); + this._init(); + } + + _shoot(pos, yaw, pitch) { + if (this._needs_ammo) { + this._ammo--; + } + audio_play(this._sound); + this._spawn_projectile(pos, yaw, pitch); + } + + _spawn_projectile(pos, yaw, pitch) { + let projectile = game_spawn(this._projectile_type, vec3_add( + pos, + vec3_add( + vec3(0, 12, 0), + vec3_rotate_yaw_pitch( + this._projectile_offset, + yaw, pitch + ) + ) + )); + + // Set the projectile velocity, yaw and pitch + projectile.v = vec3_rotate_yaw_pitch( + vec3(0, 0, this._projectile_speed), + yaw, pitch + ); + projectile._yaw = yaw -Math.PI/2; + projectile._pitch = -pitch; + projectile._check_against = ENTITY_GROUP_ENEMY; + + // Alternate left/right fire for next projectile (nailgun) + this._projectile_offset.x *= -1; + } +} + +class weapon_shotgun_t extends weapon_t { + _init() { + this._texture = 7; + this._model = model_shotgun; + this._sound = sfx_shotgun_shoot; + this._needs_ammo = 0; + this._reload = 0.9; + this._projectile_type = entity_projectile_shell_t; + this._projectile_speed = 10000; + } + + _spawn_projectile(pos, yaw, pitch) { + setTimeout(()=>audio_play(sfx_shotgun_reload), 200); + setTimeout(()=>audio_play(sfx_shotgun_reload), 350); + for (let i = 0; i < 8; i++) { + super._spawn_projectile(pos, yaw+Math.random()*0.08-0.04, pitch+Math.random()*0.08-0.04); + } + } +} + +class weapon_nailgun_t extends weapon_t { + _init() { + this._texture = 4; + this._model = model_nailgun; + this._sound = sfx_nailgun_shoot; + this._ammo = 100; + this._reload = 0.09; + this._projectile_type = entity_projectile_nail_t; + this._projectile_speed = 1300; + this._projectile_offset = vec3(6,0,8); + } +} + +class weapon_grenadelauncher_t extends weapon_t { + _init() { + this._texture = 21; + this._model = model_grenadelauncher; + this._sound = sfx_grenade_shoot; + this._ammo = 10; + this._reload = 0.650; + this._projectile_type = entity_projectile_grenade_t; + this._projectile_speed = 900; + } +} \ No newline at end of file diff --git a/source/wrap_post.js b/source/wrap_post.js new file mode 100644 index 0000000..9cfedc3 --- /dev/null +++ b/source/wrap_post.js @@ -0,0 +1,2 @@ +}; +gs(); \ No newline at end of file diff --git a/source/wrap_pre.js b/source/wrap_pre.js new file mode 100644 index 0000000..bcd0681 --- /dev/null +++ b/source/wrap_pre.js @@ -0,0 +1,9 @@ +// Holy hell, wtf, bbq! If we don't wrap the whole game in a global function, +// installed on the window scope, everything will be garbage collected in chrome +// in the roadrolled version, even though the requestAnimationFrame should hold +// on to the closure. + +// I assumme it's a weird interaction between eval() (used by roadroller) and +// async functions. In any case, it seems to be a bug in v8. + +gs = () => { \ No newline at end of file