From cba5105908a7a69be73be1b7858beb4404b0fed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=AE=87=E9=A3=9E?= <1638759241@qq.com> Date: Fri, 22 May 2026 14:57:46 +0800 Subject: [PATCH] Initial Cocos Creator port of main-site Unity WebGL game. Includes core gameplay, 600 exported levels, visual assets, web bridge, and bootstrap scene. Co-authored-by: Cursor --- .gitignore | 24 + AGENTS.md | 18 + README.md | 75 + assets/resources.meta | 14 + assets/resources/textures.meta | 9 + assets/resources/textures/silu.meta | 9 + assets/resources/textures/silu/Baseblock.png | Bin 0 -> 7875 bytes .../textures/silu/Baseblock.png.meta | 42 + assets/resources/textures/silu/player_B.png | Bin 0 -> 14054 bytes .../resources/textures/silu/player_B.png.meta | 42 + assets/resources/textures/silu/player_F.png | Bin 0 -> 14054 bytes .../resources/textures/silu/player_F.png.meta | 42 + assets/resources/textures/silu/ship_B.png | Bin 0 -> 15924 bytes .../resources/textures/silu/ship_B.png.meta | 42 + assets/resources/textures/silu/ship_F.png | Bin 0 -> 15713 bytes .../resources/textures/silu/ship_F.png.meta | 42 + assets/resources/textures/ui.meta | 9 + assets/resources/textures/ui/bg.png | Bin 0 -> 149433 bytes assets/resources/textures/ui/bg.png.meta | 42 + assets/resources/textures/ui/coin.png | Bin 0 -> 20539 bytes assets/resources/textures/ui/coin.png.meta | 42 + assets/scenes.meta | 9 + assets/scenes/main.scene | 494 ++ assets/scenes/main.scene.meta | 11 + assets/scenes/场景搭建说明.txt | 8 + assets/scenes/场景搭建说明.txt.meta | 11 + assets/scripts.meta | 9 + assets/scripts/AppBootstrap.ts | 117 + assets/scripts/AppBootstrap.ts.meta | 9 + assets/scripts/GameController.ts | 275 + assets/scripts/GameController.ts.meta | 9 + assets/scripts/bridge.meta | 9 + assets/scripts/bridge/JsBridge.ts | 28 + assets/scripts/bridge/JsBridge.ts.meta | 9 + assets/scripts/controller.meta | 9 + assets/scripts/controller/PlayerController.ts | 213 + .../controller/PlayerController.ts.meta | 9 + assets/scripts/controller/PropController.ts | 59 + .../scripts/controller/PropController.ts.meta | 9 + .../scripts/controller/VehicleController.ts | 114 + .../controller/VehicleController.ts.meta | 9 + assets/scripts/core.meta | 9 + assets/scripts/core/Define.ts | 152 + assets/scripts/core/Define.ts.meta | 9 + assets/scripts/core/EventManager.ts | 27 + assets/scripts/core/EventManager.ts.meta | 9 + assets/scripts/gameplay.meta | 9 + assets/scripts/gameplay/Movement.ts | 178 + assets/scripts/gameplay/Movement.ts.meta | 9 + assets/scripts/level.meta | 9 + assets/scripts/level/LevelRegistry.ts | 47 + assets/scripts/level/LevelRegistry.ts.meta | 9 + assets/scripts/level/LevelTypes.ts | 22 + assets/scripts/level/LevelTypes.ts.meta | 9 + assets/scripts/level/border-cache.json | 2022 +++++ assets/scripts/level/border-cache.json.meta | 11 + assets/scripts/level/levels-600.generated.ts | 7858 +++++++++++++++++ .../level/levels-600.generated.ts.meta | 9 + assets/scripts/manager.meta | 9 + assets/scripts/manager/GameManager.ts | 388 + assets/scripts/manager/GameManager.ts.meta | 9 + assets/scripts/ui.meta | 9 + assets/scripts/ui/UIMain.ts | 20 + assets/scripts/ui/UIMain.ts.meta | 9 + assets/scripts/visual.meta | 9 + assets/scripts/visual/VisualAssets.ts | 147 + assets/scripts/visual/VisualAssets.ts.meta | 9 + .../game-controller-inspector/package.json | 16 + .../source/inspector.ts | 83 + package.json | 7 + settings/v2/packages/builder.json | 3 + settings/v2/packages/cocos-service.json | 23 + settings/v2/packages/device.json | 3 + settings/v2/packages/engine.json | 3 + settings/v2/packages/information.json | 23 + settings/v2/packages/program.json | 3 + settings/v2/packages/project.json | 3 + settings/v2/packages/scene.json | 4 + tools/deploy-to-main.sh | 92 + tools/export_all.sh | 24 + tools/export_unity_levels.py | 190 + tools/patch-main-index.js | 55 + tools/unity-level-export.md | 30 + tsconfig.json | 9 + web-template/cocos-bridge.js | 43 + web-template/index.html | 24 + web-template/main-site.html | 77 + web-template/主站对接说明.md | 204 + 88 files changed, 13798 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 assets/resources.meta create mode 100644 assets/resources/textures.meta create mode 100644 assets/resources/textures/silu.meta create mode 100644 assets/resources/textures/silu/Baseblock.png create mode 100644 assets/resources/textures/silu/Baseblock.png.meta create mode 100644 assets/resources/textures/silu/player_B.png create mode 100644 assets/resources/textures/silu/player_B.png.meta create mode 100644 assets/resources/textures/silu/player_F.png create mode 100644 assets/resources/textures/silu/player_F.png.meta create mode 100644 assets/resources/textures/silu/ship_B.png create mode 100644 assets/resources/textures/silu/ship_B.png.meta create mode 100644 assets/resources/textures/silu/ship_F.png create mode 100644 assets/resources/textures/silu/ship_F.png.meta create mode 100644 assets/resources/textures/ui.meta create mode 100644 assets/resources/textures/ui/bg.png create mode 100644 assets/resources/textures/ui/bg.png.meta create mode 100644 assets/resources/textures/ui/coin.png create mode 100644 assets/resources/textures/ui/coin.png.meta create mode 100644 assets/scenes.meta create mode 100644 assets/scenes/main.scene create mode 100644 assets/scenes/main.scene.meta create mode 100644 assets/scenes/场景搭建说明.txt create mode 100644 assets/scenes/场景搭建说明.txt.meta create mode 100644 assets/scripts.meta create mode 100644 assets/scripts/AppBootstrap.ts create mode 100644 assets/scripts/AppBootstrap.ts.meta create mode 100644 assets/scripts/GameController.ts create mode 100644 assets/scripts/GameController.ts.meta create mode 100644 assets/scripts/bridge.meta create mode 100644 assets/scripts/bridge/JsBridge.ts create mode 100644 assets/scripts/bridge/JsBridge.ts.meta create mode 100644 assets/scripts/controller.meta create mode 100644 assets/scripts/controller/PlayerController.ts create mode 100644 assets/scripts/controller/PlayerController.ts.meta create mode 100644 assets/scripts/controller/PropController.ts create mode 100644 assets/scripts/controller/PropController.ts.meta create mode 100644 assets/scripts/controller/VehicleController.ts create mode 100644 assets/scripts/controller/VehicleController.ts.meta create mode 100644 assets/scripts/core.meta create mode 100644 assets/scripts/core/Define.ts create mode 100644 assets/scripts/core/Define.ts.meta create mode 100644 assets/scripts/core/EventManager.ts create mode 100644 assets/scripts/core/EventManager.ts.meta create mode 100644 assets/scripts/gameplay.meta create mode 100644 assets/scripts/gameplay/Movement.ts create mode 100644 assets/scripts/gameplay/Movement.ts.meta create mode 100644 assets/scripts/level.meta create mode 100644 assets/scripts/level/LevelRegistry.ts create mode 100644 assets/scripts/level/LevelRegistry.ts.meta create mode 100644 assets/scripts/level/LevelTypes.ts create mode 100644 assets/scripts/level/LevelTypes.ts.meta create mode 100644 assets/scripts/level/border-cache.json create mode 100644 assets/scripts/level/border-cache.json.meta create mode 100644 assets/scripts/level/levels-600.generated.ts create mode 100644 assets/scripts/level/levels-600.generated.ts.meta create mode 100644 assets/scripts/manager.meta create mode 100644 assets/scripts/manager/GameManager.ts create mode 100644 assets/scripts/manager/GameManager.ts.meta create mode 100644 assets/scripts/ui.meta create mode 100644 assets/scripts/ui/UIMain.ts create mode 100644 assets/scripts/ui/UIMain.ts.meta create mode 100644 assets/scripts/visual.meta create mode 100644 assets/scripts/visual/VisualAssets.ts create mode 100644 assets/scripts/visual/VisualAssets.ts.meta create mode 100644 extensions/game-controller-inspector/package.json create mode 100644 extensions/game-controller-inspector/source/inspector.ts create mode 100755 package.json create mode 100644 settings/v2/packages/builder.json create mode 100644 settings/v2/packages/cocos-service.json create mode 100644 settings/v2/packages/device.json create mode 100644 settings/v2/packages/engine.json create mode 100644 settings/v2/packages/information.json create mode 100644 settings/v2/packages/program.json create mode 100644 settings/v2/packages/project.json create mode 100644 settings/v2/packages/scene.json create mode 100644 tools/deploy-to-main.sh create mode 100755 tools/export_all.sh create mode 100644 tools/export_unity_levels.py create mode 100644 tools/patch-main-index.js create mode 100644 tools/unity-level-export.md create mode 100644 tsconfig.json create mode 100644 web-template/cocos-bridge.js create mode 100644 web-template/index.html create mode 100644 web-template/main-site.html create mode 100644 web-template/主站对接说明.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a231b3f --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ + +#/////////////////////////// +# Cocos Creator 3D Project +#/////////////////////////// +library/ +temp/ +local/ +build/ +profiles/ +native +#////////////////////////// +# NPM +#////////////////////////// +node_modules/ + +#////////////////////////// +# VSCode +#////////////////////////// +.vscode/ + +#////////////////////////// +# WebStorm +#////////////////////////// +.idea/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..cdb4644 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,18 @@ +# Cocos 主站 tfrh001 — Agent 指南 + +- 引擎:**Cocos Creator 3.8.8** +- 源 Unity 项目:`/Users/liuyufei/tfrh/主站文件/主站` +- 设计对齐 Unity `Platformer.*` 命名与 JS API + +## 开发约束 + +1. 关卡只改 `assets/scripts/level/LevelRegistry.ts` 或新增 JSON,勿硬编码在 GameManager。 +2. 保持 `SendMessage` 对象名:GameController、Player、Vehicle、UIMain。 +3. 移动规则只改 `assets/scripts/core/Define.ts`。 +4. 对外回调用 `JsBridge.call(name, jsonString)`。 + +## 关键文件 + +- `AppBootstrap.ts` — 场景自动搭建 +- `GameController.ts` — JS SendMessage 入口 +- `gameplay/Movement.ts` — 移动队列与规则 diff --git a/README.md b/README.md new file mode 100644 index 0000000..b2b0ecb --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# tfrh001 — 主站网格编程游戏(Cocos Creator 版) + +Unity「主站」移植工程,**Cocos Creator 3.8.8** + **Web**,API 与 `unityInstance.SendMessage` 兼容。 + +## 当前进度 + +| 项 | 状态 | +|----|------| +| 核心玩法 / JS 桥 | ✅ | +| Unity Levels600(600 关) | ✅ 已导出 | +| 丝路主题 Sprite | ✅ player/ship/coin/tile | +| 主站 Web 对接模板 | ✅ `web-template/` | + +## 快速开始 + +1. Cocos Creator 3.8.8 打开本目录 +2. 新建场景 → 空节点挂 **AppBootstrap** → 存 `assets/scenes/main.scene` → 设为启动场景 +3. 播放预览 + +## 关卡 + +- **600 关**:`assets/scripts/level/levels-600.generated.ts`(由 `tools/export_unity_levels.py` 生成) +- 注册入口:`assets/scripts/level/LevelRegistry.ts` +- 重新导出: + +```bash +python3 tools/export_unity_levels.py \ + --input "/path/to/Unity/Assets/Scripts/Core/Levels600.cs" \ + --output assets/scripts/level/levels-600.generated.ts + +# 或 +bash tools/export_all.sh "/path/to/Unity项目" +``` + +## 贴图资源 + +已复制至 `assets/resources/textures/`(需在编辑器中刷新资源): + +- `silu/player_F.png`, `player_B.png`, `ship_F.png`, `ship_B.png`, `Baseblock.png` +- `ui/coin.png`, `ui/bg.png` + +加载逻辑:`assets/scripts/visual/VisualAssets.ts` + +## 主站 Web 联调 + +1. **构建发布** → Web Desktop → 得到 `build/web-desktop/` +2. 阅读 [`web-template/主站对接说明.md`](web-template/主站对接说明.md) +3. 使用 [`web-template/main-site.html`](web-template/main-site.html) + [`cocos-bridge.js`](web-template/cocos-bridge.js) 联调 + +```javascript +// 与 Unity 完全相同 +unityInstance.SendMessage("GameController", "SwitchLevel", 21); +unityInstance.SendMessage("Player", "CallMove", 2); +unityInstance.SendMessage("Player", "CallPlayerInfo"); +``` + +## 目录 + +``` +assets/scripts/ 游戏逻辑 +assets/resources/ 贴图(Sprite) +assets/scripts/level/levels-600.generated.ts +web-template/ 主站对接 +tools/ 关卡导出脚本 +``` + +## 源项目 + +`/Users/liuyufei/tfrh/主站文件/主站` + +## 后续 + +- 运行 `tools/export_all.sh` 导出 Levels1000、Levels10000 等 +- 将 Unity 动画改为 Cocos Animation / Spine +- 用 Tiled 导出真实地块填充 `LevelConfig.ground` diff --git a/assets/resources.meta b/assets/resources.meta new file mode 100644 index 0000000..5c8cffe --- /dev/null +++ b/assets/resources.meta @@ -0,0 +1,14 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "e4dc033d-0f14-4dfc-8475-f3f23d26d6dd", + "files": [], + "subMetas": {}, + "userData": { + "isBundle": true, + "bundleConfigID": "default", + "bundleName": "resources", + "priority": 8 + } +} diff --git a/assets/resources/textures.meta b/assets/resources/textures.meta new file mode 100644 index 0000000..326f982 --- /dev/null +++ b/assets/resources/textures.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "d81d86b4-23de-4bc2-a3a5-82add6f6e534", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/textures/silu.meta b/assets/resources/textures/silu.meta new file mode 100644 index 0000000..5b7d984 --- /dev/null +++ b/assets/resources/textures/silu.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "cd9ff0f5-a276-4990-9d03-407d44cf21e9", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/textures/silu/Baseblock.png b/assets/resources/textures/silu/Baseblock.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ffd9b0a5631e9351fb54ff5a6e84df5c7adee8 GIT binary patch literal 7875 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 t50+U|?XnVPIep z5a6MYynQn5g#IJ+P&4+%z#x9|-w$(gG58JxgAL=2lDyu>9MmG=cczV?t>ecW>5R=J zk#FzSoszl;2IHP};o(v#5pZd~B(PoU=~Js{w`7Lki+&m zfy$fzbIvTLQWsvF{G=5o*|(%PJRjGC+u5zuzQAM3>LTN0#*()v~>vH=Yb(@=?I|8T#c`o~V zPE3E-2w|Dbr}2C^e7hBLNS%DPRWNe>cq!gke~@_Fary+19OLSuQ4;?8zK$c&aN!^# zU>DL{>dSn*MHf_(`+s^k}dVn4b(n-vZJsk%JG%FG56=3n9VYE)Z&1ywW~+Z8IrJ$OD#6U0(%sz)b;O4i5-JEV`9r{^QT>0XNuQL&PEPiAMddL(uC}34j z!{7MsN&UQq`tl@j^r#I$t2dMK`rjuN3C?T`VP*ijV;5`!jADiHK0&p#5qd}*M_}nn(~f1kfy%a+DX>; zWI0idWab#nV)G<%^^7WfH3ed@G1Sk~;gB?a$VaHElnY(&CLs zqthSS>VPezKn-a0d%aGhyw|DnWptm|=Y5K!eRXgF%KN0^fJh&>VH`W+ub8Q}FyY(# zAi;UwDD{4Arh|}=cON4_-~4ft)O!O_ZTWBhAZ;xgya9Z4tY!)>Up}*p2}(n0yqI4B zvuO>b>;1(Kv4y!;|EzXbV!7()oCNn=IV#Qc7H7PRWaeL+`AwRycEbRFD`@qw)K^>@ zn-vA{;`-7vhc{KdcnCF+{Igz?IIMmTB7eH9YOQRA-?O96&_4dlI%sF+)C_t51MnnK z0SE(8I=XdC>}<(LoEzOVrg&e)t$*zzOPC8#+7lr~CEg!!Oi82ma@awhc4xwc z^7M8_kf5t@Z;i`(TW>BEEByXhe2sFGc8sTZ#AA8v;!8Gdfwn3^v51RF!D^$%3? za?9jZSa?^Ic#ccgY;i!POSj!j@wwN5*U$F9v$!yC18cY5K0bj`-w{2MZ<>FN+b6fT zsj(RIUWvtOnX;SAM2$qdzXDSCO5T>|lS@~fqzAp`X_Z+6#3rY;Y|>zNt3VZV12 zvh*_Fdr)}zDp;n12crB$hmJ~oA*gD`C)eSUVJKPK-`>5VzY~Zu6Ie8Sn5h(PbghB- zzMRs!cd(a z@6_wn7oskD`xahbB8gS9bT(WX2fE|;Fq_;4t-AGh5^M1BgIH(gJO0)!4bnS z`rL(wp-wT2VMX}Ab5U=bHgup5{oSi9z3ic(`TyFLadFWQ>)GtZdYQli>qpPu4IH%w zN@6hsU)4H|F!DH{(yMw?**VavFYB>5|M;+wP;?^<+`j}9r-`vCB(RVapBX|C1p88y z(-?OOR$Bu*+U~T;dljEBF)F&D9Zcv&uc2`1jS=<{6^$Ql&P6{hrLo;e3LXW$-Yh*j zw#)4r;U5OM_rIVJ^kQPRqc@`g#-w<`yU+9Aav3||_lE)6H~FGdALrs3`tD5hmxuV3 zyLefB=QEO()a{rYQRHPVT^5bN?hgp`Y7SH033>+Y_qdrsHbI>XK+ZM%FEo{Qo*P@Q z5B!>d7{AwN!=s=mWmB>Kq~5Ls`3qP19wl`C2DW)1?jM{IPkX zRxnLBe-6vFG~^^DY;g}}yvdM1e6VR&`@OG_JgLo-WBd%a0axceU5gx|Zar6$squeM zgElec?4g<20#g(e9%`YZ!$nN2uKPRZX(rpYikT@!$obc}4$s|ii8lZ3T-i!_nNB&P zEt)shK?T&)cn=-Z5@~+V6o40DsEG6SD*R9NMfDn^0z4_tBfm^xXIVvoLAV&&r>q)wcb*%T40?K`9F2-~>kN$}%h|Z&9nS z7)Q$2YjRM|Q{}k#E55g`q+6EJd95yEET$^(;#W@72BwmB_Q27pqR_|XP?86qfh*++ zk|M>x;>tkrbmx^e>yCsO4g7P}C&Kn&sVyw{t9EA_$%y-Wx_-lj(2+6L7aa15qY91N@nyb0*dE|vtvG5G&8nWofz^q{K&D0- zgvKxWvkF}VxUgPN9*#CV_w@qV=d#XRNNzXaSFk3;7=B6 zF7<-34l%g-e9(LXPA1=fb!l-n{Cq=LhXzw$)XL!8Nqbi^2}Ums8;J_`V|vn87aIp| zDS?2>iObCrF<+`8CKF zH^HLR?68sa?(Gxjp_q~udfhF-A{Xj47#)*`Il-4wB&c_qjH0Q9X4ZjT;1r_0lgtQF z3W`KU;B;lO8XnBs#I}v*8=0$s0M_pliF!cWYtsX0|D$lbOE9Np~HT-tp9WVA+a6d(33jmxUeG*&M+kRHv? z*!OjI?{&Wv020w$fD!3Z+dHYGDYo@44F!P7x}gMY;zH#N`x#0Lyd6rmqq#(!i>Kg7 zV=ai=#4&4bL2$`D*-l705##TsA598nv0pVFP+dq41ALh9^75=S1L9ekIr2}%q2s;K zB;C@32jWz^3KVL2rV-$qIl&tkDcr^W5@tBtSLWKTW{pI(s{mDs*GfMiE?$mfzd?|< zDqJs6uu2y6d8C2rakBxg*vMuKkKDa5rb^A(*YYK&VWWC`>~5M;3+a+SFyw{J?5Sp7 z3;AKn1tP?jr7o{7wVGhKrHALiJ3%>vLIn8T`hM?{)T^J&f;~B`$0GZ_knA(0!dN5M zu!>*`2|++JdI?CR!C>pqP<=#!4qdA)(7}26Lx~!4P}+i zHNDw656w4madDREP}zzp%?Eo^tAbpzy#hoOdc@05QF7uLo|;lmJ5ieQx!FRV(NQB8 z$>;@R#Cqj25m1%wof|nk!xQ3X z(8|{MufjQF1EhW#X(|wAA&W~{fAzRSEfHot2kndh) zRIU^%Y**o54;{byYEe+Af4K5abz_!X^C@$AC4jE7jL>zq&&srjD@FzuFU~9CWjE!S z>DjFHGvNz7zvnq&X-kt1Z@PV_PX$cIr>wc^$$(cWG;PH`MHK4a0s{~9^$2Nzk^0$i*J3@p*F{402!p=@xhD(JfS|qS;0w>q)r>xup{|lZ5F(_!?n$bA7x})nZQUYV85jt*Eqhh7iYnLJ`aPNu% zDHjyESgbz26%c{x&#L$(;9mw}TM_1-J9)f%VOj2m#6pfo(3iQgjg}F|*<;Ya5G131 zSXS)qM@|GZ7u0e4OyP9Q7+vBu`_|Yo;^E4s;jXdKHgk->1Y(vxYhhr?TLl8X@||JE zbQoPgF?+HrFFhIn(D(&=JPfy<6dh+F^vn6Y85a>+l+yJrfoP=%gOYlbw*o zGc({_MxifcPaaMn)*OCu5hzbsvJYTi}--6+1j-wFC zjdjk;x5%Kx0X0+B+fNKQesRvq(pyvc&wo)qt!#6Aya4I=qX1s}hllAGowtTdaXipp zDkM9~JvYmbsUmmRK@p+~^5KC8+>b`Ii?_Mc^sH!5-5(cB&v0;EHEmuebI^*#UPK2N zyW4Fq{fzYi9bmZayl*-qOq-Pe2zXIHFCbHwaOpyV1;nez6}nXSF9Jt~0?^#}40Q;p zYWPQu1zZ)Wpj$czls2zMH60QesRbg5J0B3G0hnx1P5?99mRlGDHZg8-)W7_V-gTMo z_A;R>;l&>YZSOviW$Zn{6D(liX7I{sgeV91b#bfh;uIH@Q%yCzs00I>GQ}m)Z6QZ8 zJdP6!Xmhqo@>8C|UXovbjBPEZD}ka?aU22(n`;`$2T=F)&_ma-V#!!+N-tDL1Z?o9JloD5`zMn$4O#A61C z5aAw~Nc1~qS$!9qnnD+1d6O3ipuJ_+3tOE2Ug4`?(hW}DW3^I{EC^-)6vJmebpOvg zKfbq|{2h5~>8s{9N*A#MDt{z_=d8AR1gq*91PMbCSzUblX#8kGIj5nvr6T*Qq9eMg z{C2#5y>hE?d5DZ3n$3_x%7GR_1pK9A;&$+9Vt^=nR_W7&f#n79r1Y4nhmX0?(ZqyS z2Rj0fw;T2uO2JxJCf2(8+4{|!g)iEf*aRCogB8~g33p5*QDcs)D#0M*SJIXOO_09U@l>B-l+)md;l%x zEUc2ugv(1xMmTSG?eLCP(s%b^tVS5ok3^^!0|6? zUUbG~bQFPt2==0~ym&I{Z;1NrO}aevDGzTCg|wTOV#tP`mljg@PtDS{%W z^-~A#c8M~Ljk$bjbeA=q>^>?*wcy(~g{VcfM%(=gRKwFEX?`&O{*syb`*(|F!ol4j zhIwSRsYyI;AWw03Ke)NHMdOxI*+3vFUKbYvAJ)G z9JTtZUM`%;%AJ=`VlU#55o z>4$(rzV&)<75b(bj%y`GpVrYN{sdVr`WyjGx*od`>r~MZ_!P2zk zD9W9na#Qf~{_`fx*q!r=dsKUHI|egkaeQHNeiQtRH~<$W+`1)zz-DPGw1%0%?DA66 zZ~}k7M{=hTJE&dLr{RcO)tDOQ^93ft25ke$ZYdWeH3PF_DmEQt-vW10FlSu`X5_8y;3`j@t=cXAHP(@YOlNJ8{9^{=g`5VCUHqJ1`nE?D zVvG+vjh4#ngTIoH)`^Z5%zWkVZ0u9xz#%RE;hN;xVD0LH}&6~pSbX-Q5!v)gi2&t>OOC@@Jh%iXrE{m^rh3mD($!HXk_wE_RG6Ab{dvVQr?Ee8EwkUsAg`V_@tz2CYh}SA?Dm=B zqZHilr08x>_Cv~6$VJ=!;-mW9C7d0>TEWkk(tA3VL~J1P_g3~Od$MU)0nz!Jr$shD z_{1~d?zo?8F@N{2*KzQ*`slaIwo9942NY>lKL}EgE4jB^qvgkP@bccpXL=xOGaZhq zQsvTqDVb%QBw;9)?;)K8`4x3;B&mL~9?NZpJUy=J&nMfSi5Sw=lHwwlKKpUEotf`& z-?ljoABaZ;zn1||NtRZg-oteYeEyvWos6_TG~U^%#`;{I+n-aPhhD9an*s7~&K$88 z^ZOrGKD_oE3#vk`%~*;d8bCrp;fh{kb=89f2M=!^lt;-#8tWYv7zVkZjoBTnYxtv? zoEd;G{TwRos;$L)GXjVUvtDVasL{jOkpEv{L6o0#I)F4w_IjT=xq?EtnC9I4aj*R3 zG5GA`QYRntLda3CU^B~UI9(WEDe3}{Sta^Sn;cnM6(7}b5xM#VUe?y3!#i5$0aCqq za7KooOk}%@J%PXF8x*|TG2DPZ)(X&=c}~@?;Wn@IkuwtRojokvjCXr2HXw?~Dzpnw z$>ib!XEpS{)cIa%QvlFMU{(JeDID&7Nei_vc6{nq?_(ZP>!iVktsZw@LA9Hv&?C2 zUZttwd%gD5WX|TBd*nlQ4X=j~gHYp=Um(ANY4;6Z$U}%Z^4%o1>+}UgbG!AKbDL_u zwsy{&NKkzXTsi0L1&yI(vqRt90!qp>HB`JA!+;?yowFua+XQ6l{-2vxSLbX89{i`*gZ;Zgo#lWsrK<^Qm1 znrB8aG%fzPTg^GcFj1G5anXJ-e?ZrcM_HWA$!cuv^LtWx)a~TWHSMfnUhd-eeu-aZ z6w4ODTp}-6uMn!(L1ZRh9{vTInj=BybR#2SvfjDhsc2f%a#u?CbPeWG@L+>}1T*J7 zziJ^Rx+CEdzO08Gst*$lBP!qt!GT@LcY-XcI~5yc-tlCo*|lnUBGA+Jv=O5Wfh^Q~ zlu4)$NiS;Y-iey@oOZ#J*~J!Py4+3d zg>8D?@j(Y^nTQm={}C|Ml4Z>cA0-C*HNocgKVPf#+iPXDQ=y4z%4eD?d@rbv7|puR z6Yu?2<8Xw<{I$)myfN3naQElyih^gj0mpt)x8m=@GN;)j#^>3a4gXz7MN)=zoJ8|0-9;5^-%SMs0)D zx$1<9&o&oxMxC`~6AgeDot`5N1pxxhEq6f~QJc+o^VQ0iSXC>cwOVV&3d7Z#WGe$> z=ZIyBuhLC7cN?|a6}?p`*!A|iJ%!`A24=63d5^Y6Yq1HA_o+Sv090$#ipT?1e$yO! zST^|jdd=)!;ynzzw_Su+fxc6Ok+yznDdid8D#wp|5%17+pCC(cHXmw$=)4V_XfrHf zC2)(#irR>-x@nNhE5t(@c3$`*{IZ>0x6&D9nP&NB&w2%0VC>#FVhV=|V?pw?`LD(< zApy4`_jb>~h&AU(My2vMQ=bfD(vpB zeMYoP2${d?rJoZHtT-y6ou{{Mt3OD*DUQ^AU8|aYJMrDk<^Gp_pcXk&2U~S1=2ig1 zCb|nY{ck1Qa~ZcQ0?ivhg(JywR;Fd{%V>^*8yX8E`We>+(@VYek*fk*E;H{0sal!x z{)GggizdMg|5L0uy=LtVqQijf1nLlAiVjzGA5GqmZejBD#5>tNnjj3+nb+^961>mzGS@Z) zDK*j=gNFsgN(g>DXgb8|`EG#lq~CmNr7E`tgOt`%ntGO2MRp}5D2808{dfL-PMIq^ z^rvFr+|3H^>iW3&gJXq-U>Gy|%?k6umxEPQmk}CE92mus(8r=F+5J(6FM@8hgOLIo zEEceucl-ZRvY(a77u+myw;$vpc8u4vLr(f@KE)F56G+}|v=%*L?Adc>EnVGl+ZO@q zvH_~-WU#jT!ZE!9WAZ6{G2|I`>l!d34b2)W&20G`V<&=^{JaG18L%nF*Vsw6zj`RmLOrMOb~ zNs8!?k*s|R^W?zs8+K|qxp{~1Uc-*~CSX&d97*;res8?Jlw$T(k!3`qObF!egm^T1 ztpNjrHts(!KqK@otAhO4jZfM2gQnSAlP3Glp+_Pt^ZMvmgwZ(q_#ayL;afd?!Lj<*j7Zt<0C_ zGgJ9CV=SZRb!@TQvCbQQ8Nr51v_w($NJaqxvq+pok+8_T2#+=`c0`cTU-dHTP2y3^ zeor@0yqV(Bu)z4-^MdmKPA2C6Tu$eIp(VB)zl0EjJluDqjGrCgAPF1 z<-i@-hT?C+YHco_QL`!+M>ZdQk1rtOb?YL3-tau{E=?R5M^lD0H{~L7>lZ**ZkvPK z?hdLh$wm9q@nT%rb~X=ZLmP#Rtr$ydFLQtV8J)Jmr*p>aOdVEx`lyb^>RhTZ8WLBw zwOx5ftd4s#wu>cspVmp4Ab;@gbo3m8QwPSDrB>$C%h9x=!i0nBVa@HFlziwwJdrVw zQoDGqddCv`Vf@uB8r7|Z>}_;2SAkw<)jyZEw$e&JXr2vfTAZ%_TJew)^xw?o-u5)S z5|v~)(h$mx^3ZrXoA5?ghH;*Df-ZdU943VG9deRw31J`EJV9Qp=Rh@njz@ zVyvsF#w|43{>4_~_hH?)vm^LdS9>F58**f)l`mB@c2y+D83w8V6#94s= z)sg9(nYZF~@Y$}sApCZDeO@R`gHe+HzE)!=dB@%IqqN_>8>uUt1oO^Nruy%|^0YR) z*1qiKd>({bxSd>HB@A^Z^iv-uw#RyXEohGX`Suo$t!kt|b7X20{AZw7rJa3f8TF~V zVKFq0c-74!a)Q?sCAGkQiJIM-XAwnnyd6_)%u=(Y5Z}th(8G48Hg|xguk_A5`@4gRKD4hh@$kJ0Q6-Sw9&fL@XP$iIYP`ex ztYc>W%$Lt$>ki>dA3r_pb}GGB4@A2$>he;*yINIKCo`k@KMx=8x5R3*7ii6+{e~)U z{LL$pMeNUp{=YSNs)j-K9jX?RY-6xIACS13ph(r=24aJH){D2kL9`Z~(vr`3wzqz- zo?@VfoX4_$MnKW_weD}Rm%J~0Owp8$yuNKkpZM83Q+7UKW`Ajm(J%l@qspWU)$f3Y8G8Z-+FXzbZ$X?ct`CVWATtBo|$aQomXq|DEbd;3S)r_10 z{$5wWFi%=s1oWhRDgY78)s10Y@Ka&eU}X5?(|o*h-9Yj|VfUP~T0`md1R~?Z`K-t` zEK|)$*o94=hx9*6(gSt65weO^_}7+0CqX)zu%uE8i`)q;ElivS32{-<C;l-9aF9 zL(ggND7Dp${G*!b^YXEZ6#x8Jy1Tr?fNY86f&xl<2{`9{^sQ4627Bt8WfMcf#h@l> z(TG{c`Nj_e;uXDmRzs!Z@Qz_g1h&k0LFm@ZSW<6YSzLq08CK7dE%V9Wi55L6-mQhOf@K!Wi)kOws34O{ba5^RLW=rS0Kk+z!iRw+EJI!!*+4FFdU|NTW4eu ztU_t`ueyD(Z*yuIbukMw>t@S|!903)p9D(qN4MN?nMuCVe*c2CG)LJ9n_cJS&-e2w zkf_7lefp%7cI*=aRZEwmXjR?8I^Q6)7c2GBc{pmKD_yssk~q`s0L+F(0AiC$pd}f+ zU+gaq5vlig|LdwWpftSrZ=cyU7cX#q8(&eD?M5DxB1a;s;iI-SB(hj~6_*#pCgDly zdMpHu9LKYo9h&4r21@>6fU5|;)a;q+N)L^?yWZLTYhui``Qd=j%0@83Zzx5&gM4sk z8WV&cNDp6C{jbw3_7;K`PwA88jr0w8T)&pEU=y*4-$!zu^vFTlCRyhjzP!Kr*wC;!1DY7NOBBp{WD(;ryaO)JLq@%d>95etdK37 zx!^#AQ$o?{_bSb4HJhGT?G(9sUuu$}pFt=uj~DfO=iBWd@v8|edcmasdeMAufuny) zv>_Z_^ZACpm%O|^wIz#H&PACe({8e3Ah5f|8@sfupNJnimGj)BQOVcO&R09x%-n#F zxM=$PX{fGG(~@vd?j+?fn00Dm1)P1qudl^*)TQY?|17(ZVS)H7Rjs79vIn;9EXA~@ z(e2X1cQq$0AYk`*<)td8Ti5B)llNe+Lc}>TSkd#FI)vJKF%f>|C{i~P0G%bx^R1WPRZyAV94<)`@ETIhq`%JI9AL}P&)RltWHexZXXt01H8%VA&S*z~4Uio#PdvTu~bzZuqp5e5ofTAt`Rd@ZTuE@+DXya}dcD&L9L zB;e+fQX6Y?`)Hu}lnpxKEPk9VNfa0K!FmlI%M}rad}Z(tq!>MCEInN?LAmd-#e3l%Awe4QSxxCfi%v zLW_lLLU9GJbYSxC?>GUU@vp(jY5ZDYD?W=~taqqv9XV7w9K|@GBSI(glO6j*3NvD9 zi;B{^QoDknSSG=()ipgbu9lLIBCa@MakCD)bf^PvDEE}51czX>+anV{$_LcVBiTG) z1ys64)GH;)LK1_zdJZQiIOH{3$?DoU@3~Z?pYq)MG?`ewa{aAQ)KJ^MP83vAiDs}D z5jDKGnZZ9H$;rnW`4cYiSq=q!-e0x-Q@b}-$rJZB`?vO-SjaX&Nie5A3>o`#aq^X$ zkK~nQ6B^?Q%Ix-vwsm{>E-o!hzP0LRf^<3*0XX#LAQMaHb?qvb{cv>0bP8Vwqj+LB zj{Xs9n`f(91$H~7jl?AD=F#s9N!NKIn;x^pQD}8>J+)n*x#Up5c0bS_?ImMWku^fE z6go5ZInJ(5s`(SgqxgL}7Vdu1S(yzvyZxn2AaWJ8S=hY`a))L4Kd%gS0SSmF`v1u0YGUe7{3}S%z#vQLsu)=fKCk4~2CFvuJnSx^i0XuH$8c z@&iW^ODYTMxXAtS9mEkeiJk*`ebOrL_ZRj1IYTIQ#-3eJ2kPMHnkS+&{O+|b0*)+BR#eQRU~o|lv# z=!U{Q+cNV|75<=Ca*DT+yFZhgDN3dHa_v>yi1y6UCU-pq+Q}{B0WRq?m7+zi}0Fl5npdJig-)IS#w z(O>%gM>C)Ro=5v;FODUkU^fO~-5v|gV+uoYZs{SfUPRRRsQiGbJ%D~m*Z)*IQ`ot` z=Uz`fNU?y)O~N<9D}Rjxj>!<%c+Qr$jvLXsfGDU%(lqwps;sqI$S<@;=W7D2Oe&pt zLMW$etJ8m5b$TPnO+=&%`bPYfPho;<;>W|FRR*0f9k+M%7h*#+q&I)Ii^hymH0lNX zPxIIZ4~TeJc#dwy-l-#5!Mb>??n0kpg=tyPzI^QQ{}S*YeAkUbd@6iA1O<6Bb|*Lx zYZg=5{DLH4q25otE%1h9myyFubiTZDSmVb!nzJLE!2n)!DUi|QK zoB26JgJr^>7u$RJy~*TH@j}>gIRjM=+plaw{9UdJ#(ZF_3@NrB(Ro|G-0_R^`z&c4 zfm1v_djt2J?5f6^ zCpxMN`gOb#V#CMBZ|g{splKgynv5l+8@+AlJ`W|Y->qVPqlR))aKV3~GnfCE`Ark- z%(s(at1K-a;gfY7?wU$Di;3Q%QALv+{pZMxmYTb$qe)^$Aye0g{|ism8~*`lePYhd z4igKR(2sr>|BgGLdE(Q_>F?817lGK|AonSZY6d`Z*@O-c3m~4t(ishj zy5;XA9~v?o`f=L^AU=W+;TOgj#*Af6h&dF%0(Wk+RJpncRvuiBw!7+U778XtBbJWf z>wwM^6{D?~E;2#|Hpj3}=&~2O9M(lf$&F(W@S0J`#t-*;!+)uIFQ8MXH79HpaWMN z3%HK{E?Ou?`sLGlpcAWM5ql;{_P5!SDGz2dBl(Up; z{2KL3-;TS;ftGi(d2fM-2t4(wH*Pb*Qk9ASC}t@)7TBzV2+9x4N0plZ!{ET^(_m+h zYSNY4V!GzW<6zvxt^`cS-7^MmlDn!lWUez(QXl}xNl?;%8##zpDc4Cvr}EQA69>P3 z$nf5)%N?c5iwr*Lxs4RTV&u`(H{8QfsH_Xve`Im(Jms`~xC}0P^>`HAOZ6XuvXcJ4 tQt9J9j>e>^9Gd&6$Apkk&~5D1%Y6qfR8RRBJgAhDcltJgJLhM?F0g$ zVZVN0rdE6(K_Ci{oRqk_d-}f&G;j6oA1~xRDCjhllpEM|V#ow4l-UeS^5Jtj1)pbT zD-N#>N>{imG|w6v8kj6>n*N|QxTNW;7h5;DXy_8y75g(VjIb)Bf02Mi*+__EMxhCO z8Gqjymidd{eCO9Muj8(h-NaaTvxHwC6K({@FWSd1GEeVzvv7cw#X&_-Y>|L}a>WRN z?~gEsz&8g%FboLPjSGI=g4+L21O28cY`0fZvXmp#qV&9bl=(nweF(W6F=G|fOp;6@ zKY;Y&756*OmNu7Gsy??p*EfDg6Ep?i3+grn1{Id}cay8Bx(BnwhHT?qU2r#n;;4YR zFsO3FR5jo^Kb+?+N=Z2ZRC%pzVJPG%&_Q3NWsNFtWobQS@nd*)C>0Q<5CCG*Bl1+~ zRH^35LDi{t;zSgruRX?uRS0|Hr5UHxC^RO*VEhM=wae{4;nU<2NfA<*0=-zI zXwm3Zl|4T)GKc?~Zov?fczq~=+w{Fz79SOiD2sv&2RdAby|EzZ?93aLr*h)bf{_IU z!}ucr8;F4J@ep)10^Nv!Zr1i*VJ;;*s2~)74p22>Q&*6iaVdH;3DEQt=q#`IX>X3g z)gI;xQ4}wdn8>#xuh8A=yuhBP;+Bput7|t)TV6Q~-)oAuz!Ltd(OfWJV_xOt8p2uh z$31iTn(#!kj|lrNW$7;$wupi>0Rd5D)d#C^aebsdf0$nAWnm)8l=I*>9P>%3q!w1! zp3iBq#V2WnPk7}JM95hUCFCLGqi}YF5)t=&LN=bLTO136C)_#}*~?O+#osTXN{4E( zZ2isHpaj@nkeCP~`=D1^Y|6Jm`nD%RB&10+36AtXJ6cW1Clu43Um?K~dgj02Gb{ z319)06#Z3|sn3MvanOret^Blz*7bVt)~|()Hz(7T?7uCD z2zYpR!JD9WuUh9{n=mX*m74Hdi-*aXTx2fGwmehvU;WA&KP4$qBZl}P`CvcU2=J{dPxi?a-Hb60{2Q|Vou?)~T4uYX)V61$|p{BQBHINFfojh3gq9cv|dX1ru%C|o{V zFpL-xAfFwq$tsif(2L3pv5>wxu6Z>%2rcX;s03sPn2cIiDbBiaGU;6<_8DCz-v36@ zypBX2P7x~u+i511tE*E1YeYnb^QVb#@cD-QHD}g(qK*g(*ALeVqChbj2}DBsrpK?? zWE)>BK5j*Uk&OhfLk@V3t~imGqOGC`=K$gcI7b)98aX{^Hhon$WL^0_cFsULw&~5Z zt{XNK4h+m_1PHxAS2d0{GB?Mtb^EZ$qB0SpV_^#G08b1|&NsX)@Btajb20D{tJe=we1Be&>d(~ zrY!u;7SAcG96cGsQ0RRExy%~-!*=4HPJG}vz*Y)~!w(KH4`9KZZ^MKtm2{abs+PZr zXN$rzi7)U&9!PS!crxSbzaD`$Pw8J(ZiX3m^QV!*5>0F6^T)9(cZOQR_?nyBj^<|= z2U)mHD8NhDXbnb&2&YDbf*R@rKba0CTDT_bN}PU5VyGk%G8{ZUr$pL?#qtEUGCHS{a$fFu1Jo4N<63}aJ0b6Xv^ixLM1%a#d(GU zjaqx6@eQGpOaTN);)E2k&`X?oCbH@S%b_yu;e?RMN~Syr;bxqC_5h5bznHQn_78Rw zO5vw`uo8X=1}+yf8n^T->1448K%|}0QP(N#US(fd!cF4kjrEyom5u9>B}r6KlK3dl z*9Fx}idr-ysq~R}!w2pxy*Wu#0b$BYDzIm#yPoMAnCNpM0E3?M`Y4jh7 zvxZj^9#VfSD>d3OFW0fQdG-1A-40ki{@X$)E}%X_;e=b9^OY773hkjn*a{xJ zM*`!?|92f{$*)A-swbovyVyuzR%+=w`BEzU;FH>&W0y5uM&hUVKMTS$cwJB>1h?u# z2!(t`Tre!T_hrTCkg9&nS>u8_5{d}_L5DtCR>uFOT=S7+^Tf3D{<8<<33ZHg8n8u` z5+q@z-V2(E&>@7P?P=5Z(Ru|@`?9X$v&1xeNh~vjti9kc^?aygRFm9gs8u3gtgi|% zT6(NP4tT+alp$cX6&mCaskUr}Xq!5Ne{0gBQSE-Z_$(P~T)Ot&%VESEpMxneO7dwi zC?i4~Xbk)1&z@8xgecIzpc#!?$IFA&GCp$BQmLr-sFS3MHO(j}wKk8{-rnsM%yf-! z?7g%-^$Y(e-3UepD6h76R+Xjg#~6d}S~KGxt`jNHDeyGNTuQ;g=XN@7?+Q@uzIPl? zaXMJz{d$jNHrWw9C|D5HOy3ll$O@F=XOGzB4J(+ zbQSAimGGS54@S_CX{GO3I$$>>-0HjgtGh9+? zkC^rLL0+B+j5qy}YsW%)_)xW)-~_SfPAE;x---AC+7rRKr{U6p1>jux@#A zOg6LebO9Q}Xo&zd>8=$~#{COsT%$ug+cgwgoL7n13$INvH91)0*_Xy)z=`B1b=IsA|*m8a|N>0>M)6DbQKP?FwLp-cJ85KRXa(+&qBaTMbqT zQl^um8c2fGjb&gX6f;Jvv*=ABndU~}ZU=Sz(Us^DXoa_U}S0qz_L&q2AX8A z8yo{JCg4MI;9-!;Zbdpy``!zQyShAB+YKa#0~1o*OZ2K>)FQgm zZ5IYgF`Yk4mzEUKUK)jupK!955@8JUK{W9s%a}cm>%)}1f|98uxaA4(1KP;VnrEYf zHBcs&{=J4UzWUR(Pm9T0o;J_7XE=EK-Ydy~$`{lSP)5;!xx-szdH4HH>>Uv^7e1he zApBq~N{&*VQaEXd&D9b>)Ty<&Krhw_wcY3Di0eNtMLHNC#9$!)PfD{lZSF~C5k2P( zF7=l|KB*6MJt^lA_xehpURnQz6)r7rc;6XB8PrGH(1M9B0|O$_cWJ#(N*_IStZPpt zo(zX9K2OKn?YqCBRyp0gEb`gSuId$!!r#b_G`?Q!+k4#qv%5Mo1rdF^&>Xv>Y3=|5 zmYn-za45_sa(|2X2Y$x=yyv$*mViH=^gUTT$mw22RCRGM6_rH%>j@ELHtfP;C5N(c z202P9{um@dL7oTUgKn;qs?3j*Rkc)}77;Y5nCgY?w90V_zXgY)s->-dIRv2&m@5 zOPlFYzUA{Q7EX{6#K0`nAoXZ0^on|p!&Avt+|ZBmbrr`7tEFZld%PR(YNP)xj6G$o zjvRazTR-hhbzit69h)nK+M=CfA>30rqat*R*-~N-w%KRNCJl2cX%svfzSLYL^O{~? zan`nlROuA}SqOz1Dwb3&GKIJF}R! zd(PBu4dPL6u&hkWpSLX$L(MCv$;GV^rbYGD!b0q-N`bg^RY1TlON)eCYRp!!ehsljf1&}xBues@_{A{o&8&3&WZ0~N?%l$=0 z;r-LI9}tEpOnuf@$;w;iR_+DorksS_2V?W&${H9v5+wA-jU_FSny?=BH2@I;bk zDqBRK*Pi$whE!ZEej-yyhXFTpmIXzzR)+7=EWnl6e0iAP>H& zFeV`+59;)e*z(*zRKI9xpjTCQ)f2np&u4$LHvcU=httBS??Y^}K3f+TMNRqbr$rGb zAscf>jqf~M&YN}jbw14s#x1K`d<*#u#_4VIjK+$1A?mbNaX8T`H155KZ{V^B99RtJY`3)#>+MfoLN8 zt}iC!WrA6dy1t~YJHbP>JF8iR6RO`IoBm1Wd1LY}S%qse4vQ94`dy3bW8yI-2+NXmvf3)@sAdz;VI_qoaX zFM1h(Xq;eWF$M!Ji54Y>Ok_W5;$E_kg}B_DH$5=}&-Rcuv|YK(HbxV(fr}FP3!Y+R zkdl47@38!s3rgO|bk00TVjNX+h7q4%dt#>(>O_yJc-O3a9#3IZz`-)3C@Dc&NQKD# zIMnhm9Jl3^ujy*4bDny+zZ8au+2DseQj;gMZ|_C#;_6~;3wPX&;$Tm79llB1>c^~z z+lr8iwVR0(TCB$6Y{fuvVk_XGPNyKsEn3jqFa_6r=i0VQR}e%MeAJl*u}0JOX|r_h zq9dBPskTM7L1a@T-}@<)X3N;Nrf2v-eMvJHrHM{(ChOM%1V}sn-dc0;a+|a zYZ!@-u$Y~Z8|zBbA!>==kaSzFyU<-#W`%R^#8|tozKSUQ^=5c#TT2`eTdK$VrW)Pk zZT;ylpAMrVRbWVPFKHRZ`{MgSD1M`&UJ%u-P87sZEVH<@!?D^@||gqfq@eKuez!eXLmFD3Nq2vKtGEQZ|%c6<2YO4b&z zQV$i+wY>;PEiG~zui3POD=ENBVnd0rl?yJF_2$0~URpTq_6wa!KSCO?RZ2YbTZrbR z2^FRAbhA=8EjcnoeWX+^>7OB;}ME9?Ml+vuF_u0zvLaSu@vR5>br?K ztswH%rWn(pIhJu8#W1O2g=B11Cp%-0_I#}hB@Ml@R|v?z~QVI;T_^ z%JX&or^*Sb!7u)iPA{#JnXU^j$3y3#qxVW3s@qab2d0XW$yzf_7PcxIOoj`j8u?VH zF?5-BsTP)JsR#}pJ3V_G9f?RYhn;AXl8Y|=@vwGsSAD-21fjMytR&bzyeC%o*Es<= zsQYyl4GS8kl;hGO0-1xR+RGY(ItOc5MbWz$dIc@N+gnTLj#=x|+^Jt91MD$Yfo5q! z*JFQqOE8zj1jFFBE>A@g_R;knxo5B#$Du1o4pZLtxV=Tf}$YsXhlo zXboB9(Lvd|(KV2k_<c*)Np@H!i^9GwoGxSPg#S+Bqj!B*J&7pg2B+&(XYsuCPxZ#RJA5tQ2&^(diaOw2te zz{A$dyLTo2i4v_+>Dl{IbtS5|a0Kr1GOZ0ryZEcAsF`}_xTj!CYs&?j^R5)OPHn)kf>5| z(h;ziau|YYq}C^%KV{mHMF%#7{M|Oi*)}1IrF(S0J&hMuh=Zh_uI+b(*pV6ZCs)+f zJ|yr3dN|LZ>S^1@drhiZ=84)iN#f%w5#kT`zDu&H{XX_Foz<(&l!$e~t#(ErU{d`9 zFZsI@0(YGw|90``Vg;J)wrw!!a@HK(_ih}o9e6vAJGrNpZ^OM7M@Sd9YmF+Sl#EOG znx&Y0wM3GJP^`_$?~us}4n4R1l;F0k=8}H__jLuGeY*yzwkNR_Dq^_T-B=K570`jG z-imX6P4ef|KU};pPJ4Jw9tzEd^B&*6z6+<1H2-!SH=91>l*NT(S|O!HnA`m?VoNca zLuY1Z;6dr(cYJ2rUpFSLU7rQ!xILD& z_}?J?efr-4ofFRZD@&isTSTiv({ndEKZ>6@|1nmunF+R#K&>%XI9)pcGCQnZY6MH; zIXghswpO6!hrtk;tqBs5;cMnjz~ji0$}CHm#ZbK`XQ#JgI)9hegPnWaUquG5{V=@f zQ?6UD2p`_|eT&l1?nxKKVb-VX$Kvfidavc9SpP9XD?fA~;?C3U0c=ZZcBb(>G5i?I)aX39% zCKjy*IZxI2O=BUUN{(3a-Y4P@2mhzNKq%E|j(Ek0+w zz(0plN5rIdfJ00!-+@dd)eWWbv57BI>=tM345hvXtC-k}E^Xk>G_jErH&xqcsEZ5K zerb)#+5i2l_fo}^`Q3_3+}`}VWor=jp%$??h-vRQQFh^`^=>AOsfrV)|EY2X19a3|7%Be48OO+EpGxAxpZ3#=I zf!(wx&x}Jfp~R!jok+WHFSNn-=`t+cc7fn)ES{RC9-=0=NyhUX4Nta)5Lxy%??-Iz zq0_Hooemv6i**=BUd)Lr3W&oZYFtd$nd>NJ?I9jyGz1V*fz=`LHqPf%tIKB?XL-fko7<(5r5hmzQvFxe;d8#j-W9! znLWt-Sd>nAvGkPqHSNB9zPv27=y&I>X7n!ya#XEvS~KjEx-NvHAvs`XjQ3ZlRhNQd zB*%fVhGW}1BD2L#Lwg5>gGz^!JvN{&uPzQROoj13mbVz0Yg}x0!ar;4uC6ACH3>hc zeIO9Nl20xd547ss4kcCb1Z2W(KqPLiz&fED8#3^}_{!nY6G58`ZA6{|!>yOGOyma~ zLy~a!k9xe==Y@F*q#Ir&kw5EQ@!=bqsY2NSbir50sZqr zI3X0_!CqNfj-z*=PYSd)6@M2J&(M(HO}Xqv&O5PRgb}`EoRj@EIf&06o$r45C#qVO zz2B0-xUo#Es@DgZFS&1G$ml|rEWBTWxLOSocTOnrV`u)j!_&))DeJ%5nhF_6q z#-^ve`q{53t3KW~?9(WgVR=K~_tBxC8tU5X%7(+NQCobxa!c|8d|G2=P&{(xg3*ew z9tD?X-a{Lm@h4U@KbD?gw7LEjEy}bdYENSut>C!w_6YjTY<>M1Pa|&L1dvHj(fZ2y zm0Ir0Hx1lCKA?y}Mk}El9H$tZEgdiMFJ8z>G!-kFFf}$*cagXNsf%s?@0?XAE>TYq z-1qVY8;uHy9;aH0#op$>N3fnA8XcEDKfy@-Fr8xI*oAL|#DMrD4`Iid3SJduLrjV8 z-{DUIGDdYbO#5;$E8KHiD@&2UF&`#(I-bYVlK^w-=}dh@U9*j-z6Rn{a8I;5eyFVq zuvKb?)005e4=G&P0f?8vUl$g>A$OsQW5&?25zl-P_$QUCSmXVV>~qI<_N;XZ^NE?6*K!sifjcPTW2I0BopUAtv?o|@Xs(vJ6qwB4l67eKqw>I`S8?lHCCkUq2@#L05cCi4K^;%jp z-I#ce*NPYyuRA&vZZj_Whr=?BFJf{AmR59+J~-Deh@2X-W6D6RV(3HTX@l0; zXbJE!=wnozGR@idIm1pi^|GNDj(yjZBG?nFQtLhYG74P4QIHUwXNr<#Ku;jHtdE$m z$vLpTcuR6YiE-%9S5K3wd(h86<(mCnpq5&mBQP(l^(o9^Jb=xL&%J+NAoy)Fid`nT zo7j(@B#u3D?r4Z5Zts?>pajVroP)PYa0jIyQbyX7+ZfeP(PDK*|b-fA@YwYx9Rhc*Re-gtn~IO0yEl}nevnzk`9KNnwOh8Itv1( z)SEM8-3%%+IW$RemLn3Ek9g!(w*%YZQOr?PsEG#To7Hg?(4ed>Zja>Fi_p1xg z=B%YQlCv;hKJq!rnqeffG*@=pZ`_^6=hYXT+1Km**@_R;j`NHNIt>y>O$1$2+%&yb_NW^#pQSdh|~Gp zW$W?Wyun*eqXLSV5Hkp>$VbuwNoTKeFoeQQm^N}Z_`eCX`W=*PNykWAOXt}rnmSfT z?%oJ_T-E187Cq0O$wIKX9EMJo9e#kRrcpAA7b5HcRR#He+ceO zudAGQIUau2?%R*KRvu0QGL5IpG{cm%pRhj!(+GLRG^U+KbKp{796G3yJa(KA)|Ady zQa*QfEx(_x*^)Pv3q&}xR6z6jye2Mq1O zaJX-p;3_ln9SiFN9f?Tb<9X7gS}hT13|Twz08?lvtQjc@logJTfE;Q+G)NvjZty!7t>YW(G;{JZE)nqt;SywtVo0ng zkWRp#{@ZP06yK$)GUmMA*HH|HyrH+4tBdvLTZp`*1P9VHM(eRexJ4au>;GH+WMDaz z+I0wvpwVu@C3AcHWar4od3(JgbqFsOlb2^gCV6Zx`WA^L1RsmBzPR7tGbq-d!{}9X zvLseVvf>Vu4_OzYJi;iN;dH+9{ko%v zL!UMG)8>=p!y7eIJ(+Z`JJ=3}9E5%9Y>*)hXtSEk6lNT)ValhCz4}Nj&jiwAS)`Gc z_Bh9$^DPjYHG2UafKa8tZ=SMAhcWKwI2*9*xOE>wzT&0^I8#K?1n{*7P4Zz0f5IJ| zKhBxe!SJjRsZpg3jRwP2qass70MG8?wG^3gW7r!ih#3Lv2#Nu!FDU&RY|V;i85`CL z(WmP~1AwE@s*PL0NzG~R&0vp&7be@7oO7f%V~qP)qlT7 zQh02#q74zL{Svqp0c-voB(OlK>crpEamEWJFJjyJaPOZBQo6jTgI|9xP{Dzu>VQsB zz@dF&Bxf6wTWiej^oIYrQW<}q>Io;|kx{{+AN=_|ja|#bBvlZKGVoDVzF3eWqk}_7 z{rNiisIGuS(w3{WAg;ztMAjHK6c!!}xvv0TgTyTLlmyC@n=9r63r~vNw+#;=F_ZQ> z&F(h;rn%Gthnfo#LkQl$dSt;ku5fpriD+hII4=A2_&Hin1!10HM;sS)iP(Ee=!+Bf zLr?jCh@(_NH$esEUx*YK;82;fAU=GIihO<#YpxrO_1D)mJdsRJV{4KZ90A;{33 zq$(n>*-vemTFvI8cm-~*7&!t60El@9&i7+sk`dni4jtsXiGw}B1<{}cZ@h13!B|DO z>i-~kv{!N4u<#Uoi30+P@VB^C;d!=pf~=ogrw{gP)1=e`@)TiYVUYWF-Ni}Lm@p@R zK(4$}>woo|7E}<&n_w*PG7|>z0Un9QFNg}U|78FNY^YBE+4es5-oFMf3rUT%9oKM* zQji!GSX#{CGs!E2W=rNx?)i6-1}eOeVptFwP@;}e+e~r$2M>VD@K{}SD54pGQXU=v z1oN-o3;NE!aH>81TFwr)h}v^)On=T1QPJjjT&rasf>g=BFrXml_G&i z_BoHvEA6{PdvO4mGoByDVvdvMF#ft=Lx24REC--mV^s-Y)L!vFxd0A`tEoVi(YF>f z3;@_#KQYFfQP*+L%XV@VT2+ETQvgQIp+}A(<<$1rJIS;e{@%*xgP}n3B=%mzF;H6jJ$9(W=V5LS~13+ zra?MZFmdR?FkdAt7q*U%N!vbKt~BB^#~KWL0)uGa3_&_~Kpj*w%Ol7CJv->XoYxYWHRb6J1=DW2m6*& z-c%p~F+vKw<@DnpcJmYB$+)P&$md4z8+0?VB@8(j-$c3|k zNk9q4{D)om;^#IMFFoGq^^1T+H(-1GAK`#nkdgCkDHFi zdFmIfGbzrpVgv_2nkVhVd`b%C5ED2Ryx+#?3Pc0o1H0ChL|}{%X$sFc#4cByTVU6W z=L=E8eO(m2AWI;vx%@%ePpD1DGoUM$Y5?ZW zWSU2(QtkBSvk?udN)REXD=g)}U!kRN3sP6zJ2+%G*`8k6EmM4WyX|P|a285vuK$t# zITbhz)1Ski3qW=`Nlohtgq&(pB15oSL%zmasnTo=b|PhC_HP&hAeH3W1X&EMF&qSk zy3Jw@6r=DR&49RmISFi8ZjUsVT(KCUurPqqEA;htIf}pZqQN{I*(i^%$|$c`hA@Uo zt00X|61y`fa*KHaya#|-*9D|DKF7mPDLk8_VfjQ^^gW3Yc5??yQWns0!iXk!PtxSR zxwLO4M26#wkmXkZH=yLF2P!nhg&y1TtqXw>?cpaKgc)5OnLrXmOJ@?zn8CBRN>T|9NdTmJy&OW;J4HFU8Cey+9^7R?(Izjf;<- zev$lPFw=MN2Q?a1yzUq&JnPsPsX}ygSSk@Fi9ofV-%yNFS?ZF2K&$AZMV|;jCT$qp z<;Q%g=70!bdnt1_Y-?|gT}Vk3yf3nGe?pRB(hM8TtSOF8I4WL;qwydK1sGgZkOJk0?_#fy!`xPA5>etgCBt zJY3709Bz$HyQZ8q6|~rMLPmz$+e{W1$jW-$N`HQOXp=CLby<{l(^4AG^%v680x)a( z(97w!MjY8?9!FZS`dqG$w}#TOD&dIkFyo`-@9ew%Vcxnzs5~iVY4Nx&_(8!iG1R~F z7_NHTi^?i*M;3@*o(i3~c)^oX-@mJ~c>IfI$_q)E{zQ!yYOYAg%frk3{(YXsuausr zJ~)Z9zsB6MF0^CUm6>F?T{eilppoMuRrV`2p^Hm3Cr3voFNJnt?_2vDpPQ8~mJEpI zVoX}bj~|@A%L~htl3`|!&e(7H-_4iId>5F#+W6Dpa^h3(YasJs32Tfr2w_SU17rxF zZqJZ^ZQJ1|n5L0`&zV)CAT#_jd|X1(%>WC2TRJ zWS*xvZakWg9V$+FFXE(qW)sZ>V(sc>6UMjIhH%F0RWG-BD*|o}c$Gg+!}ODkHA*8z zZ#J@oy!Zcbmz5C+J<3irrk>w=Blk&DM1d$>#l}vz?r_^d)@+3^GMtZ#wXW|-t*k{m zJ6spfHHcaY(hgF6e@AT!+CACcu#-Jh#d7oBe=i3KYiR+ShIdGrr1j+^N_GQ}J^xA9 zpO;q@?1)<%xacjv3#Mtgm^;aI=ouhTih5#Uc6-NYAjvMEQq)SPlqvK$lfW2~$}T4L zn6jo*XV$bjf653B9m@{I0!bO_xS^F27;--TV^=aDewZ*VFuk;*39qiRj74~N(q?LY z5FX?uY}@g4Y?`WcPX7jYbF1M0wzR?`_YK|hBV2WNyl@6hbJWZeJZ};(U#W`x#MbG~ zbRQ|1>~$$cIO@{+TB>uJC2GJ*4Xer#5&T?nB*>1C{}v25Ysh^?P(5XW$lmOeb%ZBg zG(T>^#xK9xLOXd+t_w8TQsiL-RXKzb(N4|K7Eapl%nDSE*HZ^NL?3%tj%hd4=X(kV zC11|^kP>XArVnL2HZi*lE;e5}H49qmUi>+}B66dXQ|*Z99nI<~n|+}ay4W2!G*Xjk z|FY(^OZvY2<7hGJLhF8E-ESdQqL5;=1tIKw@5yPr5g+;SG)`6Ry_V`RauQA&oqFGw zmE_qPHP0*8co+&edDeQ(ir3G+!OYz~RZiM6nyxVB?U+w?Hul1t#bE#}~?cbcP zhz#S))eyuIO~Ov_tn=w1=-n@XQ9nciJR3#mNKlgz74T{BSI>vY4RE~l z2>k%>366`6)G7Zf;A3(aEgfz9uAn5Nr>Ab}Ll=}b0y$1(9j}6vV0;w~I{&JUefwkn z^00rU@Ba9%dtLkiz~rHtOcE<92wyK4r_SIy4Yez-0vuk(cdP9 z`U@!m_QxGOEJ41S+~0vw!+ZWsL$sjq_U|~y7mUFi62H>tY`LkemM;>Ugwc4|s;74@O zyJ=p?#@-tAWK{3DCqY+(wp1vV8Z{a$Y){$K;4XFb5QuJs0{80tS)A7gE)%9Mr1g0o z%5bh6AFSL{zO-X}Z91PuxEYVgcndL-uoK&nE)jp~rKCW|q!4I^TQWE7hwP4%@EZ^E zQ(rmWd)m*`*cylIn)D!ebuhLF)t~Nm-RZ?)d^BowySmIa90vw|r#6#Bs0>;{&QulL zW&R!|eDk3$;%e1_xCdfbX)_E|ITSxd)bt_94WE2R^J8_h4$E$_#X_HIvC#JubonJrTS`0=XC8 zzxRgCMI!(iHiI1y-NfTE-|rrFR$ZQ$o(S&%l~CX1)or}y&G$**uS zebRRFYzo8T_+F>_{RpWT;c?#$f5d&ci~o#opuYmjZH+>^ZnbI zaj0Ya;-aOb1kPj9f;DUo1{`OIRN~Y9<2@z`*z>QbpJ(`L+wLd6?fU1u*n>=;vjU|+ zM?x^~?*6RZrxfqGupOL07~cJyvLy(x#tjnDlZgA(t~CzYc$V9Y%UV-A4FsD}2Bk@e zQzoJ!1VJOI5~0@~23Q(A7T(>}U4}huhVuP38h24&e5wD_<`i#fP&0?)#*1j@i_c0< z;P|7*S*!mXYYJ~%gd;gPRB&PiZ;N0Mm%wyD1kd;8ad_OfajFX8YhAzfZ?tt~@epo8 zgJVUG)n!8|=Z(Y6$cb#rb z9nq~GH}9b(;AXj7pCJ$!l*>&!{B>DcxnV)u8=VSn4QUgX9}(~WT`cD8>?AJeN-(jl zrOP?F58E^)H2iXWZ~%C@e~2|SPku$rrw>`S`s26U@plCR;{rI+A#RhW)a?(9nuN>E zLuidSI_A--Nc5SG2h}=uT}!oYx6A2nfZ;LQn`Le0XV11281AK}pxtKaTzQL!CWGBh z&2-&*e!PnDNl};AeZw!a?c4a^+#%Plb^F+CX;|NX3gFMX+Yw0B#0%sJs7O%p5NwE8 z?Xsdfc(y(mOrb9(zLCL+eL9$oeE#&@#@u3?eRHg@kpHE*aOpGRTJv!h-2wM*jV#=9 zdJ}BzDTb^ZKTw-OLpW}@y}x?#4812}Uv1AGU6m-Eq5CBJGrgb(ot)=u_Ks1i{S5ZQ zvK(&99ZfeNq)+&K;^UHHguk))3{P{1>DLEhj(0u>vKSK1(xn6CXN%v{AZ>RravzM; z31l5Z#>oB8*K!VbhusXx61MabX&ja+xQ83J{+MmTch1E#Ni#|W%T{_ zVqp#WB(pJORQuZe`OL`$laphO^iEHy<+jh%!s(1;;-UPC9mk2^MWsH=M?@ZZ#*{nsr@|(hVbObB$JNX^S zkMp;+hIr%w*hlt{3S64ouV}WqYV5a?y0km_J9kxqI0wU|Dx z{qeD$8eOp_dBwZ#_-FWXIzdv+KiJ`3dVmOc4>^dyPDGf!@mr6CGFlLUo}z}srJ*@j zjvG|v9iX>5_W(xP9}ob|YCl%lGYB{-0l!dNDscFMo$ZcBlaNICR9xa8Dd|d`{5UzY zU}|+_Tjvca@OEejx*k1LiL#X_(51RILpiF@^Wp2je+Jr1&!dm^C>NJ;~+ zuk(do=ThnqfPQHP(*$1whDo>N4*sQA%{)l6=u8+0bkIf01RHN{5b?)G@J7qZqv)jZ z(Z@e(5~fQ`TmLqOol6hPP!<952r)fZsC7$59_Co{!hFfwgVMZ}IzpEdK?Ihz6uI=z zrw`mPmcI|dj10I>mP5F*FYmi4mZCeFui_XapU5CNC)zo^c>3Ji~QxmZ#G#xPEuf8?ttnTG z2-KsMvdE!*C|Q2bEoT+o*u6Ou=v1k}TJys8q!R26Ni56LhTB+G7;4le0lltbfO&aK z6m*-vg6{UkDPABWY&h#=dZ!(Ob9GB$m}&vgBY*qVkY(2!;ZfCO#H^oVStor|H~1=L z-6t$!@*|7@`R!ukW*kK&pSy$)IGIlhMt_lFt#1sgAc+fXZ8A=1$SmMc$zaJG6mJ1b zimY~|_22)>%nVe$cP{IsrKMwjX^aNZ)^waFKBe*6t?o*y*az2R_~40QBKJ}D&;0R2 zIZ&zSPCnIKoGn%ZQB$BJp@d0HLoGgkF#xUO69qF&sKIOoilCcsRQtWlMPCP#8l|xu z;CACeIY(^eg}x-NWA> zA7iixa`xxYmEgnO{2Y2rAqY|pR#RG{K&3!K?t=ia`|)TB_;Ma5|BV%HH+J=h5xsK! z2K1TtVoY4&7O=UXZ~n-ArqIyNQOY-Q@It$mXpKX#!1W7VTmoc zh0~2EMo30Uf@+F2IZ$kUOIF}!Bxr@xZ38@&{FT|;E#a4gTiryt4ZjRHu;NnnJ$f4u zaX(g}DAn)9J!eJT%s@xL362IQ+SVkF5IYys1Z1MD^HZRcgB+Su>5^&UY+*A2XBJC> zBr&ek5m%A>A69~e*ap!p3UXfJa6Tkp_3xprLfK;il9KN7d3gL=# zW#hvH!ULJh{^EEn2{H&&=wn~Vfiz_}9WpHZTV(2NsHaRo9CF0A!31l>j91c2ZXc1q zAIQ+3ffM#8niza9mSo%Qx*x9u2B;sn^VtgR_4pQtjFz8;L>-TKwkBMgNnQLrT&^^9fJR%8bZ6cuC- zTpxP92YuNy3J=_hM*rWh|DRjY|DOg~bgU;ojx`D13_|`afCNYmq9|1<@g?y80nU_} AR{#J2 literal 0 HcmV?d00001 diff --git a/assets/resources/textures/silu/ship_B.png.meta b/assets/resources/textures/silu/ship_B.png.meta new file mode 100644 index 0000000..30e8286 --- /dev/null +++ b/assets/resources/textures/silu/ship_B.png.meta @@ -0,0 +1,42 @@ +{ + "ver": "1.0.27", + "importer": "image", + "imported": true, + "uuid": "6d61e1e0-435a-490e-af33-addbe85ee32d", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "6d61e1e0-435a-490e-af33-addbe85ee32d@6c48a", + "displayName": "ship_B", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "6d61e1e0-435a-490e-af33-addbe85ee32d", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "texture", + "fixAlphaTransparencyArtifacts": false, + "hasAlpha": true, + "redirect": "6d61e1e0-435a-490e-af33-addbe85ee32d@6c48a" + } +} diff --git a/assets/resources/textures/silu/ship_F.png b/assets/resources/textures/silu/ship_F.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2eebb231b1cedea1de45b7eb51afa62d5682e0 GIT binary patch literal 15713 zcmaKTRaBfo)8^pr8W>=3f(J-&cL?qtEWzE~86da?ceelu?(PH&?hqunJNxGQzumJJ zd-h`Vt*)-Fma?ZKloh2hP)SfhAP|PEjD#u(1oIVm=_4Zo|12X#m;)au4l+8s9&eO8YQEk)5OJz;L?dS74!^A;wZycrD~Q-RjoGI zX?eY`YM8cbT|R6vv2AUyD$=v9U$)A7nQLf>{OO^Ut9cgI6)^IiCXNz?h9)pXB*Su6qW6#7BLJWYc2`8x6uV%8eS1DpmXj9`0t zWRL!`Dk@O{wXjv7Y8G>40?`GsgU*QO&KJle2mfPzJcK}}F7 zIpHuBG?Y*{gGJ&;Azl1RWeY+87-;4|Oc_DDH7auz#{{-z?&lz2M+<=o2v#37ZIk%H zrGVLECxm1P;sluR1PsYnIxytRAW4%%eHTFZ8YF}cvXL4xsT!?=;LJgKKw$vC?>K49 zE80QRTa||%He~~jpgLG%&?h{q=JpZsy0`%L07^gsN5Ob2rh<15F;y{xARRzm-;rwkgKoD}-<Kb8S^bJ@?0Qg6RQuc`;V`^oho+mDRbh zN0YpR(nXWYB{D`m*gYN>@T=bhV)6vdAc zY_|6M>SXh19}Hld|BVTT%3g&wr2st^)ckjVM-oX&eekDD+f2TrIyc#!Khl3_KvVq& zw22|KvM1iJKZ5NZcJK|R7qYm>4X~$1%c((TFf&##zalIKD(bu`&=f8H#t-;EdEt?r z`YO5V(`UYYjaW#oS4hJoG2352hh$o#rce$CSoofVMz7|5iyHO;TZE*zj)YM-ecD1sf5W zrLOP2yh)yxQFyUHj*-oalkK1xlgIcIv#!@NY1MW1^X*+cFQ`2 zAADG<{96@VDKY|hL?{3z2qwdp5qB568-lVV>z!<(#|G`?%eIJHAmG^ts`L%AKh+nP z5rmi#zrNuFTXa{ddYz?tafeXCIED}-!@*<5XJ}JNY_?hieUWx#8@OADn>{LxyztRb z8mP!1J!p;&hhT0n0KCvm7A@0qobYJ!!yV04NZwP)B@Un$MApI1`A)+)g6IR;15VGE z>k?_85w$+)+B)Cdnm)0LfV)s2=o@1bgTiT}gun>IYDsp>E0n|zmssMV9#oc5t2geA1ZH!1 z?P-5qJ7O%N=L?_dxSdw22;~VN1v;sRn%y|Djk|4yT)#2BRBPQ#OO{{_l0oW&$%O9# zWf$;~XHc>-X3Kn*kMHYQH0MojW89=I=H?&Fz?I+wv;&Wgc!r+88N)`!-SnJUscR?a zqEK8lIC3x?qM5&w6ZJS9+e?KUre?zN92o}PwAl>cOXwdG9Wua+xMrw z47_pP`ab0xczF|rLHxm#^f6dR5EHQBw}E}FK~?VHb1xf7$C}B>xJOIhDJupj>Km{x zV<__@3GBvv%7IPiTugXvD^^JKmfq2SlxAJ-9}V$8nhj0$?oq|&lwNXwdu-doOc|^O z#dCed9xDiD92z#_cLHuF0)1S5>uGjf4>wOm*`w9fRJC~DF`wn9(Y8neBT{M{FO*&y(DiftgKQ$| z$287XS~5K4%e6ndUH)hWxAh$X+KUK5|Adln>Yco*p{##>HFe48LR;TVb2Hq)^L)BF zm4f-O&9HTt&&TKMkRY}DzRWK5lgj%{h63Bc5lho~WZn5^QT5C51i`DRdEXv&RU3@TdXVw>B=vi z1jj||v9fmT@Olw2A;=g696+W_M`KzJ*;|pG<}D;Am4u=AvSTAP3QQ>V&V>-n!9bpm z0G&8==Z2C0w(^_56ppV=_kN`(DwAY4Z^UT$`{`ZDh#v_X@wubs^Bjuu<9mj0prMn z*_Q{047Wd^sIwo<*tB^Pv!ky@ByZ@}QeA3zX>#;)!XDb|2#G-#Ar>J5j4LkHLl#*L zVd{vXv!nTdKEmExzh!~RSyngZ$P8(_0#EVAGP}zM@Y{clFfkzLaRjYqd5y3mM;B^z zDhsRkw(qgSw?)7lz!RKSGZny83Aqk0d^H{9EpK}4g7wO+(00urzuWSXKH$HK?}>gs zAqxo%2HJ!eg5iw=J}%Ir3Cb&fE{NQvZmeJ}*3{JS1lEV67z-vcoP|j$GvOpl5!zni zB;L1Z#yi-naTT_*@@&nY6KF{cNh07FJUK^TAfaS+8$SIQ6cuCI2>tDt+}vaDTvYbZ z{sLPrVx3OShxAB?&^Ln*lQt@eAW2{g{OpNp>bdoNH(fPuj4g0T^0 zjKi6Enth+QWXrd4S7e{d+KEVYgSOCyZ3!lCT9MOrrcwF+(W(Np4w8gE@eeK+;5kP@ z2LyGE^RNzYC-w8ufvAt~uS5Th9u|<4dI#!Akx}VGP~G}Tec-b|!98ln!m98eif2~B z%!<3Gj!PVk9pt`Eo*gkLt1-rLC>fT5B5^-@xIOSphoKv8{ z30*-&^|Hm1Fca;$Mz!{r$qILPyj;&2)Pqd9l{lo!bXz|}gQjTr%I=v>spC^p8dyG> z{r6UTeXWs!%a=g$U#FCg$STZ}kO-Gb>U?u4YAj@GGi??$yP=8>FOwy5G|psYtU<$5 zZgy-9-Ekf~{amZQ*p%!-K*Y7;#cTp%3}3ZN5h@Oy#AL}>Bi zRj<}>ngn@u>GuKbVgYl}o{B>~A2kTRQ$VR5^bHbasz=;Zv8B3dTi#7#>Nv#qSJkFc zqEWy)!iPPiOVn{J4~r1P3>+GwwVIvR*H%1UYl{%Rz-=MJ=K!;zWyXhtOq~n8XdTzo zP#+U6fL1qaduJlW?lm=?h|QhbFqj9DqrJj8-lem=kJ$P8ksf3Wk6q!-!hwOyrOW4S zSeS7_+F72%{553*_7ukPE+s9krJM3ANR=$MsxG&dzW@LDSi^mihG`pN%t2^*lFuhOjt^?yvE(gP287p}j&pdv_BZihOI2*;6_34e?k#$RNexpk~k0pJA*Q7mLbq z2yp>Cm7!XQ9oLJNSNoSgf4m%j;EXjWe9sEsbH=Oq;m;egnLIF!g*qRkNd)}oEf_b? z|9NjlZFC4jLE7>@$1UCS<9IeYa_^w_>bFJ@ySD~B(t5~JjT#y!Uji4EA$Zu~?|x_^ zcK93hjBQr~Iwg9GB}OdNZ>3{)_>+C9f1H2Um;c6Wy^|6xmk3HdnB#sx%x8TF^&9-% z_FJUF$Wn8a8);yUCgE8T)N@9uIZCBggAn_+(`ntae0x#Z&CygC?Grqdn*Tr(QFpoZ zpwsWQ;m`xqrvQjaSUdScHaRO(B#SR}INJ#)6(5|}Nmoi;Kyj~%qF^hIDs=WvUl*kR zakeAM>EU|La5P87vT4+&-Rhv#OZCLjo?U7pUXnUL2I+zi~)E^xnZI!pO&n5O=u{ z>_U0Mc63m$ zwXjG~q{uvK%qYa+F}d^3PZsh$Som>jM2l6uCYf;qRw0|0?X)U`Noi;7A}rs2r^vTz zvTJJeu7>%TjZ}-{O+12@glyd>O|U*l2eiDo?|RT(<}!0m^#B}T&xPIX!km}xGgu_7 z@2~i6@w5BdAf3s7h-PPY_Jxv%zV@^ej9r~0BrUjp(_M~Llho<>!x)&!`z7TYj#Q`P z9(I^C4)us<_NW+Bj&bpTz{yW`)teClm8Z|i+H-tZyY*c-)4T9IJ-#irbgQcz-SM<4 zepvbj>R)8>Me}>g^2!o#xWEc5l5=E7nyb=^yF&~F1QMkd7UT*ff=P@cmyb?~K!~O) zudVBeO?IURJD8A!gfo1sp=s+!6E92n`DV+{r^kwsf5Ldn zADhNEEXXCLla&ocllFh8v3P$76{J7#a3&?QJuO_zPAp#zyf(uNU5&5ONZ3F&aW~+% ztr8S-9UmM+NBxKHN&|m0u?X{xW+nv3#Gt9MD)+~n!bmyJqQCVNOe88>=fdKNs&h_UFGc@gtbYV zQ)EtRfD=lPurD+vAK|Xc91Q{I8@`xA(6J!-k>;AoVkx-o^lT!b# zuY2DL^8Kg}lw*`qF8rbF+NwiEE3RfF-r`+a(j2X;he7`)5M2?nF5slsx&Gcs1Rp%C zZ>Vi8hub#RH+<0eH-^Lz^8)mYj$zyc9nxTKq%Mb$ns?jN?TUzYs!ROj0_SfEwwIN5 z5$1a)Y3axnND<6Lz*S*~i}G;0{cq2Qyh~B#d!~?4UDW5@`5Tt{Kd{m`{I?A=4T8s? zZwt6~Rulrno*ZZt%Gd3+ha$LiFOAQM_p>_-TGTjKyd z{7|v6%Sbo~-O6*xuO*Pz;O%-A80kPQJB*OGs0!)7N;4jJ**&WYE6*q_qMMNXM%=w= z{(u6fp^8Z*QLFBw)A2+TUq&+WQ9P@T%F5lH)BASt004eq(bM zCU-+|%0R$}wy}F9TKlU<7ke#FX8*J14v+9WT6#rodbft@0kUI1L#ydvt3F;TbR_Kj zQruCchKL}Wl+Ze=!^_7Bt<_1kv(OB@Ikz3o9~(Jpnn_B>t%(eS8gZ<7w$ddZECzZ{ zR-I@(d%pqCI2MQ~%Ue2e3gzgF;_7P6AMtAV1jpn6>>S^UgA zM5Qyd?$Bw|hRm7I45^&nh`Q4nG5p&|W9BNxZ{Tc1$HR7h_&fOO&jhCMwakJj5?cF$x)G**U$9Jv8}Ibsu7q{BGebMo+}Y%V~6nln)}i{P3&{z z!Qe!4Fk;55)E!-*$!u>$J6;b&fq(5OFt-yD39rQnGv3?D!x$5bF!O4l$Y$<7;rO`8(OG*rcY*E1M!b_S9k-L#t-y zOn{J&qCmd)SEpr247TT21eAubnHB}bFz8{0V2PAM_Uwl?=VrT)5gO|L)nXokiu_;* zaVXvt<1$j|M!wTUev97FbwO97&l32WH1Cj2K2CSJ^*g4NW~eH_v}? zr{#3MMXR@soW+OUL?gZ%iV#HFckoW_G}6Y=Sb5`JWYm);JmgRtviOvm{AlbQmx+)^ z`d@4geTUBTL=ys zj3iY6JBeMqynEfhl|na}2zE{)VHtA zsJN{=tG^RER2fO1K0h6N`}sTq4rYv+<%xS+pauuqKJXSe_5+j>*PjA|N%@nTQJL~l ztD04HW%9KTnl_#v9stX*1^J z>64I0-b&&A&ZEzxH6) z$NkpTms+9>J7bxDG>P0VR&K~t-`9G_Ff56$DM6rnk6Mr6XIRqYVNotS@%N7Qe7qOd zKDvFy{!JoNt_N{Z+B#*Gg(Mnl?DIC-V>?YGW*Wq&dA2b1N6&XzLZ^p5N~&P7G;~;6 z1QsV81b?ST`M=G@P6SDRFz&@3Z63r-^2E0Hj^{Sbn{JJVhf*J&G1JBi z4*nCuZ?Cs}~^V=Yc}Qj0yfz?16; zeSZ0i%hb%8WR*9j#{(~8YHp?W!0ZEdfrOkzXH%J^YX+JC`Rp#8pv8xi2wKQckC+Ei zTWI|#$BpVxtyN#WW?2EjD3af&u7H`RbBR{((kj;5)wN8qB{azncyr0OjlXT)(hB@N zh)5+}HS{YdVxkO`(a#W7BhDv5{T9NM{aNX4Ve^;d;w-v~5Vk)|Sp5o<3$okTr8^d9%@oizseJOh) z<^I(GaM`|gpE0f2a0BVEbWYol6N?~b{LtS|@6+`w|*0@(Vz;e<%e0*59_mGXGHGR$+^;yV) z!5Jc_AHzsal$-&jG3aL@$@PS-beaOPqMp*Eiy|<F+ANg06J>IJ8hW z?@>=?-I`z-_YB$3U`CJ&aBD`x9q`{(GpFlXr3+LmyKm{DbRN7ox_qUjt$aE--7;=f z&-o2OwY^h&Vt=7IO}F6yJGUF7(QWMaxXi){fSz}(Zw7c?TQ4q(1#EcYQ&64 z2#q$bHDB?sM6%r!b?WmBJ3rC(@~w!zi{BJ_6AcnFq9s4Ck)s*N5B)A4S8w;vM4ulO z_(OlM9e*~9XK5bi%q72XrB;Z<4(->b`zl)yUVLM_u`|b6!{wz2W)25xBMh3jMcO(Y zdEgL2{oO08J?&ANZu9UxqN9Se`_}j3o{AzuGeYlvkuACX`uPgM*q-{snzC>MKEBa+ zF}_|q9+8n8E|{F3erU8!rE|jnV0=$lC6JQQxpMexr%ik_4#qcL+;I~!x+7wOVxhJt zvE)>_Qm1sgNJB|GN?}P#+98A*wV^NN@=B?dTCB(mcowhaZv5;4cUx_pYic4~WV^u*+lM)Q8UYa3mCul6q8C6MxJNZHvt z|Gej+>rE53OP9KlIdIr-v(114Y!FVaJtSq98~ep6ui7|YMu}} zo~(Rra*tvv03K+L)r!nBv2OTLoRSITqwS)2?#7k<+d|U4(QFcf37G?yT1L4BUE?Gl z^+47ekwqyFpGmy#kax9GcyVp5|@=Ib|06zk~>zjXiwi^Uu|Htr<0Q93lgni{|U6z3%|i70H1 zrdZn^_WD=WKA1L8)V4Y)f1f8ZZ&)wGx@LUyKn%d=E6Ls#W zUhhKYd=ZGHM!y&&NQN_{_G@Ed8JDr&ZN1#d%Z`$|00krhoAWAH4jUko#m3_%oPoNE9YClr;b$KF_gqX)xmt91bR@WYwlFm zGvD`(v;2^xfMU19B=9wby{W-7FExj&4@Sf*N%my<*1)oKeGoyX5`R=VE>!xwh@A$4 z33@QqNbtTNI#$Il77~#s9<3x1*~bTXQ|yptXI)ByLN&bDqNx0;+?? z8%VT2U7n$?zF)j9*Q}k%AG zwbq8khG;4M?fy%~=Jo_;o2DEnrZ}5S$jY1v}k%s4jzSI{te^_ z3g=k=q)v!=tE&%PJr4?GHU1UO8%;omyBQnB!8hLE52Pp|F`sgiLZ>ct)}-#L-}!5h z(br<#zP|j_bX|epuSdpi38e%u3M`wRY!WUhhf=m4LSv}yIqVS3#{izEs1)X}N9lVG zH3()n>`sJXAx+<%XWxnY3>)*FdF?K_;Dk;LhV$5fw$6w&hkG^+qwI%Lvqjn2nbCog z>k-`6nGhIf<^4l{2YjQ74$q2pZ5@y|%;!V(iQNkYO2!LFeVf2>FYPuI)VzmfPr4+> zixDRoa31|{F#-Lz1=mFmTfE0Nw;Zc)nm3VGpeobPMuh2c?*Y=P0DA|bdpl1vRl+oq zOXicGU5cKRU5)?y5usnZKi_BDPKz!JByRKg(EfJ96{Gh+-m+3{6&5!1^uPTZ3%6nQ z&yN@#X?2^K#pQ9w)wTfR-#MB=R*65fR(4!iXo3))NKK@s(@xI&~s(?T~hj^T{n>6c~}I3VyTr3>}H zG{gew+y5ywKRXQP7}XnnFqF6@fBXLG8@O!cU%i7|Ee4}bT*aTbZoTgL z+h-czy&w7g1x5!{f&4$3l5rPBZ{?Y8XVqtY{9DX>C8AY(=zY~Q?%OzE=%z}@kc06q z4=)V9&zRzXHO?3h$!M&GZ7t7>jHm1ws1{;qiO8N!{|1USRuf@VL$C`X7XML>w03{D z!4eVHa?uFAw&z;fO+5ri$M%KMF_{Nm=zxr6M8G#Vh>mBxejR2+S=?7FbM$^O48L7J z{@fAZH9FtE7%!h!jlm#=04a8akUY@V_t@Ns;K{uU<7k)7?_}w`@DnOe*Jmy>@=Cai z7X)L8Y;!YF8M^9&3PEI-BB;pJ7}(*ycRJuj8quxS&EcE#;)F%HA6_4J&Y&04IW_f8 zak=nbEC6ajiV#>WXTdxkDEpC5yxMvno~x&VT0jCl;8>eV|~{ zoBFr_W)WcsdKMu5Cat4P&^NBq=wb}JF^{~@vXuwl#FX5UmM=)YL@~-7b+=!X@i76@ zz3>jJG=SX+9++S5zV4zjwE{9OzfVljWU~owX|h4m?lyv&b{RBs?k)CkR>`A#yJb&~k?nQx>(h&5kk31xU+OspInI%cJAAwlY~R*E%h^wn4M^!6!qi z#8F!rwBGv#k{KMV!tvieJPxHJ@~7k?*MSxT*qMP<8T)a|f=5NFKR)Ki@czf|;6o++ znQ9;lu6L{4yWJO^5XHb#`wYY&OKZQ%TE?jW0SJ(LO#rpZ(8t((Cyr@PmHs&xr54}& z=OnK>+nP21(|^sSnU=a}X&9_mAiK@K#b3nJl-TmqotW%!yyVXstQGKKrj+#C73*4E z7)ki_Z{(qCR1i}xx&K>B>E=rC5bQo;&-XV_IET5J-O!&c)YOVr!p}~@WC|Wm9xH>Y zL$EurA)DCP(oGxYC8Xh}C8JTeEtgE0CI7mzQR(M!>anwS>2l4cxDs4z6w|AS%ip^9LN5R=1foqd>2 zS~>_O{THS5KB~8Mw2xO~9=o_eX&JuKBNYd-3n2DwViZz_fF(bYWpd3D%TT3z*e+Aj zr)KR`;?;HG;(v!n?kx}jPxRpQ1wCn|bM3Qd3Gt-O@Ziv9X2=}b6h-qd9iQY4!KdT~ z>;hdPZGA_wlw)Cg7ftRlwJ}3B@gSJnJA6I* zY^pTpn#VXLm$(N_iO>{N6x0O-pk4!sxjM_9H@$38%b++f)McVVq7|q%{d@AE+*aVv zAE!iI34$&h2zm~#rlSLgm+=*}4ChaCm+W7IM?MQB@ziB`1ziV(S&pNxNSUxe2}=|o zNg7qM_FY%0ZNKz1w5GnyADmyJjYA^A(&vk z>=EG~?$=&_?hkSeciuu!H%Nf097;V8&%1FanFg1cz!a>Vjm@GWo7pHRtm#nTU!e3z zU%C}X6&4n3FzdUuI-8*C4U||UG13;O5F(-VOVye)37MW=D0x z@2VFertD?fx*Os(=i2z8ruzD)4Ys#AbX)NB!53v1S)aUB4hs9I4w{5D4#98iuLbII z3M8Cgt;mw;$M)P@QvCGke5(lDM7Lts>S z-o^kZwu48bw8h)gI2qF-D2-;B9ZVO!2yrfjA~e{UnA`vGtKXo<(qF*)*etsLsCm`| zrTe}E4+|3l!&R#WCK_kX8zuUxL53B;#b*{ILIVSf6avFx63%1S=H#<9txF*nj5n_j z+X~Bzg6#r9&qZVEcbt!QjKus}8Z+wYaLu~(V-I@Rgj7ltq#ad6hy4LSG~kJWU&SS~ zh&^{lA`zz>h4>X*_0eKw#95&~_Y*WpF+d`_9n~Txbl^>^z$A{~+ooqzoSy!z3Pr5&4IQf$!~s zCSMbU{a|Yt=U;Li>hIbvg&={PkN~VuH-@*WJNKzoqoZ_d)|~QRiG&W!Q8|z{TnG$! z_wklClSDKoq6VZ501Uyw&bXMg-}xbEph}>r)CO&KD7oKmN=1yvHwzloj}jvn?}SoP zd+UYdBt~eI<=yS=V-K@I!~h^mYT@XQABoQXSrB`EybKHu0W`|5mWP>0y!kNW$di29 zNG}4q>nL{P{&Fb+G^;oyh4}>_RHV)>oF+L+T58Ny8HlJDG?9DchjP@4wghB`woC6g zujf{my=Q~>VD#a$*1E9g&WYLN%jl6?MuDWfS@PT@ge2lSyj%$JP69HYD!x+yl%&<$ z8*5_~*ACklRNydtcq(vp=!mz5J2wSZ88S`^)EA2z!mAONi=o1`#D^{GRn@!`34uZ1 z&SMDnW-b59EEy3}PlNcv>C42YJWY)X(I($_MS+2`2fVq%dnQRW>gKn`9X2m7u!Krc z6<`Z$BX+ta-ZPOz$XqN$4pBEjdO*cMR=A1kfRMpZcFIVg?>Msxuy_12Cy zpN!!z1|c>gy8@7q?8)QMn^3F7epI%I6x)GFMaV&z-!)GvQY}FvD?R~WA^Gp`rsHn< z6&!%{2z!c-*Vz3Rhzw$4JFFBM1!_f0?lTB2hu7M?Fs=`u5{3EweMU5uXbdy{Z|`iV^SQBYJt&ajJi;t! zsCH@Sw*6^ceneWp34+NHdqCAxDVcOpEAT0qJqodLVV~cF9RS*=9cfVct0 zHtaP3#2G_5s*o9N0c&Qg=Wc)cFy;=U2xkmh#u-(d>7T}vat5`FkdOm(4U`Xb#ncfP z9|LyZVgW$2QJnjTMdBG4<}DqXo_1g(GsESBK6KBi`FHc++yYz15;)mFZIVZL9(k(> z|Dd=G0lhZ+C&#OiM5}_p{^S(J?gt>1l+Itq8JL(@$f$(ZW>;3OM=~-pFuAzg$~sV* zFj9*3fw8pU?AF#l>tDN^@N&x6ypDa@!lP4Q)L3OOovbz(#}c|y-kO`|eqUh+Z&z2} z+UU;mg0uoCO9uzTeI}IIXE-ho!PDJmPw#T_YmP?z=%qhXZPDfg#j}m?e0%}%*F7?F zsiaLzY{VfMF5FEEla3tHlL;PQrzzV;KX+qemH51qivhE`;}m=UJzkk!&fL67THp+l zRmNQc>pZ=@tgB;?a1AA$@l4+}>Ya9}Lb>-3PL2(5Ziu=u5JOIrMCtl2W)@A@b8C!s zp0-MaTWGSFmzJ0K)_tC@!}@+#l?n70M&LzGw0_$3sFDdut>bwO%nYL++E%%<_~T42 zL7aHOWAGK`%I=Q#z_vK5*VFo;wz|-Ebfq_B0(cMM# z<<21e$7~K&*Do7{#8IcPC1EFDMTPU@k+p;kNNIHRop%T6m^;cDt6Ku0eiz#mHKR0W zC{_E^tJ8!Ip#tw#aCwlazQ*D9l?F*j&R)Md1%JLj^?kkVB#jG3#z!!**4n_vmO@6+ ztriPPTybB$796L!jhYl{HDIzDf@d?b6iivwciIe^IzO0^AB-W@qIoXWGFtq8iWMtZ z`?#9D=APvzL>@+sPSZgK--C>k4{POzeOof5j?+JU`1+D#)SmZH%uI88YOm%NayeOB zKoLw`5NqIc9&%5l&u;h^eCMg}yh=a$a4mRS?eBLik5P_?tZZ^N~R1)pP!K-m6SJgZ4ZgVK3USX}fRXx(nVDMUF~M5!U@rdT?7$(#vPIIlpLF2sVB^lezwBZCL61`B?a7 zG%ea~Ep$=64uo*)DCj6Ee|=7$}I__?<% zvh?FOSwneoEDFD?TK8#LG0gSwNrijoCiL55cef=vX$p`r4|)g=c7FU&K7_uJcBLAc z?lq8BBz(V_73HL0czG#r<5j;IFRj&XO2g>kbiLld^hM8cGAwH<2`hjdj0m`O`M8IX z|Jt@G<0M-vZvVviYdv4H{{6N2J=?L?>NmK|d1ch#)E%B$yPH~H^noCt!%fp38Z>Uk z{Pgq;3>4@kLrvSoh@bhz68aMlGljWJzlOFkft0&F+rK#vQ$k5(&MbvaQ!OscmN{zU z2@YG=I~3;QBffeM{R-k1Yx1=zI7I$VhTIz-qCjY;A#prO^;JJ{{`00x{zGwwIvh^( z+h44fUc~5RE-=WwUqWOFcbp{gvKkRdgD|LY6_lsRtr#41W&rO7}RUEd%er4q{A zCPY1Ao9*ZH(~4%OvVQUnS$-<$9xXM1-6vpw1Jg&1JOa}S(9{#WmdV?kYRzo=+@qtD zW69oZdBD+^9t%T#YQn-LP+4z%7ACYD?m3BM5Ps+W`)eI`&Wqw4&Ia+2u?KOjykRa9 z%1HAz|9X1Owd~^X8x=#^Wx{GQ+wj=X4Recs3|*6=0EUv9I0UFK*ME%!^{j;wiQLDX zQDt$xiZ_Iw&U)?3F%e^ z(zp{d<&Vkr#Jp`13fS|^&I^LM%C{7IP{0?&PrSFtQELcC^dNL-#Dq>Do< zYjU#ET=3KE8wUN&%-NeZe1gL@QZ`s)j{plAjz}nDuwS-lCDcUa4B4%!tYtBPhT{S~ zCBF?RWD|o6=@=m*S5xBrk7Dx_YMG9#b}t>}QUfYG@Ff=vThgE#N@j?$=qUJ#0=Q*# z`wHb5^;oQ%Tlw$Hl5EG%6DmCutKJX3CVRBxYgs2+ojUQlFPlmy>-t`!J}-|izSp+l znB+$*O`h_XF9XGj+$o(+4^h%t3`oouv$`o1(v;=)s7QjPVHd(BZLfa6+}*Cor(|}P za^-{Bc7&e~ln9w(odLXthU$}c)I^T3SKm!8_fCO?hq_nGK_g8Ad)0bt8pPAid}Nz*6YPRTNUc&kkb$q1XwxP(Gnftu*;oY>MFtV z*RzdR@7{8yB_GE>JBo%Ctsqj=r^HZ#1VKHFFwHzKr|BuP}F_7DcVHf*>OO{_-F4DiGu zP^G{cy)SOHV61gMfEL7As?iZDWb@=%>_Fr1O$VcyMjG(4HGIXtZftF)>R+P#LhpdP5Y5ap#QM zDE%bo=2E!652wbs9k0!#*jSxhUD%X&KHX#Gs7t*uDt{RS4Oh{r*kvR{ld%5%3W)7HHYP z|7JO*PPe^qly>2s^LQdw#-V<#r22Kw&tMH^#P|~mquD1})Fw>-=|60{2pN)2e+nad z=@l}S)p_k!&NlmL#lO-_{@hS{Vx}$nwsVhjGPTfQJ!xEUkHdPdF%l#Tcm|@bUtYUq zkFT|ZP>G=I`ar0vALyw%usLyBmPm)5>ctW%FBi6NyTlnOAlwsi)97|AlxZg$F=}al zS7Kdq@k?|r`sK8DA4fykwOmhR14yO;EY6M!Ec5ssGd7j3E)3D=FR2B38A-@8Q>zAp z_dX6wXWV_|qePP+phW0#2n3GbG$_|?3*v98_s6_x6tYOtZyS9c`6urkQq)Vd{lwI9 zoFM2#$TJ?;HB?GJ^s*?XdIswjq$KPiMr_c+xJUiYVet+W95E8At*F}5eZPwGko z!~!G@u}4*NP#!d^M5RVz(Z?qzx1kaw$tTH}&TzTvgl6zP4)K7*8PLz+HwYlZJQXM` zh6jY&V#S#V^Ra|_1jIV^cEl{c1k?gdHV5FDqPawl(0_#>@xlP6hW+RqLjVSMsS6)F z3<-$MnWLYt9My!z#$VvNE-;baApoFuz|N?cOtUbSJ&Bfl#NAH=b-)1-dhGBL%Vb&D zQH8E~z=;=wnv$fH>xZVMV^#xLem5LX1`aaQ02)}gisJH zxr+-L2w)dcgzC$n;OwI1p(l+uGGY%N7i%B~^sOrmg@_Dsf<9pZ_u4RO$C5Gc>$KMU zg)pF~pflh)C2(!nATtuUBMb^42QIAs|E?1MUw4e-$fzD(eH}+O-^U$>0F6Mhl8O@5 IVxNNk7kUIGMF0Q* literal 0 HcmV?d00001 diff --git a/assets/resources/textures/silu/ship_F.png.meta b/assets/resources/textures/silu/ship_F.png.meta new file mode 100644 index 0000000..09ae28c --- /dev/null +++ b/assets/resources/textures/silu/ship_F.png.meta @@ -0,0 +1,42 @@ +{ + "ver": "1.0.27", + "importer": "image", + "imported": true, + "uuid": "6d5f9230-ee4e-46c2-aaef-12077b6936fc", + "files": [ + ".json", + ".png" + ], + "subMetas": { + "6c48a": { + "importer": "texture", + "uuid": "6d5f9230-ee4e-46c2-aaef-12077b6936fc@6c48a", + "displayName": "ship_F", + "id": "6c48a", + "name": "texture", + "userData": { + "wrapModeS": "repeat", + "wrapModeT": "repeat", + "minfilter": "linear", + "magfilter": "linear", + "mipfilter": "none", + "anisotropy": 0, + "isUuid": true, + "imageUuidOrDatabaseUri": "6d5f9230-ee4e-46c2-aaef-12077b6936fc", + "visible": false + }, + "ver": "1.0.22", + "imported": true, + "files": [ + ".json" + ], + "subMetas": {} + } + }, + "userData": { + "type": "texture", + "fixAlphaTransparencyArtifacts": false, + "hasAlpha": true, + "redirect": "6d5f9230-ee4e-46c2-aaef-12077b6936fc@6c48a" + } +} diff --git a/assets/resources/textures/ui.meta b/assets/resources/textures/ui.meta new file mode 100644 index 0000000..9c93ba2 --- /dev/null +++ b/assets/resources/textures/ui.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "9310a763-9c47-4200-8140-97ff97d09e11", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/resources/textures/ui/bg.png b/assets/resources/textures/ui/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fd4e7f001e21582b21f5ee247a9b3edf0fae7f1a GIT binary patch literal 149433 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 O0000 c.name.startsWith('Level_')); + this.curLevelNode = lv ?? null; + } + this.multMode = this.gm?.multMode ?? false; + } + + private syncToManager() { + if (!this.gm) return; + if (this.mainLevelEntrance) this.gm.mainLevelEntrance = this.mainLevelEntrance; + this.gm.initialLevelID = this.initialLevelID; + this.gm.playerSkin = this.playerSkin; + this.gm.multMode = this.multMode; + this.gm.multPlayerRole = MultRoleNames[this.multPlayerRoleEnum] ?? 'PlayerA1'; + this.gm.uiStyle = UIStyleNames[this.uiStyleEnum] ?? 'default'; + this.gm.curLevelID = this.initialLevelID; + } + + private pollInspectorActions() { + if (this.execSwitchLevel) { + this.execSwitchLevel = false; + this.onInspectorSwitchLevel(); + } + if (this.execEndInput) { + this.execEndInput = false; + this.callSetIsInputEnd(1); + } + if (this.execChangeStyle) { + this.execChangeStyle = false; + this.onInspectorChangeStyle(); + } + if (this.execStartMultPlay) { + this.execStartMultPlay = false; + this.onInspectorStartMultPlay(); + } + if (this.execMute) { + this.execMute = false; + this.callMute(); + } + if (this.execUnmute) { + this.execUnmute = false; + this.callUnmute(); + } + } + + // --- Inspector / SendMessage 共用 --- + onInspectorSwitchLevel() { + const id = parseInt(this.inputLevel, 10); + if (Number.isNaN(id)) { + console.warn('[GameController] inputLevel 无效:', this.inputLevel); + return; + } + this.syncToManager(); + this.gm.switchLevel(id); + this.curLevelID = id; + console.log('[GameController] SwitchLevel', id); + } + + onInspectorChangeStyle() { + const style = this.inputStyle.trim() || UIStyleNames[this.uiStyleEnum]; + this.gm.changeUIStyle(style); + this.uiStyleEnum = UIStyleNames.indexOf(style) as UIStyleType; + if (this.uiStyleEnum < 0) this.uiStyleEnum = UIStyleType.default; + console.log('[GameController] ChangeUIStyle', style); + } + + onInspectorStartMultPlay() { + const role = MultRoleNames[this.multPlayerRoleEnum] ?? 'PlayerA1'; + this.gm.startMultPlay(role, this.coinStr); + this.multMode = true; + console.log('[GameController] StartMultPlay', role, this.coinStr); + } + + applyPlayerSkinFromInspector() { + const player = this.gm.findNodeByName('Player') + ?? this.gm.findNodeByName(this.gm.multPlayerRole); + const pc = player?.getComponent('PlayerController') as { callChangeSkin?: (n: number) => void }; + pc?.callChangeSkin?.(this.playerSkin); + this.gm.playerSkin = this.playerSkin; + } + + // --- JS Bridge (SendMessage) --- + private registerWebApi() { + const api = { + SendMessage: (objectName: string, methodName: string, param?: string | number) => { + this.sendMessage(objectName, methodName, param); + }, + }; + if (typeof window !== 'undefined') { + (window as unknown as { cocosIns?: typeof api }).cocosIns = api; + (window as unknown as { unityInstance?: typeof api }).unityInstance = api; + } + } + + sendMessage(objectName: string, methodName: string, param?: string | number) { + if (objectName === 'GameController') { + this.invoke(this, methodName, param); + return; + } + if (objectName === 'UIMain') { + const n = this.gm.findNodeByName('UIMain'); + const c = n?.getComponent('UIMain'); + if (c) this.invoke(c, methodName, param); + return; + } + const node = this.gm.findNodeByName(objectName); + if (!node) { + console.warn(`SendMessage: 未找到 ${objectName}`); + return; + } + for (const comp of node.getComponents(Component)) { + if (typeof (comp as Record)[methodName] === 'function') { + this.invoke(comp, methodName, param); + return; + } + } + console.warn(`SendMessage: ${objectName}.${methodName} 无此方法`); + } + + private invoke(target: object, methodName: string, param?: string | number) { + const fn = (target as Record)[methodName]; + if (typeof fn !== 'function') return; + if (param === undefined) (fn as () => void).call(target); + else (fn as (p: string | number) => void).call(target, param); + } + + switchLevel(levelID: number) { + this.inputLevel = String(levelID); + this.onInspectorSwitchLevel(); + } + + callSetIsInputEnd(v: number) { + this.gm.callSetIsInputEnd(v); + } + + changeUIStyle(style: string) { + this.inputStyle = style; + this.onInspectorChangeStyle(); + } + + startMultPlay(role: string, coins: string) { + this.coinStr = coins; + const idx = MultRoleNames.indexOf(role); + if (idx >= 0) this.multPlayerRoleEnum = idx as MultRole; + this.onInspectorStartMultPlay(); + } + + callMute() { + this.gm.callMute(); + } + + callUnmute() { + this.gm.callUnmute(); + } +} diff --git a/assets/scripts/GameController.ts.meta b/assets/scripts/GameController.ts.meta new file mode 100644 index 0000000..99a98ba --- /dev/null +++ b/assets/scripts/GameController.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "8940a3d2-2898-4628-a201-13fa8a9c59bb", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/bridge.meta b/assets/scripts/bridge.meta new file mode 100644 index 0000000..c283aa5 --- /dev/null +++ b/assets/scripts/bridge.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "ba5d5aa4-760d-4aae-aef0-83f80c1f2cba", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/bridge/JsBridge.ts b/assets/scripts/bridge/JsBridge.ts new file mode 100644 index 0000000..198f553 --- /dev/null +++ b/assets/scripts/bridge/JsBridge.ts @@ -0,0 +1,28 @@ +/** + * 对应 Unity Application.ExternalCall + * Web 环境下调用 window 上的全局回调 + */ + +declare global { + interface Window { + processData?: (json: string) => void; + processVehicleData?: (json: string) => void; + externalResult?: (json: string) => void; + externalLevelInfo?: (json: string) => void; + coinsData?: (json: string) => void; + [key: string]: unknown; + } +} + +export class JsBridge { + static call(callbackName: string, jsonData: string) { + if (typeof window !== 'undefined') { + const fn = window[callbackName]; + if (typeof fn === 'function') { + (fn as (json: string) => void)(jsonData); + return; + } + } + console.log(`[JsBridge] ${callbackName}`, jsonData); + } +} diff --git a/assets/scripts/bridge/JsBridge.ts.meta b/assets/scripts/bridge/JsBridge.ts.meta new file mode 100644 index 0000000..c508da0 --- /dev/null +++ b/assets/scripts/bridge/JsBridge.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "d34fa121-5277-49b2-9938-ed0886a31fc4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/controller.meta b/assets/scripts/controller.meta new file mode 100644 index 0000000..5d4cdea --- /dev/null +++ b/assets/scripts/controller.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "6fcf8603-44fa-444f-900d-118529aca8dc", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/controller/PlayerController.ts b/assets/scripts/controller/PlayerController.ts new file mode 100644 index 0000000..cd4c91f --- /dev/null +++ b/assets/scripts/controller/PlayerController.ts @@ -0,0 +1,213 @@ +import { _decorator, Vec3 } from 'cc'; +import { Direction, GameState, GridType, Skin } from '../core/Define'; +import { EventManager, EventType } from '../core/EventManager'; +import { JsBridge } from '../bridge/JsBridge'; +import { GameManager } from '../manager/GameManager'; +import { Movement } from '../gameplay/Movement'; +import { VehicleController } from './VehicleController'; +import { VisualAssets } from '../visual/VisualAssets'; + +const { ccclass } = _decorator; + +export interface ExternalData { + position: { x: number; y: number; z: number }; + gridType: number; + direction: string; +} + +export interface ExternalDataList { + direction: number; + externalDatas: ExternalData[]; +} + +export interface ExternalResult { + isWin: boolean; + stepNum: number; + direction: number; + isInputEnd: boolean; +} + +@ccclass('PlayerController') +export class PlayerController extends Movement { + coins = 0; + private vehicle: VehicleController | null = null; + private sendFinally = false; + + onLoad() { + this.moverRole = 'player'; + EventManager.register(EventType.LevelInit, this.onLevelInit); + EventManager.register(EventType.InputEnd, this.onInputEnd); + this.coins = 0; + } + + onDestroy() { + EventManager.remove(EventType.LevelInit, this.onLevelInit); + EventManager.remove(EventType.InputEnd, this.onInputEnd); + } + + start() { + super.start(); + VisualAssets.applyPlayerSprite(this.node, this.direction); + if (this.node.name === 'Player' && GameManager.instance) { + this.callChangeSkin(GameManager.instance.playerSkin); + } + } + + override setDirection(dir: Direction) { + super.setDirection(dir); + VisualAssets.applyPlayerSprite(this.node, dir); + } + + private onLevelInit = () => { + this.checkRide(); + }; + + private onInputEnd = () => { + this.externalCallResult(false); + }; + + protected onMoveNextSet(isJump: boolean) { + if (isJump && this.targetGridType === GridType.Jump) { + const p = this.node.worldPosition.clone(); + p.y += 0.15; + this.targetPosition.set(p); + } + } + + onMoving() { + if (this.targetGridType === GridType.None && this.vehicle && !Movement.callEach) { + this.vehicle.setPosition(this.node.worldPosition); + } + } + + protected onMoveFail(isJump: boolean) { + this.externalCallResult(false); + const gm = GameManager.instance!; + if (gm.multMode) { + const other = gm.findNodeByName(this.node.name === 'Player' ? 'Enemy' : 'Player'); + other?.getComponent(PlayerController)?.externalCallResult(true); + } + console.log(`${this.node.name} 无法移动`, isJump); + } + + protected onMoveToTarget() { + if (this.curGrid === GridType.Ride) { + const obj = GameManager.instance!.getGameObject(this.node.worldPosition); + if (obj) { + this.vehicle = obj.getComponent(VehicleController); + this.vehicle?.setPlayer(this); + if (this.vehicle) this.vehicle.setDirection(this.direction); + } + } else if (this.curGrid !== GridType.None && this.vehicle) { + this.vehicle.setPlayer(null); + this.vehicle = null; + } + if (this.vehicle) { + this.vehicle.setPosition(this.node.worldPosition); + GameManager.instance!.removeObj(this.lastPosition); + GameManager.instance!.addObj(this.node.worldPosition, GridType.Ride, this.vehicle.node); + } + this.externalCall(); + } + + callChangeSkin(n: number) { + if (n < 0 || n > Skin.sanxing) return; + if (GameManager.instance) GameManager.instance.playerSkin = n as Skin; + } + + callPlayerInfo() { + this.externalCall(); + } + + setName(name: string) { + this.vehicle?.setName(name); + } + + getCoinsNum() { + JsBridge.call('coinsData', JSON.stringify({ coinsNum: this.coins, gameObjectName: this.node.name })); + } + + addCoins() { + this.coins++; + } + + setPosition(pos: Vec3) { + this.node.setPosition(pos); + } + + /** 供 VehicleController 同步 */ + syncFromVehicle(targetGridType: GridType, isJump: boolean) { + this.targetGridType = targetGridType; + this.onMoveNextSet(isJump); + } + + syncMoveToTargetFromVehicle() { + this.onMoveToTarget(); + } + + externalCall() { + const gm = GameManager.instance!; + const list: ExternalDataList = { direction: this.direction, externalDatas: [] }; + const self = gm.worldToCell(this.node.worldPosition); + list.externalDatas.push({ + position: { x: self.x, y: self.y, z: 0 }, + gridType: this.curGrid, + direction: 'self', + }); + for (let d = Direction.North; d <= Direction.West; d++) { + const wp = gm.nextGridPosition(this.node.worldPosition, d); + const cell = gm.worldToCell(wp); + list.externalDatas.push({ + position: { x: cell.x, y: cell.y, z: 0 }, + gridType: gm.calculateNextGridType(this.node.worldPosition, d), + direction: gm.getRelativePosition(this.direction, d), + }); + } + const json = JSON.stringify(list); + if (gm.multMode) JsBridge.call(`process${this.node.name}`, json); + else JsBridge.call('processData', json); + } + + externalCallResult(isWin: boolean) { + const gm = GameManager.instance!; + if (isWin && (this.node.name === 'Player' || this.node.name === gm.multPlayerRole)) { + /* success audio */ + } else if (!isWin && (this.node.name === 'Player' || this.node.name === gm.multPlayerRole)) { + /* fail audio */ + } + let myStep = gm.stepNum; + if (gm.multMode) { + switch (gm.multPlayerRole) { + case 'PlayerA1': myStep = gm.stepA1Num; break; + case 'PlayerA2': myStep = gm.stepA2Num; break; + case 'PlayerA3': myStep = gm.stepA3Num; break; + case 'PlayerB1': myStep = gm.stepB1Num; break; + case 'PlayerB2': myStep = gm.stepB2Num; break; + case 'PlayerB3': myStep = gm.stepB3Num; break; + } + } + if ((this.node.name === 'Player' || this.node.name === gm.multPlayerRole) && !this.sendFinally) { + const payload: ExternalResult = { + isWin, + stepNum: myStep, + direction: this.direction, + isInputEnd: gm.isInputEnd, + }; + JsBridge.call('externalResult', JSON.stringify(payload)); + this.sendFinally = true; + } + if (gm.gameState !== GameState.Run) return; + gm.setGameState(isWin ? GameState.ResultWin : GameState.ResultFail); + } + + private checkRide() { + if (this.curGrid === GridType.Ride) { + const obj = GameManager.instance!.getGameObject(this.node.worldPosition); + if (obj) { + this.vehicle = obj.getComponent(VehicleController); + this.vehicle?.setDirection(this.direction); + this.vehicle?.setPlayer(this); + } + } + } +} diff --git a/assets/scripts/controller/PlayerController.ts.meta b/assets/scripts/controller/PlayerController.ts.meta new file mode 100644 index 0000000..4ac525b --- /dev/null +++ b/assets/scripts/controller/PlayerController.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "93a110e7-a99e-4719-b6c2-d2c2d8469d7f", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/controller/PropController.ts b/assets/scripts/controller/PropController.ts new file mode 100644 index 0000000..ef79389 --- /dev/null +++ b/assets/scripts/controller/PropController.ts @@ -0,0 +1,59 @@ +import { _decorator, Component, Vec3 } from 'cc'; +import { GameManager } from '../manager/GameManager'; +import { PlayerController } from './PlayerController'; + +const { ccclass } = _decorator; + +@ccclass('PropController') +export class PropController extends Component { + private collected = false; + + update() { + if (this.collected || !GameManager.instance) return; + const gm = GameManager.instance; + const players = gm.curLevel?.children.filter((c) => c.name.includes('Player')) ?? []; + const propCell = gm.worldToCell(this.node.worldPosition); + for (const p of players) { + const pc = p.getComponent(PlayerController); + if (!pc) continue; + const pcCell = gm.worldToCell(p.worldPosition); + if (pcCell.x !== propCell.x || pcCell.y !== propCell.y) continue; + this.onCollected(pc); + break; + } + } + + private onCollected(player: PlayerController) { + if (this.collected) return; + this.collected = true; + const gm = GameManager.instance!; + player.addCoins(); + gm.removeProp(this.node.worldPosition); + const remaining = (gm.curLevel?.children.filter((c) => c.name.includes('Prop') && c !== this.node).length ?? 0); + this.node.destroy(); + + if (remaining === 0) { + if (gm.multMode) this.resolveMultWin(gm); + else player.externalCallResult(true); + } + } + + private resolveMultWin(gm: GameManager) { + const sum = (names: string[]) => + names.reduce((t, n) => t + (gm.findNodeByName(n)?.getComponent(PlayerController)?.coins ?? 0), 0); + const totalA = sum(['PlayerA1', 'PlayerA2', 'PlayerA3']); + const totalB = sum(['PlayerB1', 'PlayerB2', 'PlayerB3']); + const winA = totalA > totalB || (totalA === totalB && gm.stepA1Num + gm.stepA2Num + gm.stepA3Num < + gm.stepB1Num + gm.stepB2Num + gm.stepB3Num); + const set = (names: string[], win: boolean) => { + for (const n of names) gm.findNodeByName(n)?.getComponent(PlayerController)?.externalCallResult(win); + }; + if (winA) { + set(['PlayerA1', 'PlayerA2', 'PlayerA3'], true); + set(['PlayerB1', 'PlayerB2', 'PlayerB3'], false); + } else { + set(['PlayerA1', 'PlayerA2', 'PlayerA3'], false); + set(['PlayerB1', 'PlayerB2', 'PlayerB3'], true); + } + } +} diff --git a/assets/scripts/controller/PropController.ts.meta b/assets/scripts/controller/PropController.ts.meta new file mode 100644 index 0000000..70815fa --- /dev/null +++ b/assets/scripts/controller/PropController.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "7b8d3aef-659e-486a-8e93-a08689bed871", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/controller/VehicleController.ts b/assets/scripts/controller/VehicleController.ts new file mode 100644 index 0000000..94213a7 --- /dev/null +++ b/assets/scripts/controller/VehicleController.ts @@ -0,0 +1,114 @@ +import { _decorator, Vec3 } from 'cc'; +import { Direction, GridType } from '../core/Define'; +import { EventManager, EventType } from '../core/EventManager'; +import { JsBridge } from '../bridge/JsBridge'; +import { GameManager } from '../manager/GameManager'; +import { Movement } from '../gameplay/Movement'; +import { PlayerController, ExternalDataList } from './PlayerController'; +import { VisualAssets } from '../visual/VisualAssets'; + +const { ccclass } = _decorator; + +@ccclass('VehicleController') +export class VehicleController extends Movement { + private player: PlayerController | null = null; + + onLoad() { + this.moverRole = 'vehicle'; + this.moveState = 0; + } + + start() { + super.start(); + this.setIcon(); + } + + setPlayer(p: PlayerController | null) { + this.player = p; + } + + setPosition(pos: Vec3) { + this.node.setPosition(pos); + } + + setName(name: string) { + /* 可挂 Label 显示名称 */ + } + + override setDirection(dir: Direction) { + super.setDirection(dir); + this.setIcon(); + if (Movement.callEach) return; + Movement.callEach = true; + this.player?.setDirection(dir); + Movement.callEach = false; + } + + setIcon() { + const style = GameManager.instance?.uiStyle ?? 'default'; + VisualAssets.applyVehicleSprite(this.node, this.direction, style); + } + + protected onMoveNextSet(isJump: boolean) { + if (Movement.callEach) return; + Movement.callEach = true; + this.player?.syncFromVehicle(this.targetGridType, isJump); + Movement.callEach = false; + } + + protected onMoving() { + if (Movement.callEach) return; + Movement.callEach = true; + if (this.player) { + this.player.onMoving(); + this.player.setPosition(this.node.worldPosition); + } + Movement.callEach = false; + } + + protected onMoveToTarget() { + GameManager.instance!.removeObj(this.lastPosition); + GameManager.instance!.addObj(this.node.worldPosition, GridType.Ride, this.node); + if (Movement.callEach) return; + Movement.callEach = true; + if (this.player) { + this.player.setPosition(this.node.worldPosition); + this.player.syncMoveToTargetFromVehicle(); + } + Movement.callEach = false; + this.externalCall(); + } + + protected onMoveFail(isJump: boolean) { + if (!GameManager.instance!.multMode) { + EventManager.dispatch(EventType.InputEnd, GameManager.instance!.gameState); + } + } + + callVehicleInfo() { + this.externalCall(); + } + + externalCall() { + const gm = GameManager.instance!; + const list: ExternalDataList = { direction: this.direction, externalDatas: [] }; + const self = gm.worldToCell(this.node.worldPosition); + list.externalDatas.push({ + position: { x: self.x, y: self.y, z: 0 }, + gridType: this.curGrid, + direction: 'self', + }); + for (let d = Direction.North; d <= Direction.West; d++) { + const wp = gm.nextGridPosition(this.node.worldPosition, d); + const cell = gm.worldToCell(wp); + list.externalDatas.push({ + position: { x: cell.x, y: cell.y, z: 0 }, + gridType: gm.calculateNextGridType(this.node.worldPosition, d), + direction: gm.getRelativePosition(this.direction, d), + }); + } + const json = JSON.stringify(list); + if (gm.multMode) JsBridge.call(`process${this.node.name}`, json); + else JsBridge.call('processVehicleData', json); + } +} diff --git a/assets/scripts/controller/VehicleController.ts.meta b/assets/scripts/controller/VehicleController.ts.meta new file mode 100644 index 0000000..2582591 --- /dev/null +++ b/assets/scripts/controller/VehicleController.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "aa054a89-5920-470a-aac7-9af275a2d789", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/core.meta b/assets/scripts/core.meta new file mode 100644 index 0000000..b7ad7b2 --- /dev/null +++ b/assets/scripts/core.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "f398f642-6b7c-47cf-9e92-19d6cf61c05c", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/core/Define.ts b/assets/scripts/core/Define.ts new file mode 100644 index 0000000..a9f6861 --- /dev/null +++ b/assets/scripts/core/Define.ts @@ -0,0 +1,152 @@ +/** 与 Unity Platformer.Core.Define 对齐 */ + +export enum Direction { + North = 0, + East = 1, + South = 2, + West = 3, +} + +export enum MoveState { + Idle = 0, + Moving = 1, +} + +export enum GridType { + Across = 0, + Jump = 1, + Block = 2, + Ride = 3, + None = 4, + Boundary = 5, +} + +export enum Skin { + Silu = 0, + Panda = 1, + RedArmy = 2, + numMan = 3, + snow = 4, + sanxing = 5, +} + +export enum GameState { + Run = 0, + ResultWin = 1, + ResultFail = 2, +} + +export type MoverRole = 'player' | 'vehicle'; + +export const CELL_SIZE = 1; + +export const CommonDefine = { + TilemapGround: 'Ground', + TilemapBorder: 'Border', + Prop: 'Prop', + Vehicle: 'Vehicle', + BlockBase: 'Baseblock', + BlockJump: 'JumpBlock', +}; + +export function addDirection(dir: Direction, delta: number): Direction { + const n = 4; + return (((dir + delta) % n) + n) % n as Direction; +} + +type MoveKey = string; + +function mk(role: MoverRole, cur: GridType, next: GridType, jump: boolean): MoveKey { + return `${role}|${cur}|${next}|${jump ? 1 : 0}`; +} + +function buildMoveTable(entries: [MoverRole, GridType, GridType, boolean, number][]): Map { + const m = new Map(); + for (const [role, cur, next, jump, v] of entries) { + m.set(mk(role, cur, next, jump), v); + } + return m; +} + +/** 单人 moveCondition */ +export const moveCondition = buildMoveTable([ + ['player', GridType.Across, GridType.Across, false, 1], + ['player', GridType.Jump, GridType.Across, false, 1], + ['player', GridType.Jump, GridType.Across, true, 1], + ['player', GridType.Ride, GridType.Across, false, 1], + ['player', GridType.Ride, GridType.Across, true, 1], + ['player', GridType.Across, GridType.Jump, true, 1], + ['player', GridType.Across, GridType.Ride, false, 1], + ['player', GridType.Across, GridType.Ride, true, 1], + ['player', GridType.Jump, GridType.Ride, false, 1], + ['player', GridType.Jump, GridType.Ride, true, 1], + ['player', GridType.Jump, GridType.Jump, false, 1], + ['player', GridType.Jump, GridType.Jump, true, 1], + ['player', GridType.Ride, GridType.None, false, 1], + ['player', GridType.Ride, GridType.None, true, 1], + ['player', GridType.None, GridType.None, false, 1], + ['player', GridType.None, GridType.None, true, 1], + ['player', GridType.None, GridType.Across, false, 1], + ['player', GridType.None, GridType.Across, true, 1], + ['vehicle', GridType.None, GridType.None, false, 1], + ['vehicle', GridType.None, GridType.None, true, 1], + ['vehicle', GridType.Ride, GridType.None, false, 1], +]); + +/** 多人 moveConditionMult(与 Unity Define.moveConditionMult 一致) */ +const multEntries: [MoverRole, GridType, GridType, boolean, number][] = [ + ['player', GridType.Across, GridType.Across, false, 1], + ['player', GridType.Across, GridType.Across, true, 1], + ['player', GridType.Jump, GridType.Across, false, 1], + ['player', GridType.Jump, GridType.Across, true, 1], + ['player', GridType.Ride, GridType.Across, false, 1], + ['player', GridType.Ride, GridType.Across, true, 1], + ['player', GridType.Across, GridType.Jump, true, 1], + ['player', GridType.Across, GridType.Jump, false, 1], + ['player', GridType.Across, GridType.Ride, false, 1], + ['player', GridType.Across, GridType.Ride, true, 1], + ['player', GridType.Jump, GridType.Ride, false, 1], + ['player', GridType.Jump, GridType.Ride, true, 1], + ['player', GridType.Jump, GridType.Jump, false, 1], + ['player', GridType.Jump, GridType.Jump, true, 1], + ['player', GridType.Ride, GridType.None, false, 1], + ['player', GridType.Ride, GridType.None, true, 1], + ['player', GridType.None, GridType.None, false, 1], + ['player', GridType.None, GridType.None, true, 1], + ['player', GridType.None, GridType.Across, false, 1], + ['player', GridType.None, GridType.Across, true, 1], + ['player', GridType.Across, GridType.Block, false, 0], + ['player', GridType.Across, GridType.Block, true, 0], + ['vehicle', GridType.Ride, GridType.Block, false, 0], + ['vehicle', GridType.Ride, GridType.Block, true, 0], + ['vehicle', GridType.Ride, GridType.Across, false, 0], + ['vehicle', GridType.Ride, GridType.Across, true, 0], + ['vehicle', GridType.None, GridType.None, false, 1], + ['vehicle', GridType.None, GridType.None, true, 1], + ['vehicle', GridType.Ride, GridType.None, false, 1], + ['vehicle', GridType.Ride, GridType.None, true, 1], +]; +export const moveConditionMultMap = buildMoveTable(multEntries); + +export const skinPath: Record = { + [Skin.Silu]: { unlockLevel: 0 }, + [Skin.Panda]: { unlockLevel: 400 }, + [Skin.RedArmy]: { unlockLevel: 800 }, + [Skin.numMan]: { unlockLevel: 1200 }, + [Skin.snow]: { unlockLevel: 1600 }, + [Skin.sanxing]: { unlockLevel: 1600 }, +}; + +export function getMoveCondition(mult: boolean): Map { + return mult ? moveConditionMultMap : moveCondition; +} + +export function lookupMove( + table: Map, + role: MoverRole, + cur: GridType, + next: GridType, + jump: boolean, +): number | undefined { + return table.get(mk(role, cur, next, jump)); +} diff --git a/assets/scripts/core/Define.ts.meta b/assets/scripts/core/Define.ts.meta new file mode 100644 index 0000000..5841b60 --- /dev/null +++ b/assets/scripts/core/Define.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "e5d9eb64-9856-42f8-b14c-ab18ad6ff50e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/core/EventManager.ts b/assets/scripts/core/EventManager.ts new file mode 100644 index 0000000..893e38e --- /dev/null +++ b/assets/scripts/core/EventManager.ts @@ -0,0 +1,27 @@ +export enum EventType { + LevelInit = 'LevelInit', + InputEnd = 'InputEnd', +} + +type Handler = (...args: unknown[]) => void; + +const listeners = new Map(); + +export const EventManager = { + register(type: EventType, handler: Handler) { + if (!listeners.has(type)) listeners.set(type, []); + const list = listeners.get(type)!; + if (!list.includes(handler)) list.push(handler); + }, + remove(type: EventType, handler: Handler) { + const list = listeners.get(type); + if (!list) return; + const i = list.indexOf(handler); + if (i >= 0) list.splice(i, 1); + }, + dispatch(type: EventType, ...args: unknown[]) { + const list = listeners.get(type); + if (!list) return; + for (const h of [...list]) h(...args); + }, +}; diff --git a/assets/scripts/core/EventManager.ts.meta b/assets/scripts/core/EventManager.ts.meta new file mode 100644 index 0000000..b4af39f --- /dev/null +++ b/assets/scripts/core/EventManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "d101e574-7e0a-4ccf-9ead-12d3872afe82", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/gameplay.meta b/assets/scripts/gameplay.meta new file mode 100644 index 0000000..fe65743 --- /dev/null +++ b/assets/scripts/gameplay.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "189e768a-9029-4554-9763-dd1099995a8d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/gameplay/Movement.ts b/assets/scripts/gameplay/Movement.ts new file mode 100644 index 0000000..173ae85 --- /dev/null +++ b/assets/scripts/gameplay/Movement.ts @@ -0,0 +1,178 @@ +import { _decorator, Component, Vec3 } from 'cc'; +import { + Direction, GameState, GridType, MoveState, MoverRole, + addDirection, getMoveCondition, lookupMove, +} from '../core/Define'; +import { GameManager } from '../manager/GameManager'; + +const { ccclass, property } = _decorator; + +@ccclass('Movement') +export class Movement extends Component { + @property + moveSpeed = 4; + + direction: Direction = Direction.North; + moveState: MoveState = MoveState.Idle; + moverRole: MoverRole = 'player'; + + protected targetPosition = new Vec3(); + protected targetGridType: GridType = GridType.None; + protected lastPosition = new Vec3(); + protected step = 0; + + private moveWait = false; + private queue: Promise = Promise.resolve(); + static callEach = false; + + get curGrid(): GridType { + return GameManager.instance!.calculateGridType(this.node.position); + } + get nextGrid(): GridType { + return GameManager.instance!.calculateNextGridType(this.node.position, this.direction); + } + get lastGrid(): GridType { + return GameManager.instance!.calculateLastGridType(this.node.position, this.direction); + } + get isFront(): boolean { + return this.direction === Direction.South || this.direction === Direction.East; + } + + start() { + this.setDirection(this.direction); + } + + update(dt: number) { + if (this.moveState !== MoveState.Moving) return; + const pos = this.node.position; + const next = new Vec3(); + Vec3.moveTowards(next, pos, this.targetPosition, this.moveSpeed * dt); + this.node.setPosition(next); + this.onMoving(); + if (Vec3.distance(next, this.targetPosition) < 0.01) { + this.node.setPosition(this.targetPosition); + this.moveState = MoveState.Idle; + this.moveWait = false; + this.onMoveToTarget(); + } + } + + setDirection(dir: Direction) { + this.direction = dir; + } + + protected onMoving() {} + protected onMoveToTarget() {} + protected onMoveNextSet(_isJump: boolean) {} + protected onMoveFail(_isJump: boolean) {} + protected playMoveAnim() {} + + private moveNextCheck(isJump: boolean, toFront: boolean): number { + const gm = GameManager.instance!; + const dir = toFront ? this.direction : addDirection(this.direction, 2); + const targetTmp = gm.nextGridPosition(this.node.position, dir); + const targetType = gm.calculateGridType(targetTmp); + const table = getMoveCondition(gm.multMode); + const nextG = toFront ? this.nextGrid : this.lastGrid; + const v = lookupMove(table, this.moverRole, this.curGrid, nextG, isJump); + if (v !== undefined) { + if (v === 1) { + if (gm.multMode) { + const nextCell = gm.worldToCell(targetTmp); + for (const n of ['PlayerA1', 'PlayerA2', 'PlayerA3', 'PlayerB1', 'PlayerB2', 'PlayerB3']) { + const p = gm.findNodeByName(n); + if (p) { + const c = gm.worldToCell(p.worldPosition); + if (c.x === nextCell.x && c.y === nextCell.y) return 0; + } + } + if (nextG === GridType.Ride) { + const ride = gm.getGameObject(targetTmp); + const expect = this.node.name.replace('Player', 'Vehicle'); + if (ride && ride.name !== expect) return 0; + } + } + this.targetPosition.set(targetTmp); + this.targetGridType = targetType; + } + return v; + } + return gm.multMode ? 0 : -1; + } + + private enqueue(fn: () => Promise) { + this.queue = this.queue.then(fn).catch((e) => console.error(e)); + } + + private waitUntil(cond: () => boolean): Promise { + return new Promise((resolve) => { + const tick = () => { + if (cond()) resolve(); + else requestAnimationFrame(tick); + }; + tick(); + }); + } + + private async moveCoroutine(n: number, isJump: boolean) { + await this.waitUntil(() => !this.moveWait); + const toFront = n > 0; + this.step = Math.abs(n); + const gm = GameManager.instance!; + while (this.step > 0 && gm.gameState === GameState.Run) { + this.step--; + const r = this.moveNextCheck(isJump, toFront); + if (r === -1) { + this.onMoveFail(isJump); + return; + } + if (r === 1) { + this.moveWait = true; + this.lastPosition.set(this.node.position); + this.moveState = MoveState.Moving; + this.onMoveNextSet(isJump); + await this.waitUntil(() => !this.moveWait); + } else { + this.playMoveAnim(); + this.moveState = MoveState.Moving; + } + } + } + + private async rotateCoroutine(n: number) { + await this.waitUntil(() => !this.moveWait); + this.moveWait = true; + this.setDirection(addDirection(this.direction, n)); + this.moveWait = false; + this.onMoveToTarget(); + } + + protected jsCallCheck(n: number): boolean { + const gm = GameManager.instance!; + const name = this.node.name; + if (name === 'Player' || name === 'Vehicle') return gm.jsCallCheck(n); + if (gm.multMode) return gm.jsCallCheckMultMode(n, name); + return false; + } + + callMove(n: number) { + if (!this.jsCallCheck(n)) return; + this.enqueue(() => this.moveCoroutine(n, false)); + } + + callRotateLeft(n: number) { + if (!this.jsCallCheck(n)) return; + this.enqueue(() => this.rotateCoroutine(-n)); + } + + callRotateRight(n: number) { + if (!this.jsCallCheck(n)) return; + this.enqueue(() => this.rotateCoroutine(n)); + } + + callJump() { + if (this.moverRole !== 'player') return; + if (!this.jsCallCheck(1)) return; + this.enqueue(() => this.moveCoroutine(1, true)); + } +} diff --git a/assets/scripts/gameplay/Movement.ts.meta b/assets/scripts/gameplay/Movement.ts.meta new file mode 100644 index 0000000..36f25b5 --- /dev/null +++ b/assets/scripts/gameplay/Movement.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "5fdb4109-5d6a-4002-90f9-a7568122ac93", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/level.meta b/assets/scripts/level.meta new file mode 100644 index 0000000..d67e501 --- /dev/null +++ b/assets/scripts/level.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "95df233f-f174-4e12-a4f4-cc94d163a21d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/level/LevelRegistry.ts b/assets/scripts/level/LevelRegistry.ts new file mode 100644 index 0000000..1ac7a34 --- /dev/null +++ b/assets/scripts/level/LevelRegistry.ts @@ -0,0 +1,47 @@ +import { Direction } from '../core/Define'; +import { LevelConfig } from './LevelTypes'; +import { LEVELS_600 } from './levels-600.generated'; + +/** 额外关卡(多人等) */ +const EXTRA_LEVELS: Record = { + 601: { + levelID: 601, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 6, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + ], + }, + 999001: { + levelID: 999001, + boundary: { x: 999, y: 999 }, + spawns: [ + { x: -9, y: -9, kind: 'player', playerDirection: Direction.South }, + { x: 9, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: -9, y: -10, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 9, y: 10, kind: 'vehicle', vehicleDirection: Direction.South }, + ], + }, +}; + +const allLevels: Record = { + ...LEVELS_600, + ...EXTRA_LEVELS, +}; + +export function getLevelConfig(levelID: number): LevelConfig | null { + return allLevels[levelID] ?? null; +} + +export function hasLevel(levelID: number): boolean { + return levelID in allLevels; +} + +export function registerLevel(config: LevelConfig) { + allLevels[config.levelID] = config; +} + +export function getLevelCount(): number { + return Object.keys(allLevels).length; +} diff --git a/assets/scripts/level/LevelRegistry.ts.meta b/assets/scripts/level/LevelRegistry.ts.meta new file mode 100644 index 0000000..19dec98 --- /dev/null +++ b/assets/scripts/level/LevelRegistry.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "05e4b37c-f71a-42c0-b8f6-88fda70b655d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/level/LevelTypes.ts b/assets/scripts/level/LevelTypes.ts new file mode 100644 index 0000000..50f57b9 --- /dev/null +++ b/assets/scripts/level/LevelTypes.ts @@ -0,0 +1,22 @@ +import { Direction } from '../core/Define'; + +export type SpawnKind = 'player' | 'vehicle' | 'prop' | 'prop_decor' | 'enemy'; + +export interface SpawnConfig { + x: number; + y: number; + kind: SpawnKind; + playerDirection?: Direction; + vehicleDirection?: Direction; +} + +/** 稀疏地块:key 为 "x,y" */ +export interface LevelConfig { + levelID: number; + boundary: { x: number; y: number }; + spawns: SpawnConfig[]; + /** Ground 层 tile 名 */ + ground?: Record; + /** Border 阻挡格 */ + border?: Record; +} diff --git a/assets/scripts/level/LevelTypes.ts.meta b/assets/scripts/level/LevelTypes.ts.meta new file mode 100644 index 0000000..6cbb9f9 --- /dev/null +++ b/assets/scripts/level/LevelTypes.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "9fd69354-fd48-4ecf-9bd3-2cb056258612", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/level/border-cache.json b/assets/scripts/level/border-cache.json new file mode 100644 index 0000000..6eaf95c --- /dev/null +++ b/assets/scripts/level/border-cache.json @@ -0,0 +1,2022 @@ +{ + "10,10": { + "-10,-10": true, + "-10,-9": true, + "-10,-8": true, + "-10,-7": true, + "-10,-6": true, + "-10,-5": true, + "-10,-4": true, + "-10,-3": true, + "-10,-2": true, + "-10,-1": true, + "-10,0": true, + "-10,1": true, + "-10,2": true, + "-10,3": true, + "-10,4": true, + "-10,5": true, + "-10,6": true, + "-10,7": true, + "-10,8": true, + "-10,9": true, + "-10,10": true, + "-9,-10": true, + "-9,10": true, + "-8,-10": true, + "-8,10": true, + "-7,-10": true, + "-7,10": true, + "-6,-10": true, + "-6,10": true, + "-5,-10": true, + "-5,10": true, + "-4,-10": true, + "-4,10": true, + "-3,-10": true, + "-3,10": true, + "-2,-10": true, + "-2,10": true, + "-1,-10": true, + "-1,10": true, + "0,-10": true, + "0,10": true, + "1,-10": true, + "1,10": true, + "2,-10": true, + "2,10": true, + "3,-10": true, + "3,10": true, + "4,-10": true, + "4,10": true, + "5,-10": true, + "5,10": true, + "6,-10": true, + "6,10": true, + "7,-10": true, + "7,10": true, + "8,-10": true, + "8,10": true, + "9,-10": true, + "9,10": true, + "10,-10": true, + "10,-9": true, + "10,-8": true, + "10,-7": true, + "10,-6": true, + "10,-5": true, + "10,-4": true, + "10,-3": true, + "10,-2": true, + "10,-1": true, + "10,0": true, + "10,1": true, + "10,2": true, + "10,3": true, + "10,4": true, + "10,5": true, + "10,6": true, + "10,7": true, + "10,8": true, + "10,9": true, + "10,10": true + }, + "13,13": { + "-13,-13": true, + "-13,-12": true, + "-13,-11": true, + "-13,-10": true, + "-13,-9": true, + "-13,-8": true, + "-13,-7": true, + "-13,-6": true, + "-13,-5": true, + "-13,-4": true, + "-13,-3": true, + "-13,-2": true, + "-13,-1": true, + "-13,0": true, + "-13,1": true, + "-13,2": true, + "-13,3": true, + "-13,4": true, + "-13,5": true, + "-13,6": true, + "-13,7": true, + "-13,8": true, + "-13,9": true, + "-13,10": true, + "-13,11": true, + "-13,12": true, + "-13,13": true, + "-12,-13": true, + "-12,13": true, + "-11,-13": true, + "-11,13": true, + "-10,-13": true, + "-10,13": true, + "-9,-13": true, + "-9,13": true, + "-8,-13": true, + "-8,13": true, + "-7,-13": true, + "-7,13": true, + "-6,-13": true, + "-6,13": true, + "-5,-13": true, + "-5,13": true, + "-4,-13": true, + "-4,13": true, + "-3,-13": true, + "-3,13": true, + "-2,-13": true, + "-2,13": true, + "-1,-13": true, + "-1,13": true, + "0,-13": true, + "0,13": true, + "1,-13": true, + "1,13": true, + "2,-13": true, + "2,13": true, + "3,-13": true, + "3,13": true, + "4,-13": true, + "4,13": true, + "5,-13": true, + "5,13": true, + "6,-13": true, + "6,13": true, + "7,-13": true, + "7,13": true, + "8,-13": true, + "8,13": true, + "9,-13": true, + "9,13": true, + "10,-13": true, + "10,13": true, + "11,-13": true, + "11,13": true, + "12,-13": true, + "12,13": true, + "13,-13": true, + "13,-12": true, + "13,-11": true, + "13,-10": true, + "13,-9": true, + "13,-8": true, + "13,-7": true, + "13,-6": true, + "13,-5": true, + "13,-4": true, + "13,-3": true, + "13,-2": true, + "13,-1": true, + "13,0": true, + "13,1": true, + "13,2": true, + "13,3": true, + "13,4": true, + "13,5": true, + "13,6": true, + "13,7": true, + "13,8": true, + "13,9": true, + "13,10": true, + "13,11": true, + "13,12": true, + "13,13": true + }, + "14,14": { + "-14,-14": true, + "-14,-13": true, + "-14,-12": true, + "-14,-11": true, + "-14,-10": true, + "-14,-9": true, + "-14,-8": true, + "-14,-7": true, + "-14,-6": true, + "-14,-5": true, + "-14,-4": true, + "-14,-3": true, + "-14,-2": true, + "-14,-1": true, + "-14,0": true, + "-14,1": true, + "-14,2": true, + "-14,3": true, + "-14,4": true, + "-14,5": true, + "-14,6": true, + "-14,7": true, + "-14,8": true, + "-14,9": true, + "-14,10": true, + "-14,11": true, + "-14,12": true, + "-14,13": true, + "-14,14": true, + "-13,-14": true, + "-13,14": true, + "-12,-14": true, + "-12,14": true, + "-11,-14": true, + "-11,14": true, + "-10,-14": true, + "-10,14": true, + "-9,-14": true, + "-9,14": true, + "-8,-14": true, + "-8,14": true, + "-7,-14": true, + "-7,14": true, + "-6,-14": true, + "-6,14": true, + "-5,-14": true, + "-5,14": true, + "-4,-14": true, + "-4,14": true, + "-3,-14": true, + "-3,14": true, + "-2,-14": true, + "-2,14": true, + "-1,-14": true, + "-1,14": true, + "0,-14": true, + "0,14": true, + "1,-14": true, + "1,14": true, + "2,-14": true, + "2,14": true, + "3,-14": true, + "3,14": true, + "4,-14": true, + "4,14": true, + "5,-14": true, + "5,14": true, + "6,-14": true, + "6,14": true, + "7,-14": true, + "7,14": true, + "8,-14": true, + "8,14": true, + "9,-14": true, + "9,14": true, + "10,-14": true, + "10,14": true, + "11,-14": true, + "11,14": true, + "12,-14": true, + "12,14": true, + "13,-14": true, + "13,14": true, + "14,-14": true, + "14,-13": true, + "14,-12": true, + "14,-11": true, + "14,-10": true, + "14,-9": true, + "14,-8": true, + "14,-7": true, + "14,-6": true, + "14,-5": true, + "14,-4": true, + "14,-3": true, + "14,-2": true, + "14,-1": true, + "14,0": true, + "14,1": true, + "14,2": true, + "14,3": true, + "14,4": true, + "14,5": true, + "14,6": true, + "14,7": true, + "14,8": true, + "14,9": true, + "14,10": true, + "14,11": true, + "14,12": true, + "14,13": true, + "14,14": true + }, + "20,20": { + "-20,-20": true, + "-20,-19": true, + "-20,-18": true, + "-20,-17": true, + "-20,-16": true, + "-20,-15": true, + "-20,-14": true, + "-20,-13": true, + "-20,-12": true, + "-20,-11": true, + "-20,-10": true, + "-20,-9": true, + "-20,-8": true, + "-20,-7": true, + "-20,-6": true, + "-20,-5": true, + "-20,-4": true, + "-20,-3": true, + "-20,-2": true, + "-20,-1": true, + "-20,0": true, + "-20,1": true, + "-20,2": true, + "-20,3": true, + "-20,4": true, + "-20,5": true, + "-20,6": true, + "-20,7": true, + "-20,8": true, + "-20,9": true, + "-20,10": true, + "-20,11": true, + "-20,12": true, + "-20,13": true, + "-20,14": true, + "-20,15": true, + "-20,16": true, + "-20,17": true, + "-20,18": true, + "-20,19": true, + "-20,20": true, + "-19,-20": true, + "-19,20": true, + "-18,-20": true, + "-18,20": true, + "-17,-20": true, + "-17,20": true, + "-16,-20": true, + "-16,20": true, + "-15,-20": true, + "-15,20": true, + "-14,-20": true, + "-14,20": true, + "-13,-20": true, + "-13,20": true, + "-12,-20": true, + "-12,20": true, + "-11,-20": true, + "-11,20": true, + "-10,-20": true, + "-10,20": true, + "-9,-20": true, + "-9,20": true, + "-8,-20": true, + "-8,20": true, + "-7,-20": true, + "-7,20": true, + "-6,-20": true, + "-6,20": true, + "-5,-20": true, + "-5,20": true, + "-4,-20": true, + "-4,20": true, + "-3,-20": true, + "-3,20": true, + "-2,-20": true, + "-2,20": true, + "-1,-20": true, + "-1,20": true, + "0,-20": true, + "0,20": true, + "1,-20": true, + "1,20": true, + "2,-20": true, + "2,20": true, + "3,-20": true, + "3,20": true, + "4,-20": true, + "4,20": true, + "5,-20": true, + "5,20": true, + "6,-20": true, + "6,20": true, + "7,-20": true, + "7,20": true, + "8,-20": true, + "8,20": true, + "9,-20": true, + "9,20": true, + "10,-20": true, + "10,20": true, + "11,-20": true, + "11,20": true, + "12,-20": true, + "12,20": true, + "13,-20": true, + "13,20": true, + "14,-20": true, + "14,20": true, + "15,-20": true, + "15,20": true, + "16,-20": true, + "16,20": true, + "17,-20": true, + "17,20": true, + "18,-20": true, + "18,20": true, + "19,-20": true, + "19,20": true, + "20,-20": true, + "20,-19": true, + "20,-18": true, + "20,-17": true, + "20,-16": true, + "20,-15": true, + "20,-14": true, + "20,-13": true, + "20,-12": true, + "20,-11": true, + "20,-10": true, + "20,-9": true, + "20,-8": true, + "20,-7": true, + "20,-6": true, + "20,-5": true, + "20,-4": true, + "20,-3": true, + "20,-2": true, + "20,-1": true, + "20,0": true, + "20,1": true, + "20,2": true, + "20,3": true, + "20,4": true, + "20,5": true, + "20,6": true, + "20,7": true, + "20,8": true, + "20,9": true, + "20,10": true, + "20,11": true, + "20,12": true, + "20,13": true, + "20,14": true, + "20,15": true, + "20,16": true, + "20,17": true, + "20,18": true, + "20,19": true, + "20,20": true + }, + "11,11": { + "-11,-11": true, + "-11,-10": true, + "-11,-9": true, + "-11,-8": true, + "-11,-7": true, + "-11,-6": true, + "-11,-5": true, + "-11,-4": true, + "-11,-3": true, + "-11,-2": true, + "-11,-1": true, + "-11,0": true, + "-11,1": true, + "-11,2": true, + "-11,3": true, + "-11,4": true, + "-11,5": true, + "-11,6": true, + "-11,7": true, + "-11,8": true, + "-11,9": true, + "-11,10": true, + "-11,11": true, + "-10,-11": true, + "-10,11": true, + "-9,-11": true, + "-9,11": true, + "-8,-11": true, + "-8,11": true, + "-7,-11": true, + "-7,11": true, + "-6,-11": true, + "-6,11": true, + "-5,-11": true, + "-5,11": true, + "-4,-11": true, + "-4,11": true, + "-3,-11": true, + "-3,11": true, + "-2,-11": true, + "-2,11": true, + "-1,-11": true, + "-1,11": true, + "0,-11": true, + "0,11": true, + "1,-11": true, + "1,11": true, + "2,-11": true, + "2,11": true, + "3,-11": true, + "3,11": true, + "4,-11": true, + "4,11": true, + "5,-11": true, + "5,11": true, + "6,-11": true, + "6,11": true, + "7,-11": true, + "7,11": true, + "8,-11": true, + "8,11": true, + "9,-11": true, + "9,11": true, + "10,-11": true, + "10,11": true, + "11,-11": true, + "11,-10": true, + "11,-9": true, + "11,-8": true, + "11,-7": true, + "11,-6": true, + "11,-5": true, + "11,-4": true, + "11,-3": true, + "11,-2": true, + "11,-1": true, + "11,0": true, + "11,1": true, + "11,2": true, + "11,3": true, + "11,4": true, + "11,5": true, + "11,6": true, + "11,7": true, + "11,8": true, + "11,9": true, + "11,10": true, + "11,11": true + }, + "10,12": { + "-10,-12": true, + "-10,-11": true, + "-10,-10": true, + "-10,-9": true, + "-10,-8": true, + "-10,-7": true, + "-10,-6": true, + "-10,-5": true, + "-10,-4": true, + "-10,-3": true, + "-10,-2": true, + "-10,-1": true, + "-10,0": true, + "-10,1": true, + "-10,2": true, + "-10,3": true, + "-10,4": true, + "-10,5": true, + "-10,6": true, + "-10,7": true, + "-10,8": true, + "-10,9": true, + "-10,10": true, + "-10,11": true, + "-10,12": true, + "-9,-12": true, + "-9,12": true, + "-8,-12": true, + "-8,12": true, + "-7,-12": true, + "-7,12": true, + "-6,-12": true, + "-6,12": true, + "-5,-12": true, + "-5,12": true, + "-4,-12": true, + "-4,12": true, + "-3,-12": true, + "-3,12": true, + "-2,-12": true, + "-2,12": true, + "-1,-12": true, + "-1,12": true, + "0,-12": true, + "0,12": true, + "1,-12": true, + "1,12": true, + "2,-12": true, + "2,12": true, + "3,-12": true, + "3,12": true, + "4,-12": true, + "4,12": true, + "5,-12": true, + "5,12": true, + "6,-12": true, + "6,12": true, + "7,-12": true, + "7,12": true, + "8,-12": true, + "8,12": true, + "9,-12": true, + "9,12": true, + "10,-12": true, + "10,-11": true, + "10,-10": true, + "10,-9": true, + "10,-8": true, + "10,-7": true, + "10,-6": true, + "10,-5": true, + "10,-4": true, + "10,-3": true, + "10,-2": true, + "10,-1": true, + "10,0": true, + "10,1": true, + "10,2": true, + "10,3": true, + "10,4": true, + "10,5": true, + "10,6": true, + "10,7": true, + "10,8": true, + "10,9": true, + "10,10": true, + "10,11": true, + "10,12": true + }, + "11,15": { + "-11,-15": true, + "-11,-14": true, + "-11,-13": true, + "-11,-12": true, + "-11,-11": true, + "-11,-10": true, + "-11,-9": true, + "-11,-8": true, + "-11,-7": true, + "-11,-6": true, + "-11,-5": true, + "-11,-4": true, + "-11,-3": true, + "-11,-2": true, + "-11,-1": true, + "-11,0": true, + "-11,1": true, + "-11,2": true, + "-11,3": true, + "-11,4": true, + "-11,5": true, + "-11,6": true, + "-11,7": true, + "-11,8": true, + "-11,9": true, + "-11,10": true, + "-11,11": true, + "-11,12": true, + "-11,13": true, + "-11,14": true, + "-11,15": true, + "-10,-15": true, + "-10,15": true, + "-9,-15": true, + "-9,15": true, + "-8,-15": true, + "-8,15": true, + "-7,-15": true, + "-7,15": true, + "-6,-15": true, + "-6,15": true, + "-5,-15": true, + "-5,15": true, + "-4,-15": true, + "-4,15": true, + "-3,-15": true, + "-3,15": true, + "-2,-15": true, + "-2,15": true, + "-1,-15": true, + "-1,15": true, + "0,-15": true, + "0,15": true, + "1,-15": true, + "1,15": true, + "2,-15": true, + "2,15": true, + "3,-15": true, + "3,15": true, + "4,-15": true, + "4,15": true, + "5,-15": true, + "5,15": true, + "6,-15": true, + "6,15": true, + "7,-15": true, + "7,15": true, + "8,-15": true, + "8,15": true, + "9,-15": true, + "9,15": true, + "10,-15": true, + "10,15": true, + "11,-15": true, + "11,-14": true, + "11,-13": true, + "11,-12": true, + "11,-11": true, + "11,-10": true, + "11,-9": true, + "11,-8": true, + "11,-7": true, + "11,-6": true, + "11,-5": true, + "11,-4": true, + "11,-3": true, + "11,-2": true, + "11,-1": true, + "11,0": true, + "11,1": true, + "11,2": true, + "11,3": true, + "11,4": true, + "11,5": true, + "11,6": true, + "11,7": true, + "11,8": true, + "11,9": true, + "11,10": true, + "11,11": true, + "11,12": true, + "11,13": true, + "11,14": true, + "11,15": true + }, + "11,18": { + "-11,-18": true, + "-11,-17": true, + "-11,-16": true, + "-11,-15": true, + "-11,-14": true, + "-11,-13": true, + "-11,-12": true, + "-11,-11": true, + "-11,-10": true, + "-11,-9": true, + "-11,-8": true, + "-11,-7": true, + "-11,-6": true, + "-11,-5": true, + "-11,-4": true, + "-11,-3": true, + "-11,-2": true, + "-11,-1": true, + "-11,0": true, + "-11,1": true, + "-11,2": true, + "-11,3": true, + "-11,4": true, + "-11,5": true, + "-11,6": true, + "-11,7": true, + "-11,8": true, + "-11,9": true, + "-11,10": true, + "-11,11": true, + "-11,12": true, + "-11,13": true, + "-11,14": true, + "-11,15": true, + "-11,16": true, + "-11,17": true, + "-11,18": true, + "-10,-18": true, + "-10,18": true, + "-9,-18": true, + "-9,18": true, + "-8,-18": true, + "-8,18": true, + "-7,-18": true, + "-7,18": true, + "-6,-18": true, + "-6,18": true, + "-5,-18": true, + "-5,18": true, + "-4,-18": true, + "-4,18": true, + "-3,-18": true, + "-3,18": true, + "-2,-18": true, + "-2,18": true, + "-1,-18": true, + "-1,18": true, + "0,-18": true, + "0,18": true, + "1,-18": true, + "1,18": true, + "2,-18": true, + "2,18": true, + "3,-18": true, + "3,18": true, + "4,-18": true, + "4,18": true, + "5,-18": true, + "5,18": true, + "6,-18": true, + "6,18": true, + "7,-18": true, + "7,18": true, + "8,-18": true, + "8,18": true, + "9,-18": true, + "9,18": true, + "10,-18": true, + "10,18": true, + "11,-18": true, + "11,-17": true, + "11,-16": true, + "11,-15": true, + "11,-14": true, + "11,-13": true, + "11,-12": true, + "11,-11": true, + "11,-10": true, + "11,-9": true, + "11,-8": true, + "11,-7": true, + "11,-6": true, + "11,-5": true, + "11,-4": true, + "11,-3": true, + "11,-2": true, + "11,-1": true, + "11,0": true, + "11,1": true, + "11,2": true, + "11,3": true, + "11,4": true, + "11,5": true, + "11,6": true, + "11,7": true, + "11,8": true, + "11,9": true, + "11,10": true, + "11,11": true, + "11,12": true, + "11,13": true, + "11,14": true, + "11,15": true, + "11,16": true, + "11,17": true, + "11,18": true + }, + "15,15": { + "-15,-15": true, + "-15,-14": true, + "-15,-13": true, + "-15,-12": true, + "-15,-11": true, + "-15,-10": true, + "-15,-9": true, + "-15,-8": true, + "-15,-7": true, + "-15,-6": true, + "-15,-5": true, + "-15,-4": true, + "-15,-3": true, + "-15,-2": true, + "-15,-1": true, + "-15,0": true, + "-15,1": true, + "-15,2": true, + "-15,3": true, + "-15,4": true, + "-15,5": true, + "-15,6": true, + "-15,7": true, + "-15,8": true, + "-15,9": true, + "-15,10": true, + "-15,11": true, + "-15,12": true, + "-15,13": true, + "-15,14": true, + "-15,15": true, + "-14,-15": true, + "-14,15": true, + "-13,-15": true, + "-13,15": true, + "-12,-15": true, + "-12,15": true, + "-11,-15": true, + "-11,15": true, + "-10,-15": true, + "-10,15": true, + "-9,-15": true, + "-9,15": true, + "-8,-15": true, + "-8,15": true, + "-7,-15": true, + "-7,15": true, + "-6,-15": true, + "-6,15": true, + "-5,-15": true, + "-5,15": true, + "-4,-15": true, + "-4,15": true, + "-3,-15": true, + "-3,15": true, + "-2,-15": true, + "-2,15": true, + "-1,-15": true, + "-1,15": true, + "0,-15": true, + "0,15": true, + "1,-15": true, + "1,15": true, + "2,-15": true, + "2,15": true, + "3,-15": true, + "3,15": true, + "4,-15": true, + "4,15": true, + "5,-15": true, + "5,15": true, + "6,-15": true, + "6,15": true, + "7,-15": true, + "7,15": true, + "8,-15": true, + "8,15": true, + "9,-15": true, + "9,15": true, + "10,-15": true, + "10,15": true, + "11,-15": true, + "11,15": true, + "12,-15": true, + "12,15": true, + "13,-15": true, + "13,15": true, + "14,-15": true, + "14,15": true, + "15,-15": true, + "15,-14": true, + "15,-13": true, + "15,-12": true, + "15,-11": true, + "15,-10": true, + "15,-9": true, + "15,-8": true, + "15,-7": true, + "15,-6": true, + "15,-5": true, + "15,-4": true, + "15,-3": true, + "15,-2": true, + "15,-1": true, + "15,0": true, + "15,1": true, + "15,2": true, + "15,3": true, + "15,4": true, + "15,5": true, + "15,6": true, + "15,7": true, + "15,8": true, + "15,9": true, + "15,10": true, + "15,11": true, + "15,12": true, + "15,13": true, + "15,14": true, + "15,15": true + }, + "20,25": { + "-20,-25": true, + "-20,-24": true, + "-20,-23": true, + "-20,-22": true, + "-20,-21": true, + "-20,-20": true, + "-20,-19": true, + "-20,-18": true, + "-20,-17": true, + "-20,-16": true, + "-20,-15": true, + "-20,-14": true, + "-20,-13": true, + "-20,-12": true, + "-20,-11": true, + "-20,-10": true, + "-20,-9": true, + "-20,-8": true, + "-20,-7": true, + "-20,-6": true, + "-20,-5": true, + "-20,-4": true, + "-20,-3": true, + "-20,-2": true, + "-20,-1": true, + "-20,0": true, + "-20,1": true, + "-20,2": true, + "-20,3": true, + "-20,4": true, + "-20,5": true, + "-20,6": true, + "-20,7": true, + "-20,8": true, + "-20,9": true, + "-20,10": true, + "-20,11": true, + "-20,12": true, + "-20,13": true, + "-20,14": true, + "-20,15": true, + "-20,16": true, + "-20,17": true, + "-20,18": true, + "-20,19": true, + "-20,20": true, + "-20,21": true, + "-20,22": true, + "-20,23": true, + "-20,24": true, + "-20,25": true, + "-19,-25": true, + "-19,25": true, + "-18,-25": true, + "-18,25": true, + "-17,-25": true, + "-17,25": true, + "-16,-25": true, + "-16,25": true, + "-15,-25": true, + "-15,25": true, + "-14,-25": true, + "-14,25": true, + "-13,-25": true, + "-13,25": true, + "-12,-25": true, + "-12,25": true, + "-11,-25": true, + "-11,25": true, + "-10,-25": true, + "-10,25": true, + "-9,-25": true, + "-9,25": true, + "-8,-25": true, + "-8,25": true, + "-7,-25": true, + "-7,25": true, + "-6,-25": true, + "-6,25": true, + "-5,-25": true, + "-5,25": true, + "-4,-25": true, + "-4,25": true, + "-3,-25": true, + "-3,25": true, + "-2,-25": true, + "-2,25": true, + "-1,-25": true, + "-1,25": true, + "0,-25": true, + "0,25": true, + "1,-25": true, + "1,25": true, + "2,-25": true, + "2,25": true, + "3,-25": true, + "3,25": true, + "4,-25": true, + "4,25": true, + "5,-25": true, + "5,25": true, + "6,-25": true, + "6,25": true, + "7,-25": true, + "7,25": true, + "8,-25": true, + "8,25": true, + "9,-25": true, + "9,25": true, + "10,-25": true, + "10,25": true, + "11,-25": true, + "11,25": true, + "12,-25": true, + "12,25": true, + "13,-25": true, + "13,25": true, + "14,-25": true, + "14,25": true, + "15,-25": true, + "15,25": true, + "16,-25": true, + "16,25": true, + "17,-25": true, + "17,25": true, + "18,-25": true, + "18,25": true, + "19,-25": true, + "19,25": true, + "20,-25": true, + "20,-24": true, + "20,-23": true, + "20,-22": true, + "20,-21": true, + "20,-20": true, + "20,-19": true, + "20,-18": true, + "20,-17": true, + "20,-16": true, + "20,-15": true, + "20,-14": true, + "20,-13": true, + "20,-12": true, + "20,-11": true, + "20,-10": true, + "20,-9": true, + "20,-8": true, + "20,-7": true, + "20,-6": true, + "20,-5": true, + "20,-4": true, + "20,-3": true, + "20,-2": true, + "20,-1": true, + "20,0": true, + "20,1": true, + "20,2": true, + "20,3": true, + "20,4": true, + "20,5": true, + "20,6": true, + "20,7": true, + "20,8": true, + "20,9": true, + "20,10": true, + "20,11": true, + "20,12": true, + "20,13": true, + "20,14": true, + "20,15": true, + "20,16": true, + "20,17": true, + "20,18": true, + "20,19": true, + "20,20": true, + "20,21": true, + "20,22": true, + "20,23": true, + "20,24": true, + "20,25": true + }, + "25,25": { + "-25,-25": true, + "-25,-24": true, + "-25,-23": true, + "-25,-22": true, + "-25,-21": true, + "-25,-20": true, + "-25,-19": true, + "-25,-18": true, + "-25,-17": true, + "-25,-16": true, + "-25,-15": true, + "-25,-14": true, + "-25,-13": true, + "-25,-12": true, + "-25,-11": true, + "-25,-10": true, + "-25,-9": true, + "-25,-8": true, + "-25,-7": true, + "-25,-6": true, + "-25,-5": true, + "-25,-4": true, + "-25,-3": true, + "-25,-2": true, + "-25,-1": true, + "-25,0": true, + "-25,1": true, + "-25,2": true, + "-25,3": true, + "-25,4": true, + "-25,5": true, + "-25,6": true, + "-25,7": true, + "-25,8": true, + "-25,9": true, + "-25,10": true, + "-25,11": true, + "-25,12": true, + "-25,13": true, + "-25,14": true, + "-25,15": true, + "-25,16": true, + "-25,17": true, + "-25,18": true, + "-25,19": true, + "-25,20": true, + "-25,21": true, + "-25,22": true, + "-25,23": true, + "-25,24": true, + "-25,25": true, + "-24,-25": true, + "-24,25": true, + "-23,-25": true, + "-23,25": true, + "-22,-25": true, + "-22,25": true, + "-21,-25": true, + "-21,25": true, + "-20,-25": true, + "-20,25": true, + "-19,-25": true, + "-19,25": true, + "-18,-25": true, + "-18,25": true, + "-17,-25": true, + "-17,25": true, + "-16,-25": true, + "-16,25": true, + "-15,-25": true, + "-15,25": true, + "-14,-25": true, + "-14,25": true, + "-13,-25": true, + "-13,25": true, + "-12,-25": true, + "-12,25": true, + "-11,-25": true, + "-11,25": true, + "-10,-25": true, + "-10,25": true, + "-9,-25": true, + "-9,25": true, + "-8,-25": true, + "-8,25": true, + "-7,-25": true, + "-7,25": true, + "-6,-25": true, + "-6,25": true, + "-5,-25": true, + "-5,25": true, + "-4,-25": true, + "-4,25": true, + "-3,-25": true, + "-3,25": true, + "-2,-25": true, + "-2,25": true, + "-1,-25": true, + "-1,25": true, + "0,-25": true, + "0,25": true, + "1,-25": true, + "1,25": true, + "2,-25": true, + "2,25": true, + "3,-25": true, + "3,25": true, + "4,-25": true, + "4,25": true, + "5,-25": true, + "5,25": true, + "6,-25": true, + "6,25": true, + "7,-25": true, + "7,25": true, + "8,-25": true, + "8,25": true, + "9,-25": true, + "9,25": true, + "10,-25": true, + "10,25": true, + "11,-25": true, + "11,25": true, + "12,-25": true, + "12,25": true, + "13,-25": true, + "13,25": true, + "14,-25": true, + "14,25": true, + "15,-25": true, + "15,25": true, + "16,-25": true, + "16,25": true, + "17,-25": true, + "17,25": true, + "18,-25": true, + "18,25": true, + "19,-25": true, + "19,25": true, + "20,-25": true, + "20,25": true, + "21,-25": true, + "21,25": true, + "22,-25": true, + "22,25": true, + "23,-25": true, + "23,25": true, + "24,-25": true, + "24,25": true, + "25,-25": true, + "25,-24": true, + "25,-23": true, + "25,-22": true, + "25,-21": true, + "25,-20": true, + "25,-19": true, + "25,-18": true, + "25,-17": true, + "25,-16": true, + "25,-15": true, + "25,-14": true, + "25,-13": true, + "25,-12": true, + "25,-11": true, + "25,-10": true, + "25,-9": true, + "25,-8": true, + "25,-7": true, + "25,-6": true, + "25,-5": true, + "25,-4": true, + "25,-3": true, + "25,-2": true, + "25,-1": true, + "25,0": true, + "25,1": true, + "25,2": true, + "25,3": true, + "25,4": true, + "25,5": true, + "25,6": true, + "25,7": true, + "25,8": true, + "25,9": true, + "25,10": true, + "25,11": true, + "25,12": true, + "25,13": true, + "25,14": true, + "25,15": true, + "25,16": true, + "25,17": true, + "25,18": true, + "25,19": true, + "25,20": true, + "25,21": true, + "25,22": true, + "25,23": true, + "25,24": true, + "25,25": true + }, + "30,20": { + "-30,-20": true, + "-30,-19": true, + "-30,-18": true, + "-30,-17": true, + "-30,-16": true, + "-30,-15": true, + "-30,-14": true, + "-30,-13": true, + "-30,-12": true, + "-30,-11": true, + "-30,-10": true, + "-30,-9": true, + "-30,-8": true, + "-30,-7": true, + "-30,-6": true, + "-30,-5": true, + "-30,-4": true, + "-30,-3": true, + "-30,-2": true, + "-30,-1": true, + "-30,0": true, + "-30,1": true, + "-30,2": true, + "-30,3": true, + "-30,4": true, + "-30,5": true, + "-30,6": true, + "-30,7": true, + "-30,8": true, + "-30,9": true, + "-30,10": true, + "-30,11": true, + "-30,12": true, + "-30,13": true, + "-30,14": true, + "-30,15": true, + "-30,16": true, + "-30,17": true, + "-30,18": true, + "-30,19": true, + "-30,20": true, + "-29,-20": true, + "-29,20": true, + "-28,-20": true, + "-28,20": true, + "-27,-20": true, + "-27,20": true, + "-26,-20": true, + "-26,20": true, + "-25,-20": true, + "-25,20": true, + "-24,-20": true, + "-24,20": true, + "-23,-20": true, + "-23,20": true, + "-22,-20": true, + "-22,20": true, + "-21,-20": true, + "-21,20": true, + "-20,-20": true, + "-20,20": true, + "-19,-20": true, + "-19,20": true, + "-18,-20": true, + "-18,20": true, + "-17,-20": true, + "-17,20": true, + "-16,-20": true, + "-16,20": true, + "-15,-20": true, + "-15,20": true, + "-14,-20": true, + "-14,20": true, + "-13,-20": true, + "-13,20": true, + "-12,-20": true, + "-12,20": true, + "-11,-20": true, + "-11,20": true, + "-10,-20": true, + "-10,20": true, + "-9,-20": true, + "-9,20": true, + "-8,-20": true, + "-8,20": true, + "-7,-20": true, + "-7,20": true, + "-6,-20": true, + "-6,20": true, + "-5,-20": true, + "-5,20": true, + "-4,-20": true, + "-4,20": true, + "-3,-20": true, + "-3,20": true, + "-2,-20": true, + "-2,20": true, + "-1,-20": true, + "-1,20": true, + "0,-20": true, + "0,20": true, + "1,-20": true, + "1,20": true, + "2,-20": true, + "2,20": true, + "3,-20": true, + "3,20": true, + "4,-20": true, + "4,20": true, + "5,-20": true, + "5,20": true, + "6,-20": true, + "6,20": true, + "7,-20": true, + "7,20": true, + "8,-20": true, + "8,20": true, + "9,-20": true, + "9,20": true, + "10,-20": true, + "10,20": true, + "11,-20": true, + "11,20": true, + "12,-20": true, + "12,20": true, + "13,-20": true, + "13,20": true, + "14,-20": true, + "14,20": true, + "15,-20": true, + "15,20": true, + "16,-20": true, + "16,20": true, + "17,-20": true, + "17,20": true, + "18,-20": true, + "18,20": true, + "19,-20": true, + "19,20": true, + "20,-20": true, + "20,20": true, + "21,-20": true, + "21,20": true, + "22,-20": true, + "22,20": true, + "23,-20": true, + "23,20": true, + "24,-20": true, + "24,20": true, + "25,-20": true, + "25,20": true, + "26,-20": true, + "26,20": true, + "27,-20": true, + "27,20": true, + "28,-20": true, + "28,20": true, + "29,-20": true, + "29,20": true, + "30,-20": true, + "30,-19": true, + "30,-18": true, + "30,-17": true, + "30,-16": true, + "30,-15": true, + "30,-14": true, + "30,-13": true, + "30,-12": true, + "30,-11": true, + "30,-10": true, + "30,-9": true, + "30,-8": true, + "30,-7": true, + "30,-6": true, + "30,-5": true, + "30,-4": true, + "30,-3": true, + "30,-2": true, + "30,-1": true, + "30,0": true, + "30,1": true, + "30,2": true, + "30,3": true, + "30,4": true, + "30,5": true, + "30,6": true, + "30,7": true, + "30,8": true, + "30,9": true, + "30,10": true, + "30,11": true, + "30,12": true, + "30,13": true, + "30,14": true, + "30,15": true, + "30,16": true, + "30,17": true, + "30,18": true, + "30,19": true, + "30,20": true + }, + "20,30": { + "-20,-30": true, + "-20,-29": true, + "-20,-28": true, + "-20,-27": true, + "-20,-26": true, + "-20,-25": true, + "-20,-24": true, + "-20,-23": true, + "-20,-22": true, + "-20,-21": true, + "-20,-20": true, + "-20,-19": true, + "-20,-18": true, + "-20,-17": true, + "-20,-16": true, + "-20,-15": true, + "-20,-14": true, + "-20,-13": true, + "-20,-12": true, + "-20,-11": true, + "-20,-10": true, + "-20,-9": true, + "-20,-8": true, + "-20,-7": true, + "-20,-6": true, + "-20,-5": true, + "-20,-4": true, + "-20,-3": true, + "-20,-2": true, + "-20,-1": true, + "-20,0": true, + "-20,1": true, + "-20,2": true, + "-20,3": true, + "-20,4": true, + "-20,5": true, + "-20,6": true, + "-20,7": true, + "-20,8": true, + "-20,9": true, + "-20,10": true, + "-20,11": true, + "-20,12": true, + "-20,13": true, + "-20,14": true, + "-20,15": true, + "-20,16": true, + "-20,17": true, + "-20,18": true, + "-20,19": true, + "-20,20": true, + "-20,21": true, + "-20,22": true, + "-20,23": true, + "-20,24": true, + "-20,25": true, + "-20,26": true, + "-20,27": true, + "-20,28": true, + "-20,29": true, + "-20,30": true, + "-19,-30": true, + "-19,30": true, + "-18,-30": true, + "-18,30": true, + "-17,-30": true, + "-17,30": true, + "-16,-30": true, + "-16,30": true, + "-15,-30": true, + "-15,30": true, + "-14,-30": true, + "-14,30": true, + "-13,-30": true, + "-13,30": true, + "-12,-30": true, + "-12,30": true, + "-11,-30": true, + "-11,30": true, + "-10,-30": true, + "-10,30": true, + "-9,-30": true, + "-9,30": true, + "-8,-30": true, + "-8,30": true, + "-7,-30": true, + "-7,30": true, + "-6,-30": true, + "-6,30": true, + "-5,-30": true, + "-5,30": true, + "-4,-30": true, + "-4,30": true, + "-3,-30": true, + "-3,30": true, + "-2,-30": true, + "-2,30": true, + "-1,-30": true, + "-1,30": true, + "0,-30": true, + "0,30": true, + "1,-30": true, + "1,30": true, + "2,-30": true, + "2,30": true, + "3,-30": true, + "3,30": true, + "4,-30": true, + "4,30": true, + "5,-30": true, + "5,30": true, + "6,-30": true, + "6,30": true, + "7,-30": true, + "7,30": true, + "8,-30": true, + "8,30": true, + "9,-30": true, + "9,30": true, + "10,-30": true, + "10,30": true, + "11,-30": true, + "11,30": true, + "12,-30": true, + "12,30": true, + "13,-30": true, + "13,30": true, + "14,-30": true, + "14,30": true, + "15,-30": true, + "15,30": true, + "16,-30": true, + "16,30": true, + "17,-30": true, + "17,30": true, + "18,-30": true, + "18,30": true, + "19,-30": true, + "19,30": true, + "20,-30": true, + "20,-29": true, + "20,-28": true, + "20,-27": true, + "20,-26": true, + "20,-25": true, + "20,-24": true, + "20,-23": true, + "20,-22": true, + "20,-21": true, + "20,-20": true, + "20,-19": true, + "20,-18": true, + "20,-17": true, + "20,-16": true, + "20,-15": true, + "20,-14": true, + "20,-13": true, + "20,-12": true, + "20,-11": true, + "20,-10": true, + "20,-9": true, + "20,-8": true, + "20,-7": true, + "20,-6": true, + "20,-5": true, + "20,-4": true, + "20,-3": true, + "20,-2": true, + "20,-1": true, + "20,0": true, + "20,1": true, + "20,2": true, + "20,3": true, + "20,4": true, + "20,5": true, + "20,6": true, + "20,7": true, + "20,8": true, + "20,9": true, + "20,10": true, + "20,11": true, + "20,12": true, + "20,13": true, + "20,14": true, + "20,15": true, + "20,16": true, + "20,17": true, + "20,18": true, + "20,19": true, + "20,20": true, + "20,21": true, + "20,22": true, + "20,23": true, + "20,24": true, + "20,25": true, + "20,26": true, + "20,27": true, + "20,28": true, + "20,29": true, + "20,30": true + }, + "30,30": { + "-30,-30": true, + "-30,-29": true, + "-30,-28": true, + "-30,-27": true, + "-30,-26": true, + "-30,-25": true, + "-30,-24": true, + "-30,-23": true, + "-30,-22": true, + "-30,-21": true, + "-30,-20": true, + "-30,-19": true, + "-30,-18": true, + "-30,-17": true, + "-30,-16": true, + "-30,-15": true, + "-30,-14": true, + "-30,-13": true, + "-30,-12": true, + "-30,-11": true, + "-30,-10": true, + "-30,-9": true, + "-30,-8": true, + "-30,-7": true, + "-30,-6": true, + "-30,-5": true, + "-30,-4": true, + "-30,-3": true, + "-30,-2": true, + "-30,-1": true, + "-30,0": true, + "-30,1": true, + "-30,2": true, + "-30,3": true, + "-30,4": true, + "-30,5": true, + "-30,6": true, + "-30,7": true, + "-30,8": true, + "-30,9": true, + "-30,10": true, + "-30,11": true, + "-30,12": true, + "-30,13": true, + "-30,14": true, + "-30,15": true, + "-30,16": true, + "-30,17": true, + "-30,18": true, + "-30,19": true, + "-30,20": true, + "-30,21": true, + "-30,22": true, + "-30,23": true, + "-30,24": true, + "-30,25": true, + "-30,26": true, + "-30,27": true, + "-30,28": true, + "-30,29": true, + "-30,30": true, + "-29,-30": true, + "-29,30": true, + "-28,-30": true, + "-28,30": true, + "-27,-30": true, + "-27,30": true, + "-26,-30": true, + "-26,30": true, + "-25,-30": true, + "-25,30": true, + "-24,-30": true, + "-24,30": true, + "-23,-30": true, + "-23,30": true, + "-22,-30": true, + "-22,30": true, + "-21,-30": true, + "-21,30": true, + "-20,-30": true, + "-20,30": true, + "-19,-30": true, + "-19,30": true, + "-18,-30": true, + "-18,30": true, + "-17,-30": true, + "-17,30": true, + "-16,-30": true, + "-16,30": true, + "-15,-30": true, + "-15,30": true, + "-14,-30": true, + "-14,30": true, + "-13,-30": true, + "-13,30": true, + "-12,-30": true, + "-12,30": true, + "-11,-30": true, + "-11,30": true, + "-10,-30": true, + "-10,30": true, + "-9,-30": true, + "-9,30": true, + "-8,-30": true, + "-8,30": true, + "-7,-30": true, + "-7,30": true, + "-6,-30": true, + "-6,30": true, + "-5,-30": true, + "-5,30": true, + "-4,-30": true, + "-4,30": true, + "-3,-30": true, + "-3,30": true, + "-2,-30": true, + "-2,30": true, + "-1,-30": true, + "-1,30": true, + "0,-30": true, + "0,30": true, + "1,-30": true, + "1,30": true, + "2,-30": true, + "2,30": true, + "3,-30": true, + "3,30": true, + "4,-30": true, + "4,30": true, + "5,-30": true, + "5,30": true, + "6,-30": true, + "6,30": true, + "7,-30": true, + "7,30": true, + "8,-30": true, + "8,30": true, + "9,-30": true, + "9,30": true, + "10,-30": true, + "10,30": true, + "11,-30": true, + "11,30": true, + "12,-30": true, + "12,30": true, + "13,-30": true, + "13,30": true, + "14,-30": true, + "14,30": true, + "15,-30": true, + "15,30": true, + "16,-30": true, + "16,30": true, + "17,-30": true, + "17,30": true, + "18,-30": true, + "18,30": true, + "19,-30": true, + "19,30": true, + "20,-30": true, + "20,30": true, + "21,-30": true, + "21,30": true, + "22,-30": true, + "22,30": true, + "23,-30": true, + "23,30": true, + "24,-30": true, + "24,30": true, + "25,-30": true, + "25,30": true, + "26,-30": true, + "26,30": true, + "27,-30": true, + "27,30": true, + "28,-30": true, + "28,30": true, + "29,-30": true, + "29,30": true, + "30,-30": true, + "30,-29": true, + "30,-28": true, + "30,-27": true, + "30,-26": true, + "30,-25": true, + "30,-24": true, + "30,-23": true, + "30,-22": true, + "30,-21": true, + "30,-20": true, + "30,-19": true, + "30,-18": true, + "30,-17": true, + "30,-16": true, + "30,-15": true, + "30,-14": true, + "30,-13": true, + "30,-12": true, + "30,-11": true, + "30,-10": true, + "30,-9": true, + "30,-8": true, + "30,-7": true, + "30,-6": true, + "30,-5": true, + "30,-4": true, + "30,-3": true, + "30,-2": true, + "30,-1": true, + "30,0": true, + "30,1": true, + "30,2": true, + "30,3": true, + "30,4": true, + "30,5": true, + "30,6": true, + "30,7": true, + "30,8": true, + "30,9": true, + "30,10": true, + "30,11": true, + "30,12": true, + "30,13": true, + "30,14": true, + "30,15": true, + "30,16": true, + "30,17": true, + "30,18": true, + "30,19": true, + "30,20": true, + "30,21": true, + "30,22": true, + "30,23": true, + "30,24": true, + "30,25": true, + "30,26": true, + "30,27": true, + "30,28": true, + "30,29": true, + "30,30": true + } +} \ No newline at end of file diff --git a/assets/scripts/level/border-cache.json.meta b/assets/scripts/level/border-cache.json.meta new file mode 100644 index 0000000..1496f06 --- /dev/null +++ b/assets/scripts/level/border-cache.json.meta @@ -0,0 +1,11 @@ +{ + "ver": "2.0.1", + "importer": "json", + "imported": true, + "uuid": "c5bd9bd8-738e-4bbc-8f04-8b1c77279929", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/level/levels-600.generated.ts b/assets/scripts/level/levels-600.generated.ts new file mode 100644 index 0000000..f25b842 --- /dev/null +++ b/assets/scripts/level/levels-600.generated.ts @@ -0,0 +1,7858 @@ +/* AUTO-GENERATED by tools/export_unity_levels.py — DO NOT EDIT */ +import { Direction } from '../core/Define'; +import { LevelConfig, SpawnConfig } from './LevelTypes'; + +const BORDER_CACHE: Record> = {"10,10":{"-10,-10":true,"-10,-9":true,"-10,-8":true,"-10,-7":true,"-10,-6":true,"-10,-5":true,"-10,-4":true,"-10,-3":true,"-10,-2":true,"-10,-1":true,"-10,0":true,"-10,1":true,"-10,2":true,"-10,3":true,"-10,4":true,"-10,5":true,"-10,6":true,"-10,7":true,"-10,8":true,"-10,9":true,"-10,10":true,"-9,-10":true,"-9,10":true,"-8,-10":true,"-8,10":true,"-7,-10":true,"-7,10":true,"-6,-10":true,"-6,10":true,"-5,-10":true,"-5,10":true,"-4,-10":true,"-4,10":true,"-3,-10":true,"-3,10":true,"-2,-10":true,"-2,10":true,"-1,-10":true,"-1,10":true,"0,-10":true,"0,10":true,"1,-10":true,"1,10":true,"2,-10":true,"2,10":true,"3,-10":true,"3,10":true,"4,-10":true,"4,10":true,"5,-10":true,"5,10":true,"6,-10":true,"6,10":true,"7,-10":true,"7,10":true,"8,-10":true,"8,10":true,"9,-10":true,"9,10":true,"10,-10":true,"10,-9":true,"10,-8":true,"10,-7":true,"10,-6":true,"10,-5":true,"10,-4":true,"10,-3":true,"10,-2":true,"10,-1":true,"10,0":true,"10,1":true,"10,2":true,"10,3":true,"10,4":true,"10,5":true,"10,6":true,"10,7":true,"10,8":true,"10,9":true,"10,10":true},"13,13":{"-13,-13":true,"-13,-12":true,"-13,-11":true,"-13,-10":true,"-13,-9":true,"-13,-8":true,"-13,-7":true,"-13,-6":true,"-13,-5":true,"-13,-4":true,"-13,-3":true,"-13,-2":true,"-13,-1":true,"-13,0":true,"-13,1":true,"-13,2":true,"-13,3":true,"-13,4":true,"-13,5":true,"-13,6":true,"-13,7":true,"-13,8":true,"-13,9":true,"-13,10":true,"-13,11":true,"-13,12":true,"-13,13":true,"-12,-13":true,"-12,13":true,"-11,-13":true,"-11,13":true,"-10,-13":true,"-10,13":true,"-9,-13":true,"-9,13":true,"-8,-13":true,"-8,13":true,"-7,-13":true,"-7,13":true,"-6,-13":true,"-6,13":true,"-5,-13":true,"-5,13":true,"-4,-13":true,"-4,13":true,"-3,-13":true,"-3,13":true,"-2,-13":true,"-2,13":true,"-1,-13":true,"-1,13":true,"0,-13":true,"0,13":true,"1,-13":true,"1,13":true,"2,-13":true,"2,13":true,"3,-13":true,"3,13":true,"4,-13":true,"4,13":true,"5,-13":true,"5,13":true,"6,-13":true,"6,13":true,"7,-13":true,"7,13":true,"8,-13":true,"8,13":true,"9,-13":true,"9,13":true,"10,-13":true,"10,13":true,"11,-13":true,"11,13":true,"12,-13":true,"12,13":true,"13,-13":true,"13,-12":true,"13,-11":true,"13,-10":true,"13,-9":true,"13,-8":true,"13,-7":true,"13,-6":true,"13,-5":true,"13,-4":true,"13,-3":true,"13,-2":true,"13,-1":true,"13,0":true,"13,1":true,"13,2":true,"13,3":true,"13,4":true,"13,5":true,"13,6":true,"13,7":true,"13,8":true,"13,9":true,"13,10":true,"13,11":true,"13,12":true,"13,13":true},"14,14":{"-14,-14":true,"-14,-13":true,"-14,-12":true,"-14,-11":true,"-14,-10":true,"-14,-9":true,"-14,-8":true,"-14,-7":true,"-14,-6":true,"-14,-5":true,"-14,-4":true,"-14,-3":true,"-14,-2":true,"-14,-1":true,"-14,0":true,"-14,1":true,"-14,2":true,"-14,3":true,"-14,4":true,"-14,5":true,"-14,6":true,"-14,7":true,"-14,8":true,"-14,9":true,"-14,10":true,"-14,11":true,"-14,12":true,"-14,13":true,"-14,14":true,"-13,-14":true,"-13,14":true,"-12,-14":true,"-12,14":true,"-11,-14":true,"-11,14":true,"-10,-14":true,"-10,14":true,"-9,-14":true,"-9,14":true,"-8,-14":true,"-8,14":true,"-7,-14":true,"-7,14":true,"-6,-14":true,"-6,14":true,"-5,-14":true,"-5,14":true,"-4,-14":true,"-4,14":true,"-3,-14":true,"-3,14":true,"-2,-14":true,"-2,14":true,"-1,-14":true,"-1,14":true,"0,-14":true,"0,14":true,"1,-14":true,"1,14":true,"2,-14":true,"2,14":true,"3,-14":true,"3,14":true,"4,-14":true,"4,14":true,"5,-14":true,"5,14":true,"6,-14":true,"6,14":true,"7,-14":true,"7,14":true,"8,-14":true,"8,14":true,"9,-14":true,"9,14":true,"10,-14":true,"10,14":true,"11,-14":true,"11,14":true,"12,-14":true,"12,14":true,"13,-14":true,"13,14":true,"14,-14":true,"14,-13":true,"14,-12":true,"14,-11":true,"14,-10":true,"14,-9":true,"14,-8":true,"14,-7":true,"14,-6":true,"14,-5":true,"14,-4":true,"14,-3":true,"14,-2":true,"14,-1":true,"14,0":true,"14,1":true,"14,2":true,"14,3":true,"14,4":true,"14,5":true,"14,6":true,"14,7":true,"14,8":true,"14,9":true,"14,10":true,"14,11":true,"14,12":true,"14,13":true,"14,14":true},"20,20":{"-20,-20":true,"-20,-19":true,"-20,-18":true,"-20,-17":true,"-20,-16":true,"-20,-15":true,"-20,-14":true,"-20,-13":true,"-20,-12":true,"-20,-11":true,"-20,-10":true,"-20,-9":true,"-20,-8":true,"-20,-7":true,"-20,-6":true,"-20,-5":true,"-20,-4":true,"-20,-3":true,"-20,-2":true,"-20,-1":true,"-20,0":true,"-20,1":true,"-20,2":true,"-20,3":true,"-20,4":true,"-20,5":true,"-20,6":true,"-20,7":true,"-20,8":true,"-20,9":true,"-20,10":true,"-20,11":true,"-20,12":true,"-20,13":true,"-20,14":true,"-20,15":true,"-20,16":true,"-20,17":true,"-20,18":true,"-20,19":true,"-20,20":true,"-19,-20":true,"-19,20":true,"-18,-20":true,"-18,20":true,"-17,-20":true,"-17,20":true,"-16,-20":true,"-16,20":true,"-15,-20":true,"-15,20":true,"-14,-20":true,"-14,20":true,"-13,-20":true,"-13,20":true,"-12,-20":true,"-12,20":true,"-11,-20":true,"-11,20":true,"-10,-20":true,"-10,20":true,"-9,-20":true,"-9,20":true,"-8,-20":true,"-8,20":true,"-7,-20":true,"-7,20":true,"-6,-20":true,"-6,20":true,"-5,-20":true,"-5,20":true,"-4,-20":true,"-4,20":true,"-3,-20":true,"-3,20":true,"-2,-20":true,"-2,20":true,"-1,-20":true,"-1,20":true,"0,-20":true,"0,20":true,"1,-20":true,"1,20":true,"2,-20":true,"2,20":true,"3,-20":true,"3,20":true,"4,-20":true,"4,20":true,"5,-20":true,"5,20":true,"6,-20":true,"6,20":true,"7,-20":true,"7,20":true,"8,-20":true,"8,20":true,"9,-20":true,"9,20":true,"10,-20":true,"10,20":true,"11,-20":true,"11,20":true,"12,-20":true,"12,20":true,"13,-20":true,"13,20":true,"14,-20":true,"14,20":true,"15,-20":true,"15,20":true,"16,-20":true,"16,20":true,"17,-20":true,"17,20":true,"18,-20":true,"18,20":true,"19,-20":true,"19,20":true,"20,-20":true,"20,-19":true,"20,-18":true,"20,-17":true,"20,-16":true,"20,-15":true,"20,-14":true,"20,-13":true,"20,-12":true,"20,-11":true,"20,-10":true,"20,-9":true,"20,-8":true,"20,-7":true,"20,-6":true,"20,-5":true,"20,-4":true,"20,-3":true,"20,-2":true,"20,-1":true,"20,0":true,"20,1":true,"20,2":true,"20,3":true,"20,4":true,"20,5":true,"20,6":true,"20,7":true,"20,8":true,"20,9":true,"20,10":true,"20,11":true,"20,12":true,"20,13":true,"20,14":true,"20,15":true,"20,16":true,"20,17":true,"20,18":true,"20,19":true,"20,20":true},"11,11":{"-11,-11":true,"-11,-10":true,"-11,-9":true,"-11,-8":true,"-11,-7":true,"-11,-6":true,"-11,-5":true,"-11,-4":true,"-11,-3":true,"-11,-2":true,"-11,-1":true,"-11,0":true,"-11,1":true,"-11,2":true,"-11,3":true,"-11,4":true,"-11,5":true,"-11,6":true,"-11,7":true,"-11,8":true,"-11,9":true,"-11,10":true,"-11,11":true,"-10,-11":true,"-10,11":true,"-9,-11":true,"-9,11":true,"-8,-11":true,"-8,11":true,"-7,-11":true,"-7,11":true,"-6,-11":true,"-6,11":true,"-5,-11":true,"-5,11":true,"-4,-11":true,"-4,11":true,"-3,-11":true,"-3,11":true,"-2,-11":true,"-2,11":true,"-1,-11":true,"-1,11":true,"0,-11":true,"0,11":true,"1,-11":true,"1,11":true,"2,-11":true,"2,11":true,"3,-11":true,"3,11":true,"4,-11":true,"4,11":true,"5,-11":true,"5,11":true,"6,-11":true,"6,11":true,"7,-11":true,"7,11":true,"8,-11":true,"8,11":true,"9,-11":true,"9,11":true,"10,-11":true,"10,11":true,"11,-11":true,"11,-10":true,"11,-9":true,"11,-8":true,"11,-7":true,"11,-6":true,"11,-5":true,"11,-4":true,"11,-3":true,"11,-2":true,"11,-1":true,"11,0":true,"11,1":true,"11,2":true,"11,3":true,"11,4":true,"11,5":true,"11,6":true,"11,7":true,"11,8":true,"11,9":true,"11,10":true,"11,11":true},"10,12":{"-10,-12":true,"-10,-11":true,"-10,-10":true,"-10,-9":true,"-10,-8":true,"-10,-7":true,"-10,-6":true,"-10,-5":true,"-10,-4":true,"-10,-3":true,"-10,-2":true,"-10,-1":true,"-10,0":true,"-10,1":true,"-10,2":true,"-10,3":true,"-10,4":true,"-10,5":true,"-10,6":true,"-10,7":true,"-10,8":true,"-10,9":true,"-10,10":true,"-10,11":true,"-10,12":true,"-9,-12":true,"-9,12":true,"-8,-12":true,"-8,12":true,"-7,-12":true,"-7,12":true,"-6,-12":true,"-6,12":true,"-5,-12":true,"-5,12":true,"-4,-12":true,"-4,12":true,"-3,-12":true,"-3,12":true,"-2,-12":true,"-2,12":true,"-1,-12":true,"-1,12":true,"0,-12":true,"0,12":true,"1,-12":true,"1,12":true,"2,-12":true,"2,12":true,"3,-12":true,"3,12":true,"4,-12":true,"4,12":true,"5,-12":true,"5,12":true,"6,-12":true,"6,12":true,"7,-12":true,"7,12":true,"8,-12":true,"8,12":true,"9,-12":true,"9,12":true,"10,-12":true,"10,-11":true,"10,-10":true,"10,-9":true,"10,-8":true,"10,-7":true,"10,-6":true,"10,-5":true,"10,-4":true,"10,-3":true,"10,-2":true,"10,-1":true,"10,0":true,"10,1":true,"10,2":true,"10,3":true,"10,4":true,"10,5":true,"10,6":true,"10,7":true,"10,8":true,"10,9":true,"10,10":true,"10,11":true,"10,12":true},"11,15":{"-11,-15":true,"-11,-14":true,"-11,-13":true,"-11,-12":true,"-11,-11":true,"-11,-10":true,"-11,-9":true,"-11,-8":true,"-11,-7":true,"-11,-6":true,"-11,-5":true,"-11,-4":true,"-11,-3":true,"-11,-2":true,"-11,-1":true,"-11,0":true,"-11,1":true,"-11,2":true,"-11,3":true,"-11,4":true,"-11,5":true,"-11,6":true,"-11,7":true,"-11,8":true,"-11,9":true,"-11,10":true,"-11,11":true,"-11,12":true,"-11,13":true,"-11,14":true,"-11,15":true,"-10,-15":true,"-10,15":true,"-9,-15":true,"-9,15":true,"-8,-15":true,"-8,15":true,"-7,-15":true,"-7,15":true,"-6,-15":true,"-6,15":true,"-5,-15":true,"-5,15":true,"-4,-15":true,"-4,15":true,"-3,-15":true,"-3,15":true,"-2,-15":true,"-2,15":true,"-1,-15":true,"-1,15":true,"0,-15":true,"0,15":true,"1,-15":true,"1,15":true,"2,-15":true,"2,15":true,"3,-15":true,"3,15":true,"4,-15":true,"4,15":true,"5,-15":true,"5,15":true,"6,-15":true,"6,15":true,"7,-15":true,"7,15":true,"8,-15":true,"8,15":true,"9,-15":true,"9,15":true,"10,-15":true,"10,15":true,"11,-15":true,"11,-14":true,"11,-13":true,"11,-12":true,"11,-11":true,"11,-10":true,"11,-9":true,"11,-8":true,"11,-7":true,"11,-6":true,"11,-5":true,"11,-4":true,"11,-3":true,"11,-2":true,"11,-1":true,"11,0":true,"11,1":true,"11,2":true,"11,3":true,"11,4":true,"11,5":true,"11,6":true,"11,7":true,"11,8":true,"11,9":true,"11,10":true,"11,11":true,"11,12":true,"11,13":true,"11,14":true,"11,15":true},"11,18":{"-11,-18":true,"-11,-17":true,"-11,-16":true,"-11,-15":true,"-11,-14":true,"-11,-13":true,"-11,-12":true,"-11,-11":true,"-11,-10":true,"-11,-9":true,"-11,-8":true,"-11,-7":true,"-11,-6":true,"-11,-5":true,"-11,-4":true,"-11,-3":true,"-11,-2":true,"-11,-1":true,"-11,0":true,"-11,1":true,"-11,2":true,"-11,3":true,"-11,4":true,"-11,5":true,"-11,6":true,"-11,7":true,"-11,8":true,"-11,9":true,"-11,10":true,"-11,11":true,"-11,12":true,"-11,13":true,"-11,14":true,"-11,15":true,"-11,16":true,"-11,17":true,"-11,18":true,"-10,-18":true,"-10,18":true,"-9,-18":true,"-9,18":true,"-8,-18":true,"-8,18":true,"-7,-18":true,"-7,18":true,"-6,-18":true,"-6,18":true,"-5,-18":true,"-5,18":true,"-4,-18":true,"-4,18":true,"-3,-18":true,"-3,18":true,"-2,-18":true,"-2,18":true,"-1,-18":true,"-1,18":true,"0,-18":true,"0,18":true,"1,-18":true,"1,18":true,"2,-18":true,"2,18":true,"3,-18":true,"3,18":true,"4,-18":true,"4,18":true,"5,-18":true,"5,18":true,"6,-18":true,"6,18":true,"7,-18":true,"7,18":true,"8,-18":true,"8,18":true,"9,-18":true,"9,18":true,"10,-18":true,"10,18":true,"11,-18":true,"11,-17":true,"11,-16":true,"11,-15":true,"11,-14":true,"11,-13":true,"11,-12":true,"11,-11":true,"11,-10":true,"11,-9":true,"11,-8":true,"11,-7":true,"11,-6":true,"11,-5":true,"11,-4":true,"11,-3":true,"11,-2":true,"11,-1":true,"11,0":true,"11,1":true,"11,2":true,"11,3":true,"11,4":true,"11,5":true,"11,6":true,"11,7":true,"11,8":true,"11,9":true,"11,10":true,"11,11":true,"11,12":true,"11,13":true,"11,14":true,"11,15":true,"11,16":true,"11,17":true,"11,18":true},"15,15":{"-15,-15":true,"-15,-14":true,"-15,-13":true,"-15,-12":true,"-15,-11":true,"-15,-10":true,"-15,-9":true,"-15,-8":true,"-15,-7":true,"-15,-6":true,"-15,-5":true,"-15,-4":true,"-15,-3":true,"-15,-2":true,"-15,-1":true,"-15,0":true,"-15,1":true,"-15,2":true,"-15,3":true,"-15,4":true,"-15,5":true,"-15,6":true,"-15,7":true,"-15,8":true,"-15,9":true,"-15,10":true,"-15,11":true,"-15,12":true,"-15,13":true,"-15,14":true,"-15,15":true,"-14,-15":true,"-14,15":true,"-13,-15":true,"-13,15":true,"-12,-15":true,"-12,15":true,"-11,-15":true,"-11,15":true,"-10,-15":true,"-10,15":true,"-9,-15":true,"-9,15":true,"-8,-15":true,"-8,15":true,"-7,-15":true,"-7,15":true,"-6,-15":true,"-6,15":true,"-5,-15":true,"-5,15":true,"-4,-15":true,"-4,15":true,"-3,-15":true,"-3,15":true,"-2,-15":true,"-2,15":true,"-1,-15":true,"-1,15":true,"0,-15":true,"0,15":true,"1,-15":true,"1,15":true,"2,-15":true,"2,15":true,"3,-15":true,"3,15":true,"4,-15":true,"4,15":true,"5,-15":true,"5,15":true,"6,-15":true,"6,15":true,"7,-15":true,"7,15":true,"8,-15":true,"8,15":true,"9,-15":true,"9,15":true,"10,-15":true,"10,15":true,"11,-15":true,"11,15":true,"12,-15":true,"12,15":true,"13,-15":true,"13,15":true,"14,-15":true,"14,15":true,"15,-15":true,"15,-14":true,"15,-13":true,"15,-12":true,"15,-11":true,"15,-10":true,"15,-9":true,"15,-8":true,"15,-7":true,"15,-6":true,"15,-5":true,"15,-4":true,"15,-3":true,"15,-2":true,"15,-1":true,"15,0":true,"15,1":true,"15,2":true,"15,3":true,"15,4":true,"15,5":true,"15,6":true,"15,7":true,"15,8":true,"15,9":true,"15,10":true,"15,11":true,"15,12":true,"15,13":true,"15,14":true,"15,15":true},"20,25":{"-20,-25":true,"-20,-24":true,"-20,-23":true,"-20,-22":true,"-20,-21":true,"-20,-20":true,"-20,-19":true,"-20,-18":true,"-20,-17":true,"-20,-16":true,"-20,-15":true,"-20,-14":true,"-20,-13":true,"-20,-12":true,"-20,-11":true,"-20,-10":true,"-20,-9":true,"-20,-8":true,"-20,-7":true,"-20,-6":true,"-20,-5":true,"-20,-4":true,"-20,-3":true,"-20,-2":true,"-20,-1":true,"-20,0":true,"-20,1":true,"-20,2":true,"-20,3":true,"-20,4":true,"-20,5":true,"-20,6":true,"-20,7":true,"-20,8":true,"-20,9":true,"-20,10":true,"-20,11":true,"-20,12":true,"-20,13":true,"-20,14":true,"-20,15":true,"-20,16":true,"-20,17":true,"-20,18":true,"-20,19":true,"-20,20":true,"-20,21":true,"-20,22":true,"-20,23":true,"-20,24":true,"-20,25":true,"-19,-25":true,"-19,25":true,"-18,-25":true,"-18,25":true,"-17,-25":true,"-17,25":true,"-16,-25":true,"-16,25":true,"-15,-25":true,"-15,25":true,"-14,-25":true,"-14,25":true,"-13,-25":true,"-13,25":true,"-12,-25":true,"-12,25":true,"-11,-25":true,"-11,25":true,"-10,-25":true,"-10,25":true,"-9,-25":true,"-9,25":true,"-8,-25":true,"-8,25":true,"-7,-25":true,"-7,25":true,"-6,-25":true,"-6,25":true,"-5,-25":true,"-5,25":true,"-4,-25":true,"-4,25":true,"-3,-25":true,"-3,25":true,"-2,-25":true,"-2,25":true,"-1,-25":true,"-1,25":true,"0,-25":true,"0,25":true,"1,-25":true,"1,25":true,"2,-25":true,"2,25":true,"3,-25":true,"3,25":true,"4,-25":true,"4,25":true,"5,-25":true,"5,25":true,"6,-25":true,"6,25":true,"7,-25":true,"7,25":true,"8,-25":true,"8,25":true,"9,-25":true,"9,25":true,"10,-25":true,"10,25":true,"11,-25":true,"11,25":true,"12,-25":true,"12,25":true,"13,-25":true,"13,25":true,"14,-25":true,"14,25":true,"15,-25":true,"15,25":true,"16,-25":true,"16,25":true,"17,-25":true,"17,25":true,"18,-25":true,"18,25":true,"19,-25":true,"19,25":true,"20,-25":true,"20,-24":true,"20,-23":true,"20,-22":true,"20,-21":true,"20,-20":true,"20,-19":true,"20,-18":true,"20,-17":true,"20,-16":true,"20,-15":true,"20,-14":true,"20,-13":true,"20,-12":true,"20,-11":true,"20,-10":true,"20,-9":true,"20,-8":true,"20,-7":true,"20,-6":true,"20,-5":true,"20,-4":true,"20,-3":true,"20,-2":true,"20,-1":true,"20,0":true,"20,1":true,"20,2":true,"20,3":true,"20,4":true,"20,5":true,"20,6":true,"20,7":true,"20,8":true,"20,9":true,"20,10":true,"20,11":true,"20,12":true,"20,13":true,"20,14":true,"20,15":true,"20,16":true,"20,17":true,"20,18":true,"20,19":true,"20,20":true,"20,21":true,"20,22":true,"20,23":true,"20,24":true,"20,25":true},"25,25":{"-25,-25":true,"-25,-24":true,"-25,-23":true,"-25,-22":true,"-25,-21":true,"-25,-20":true,"-25,-19":true,"-25,-18":true,"-25,-17":true,"-25,-16":true,"-25,-15":true,"-25,-14":true,"-25,-13":true,"-25,-12":true,"-25,-11":true,"-25,-10":true,"-25,-9":true,"-25,-8":true,"-25,-7":true,"-25,-6":true,"-25,-5":true,"-25,-4":true,"-25,-3":true,"-25,-2":true,"-25,-1":true,"-25,0":true,"-25,1":true,"-25,2":true,"-25,3":true,"-25,4":true,"-25,5":true,"-25,6":true,"-25,7":true,"-25,8":true,"-25,9":true,"-25,10":true,"-25,11":true,"-25,12":true,"-25,13":true,"-25,14":true,"-25,15":true,"-25,16":true,"-25,17":true,"-25,18":true,"-25,19":true,"-25,20":true,"-25,21":true,"-25,22":true,"-25,23":true,"-25,24":true,"-25,25":true,"-24,-25":true,"-24,25":true,"-23,-25":true,"-23,25":true,"-22,-25":true,"-22,25":true,"-21,-25":true,"-21,25":true,"-20,-25":true,"-20,25":true,"-19,-25":true,"-19,25":true,"-18,-25":true,"-18,25":true,"-17,-25":true,"-17,25":true,"-16,-25":true,"-16,25":true,"-15,-25":true,"-15,25":true,"-14,-25":true,"-14,25":true,"-13,-25":true,"-13,25":true,"-12,-25":true,"-12,25":true,"-11,-25":true,"-11,25":true,"-10,-25":true,"-10,25":true,"-9,-25":true,"-9,25":true,"-8,-25":true,"-8,25":true,"-7,-25":true,"-7,25":true,"-6,-25":true,"-6,25":true,"-5,-25":true,"-5,25":true,"-4,-25":true,"-4,25":true,"-3,-25":true,"-3,25":true,"-2,-25":true,"-2,25":true,"-1,-25":true,"-1,25":true,"0,-25":true,"0,25":true,"1,-25":true,"1,25":true,"2,-25":true,"2,25":true,"3,-25":true,"3,25":true,"4,-25":true,"4,25":true,"5,-25":true,"5,25":true,"6,-25":true,"6,25":true,"7,-25":true,"7,25":true,"8,-25":true,"8,25":true,"9,-25":true,"9,25":true,"10,-25":true,"10,25":true,"11,-25":true,"11,25":true,"12,-25":true,"12,25":true,"13,-25":true,"13,25":true,"14,-25":true,"14,25":true,"15,-25":true,"15,25":true,"16,-25":true,"16,25":true,"17,-25":true,"17,25":true,"18,-25":true,"18,25":true,"19,-25":true,"19,25":true,"20,-25":true,"20,25":true,"21,-25":true,"21,25":true,"22,-25":true,"22,25":true,"23,-25":true,"23,25":true,"24,-25":true,"24,25":true,"25,-25":true,"25,-24":true,"25,-23":true,"25,-22":true,"25,-21":true,"25,-20":true,"25,-19":true,"25,-18":true,"25,-17":true,"25,-16":true,"25,-15":true,"25,-14":true,"25,-13":true,"25,-12":true,"25,-11":true,"25,-10":true,"25,-9":true,"25,-8":true,"25,-7":true,"25,-6":true,"25,-5":true,"25,-4":true,"25,-3":true,"25,-2":true,"25,-1":true,"25,0":true,"25,1":true,"25,2":true,"25,3":true,"25,4":true,"25,5":true,"25,6":true,"25,7":true,"25,8":true,"25,9":true,"25,10":true,"25,11":true,"25,12":true,"25,13":true,"25,14":true,"25,15":true,"25,16":true,"25,17":true,"25,18":true,"25,19":true,"25,20":true,"25,21":true,"25,22":true,"25,23":true,"25,24":true,"25,25":true},"30,20":{"-30,-20":true,"-30,-19":true,"-30,-18":true,"-30,-17":true,"-30,-16":true,"-30,-15":true,"-30,-14":true,"-30,-13":true,"-30,-12":true,"-30,-11":true,"-30,-10":true,"-30,-9":true,"-30,-8":true,"-30,-7":true,"-30,-6":true,"-30,-5":true,"-30,-4":true,"-30,-3":true,"-30,-2":true,"-30,-1":true,"-30,0":true,"-30,1":true,"-30,2":true,"-30,3":true,"-30,4":true,"-30,5":true,"-30,6":true,"-30,7":true,"-30,8":true,"-30,9":true,"-30,10":true,"-30,11":true,"-30,12":true,"-30,13":true,"-30,14":true,"-30,15":true,"-30,16":true,"-30,17":true,"-30,18":true,"-30,19":true,"-30,20":true,"-29,-20":true,"-29,20":true,"-28,-20":true,"-28,20":true,"-27,-20":true,"-27,20":true,"-26,-20":true,"-26,20":true,"-25,-20":true,"-25,20":true,"-24,-20":true,"-24,20":true,"-23,-20":true,"-23,20":true,"-22,-20":true,"-22,20":true,"-21,-20":true,"-21,20":true,"-20,-20":true,"-20,20":true,"-19,-20":true,"-19,20":true,"-18,-20":true,"-18,20":true,"-17,-20":true,"-17,20":true,"-16,-20":true,"-16,20":true,"-15,-20":true,"-15,20":true,"-14,-20":true,"-14,20":true,"-13,-20":true,"-13,20":true,"-12,-20":true,"-12,20":true,"-11,-20":true,"-11,20":true,"-10,-20":true,"-10,20":true,"-9,-20":true,"-9,20":true,"-8,-20":true,"-8,20":true,"-7,-20":true,"-7,20":true,"-6,-20":true,"-6,20":true,"-5,-20":true,"-5,20":true,"-4,-20":true,"-4,20":true,"-3,-20":true,"-3,20":true,"-2,-20":true,"-2,20":true,"-1,-20":true,"-1,20":true,"0,-20":true,"0,20":true,"1,-20":true,"1,20":true,"2,-20":true,"2,20":true,"3,-20":true,"3,20":true,"4,-20":true,"4,20":true,"5,-20":true,"5,20":true,"6,-20":true,"6,20":true,"7,-20":true,"7,20":true,"8,-20":true,"8,20":true,"9,-20":true,"9,20":true,"10,-20":true,"10,20":true,"11,-20":true,"11,20":true,"12,-20":true,"12,20":true,"13,-20":true,"13,20":true,"14,-20":true,"14,20":true,"15,-20":true,"15,20":true,"16,-20":true,"16,20":true,"17,-20":true,"17,20":true,"18,-20":true,"18,20":true,"19,-20":true,"19,20":true,"20,-20":true,"20,20":true,"21,-20":true,"21,20":true,"22,-20":true,"22,20":true,"23,-20":true,"23,20":true,"24,-20":true,"24,20":true,"25,-20":true,"25,20":true,"26,-20":true,"26,20":true,"27,-20":true,"27,20":true,"28,-20":true,"28,20":true,"29,-20":true,"29,20":true,"30,-20":true,"30,-19":true,"30,-18":true,"30,-17":true,"30,-16":true,"30,-15":true,"30,-14":true,"30,-13":true,"30,-12":true,"30,-11":true,"30,-10":true,"30,-9":true,"30,-8":true,"30,-7":true,"30,-6":true,"30,-5":true,"30,-4":true,"30,-3":true,"30,-2":true,"30,-1":true,"30,0":true,"30,1":true,"30,2":true,"30,3":true,"30,4":true,"30,5":true,"30,6":true,"30,7":true,"30,8":true,"30,9":true,"30,10":true,"30,11":true,"30,12":true,"30,13":true,"30,14":true,"30,15":true,"30,16":true,"30,17":true,"30,18":true,"30,19":true,"30,20":true},"20,30":{"-20,-30":true,"-20,-29":true,"-20,-28":true,"-20,-27":true,"-20,-26":true,"-20,-25":true,"-20,-24":true,"-20,-23":true,"-20,-22":true,"-20,-21":true,"-20,-20":true,"-20,-19":true,"-20,-18":true,"-20,-17":true,"-20,-16":true,"-20,-15":true,"-20,-14":true,"-20,-13":true,"-20,-12":true,"-20,-11":true,"-20,-10":true,"-20,-9":true,"-20,-8":true,"-20,-7":true,"-20,-6":true,"-20,-5":true,"-20,-4":true,"-20,-3":true,"-20,-2":true,"-20,-1":true,"-20,0":true,"-20,1":true,"-20,2":true,"-20,3":true,"-20,4":true,"-20,5":true,"-20,6":true,"-20,7":true,"-20,8":true,"-20,9":true,"-20,10":true,"-20,11":true,"-20,12":true,"-20,13":true,"-20,14":true,"-20,15":true,"-20,16":true,"-20,17":true,"-20,18":true,"-20,19":true,"-20,20":true,"-20,21":true,"-20,22":true,"-20,23":true,"-20,24":true,"-20,25":true,"-20,26":true,"-20,27":true,"-20,28":true,"-20,29":true,"-20,30":true,"-19,-30":true,"-19,30":true,"-18,-30":true,"-18,30":true,"-17,-30":true,"-17,30":true,"-16,-30":true,"-16,30":true,"-15,-30":true,"-15,30":true,"-14,-30":true,"-14,30":true,"-13,-30":true,"-13,30":true,"-12,-30":true,"-12,30":true,"-11,-30":true,"-11,30":true,"-10,-30":true,"-10,30":true,"-9,-30":true,"-9,30":true,"-8,-30":true,"-8,30":true,"-7,-30":true,"-7,30":true,"-6,-30":true,"-6,30":true,"-5,-30":true,"-5,30":true,"-4,-30":true,"-4,30":true,"-3,-30":true,"-3,30":true,"-2,-30":true,"-2,30":true,"-1,-30":true,"-1,30":true,"0,-30":true,"0,30":true,"1,-30":true,"1,30":true,"2,-30":true,"2,30":true,"3,-30":true,"3,30":true,"4,-30":true,"4,30":true,"5,-30":true,"5,30":true,"6,-30":true,"6,30":true,"7,-30":true,"7,30":true,"8,-30":true,"8,30":true,"9,-30":true,"9,30":true,"10,-30":true,"10,30":true,"11,-30":true,"11,30":true,"12,-30":true,"12,30":true,"13,-30":true,"13,30":true,"14,-30":true,"14,30":true,"15,-30":true,"15,30":true,"16,-30":true,"16,30":true,"17,-30":true,"17,30":true,"18,-30":true,"18,30":true,"19,-30":true,"19,30":true,"20,-30":true,"20,-29":true,"20,-28":true,"20,-27":true,"20,-26":true,"20,-25":true,"20,-24":true,"20,-23":true,"20,-22":true,"20,-21":true,"20,-20":true,"20,-19":true,"20,-18":true,"20,-17":true,"20,-16":true,"20,-15":true,"20,-14":true,"20,-13":true,"20,-12":true,"20,-11":true,"20,-10":true,"20,-9":true,"20,-8":true,"20,-7":true,"20,-6":true,"20,-5":true,"20,-4":true,"20,-3":true,"20,-2":true,"20,-1":true,"20,0":true,"20,1":true,"20,2":true,"20,3":true,"20,4":true,"20,5":true,"20,6":true,"20,7":true,"20,8":true,"20,9":true,"20,10":true,"20,11":true,"20,12":true,"20,13":true,"20,14":true,"20,15":true,"20,16":true,"20,17":true,"20,18":true,"20,19":true,"20,20":true,"20,21":true,"20,22":true,"20,23":true,"20,24":true,"20,25":true,"20,26":true,"20,27":true,"20,28":true,"20,29":true,"20,30":true},"30,30":{"-30,-30":true,"-30,-29":true,"-30,-28":true,"-30,-27":true,"-30,-26":true,"-30,-25":true,"-30,-24":true,"-30,-23":true,"-30,-22":true,"-30,-21":true,"-30,-20":true,"-30,-19":true,"-30,-18":true,"-30,-17":true,"-30,-16":true,"-30,-15":true,"-30,-14":true,"-30,-13":true,"-30,-12":true,"-30,-11":true,"-30,-10":true,"-30,-9":true,"-30,-8":true,"-30,-7":true,"-30,-6":true,"-30,-5":true,"-30,-4":true,"-30,-3":true,"-30,-2":true,"-30,-1":true,"-30,0":true,"-30,1":true,"-30,2":true,"-30,3":true,"-30,4":true,"-30,5":true,"-30,6":true,"-30,7":true,"-30,8":true,"-30,9":true,"-30,10":true,"-30,11":true,"-30,12":true,"-30,13":true,"-30,14":true,"-30,15":true,"-30,16":true,"-30,17":true,"-30,18":true,"-30,19":true,"-30,20":true,"-30,21":true,"-30,22":true,"-30,23":true,"-30,24":true,"-30,25":true,"-30,26":true,"-30,27":true,"-30,28":true,"-30,29":true,"-30,30":true,"-29,-30":true,"-29,30":true,"-28,-30":true,"-28,30":true,"-27,-30":true,"-27,30":true,"-26,-30":true,"-26,30":true,"-25,-30":true,"-25,30":true,"-24,-30":true,"-24,30":true,"-23,-30":true,"-23,30":true,"-22,-30":true,"-22,30":true,"-21,-30":true,"-21,30":true,"-20,-30":true,"-20,30":true,"-19,-30":true,"-19,30":true,"-18,-30":true,"-18,30":true,"-17,-30":true,"-17,30":true,"-16,-30":true,"-16,30":true,"-15,-30":true,"-15,30":true,"-14,-30":true,"-14,30":true,"-13,-30":true,"-13,30":true,"-12,-30":true,"-12,30":true,"-11,-30":true,"-11,30":true,"-10,-30":true,"-10,30":true,"-9,-30":true,"-9,30":true,"-8,-30":true,"-8,30":true,"-7,-30":true,"-7,30":true,"-6,-30":true,"-6,30":true,"-5,-30":true,"-5,30":true,"-4,-30":true,"-4,30":true,"-3,-30":true,"-3,30":true,"-2,-30":true,"-2,30":true,"-1,-30":true,"-1,30":true,"0,-30":true,"0,30":true,"1,-30":true,"1,30":true,"2,-30":true,"2,30":true,"3,-30":true,"3,30":true,"4,-30":true,"4,30":true,"5,-30":true,"5,30":true,"6,-30":true,"6,30":true,"7,-30":true,"7,30":true,"8,-30":true,"8,30":true,"9,-30":true,"9,30":true,"10,-30":true,"10,30":true,"11,-30":true,"11,30":true,"12,-30":true,"12,30":true,"13,-30":true,"13,30":true,"14,-30":true,"14,30":true,"15,-30":true,"15,30":true,"16,-30":true,"16,30":true,"17,-30":true,"17,30":true,"18,-30":true,"18,30":true,"19,-30":true,"19,30":true,"20,-30":true,"20,30":true,"21,-30":true,"21,30":true,"22,-30":true,"22,30":true,"23,-30":true,"23,30":true,"24,-30":true,"24,30":true,"25,-30":true,"25,30":true,"26,-30":true,"26,30":true,"27,-30":true,"27,30":true,"28,-30":true,"28,30":true,"29,-30":true,"29,30":true,"30,-30":true,"30,-29":true,"30,-28":true,"30,-27":true,"30,-26":true,"30,-25":true,"30,-24":true,"30,-23":true,"30,-22":true,"30,-21":true,"30,-20":true,"30,-19":true,"30,-18":true,"30,-17":true,"30,-16":true,"30,-15":true,"30,-14":true,"30,-13":true,"30,-12":true,"30,-11":true,"30,-10":true,"30,-9":true,"30,-8":true,"30,-7":true,"30,-6":true,"30,-5":true,"30,-4":true,"30,-3":true,"30,-2":true,"30,-1":true,"30,0":true,"30,1":true,"30,2":true,"30,3":true,"30,4":true,"30,5":true,"30,6":true,"30,7":true,"30,8":true,"30,9":true,"30,10":true,"30,11":true,"30,12":true,"30,13":true,"30,14":true,"30,15":true,"30,16":true,"30,17":true,"30,18":true,"30,19":true,"30,20":true,"30,21":true,"30,22":true,"30,23":true,"30,24":true,"30,25":true,"30,26":true,"30,27":true,"30,28":true,"30,29":true,"30,30":true}}; + +function withBorder(key: string, cfg: Omit): LevelConfig { + return { ...cfg, border: BORDER_CACHE[key] }; +} + +export const LEVELS_600: Record = { + 1: withBorder('10,10', { + levelID: 1, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 1, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 0, kind: 'prop' }, + ], + }), + 2: withBorder('10,10', { + levelID: 2, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 1, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 0, kind: 'prop' }, + ], + }), + 3: withBorder('10,10', { + levelID: 3, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 0, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 4: withBorder('10,10', { + levelID: 4, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 4, kind: 'prop' }, + ], + }), + 5: withBorder('10,10', { + levelID: 5, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 6: withBorder('10,10', { + levelID: 6, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 1, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 1, kind: 'prop' }, + ], + }), + 7: withBorder('10,10', { + levelID: 7, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -5, kind: 'prop' }, + ], + }), + 8: withBorder('10,10', { + levelID: 8, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 1, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 1, kind: 'prop' }, + ], + }), + 9: withBorder('10,10', { + levelID: 9, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -4, kind: 'prop' }, + ], + }), + 10: withBorder('10,10', { + levelID: 10, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: -3, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 11: withBorder('10,10', { + levelID: 11, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -1, y: 0, kind: 'player' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: 7, kind: 'prop' }, + ], + }), + 12: withBorder('10,10', { + levelID: 12, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 13: withBorder('10,10', { + levelID: 13, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + ], + }), + 14: withBorder('10,10', { + levelID: 14, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 15: withBorder('10,10', { + levelID: 15, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 16: withBorder('10,10', { + levelID: 16, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + ], + }), + 17: withBorder('10,10', { + levelID: 17, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + ], + }), + 18: withBorder('10,10', { + levelID: 18, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 19: withBorder('10,10', { + levelID: 19, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + ], + }), + 20: withBorder('10,10', { + levelID: 20, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 21: withBorder('10,10', { + levelID: 21, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -5, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 22: withBorder('10,10', { + levelID: 22, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -4, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: 0, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop_decor' }, + ], + }), + 23: withBorder('10,10', { + levelID: 23, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -4, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 24: withBorder('10,10', { + levelID: 24, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: 0, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + ], + }), + 25: withBorder('10,10', { + levelID: 25, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -2, kind: 'vehicle' }, + { x: 2, y: 0, kind: 'prop' }, + ], + }), + 26: withBorder('10,10', { + levelID: 26, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 3, y: -4, kind: 'prop_decor' }, + ], + }), + 27: withBorder('10,10', { + levelID: 27, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: 6, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 6, y: 4, kind: 'prop_decor' }, + ], + }), + 28: withBorder('10,10', { + levelID: 28, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 7, y: -4, kind: 'prop' }, + ], + }), + 29: withBorder('10,10', { + levelID: 29, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 8, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 4, y: 0, kind: 'prop_decor' }, + ], + }), + 30: withBorder('10,10', { + levelID: 30, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: -2, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 6, y: 0, kind: 'prop_decor' }, + ], + }), + 31: withBorder('10,10', { + levelID: 31, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 0, y: -3, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 0, y: 6, kind: 'prop_decor' }, + ], + }), + 32: withBorder('10,10', { + levelID: 32, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: -6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 6, kind: 'prop_decor' }, + ], + }), + 33: withBorder('10,10', { + levelID: 33, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 4, y: 0, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + ], + }), + 34: withBorder('10,10', { + levelID: 34, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 5, y: 0, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop_decor' }, + { x: 4, y: 4, kind: 'prop_decor' }, + ], + }), + 35: withBorder('10,10', { + levelID: 35, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 0, kind: 'prop_decor' }, + { x: -5, y: 0, kind: 'prop_decor' }, + { x: -5, y: -6, kind: 'prop_decor' }, + ], + }), + 36: withBorder('10,10', { + levelID: 36, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: 4, kind: 'prop_decor' }, + { x: 4, y: -9, kind: 'prop_decor' }, + ], + }), + 37: withBorder('10,10', { + levelID: 37, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: -5, kind: 'prop_decor' }, + { x: 4, y: 8, kind: 'prop_decor' }, + { x: 7, y: 0, kind: 'prop_decor' }, + ], + }), + 38: withBorder('13,13', { + levelID: 38, + boundary: { x: 13, y: 13 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: 5, y: -12, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: -6, kind: 'prop_decor' }, + ], + }), + 39: withBorder('10,10', { + levelID: 39, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 2, kind: 'prop_decor' }, + { x: 0, y: 6, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 4, y: 6, kind: 'prop' }, + ], + }), + 40: withBorder('10,10', { + levelID: 40, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 4, kind: 'prop_decor' }, + { x: 0, y: 1, kind: 'prop_decor' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 0, y: -8, kind: 'prop_decor' }, + ], + }), + 41: withBorder('10,10', { + levelID: 41, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -2, kind: 'prop' }, + ], + }), + 42: withBorder('10,10', { + levelID: 42, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 7, y: 4, kind: 'player' }, + { x: 7, y: 4, kind: 'vehicle' }, + { x: 0, y: -3, kind: 'prop_decor' }, + { x: 7, y: -3, kind: 'prop_decor' }, + ], + }), + 43: withBorder('10,10', { + levelID: 43, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 4, kind: 'player' }, + { x: 4, y: 4, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + ], + }), + 44: withBorder('10,10', { + levelID: 44, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 3, kind: 'vehicle' }, + { x: 3, y: 3, kind: 'prop_decor' }, + { x: -2, y: 0, kind: 'prop_decor' }, + { x: -1, y: -2, kind: 'prop_decor' }, + ], + }), + 45: withBorder('10,10', { + levelID: 45, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 1, kind: 'prop' }, + ], + }), + 46: withBorder('10,10', { + levelID: 46, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: -4, kind: 'prop' }, + ], + }), + 47: withBorder('10,10', { + levelID: 47, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 6, y: 2, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: -4, kind: 'prop' }, + ], + }), + 48: withBorder('10,10', { + levelID: 48, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -8, y: 1, kind: 'player' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + ], + }), + 49: withBorder('10,10', { + levelID: 49, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + ], + }), + 50: withBorder('10,10', { + levelID: 50, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 1, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 5, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 51: withBorder('10,10', { + levelID: 51, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 2, y: 3, kind: 'player' }, + { x: 2, y: 3, kind: 'vehicle' }, + { x: 0, y: 4, kind: 'prop_decor' }, + { x: 0, y: -4, kind: 'prop_decor' }, + { x: 7, y: 0, kind: 'prop_decor' }, + { x: -7, y: 0, kind: 'prop_decor' }, + ], + }), + 52: withBorder('14,14', { + levelID: 52, + boundary: { x: 14, y: 14 }, + spawns: [ + { x: -6, y: -3, kind: 'player' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 53: withBorder('10,10', { + levelID: 53, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 6, kind: 'player' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + ], + }), + 54: withBorder('10,10', { + levelID: 54, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -7, y: 1, kind: 'player' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + ], + }), + 55: withBorder('10,10', { + levelID: 55, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -6, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 4, kind: 'vehicle' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -6, y: -5, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop_decor' }, + { x: 5, y: -5, kind: 'prop_decor' }, + ], + }), + 56: withBorder('20,20', { + levelID: 56, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -3, y: 0, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop_decor' }, + { x: 0, y: -6, kind: 'prop_decor' }, + { x: 3, y: -7, kind: 'prop_decor' }, + { x: 3, y: -10, kind: 'prop' }, + ], + }), + 57: withBorder('10,10', { + levelID: 57, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: 1, y: 0, kind: 'vehicle' }, + { x: 4, y: 0, kind: 'prop_decor' }, + { x: 4, y: -4, kind: 'prop_decor' }, + { x: 1, y: -4, kind: 'prop_decor' }, + { x: -4, y: 3, kind: 'prop' }, + ], + }), + 58: withBorder('10,10', { + levelID: 58, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -6, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: 6, kind: 'vehicle' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop_decor' }, + { x: 2, y: 6, kind: 'prop_decor' }, + { x: -6, y: -2, kind: 'prop_decor' }, + ], + }), + 59: withBorder('11,11', { + levelID: 59, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: -3, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -3, kind: 'vehicle' }, + { x: -2, y: -3, kind: 'prop_decor' }, + { x: -2, y: 1, kind: 'prop_decor' }, + { x: 2, y: -3, kind: 'prop_decor' }, + { x: -6, y: 1, kind: 'prop_decor' }, + ], + }), + 60: withBorder('11,11', { + levelID: 60, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: -1, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 4, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: 3, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + { x: -1, y: -7, kind: 'prop_decor' }, + ], + }), + 61: withBorder('10,10', { + levelID: 61, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 4, kind: 'prop' }, + ], + }), + 62: withBorder('10,10', { + levelID: 62, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -4, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 63: withBorder('10,10', { + levelID: 63, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 2, kind: 'prop' }, + ], + }), + 64: withBorder('10,10', { + levelID: 64, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 1, kind: 'prop' }, + ], + }), + 65: withBorder('10,10', { + levelID: 65, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 4, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 1, y: 1, kind: 'prop' }, + ], + }), + 66: withBorder('10,10', { + levelID: 66, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -5, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + ], + }), + 67: withBorder('10,10', { + levelID: 67, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 5, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + ], + }), + 68: withBorder('10,12', { + levelID: 68, + boundary: { x: 10, y: 12 }, + spawns: [ + { x: 0, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 4, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + ], + }), + 69: withBorder('10,10', { + levelID: 69, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + ], + }), + 70: withBorder('20,20', { + levelID: 70, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: -2, y: 4, kind: 'vehicle', vehicleDirection: Direction.East }, + ], + }), + 71: withBorder('11,11', { + levelID: 71, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: -3, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + ], + }), + 72: withBorder('11,11', { + levelID: 72, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: 2, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: -1, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 73: withBorder('11,11', { + levelID: 73, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: -3, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -1, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 74: withBorder('11,15', { + levelID: 74, + boundary: { x: 11, y: 15 }, + spawns: [ + { x: 2, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 75: withBorder('11,11', { + levelID: 75, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: 2, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + ], + }), + 76: withBorder('11,18', { + levelID: 76, + boundary: { x: 11, y: 18 }, + spawns: [ + { x: -3, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 77: withBorder('11,18', { + levelID: 77, + boundary: { x: 11, y: 18 }, + spawns: [ + { x: 3, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 0, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + ], + }), + 78: withBorder('11,18', { + levelID: 78, + boundary: { x: 11, y: 18 }, + spawns: [ + { x: -2, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -1, y: -3, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 79: withBorder('11,11', { + levelID: 79, + boundary: { x: 11, y: 11 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: -3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 80: withBorder('15,15', { + levelID: 80, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: -3, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 81: withBorder('15,15', { + levelID: 81, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: -3, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 7, y: 0, kind: 'prop' }, + ], + }), + 82: withBorder('15,15', { + levelID: 82, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 1, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + ], + }), + 83: withBorder('15,15', { + levelID: 83, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + ], + }), + 84: withBorder('15,15', { + levelID: 84, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 1, y: 2, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + ], + }), + 85: withBorder('15,15', { + levelID: 85, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 1, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 1, y: 3, kind: 'prop' }, + ], + }), + 86: withBorder('15,15', { + levelID: 86, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: -3, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 2, y: -2, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop_decor' }, + ], + }), + 87: withBorder('15,15', { + levelID: 87, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 1, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + ], + }), + 88: withBorder('15,15', { + levelID: 88, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 5, y: -2, kind: 'prop' }, + { x: -7, y: -2, kind: 'prop' }, + ], + }), + 89: withBorder('15,15', { + levelID: 89, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 4, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: -2, kind: 'prop_decor' }, + { x: 1, y: 0, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + ], + }), + 90: withBorder('15,15', { + levelID: 90, + boundary: { x: 15, y: 15 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 7, kind: 'prop' }, + { x: -7, y: -1, kind: 'prop' }, + { x: 7, y: 1, kind: 'prop' }, + { x: 1, y: -7, kind: 'prop' }, + ], + }), + 91: withBorder('20,20', { + levelID: 91, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.East }, + { x: -4, y: -2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -4, y: -3, kind: 'prop_decor' }, + { x: 4, y: -2, kind: 'prop_decor' }, + { x: 4, y: 4, kind: 'prop' }, + ], + }), + 92: withBorder('10,10', { + levelID: 92, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 1, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + ], + }), + 93: withBorder('10,10', { + levelID: 93, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -3, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 94: withBorder('10,10', { + levelID: 94, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 3, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 95: withBorder('10,10', { + levelID: 95, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 96: withBorder('10,10', { + levelID: 96, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 97: withBorder('20,20', { + levelID: 97, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 98: withBorder('20,20', { + levelID: 98, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -8, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: 8, y: -2, kind: 'prop' }, + { x: -8, y: 2, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + ], + }), + 99: withBorder('20,20', { + levelID: 99, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + ], + }), + 100: withBorder('20,20', { + levelID: 100, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -7, y: 1, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: -7, y: -1, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + ], + }), + 101: withBorder('20,20', { + levelID: 101, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 7, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + ], + }), + 102: withBorder('20,20', { + levelID: 102, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + ], + }), + 103: withBorder('20,20', { + levelID: 103, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + ], + }), + 104: withBorder('20,20', { + levelID: 104, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -2, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 0, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + ], + }), + 105: withBorder('20,20', { + levelID: 105, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 5, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: 8, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + ], + }), + 106: withBorder('20,20', { + levelID: 106, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -1, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + ], + }), + 107: withBorder('20,20', { + levelID: 107, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + ], + }), + 108: withBorder('20,20', { + levelID: 108, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + ], + }), + 109: withBorder('20,20', { + levelID: 109, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 8, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: 4, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + ], + }), + 110: withBorder('20,20', { + levelID: 110, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -3, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + ], + }), + 111: withBorder('20,20', { + levelID: 111, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 112: withBorder('20,20', { + levelID: 112, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: -4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: -7, y: -6, kind: 'prop' }, + ], + }), + 113: withBorder('20,20', { + levelID: 113, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: -3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 114: withBorder('20,20', { + levelID: 114, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 7, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + ], + }), + 115: withBorder('20,20', { + levelID: 115, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 116: withBorder('20,20', { + levelID: 116, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: 5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 7, y: 3, kind: 'prop' }, + { x: -7, y: -3, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + ], + }), + 117: withBorder('20,20', { + levelID: 117, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 5, y: -5, kind: 'prop' }, + ], + }), + 118: withBorder('20,20', { + levelID: 118, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 6, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 119: withBorder('20,20', { + levelID: 119, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: 11, kind: 'prop' }, + { x: -4, y: 11, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + ], + }), + 120: withBorder('20,20', { + levelID: 120, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: -4, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 121: withBorder('20,20', { + levelID: 121, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 6, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + ], + }), + 122: withBorder('20,20', { + levelID: 122, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 9, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + ], + }), + 123: withBorder('20,20', { + levelID: 123, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 2, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: -6, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: -6, kind: 'prop' }, + ], + }), + 124: withBorder('20,20', { + levelID: 124, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -9, kind: 'player', playerDirection: Direction.East }, + { x: -3, y: 8, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: 6, y: -9, kind: 'prop' }, + ], + }), + 125: withBorder('20,20', { + levelID: 125, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -2, y: 6, kind: 'prop' }, + { x: 6, y: 2, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + ], + }), + 126: withBorder('20,20', { + levelID: 126, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 10, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: -6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -8, y: 4, kind: 'prop' }, + { x: -8, y: -2, kind: 'prop' }, + { x: 7, y: 4, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + ], + }), + 127: withBorder('20,20', { + levelID: 127, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -10, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -3, y: 9, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + ], + }), + 128: withBorder('20,20', { + levelID: 128, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 6, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: 6, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + ], + }), + 129: withBorder('20,20', { + levelID: 129, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: -5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 1, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 130: withBorder('20,20', { + levelID: 130, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -2, kind: 'player', playerDirection: Direction.South }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 131: withBorder('20,20', { + levelID: 131, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -4, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 6, y: 8, kind: 'prop' }, + { x: 6, y: -4, kind: 'prop' }, + ], + }), + 132: withBorder('20,20', { + levelID: 132, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + ], + }), + 133: withBorder('20,20', { + levelID: 133, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 0, kind: 'prop' }, + { x: -6, y: 8, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + ], + }), + 134: withBorder('20,20', { + levelID: 134, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -7, y: 7, kind: 'prop' }, + { x: -7, y: 0, kind: 'prop' }, + { x: -7, y: 4, kind: 'prop' }, + ], + }), + 135: withBorder('20,20', { + levelID: 135, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 3, y: 6, kind: 'prop' }, + ], + }), + 136: withBorder('20,20', { + levelID: 136, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 137: withBorder('20,20', { + levelID: 137, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: 2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: 7, kind: 'prop' }, + { x: 5, y: -5, kind: 'prop' }, + ], + }), + 138: withBorder('20,20', { + levelID: 138, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -9, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 10, kind: 'prop' }, + { x: 5, y: 10, kind: 'prop' }, + { x: -1, y: 10, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + ], + }), + 139: withBorder('20,20', { + levelID: 139, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 7, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 140: withBorder('20,20', { + levelID: 140, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: 4, kind: 'prop' }, + { x: 7, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 141: withBorder('20,20', { + levelID: 141, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 6, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 0, y: 8, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 142: withBorder('20,20', { + levelID: 142, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 5, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + ], + }), + 143: withBorder('20,20', { + levelID: 143, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 10, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 4, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 4, y: 7, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + ], + }), + 144: withBorder('20,20', { + levelID: 144, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 9, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + ], + }), + 145: withBorder('20,20', { + levelID: 145, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: 2, kind: 'prop' }, + { x: 5, y: 8, kind: 'prop' }, + { x: -5, y: 8, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + ], + }), + 146: withBorder('20,20', { + levelID: 146, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 10, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 10, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + ], + }), + 147: withBorder('20,20', { + levelID: 147, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 8, kind: 'player', playerDirection: Direction.South }, + { x: -7, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + ], + }), + 148: withBorder('20,20', { + levelID: 148, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 7, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + { x: 5, y: 7, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + ], + }), + 149: withBorder('20,20', { + levelID: 149, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 5, y: 6, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + ], + }), + 150: withBorder('20,20', { + levelID: 150, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 9, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + ], + }), + 151: withBorder('20,20', { + levelID: 151, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -7, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: 4, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: 10, kind: 'prop' }, + ], + }), + 152: withBorder('20,20', { + levelID: 152, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 5, y: 2, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: -7, y: 4, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -7, y: 0, kind: 'prop' }, + { x: -7, y: -2, kind: 'prop' }, + ], + }), + 153: withBorder('20,20', { + levelID: 153, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -8, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -2, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + ], + }), + 154: withBorder('20,20', { + levelID: 154, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + ], + }), + 155: withBorder('20,20', { + levelID: 155, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -4, kind: 'player', playerDirection: Direction.East }, + { x: 5, y: 2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 1, y: 3, kind: 'prop' }, + { x: -7, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 5, y: 3, kind: 'prop' }, + ], + }), + 156: withBorder('20,20', { + levelID: 156, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: -5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -4, y: -5, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + ], + }), + 157: withBorder('20,20', { + levelID: 157, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 3, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 0, y: 5, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + ], + }), + 158: withBorder('20,20', { + levelID: 158, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -7, y: 7, kind: 'prop' }, + { x: -3, y: 7, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + ], + }), + 159: withBorder('20,20', { + levelID: 159, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: 8, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -7, y: 5, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 0, y: 8, kind: 'prop' }, + ], + }), + 160: withBorder('20,20', { + levelID: 160, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 1, y: -1, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + ], + }), + 161: withBorder('20,20', { + levelID: 161, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 2, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 9, kind: 'prop' }, + { x: -7, y: 9, kind: 'prop' }, + { x: 3, y: 9, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -7, y: 6, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -7, y: -2, kind: 'prop' }, + ], + }), + 162: withBorder('20,20', { + levelID: 162, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: -2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 6, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + ], + }), + 163: withBorder('20,20', { + levelID: 163, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -7, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -3, y: 5, kind: 'prop' }, + { x: 1, y: 9, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 164: withBorder('20,20', { + levelID: 164, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -6, y: 5, kind: 'prop' }, + { x: -2, y: 9, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + ], + }), + 165: withBorder('20,20', { + levelID: 165, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 6, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 2, y: 7, kind: 'prop' }, + { x: -4, y: 7, kind: 'prop' }, + { x: -1, y: 7, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + ], + }), + 166: withBorder('20,20', { + levelID: 166, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 11, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + ], + }), + 167: withBorder('20,20', { + levelID: 167, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 7, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -3, y: 9, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + ], + }), + 168: withBorder('20,20', { + levelID: 168, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + ], + }), + 169: withBorder('20,20', { + levelID: 169, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: -5, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: -4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 1, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + ], + }), + 170: withBorder('20,20', { + levelID: 170, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: -1, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + ], + }), + 171: withBorder('20,20', { + levelID: 171, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + ], + }), + 172: withBorder('20,20', { + levelID: 172, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 8, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 173: withBorder('20,20', { + levelID: 173, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -5, y: 3, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -2, y: 8, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 174: withBorder('20,20', { + levelID: 174, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 4, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -5, y: -3, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 175: withBorder('20,20', { + levelID: 175, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 1, y: 2, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + ], + }), + 176: withBorder('20,20', { + levelID: 176, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 0, y: 8, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + ], + }), + 177: withBorder('20,20', { + levelID: 177, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 7, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -4, y: 6, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 178: withBorder('20,20', { + levelID: 178, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + ], + }), + 179: withBorder('20,20', { + levelID: 179, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 9, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 180: withBorder('20,20', { + levelID: 180, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: 6, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 6, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + ], + }), + 181: withBorder('20,20', { + levelID: 181, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: 8, kind: 'prop' }, + { x: -5, y: 6, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + ], + }), + 182: withBorder('20,20', { + levelID: 182, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 8, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: 4, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + ], + }), + 183: withBorder('20,20', { + levelID: 183, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -2, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: 6, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop_decor' }, + ], + }), + 184: withBorder('20,20', { + levelID: 184, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: 6, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop_decor' }, + { x: 0, y: 9, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 3, y: 9, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + ], + }), + 185: withBorder('20,20', { + levelID: 185, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop_decor' }, + { x: 4, y: 9, kind: 'prop_decor' }, + ], + }), + 186: withBorder('20,20', { + levelID: 186, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 7, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -1, y: 9, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 187: withBorder('20,20', { + levelID: 187, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + ], + }), + 188: withBorder('20,20', { + levelID: 188, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 7, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 8, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + ], + }), + 189: withBorder('20,20', { + levelID: 189, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -7, y: 1, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + ], + }), + 190: withBorder('20,20', { + levelID: 190, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + ], + }), + 191: withBorder('20,20', { + levelID: 191, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 8, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: -4, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop_decor' }, + { x: 4, y: -4, kind: 'prop_decor' }, + ], + }), + 192: withBorder('20,20', { + levelID: 192, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 3, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -1, y: 7, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 193: withBorder('20,20', { + levelID: 193, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -5, kind: 'player', playerDirection: Direction.South }, + { x: -6, y: 7, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 9, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + { x: -1, y: 9, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + ], + }), + 194: withBorder('20,20', { + levelID: 194, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + ], + }), + 195: withBorder('20,20', { + levelID: 195, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 4, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + ], + }), + 196: withBorder('20,20', { + levelID: 196, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 6, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -4, y: 9, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 197: withBorder('20,20', { + levelID: 197, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: -7, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop_decor' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -6, y: -6, kind: 'prop_decor' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: -4, y: -6, kind: 'prop_decor' }, + ], + }), + 198: withBorder('20,20', { + levelID: 198, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: 5, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + ], + }), + 199: withBorder('20,20', { + levelID: 199, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -4, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 7, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 8, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop_decor' }, + { x: 0, y: 7, kind: 'prop_decor' }, + { x: 0, y: 6, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + ], + }), + 200: withBorder('20,20', { + levelID: 200, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 7, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + ], + }), + 201: withBorder('20,20', { + levelID: 201, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 1, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + ], + }), + 202: withBorder('20,20', { + levelID: 202, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: 6, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + ], + }), + 203: withBorder('20,20', { + levelID: 203, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -3, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -2, y: 6, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop_decor' }, + ], + }), + 204: withBorder('20,20', { + levelID: 204, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + ], + }), + 205: withBorder('20,20', { + levelID: 205, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + ], + }), + 206: withBorder('20,20', { + levelID: 206, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: -4, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 5, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop_decor' }, + ], + }), + 207: withBorder('20,20', { + levelID: 207, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 6, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + ], + }), + 208: withBorder('20,20', { + levelID: 208, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 209: withBorder('20,20', { + levelID: 209, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + ], + }), + 210: withBorder('20,20', { + levelID: 210, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 7, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: -2, y: 7, kind: 'prop' }, + ], + }), + 211: withBorder('20,20', { + levelID: 211, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -6, y: 0, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + ], + }), + 212: withBorder('20,20', { + levelID: 212, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: 8, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 213: withBorder('20,20', { + levelID: 213, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: 1, y: 8, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -2, y: 8, kind: 'prop' }, + { x: -5, y: 8, kind: 'prop' }, + ], + }), + 214: withBorder('20,20', { + levelID: 214, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 8, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop_decor' }, + { x: -3, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 215: withBorder('20,20', { + levelID: 215, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -5, kind: 'player', playerDirection: Direction.South }, + { x: -3, y: 8, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + ], + }), + 216: withBorder('20,20', { + levelID: 216, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 217: withBorder('20,20', { + levelID: 217, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: 4, kind: 'prop' }, + { x: -1, y: 7, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 218: withBorder('20,20', { + levelID: 218, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 8, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 219: withBorder('20,20', { + levelID: 219, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 9, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + ], + }), + 220: withBorder('20,20', { + levelID: 220, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + ], + }), + 221: withBorder('20,20', { + levelID: 221, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -6, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: -2, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -1, y: -6, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 222: withBorder('20,20', { + levelID: 222, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + ], + }), + 223: withBorder('20,20', { + levelID: 223, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 7, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + ], + }), + 224: withBorder('20,20', { + levelID: 224, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 5, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + ], + }), + 225: withBorder('20,20', { + levelID: 225, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 4, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 226: withBorder('20,20', { + levelID: 226, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 2, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + ], + }), + 227: withBorder('20,20', { + levelID: 227, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 1, kind: 'prop' }, + { x: -4, y: 7, kind: 'prop' }, + { x: -7, y: 4, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 6, y: 5, kind: 'prop' }, + { x: 6, y: 1, kind: 'prop' }, + ], + }), + 228: withBorder('20,20', { + levelID: 228, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 8, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 9, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 6, y: 6, kind: 'prop' }, + { x: 6, y: 4, kind: 'prop' }, + ], + }), + 229: withBorder('20,20', { + levelID: 229, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 2, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: -1, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + ], + }), + 230: withBorder('20,20', { + levelID: 230, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + ], + }), + 231: withBorder('20,20', { + levelID: 231, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 5, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop_decor' }, + ], + }), + 232: withBorder('20,20', { + levelID: 232, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: -3, y: 2, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 233: withBorder('20,20', { + levelID: 233, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: -1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: -1, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + ], + }), + 234: withBorder('20,20', { + levelID: 234, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 7, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 7, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 235: withBorder('20,20', { + levelID: 235, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: -3, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + ], + }), + 236: withBorder('20,20', { + levelID: 236, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: 5, kind: 'prop_decor' }, + { x: -4, y: 4, kind: 'prop_decor' }, + { x: -2, y: 6, kind: 'prop_decor' }, + { x: -2, y: 7, kind: 'prop_decor' }, + ], + }), + 237: withBorder('20,20', { + levelID: 237, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: -2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: -2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: -4, y: -6, kind: 'prop' }, + { x: -5, y: -7, kind: 'prop' }, + ], + }), + 238: withBorder('20,20', { + levelID: 238, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 4, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + ], + }), + 239: withBorder('20,20', { + levelID: 239, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -8, y: 6, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -6, y: 10, kind: 'prop' }, + { x: -6, y: 6, kind: 'prop' }, + { x: -3, y: 10, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -9, y: 4, kind: 'prop_decor' }, + ], + }), + 240: withBorder('20,20', { + levelID: 240, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 6, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 241: withBorder('20,20', { + levelID: 241, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -2, y: 4, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -7, y: -1, kind: 'prop' }, + ], + }), + 242: withBorder('20,20', { + levelID: 242, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + ], + }), + 243: withBorder('20,20', { + levelID: 243, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 7, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -2, y: 9, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + ], + }), + 244: withBorder('20,20', { + levelID: 244, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + ], + }), + 245: withBorder('20,20', { + levelID: 245, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: 6, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 246: withBorder('20,20', { + levelID: 246, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: -3, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + ], + }), + 247: withBorder('20,20', { + levelID: 247, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -6, y: 4, kind: 'prop' }, + { x: -7, y: 3, kind: 'prop' }, + { x: -8, y: 2, kind: 'prop' }, + ], + }), + 248: withBorder('20,20', { + levelID: 248, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 2, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + ], + }), + 249: withBorder('20,20', { + levelID: 249, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + ], + }), + 250: withBorder('20,20', { + levelID: 250, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop' }, + { x: -6, y: -3, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + ], + }), + 251: withBorder('20,20', { + levelID: 251, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 7, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 252: withBorder('20,20', { + levelID: 252, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + ], + }), + 253: withBorder('20,20', { + levelID: 253, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -4, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: -4, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + ], + }), + 254: withBorder('20,20', { + levelID: 254, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + ], + }), + 255: withBorder('20,20', { + levelID: 255, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 7, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: -1, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + ], + }), + 256: withBorder('20,20', { + levelID: 256, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 8, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 6, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 257: withBorder('20,20', { + levelID: 257, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: 3, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: 6, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 258: withBorder('20,20', { + levelID: 258, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: -5, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 7, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: -6, y: 7, kind: 'prop' }, + ], + }), + 259: withBorder('20,20', { + levelID: 259, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + ], + }), + 260: withBorder('20,20', { + levelID: 260, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + ], + }), + 261: withBorder('20,20', { + levelID: 261, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: -6, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: 5, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + { x: -7, y: 3, kind: 'prop' }, + ], + }), + 262: withBorder('20,20', { + levelID: 262, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -7, y: 4, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: -7, y: -2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + ], + }), + 263: withBorder('20,20', { + levelID: 263, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: 5, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 3, y: -6, kind: 'prop' }, + ], + }), + 264: withBorder('20,20', { + levelID: 264, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: -4, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + ], + }), + 265: withBorder('20,20', { + levelID: 265, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 2, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -4, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -4, y: -5, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + ], + }), + 266: withBorder('20,20', { + levelID: 266, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -9, y: -4, kind: 'prop' }, + { x: -9, y: 1, kind: 'prop' }, + ], + }), + 267: withBorder('20,20', { + levelID: 267, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 6, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 5, y: 3, kind: 'prop' }, + ], + }), + 268: withBorder('20,20', { + levelID: 268, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 4, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + ], + }), + 269: withBorder('20,20', { + levelID: 269, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -4, kind: 'player', playerDirection: Direction.East }, + { x: -4, y: 2, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + ], + }), + 270: withBorder('20,20', { + levelID: 270, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 271: withBorder('20,20', { + levelID: 271, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -3, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 272: withBorder('20,20', { + levelID: 272, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 1, y: 8, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + ], + }), + 273: withBorder('20,20', { + levelID: 273, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + ], + }), + 274: withBorder('20,20', { + levelID: 274, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -5, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -6, y: 7, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -8, y: 5, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop_decor' }, + { x: -2, y: 1, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: -1, y: 2, kind: 'prop_decor' }, + { x: 0, y: 2, kind: 'prop_decor' }, + { x: 0, y: 3, kind: 'prop_decor' }, + { x: 1, y: 3, kind: 'prop_decor' }, + ], + }), + 275: withBorder('20,20', { + levelID: 275, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 4, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 276: withBorder('20,20', { + levelID: 276, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 6, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + ], + }), + 277: withBorder('20,20', { + levelID: 277, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 4, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: -4, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + ], + }), + 278: withBorder('20,20', { + levelID: 278, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + ], + }), + 279: withBorder('20,20', { + levelID: 279, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -8, y: 1, kind: 'prop' }, + { x: -9, y: 0, kind: 'prop' }, + ], + }), + 280: withBorder('20,20', { + levelID: 280, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -4, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop' }, + ], + }), + 281: withBorder('20,20', { + levelID: 281, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 7, kind: 'prop_decor' }, + { x: 3, y: 7, kind: 'prop_decor' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 282: withBorder('20,20', { + levelID: 282, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + ], + }), + 283: withBorder('20,20', { + levelID: 283, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 5, kind: 'prop' }, + { x: -6, y: -3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 284: withBorder('20,20', { + levelID: 284, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 6, y: -4, kind: 'prop' }, + { x: -9, y: -1, kind: 'prop' }, + ], + }), + 285: withBorder('20,20', { + levelID: 285, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 6, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: 1, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 6, y: 5, kind: 'prop' }, + { x: 7, y: 1, kind: 'prop' }, + { x: 7, y: -1, kind: 'prop' }, + { x: -5, y: 6, kind: 'prop' }, + ], + }), + 286: withBorder('20,20', { + levelID: 286, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -5, y: 9, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: 2, y: 9, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 5, y: 9, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + ], + }), + 287: withBorder('20,20', { + levelID: 287, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -1, y: -1, kind: 'prop_decor' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + ], + }), + 288: withBorder('20,20', { + levelID: 288, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 2, y: -1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 5, y: 3, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + ], + }), + 289: withBorder('20,20', { + levelID: 289, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -2, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: -6, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + ], + }), + 290: withBorder('20,20', { + levelID: 290, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 2, kind: 'prop_decor' }, + { x: 5, y: -3, kind: 'prop_decor' }, + { x: 4, y: -4, kind: 'prop_decor' }, + { x: 3, y: -5, kind: 'prop_decor' }, + ], + }), + 291: withBorder('20,20', { + levelID: 291, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -7, y: -3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -8, y: 1, kind: 'prop' }, + { x: -8, y: -1, kind: 'prop' }, + { x: 7, y: 2, kind: 'prop' }, + { x: 8, y: 1, kind: 'prop' }, + { x: 8, y: -1, kind: 'prop' }, + ], + }), + 292: withBorder('20,20', { + levelID: 292, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -3, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 0, kind: 'prop_decor' }, + { x: -3, y: 0, kind: 'prop_decor' }, + { x: -3, y: -2, kind: 'prop_decor' }, + ], + }), + 293: withBorder('20,20', { + levelID: 293, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 5, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -1, y: 10, kind: 'prop_decor' }, + { x: 4, y: 10, kind: 'prop_decor' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + ], + }), + 294: withBorder('20,20', { + levelID: 294, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -9, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: -8, kind: 'prop_decor' }, + { x: 0, y: -7, kind: 'prop_decor' }, + { x: 1, y: -6, kind: 'prop_decor' }, + { x: 2, y: -5, kind: 'prop_decor' }, + { x: 3, y: -4, kind: 'prop_decor' }, + ], + }), + 295: withBorder('20,20', { + levelID: 295, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -3, y: -4, kind: 'prop_decor' }, + { x: -3, y: -8, kind: 'prop_decor' }, + { x: 1, y: -4, kind: 'prop_decor' }, + { x: 1, y: -8, kind: 'prop_decor' }, + { x: 5, y: -4, kind: 'prop_decor' }, + { x: 5, y: -6, kind: 'prop_decor' }, + { x: 7, y: -4, kind: 'prop_decor' }, + { x: 7, y: -6, kind: 'prop_decor' }, + ], + }), + 296: withBorder('20,20', { + levelID: 296, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -4, y: 0, kind: 'prop_decor' }, + { x: -3, y: 0, kind: 'prop_decor' }, + { x: -3, y: 1, kind: 'prop_decor' }, + { x: -2, y: 1, kind: 'prop_decor' }, + { x: -2, y: 2, kind: 'prop_decor' }, + { x: -1, y: 2, kind: 'prop_decor' }, + { x: -1, y: 3, kind: 'prop_decor' }, + { x: 0, y: 3, kind: 'prop_decor' }, + { x: 1, y: 3, kind: 'prop_decor' }, + { x: 1, y: 2, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop_decor' }, + { x: 2, y: 1, kind: 'prop_decor' }, + { x: 3, y: 1, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 4, y: 0, kind: 'prop_decor' }, + { x: 0, y: 4, kind: 'prop' }, + ], + }), + 297: withBorder('20,20', { + levelID: 297, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: -3, kind: 'prop_decor' }, + { x: -5, y: -4, kind: 'prop_decor' }, + { x: -4, y: -4, kind: 'prop_decor' }, + { x: -4, y: -5, kind: 'prop_decor' }, + { x: -3, y: -5, kind: 'prop_decor' }, + { x: -3, y: -6, kind: 'prop_decor' }, + { x: -2, y: -6, kind: 'prop_decor' }, + { x: 2, y: -6, kind: 'prop_decor' }, + { x: 3, y: -6, kind: 'prop_decor' }, + { x: 3, y: -5, kind: 'prop_decor' }, + { x: 4, y: -5, kind: 'prop_decor' }, + { x: 4, y: -4, kind: 'prop_decor' }, + { x: 5, y: -4, kind: 'prop_decor' }, + { x: 5, y: -3, kind: 'prop_decor' }, + ], + }), + 298: withBorder('20,20', { + levelID: 298, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 299: withBorder('20,20', { + levelID: 299, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: -3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -3, y: 4, kind: 'prop_decor' }, + { x: -3, y: 2, kind: 'prop_decor' }, + { x: -1, y: 2, kind: 'prop_decor' }, + { x: 1, y: 4, kind: 'prop_decor' }, + { x: 1, y: 2, kind: 'prop_decor' }, + ], + }), + 300: withBorder('20,20', { + levelID: 300, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 5, kind: 'prop' }, + { x: -3, y: 5, kind: 'prop_decor' }, + { x: -2, y: 1, kind: 'prop_decor' }, + { x: -1, y: 5, kind: 'prop_decor' }, + { x: 0, y: 1, kind: 'prop_decor' }, + { x: -4, y: 1, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + ], + }), + 301: withBorder('10,10', { + levelID: 301, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 302: withBorder('10,10', { + levelID: 302, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 1, kind: 'prop_decor' }, + { x: -3, y: -3, kind: 'prop_decor' }, + { x: -4, y: 0, kind: 'prop_decor' }, + { x: -4, y: -2, kind: 'prop_decor' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: 0, y: -2, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: -1, y: -3, kind: 'prop_decor' }, + ], + }), + 303: withBorder('20,20', { + levelID: 303, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -7, y: 7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: 4, kind: 'prop_decor' }, + { x: 1, y: 4, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + ], + }), + 304: withBorder('20,20', { + levelID: 304, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 10, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: -7, y: 1, kind: 'prop' }, + ], + }), + 305: withBorder('20,20', { + levelID: 305, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 1, y: -1, kind: 'prop_decor' }, + { x: -1, y: -1, kind: 'prop_decor' }, + { x: 1, y: -3, kind: 'prop_decor' }, + { x: -1, y: -3, kind: 'prop_decor' }, + { x: -1, y: -5, kind: 'prop_decor' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 306: withBorder('20,20', { + levelID: 306, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 2, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 4, y: 4, kind: 'prop_decor' }, + ], + }), + 307: withBorder('20,20', { + levelID: 307, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: -4, y: 1, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 308: withBorder('20,20', { + levelID: 308, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: 2, y: 1, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + ], + }), + 309: withBorder('20,20', { + levelID: 309, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 8, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 1, y: 9, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + { x: -1, y: 8, kind: 'prop' }, + { x: -1, y: 7, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + ], + }), + 310: withBorder('20,20', { + levelID: 310, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 3, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 5, y: 7, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + ], + }), + 311: withBorder('20,20', { + levelID: 311, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + ], + }), + 312: withBorder('20,20', { + levelID: 312, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 5, y: 0, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + ], + }), + 313: withBorder('20,20', { + levelID: 313, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 4, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + { x: 8, y: 6, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: 7, y: 2, kind: 'prop' }, + { x: 8, y: 4, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + ], + }), + 314: withBorder('20,20', { + levelID: 314, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 3, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 315: withBorder('20,20', { + levelID: 315, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + ], + }), + 316: withBorder('20,20', { + levelID: 316, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 9, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + ], + }), + 317: withBorder('20,20', { + levelID: 317, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + ], + }), + 318: withBorder('20,20', { + levelID: 318, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -3, kind: 'player', playerDirection: Direction.East }, + { x: -3, y: -4, kind: 'prop' }, + { x: -4, y: -5, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + { x: -6, y: -7, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 4, y: -5, kind: 'prop' }, + { x: 5, y: -6, kind: 'prop' }, + { x: 6, y: -7, kind: 'prop' }, + ], + }), + 319: withBorder('20,20', { + levelID: 319, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: -4, kind: 'prop_decor' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + ], + }), + 320: withBorder('20,20', { + levelID: 320, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 3, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 321: withBorder('20,20', { + levelID: 321, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -6, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: -5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 4, kind: 'prop_decor' }, + { x: -4, y: 2, kind: 'prop_decor' }, + { x: -5, y: 3, kind: 'prop_decor' }, + { x: -1, y: 7, kind: 'prop_decor' }, + { x: -2, y: 6, kind: 'prop_decor' }, + { x: 0, y: 6, kind: 'prop_decor' }, + { x: 2, y: 4, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop_decor' }, + ], + }), + 322: withBorder('20,20', { + levelID: 322, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 3, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 323: withBorder('20,20', { + levelID: 323, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -2, kind: 'prop' }, + { x: -5, y: -3, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: -1, y: -6, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + { x: 1, y: -6, kind: 'prop' }, + ], + }), + 324: withBorder('20,20', { + levelID: 324, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + ], + }), + 325: withBorder('20,20', { + levelID: 325, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 5, y: 3, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + ], + }), + 326: withBorder('20,20', { + levelID: 326, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 2, kind: 'player', playerDirection: Direction.South }, + { x: 2, y: 2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -2, y: 7, kind: 'prop_decor' }, + { x: -2, y: 2, kind: 'prop_decor' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop_decor' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 327: withBorder('20,20', { + levelID: 327, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 4, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + ], + }), + 328: withBorder('20,20', { + levelID: 328, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 2, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + ], + }), + 329: withBorder('20,20', { + levelID: 329, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -2, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 1, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: 1, y: 1, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: -4, y: -2, kind: 'prop_decor' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop_decor' }, + ], + }), + 330: withBorder('20,20', { + levelID: 330, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: 5, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop_decor' }, + { x: 0, y: -2, kind: 'prop_decor' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 331: withBorder('20,20', { + levelID: 331, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + ], + }), + 332: withBorder('20,20', { + levelID: 332, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: -8, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: -9, kind: 'prop' }, + { x: 2, y: -9, kind: 'prop' }, + { x: -2, y: -10, kind: 'prop' }, + { x: 1, y: -10, kind: 'prop' }, + ], + }), + 333: withBorder('20,20', { + levelID: 333, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 6, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: 4, kind: 'prop_decor' }, + { x: 5, y: 4, kind: 'prop_decor' }, + { x: -5, y: -3, kind: 'prop_decor' }, + { x: 5, y: -3, kind: 'prop_decor' }, + { x: 8, y: -4, kind: 'prop' }, + ], + }), + 334: withBorder('20,20', { + levelID: 334, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + ], + }), + 335: withBorder('20,20', { + levelID: 335, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: 3, kind: 'player', playerDirection: Direction.South }, + { x: -5, y: 7, kind: 'prop' }, + { x: -6, y: 6, kind: 'prop' }, + { x: -7, y: 5, kind: 'prop' }, + { x: -8, y: 4, kind: 'prop' }, + { x: 5, y: 7, kind: 'prop' }, + { x: 4, y: 7, kind: 'prop' }, + { x: 6, y: 6, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + { x: 8, y: 4, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + ], + }), + 336: withBorder('20,20', { + levelID: 336, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -10, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 5, y: -5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -10, y: -3, kind: 'prop' }, + { x: -10, y: -4, kind: 'prop' }, + { x: -9, y: -4, kind: 'prop' }, + { x: -9, y: -5, kind: 'prop' }, + { x: -8, y: -5, kind: 'prop' }, + { x: -8, y: -6, kind: 'prop' }, + { x: -7, y: -6, kind: 'prop' }, + { x: -6, y: -6, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop_decor' }, + { x: -3, y: -3, kind: 'prop_decor' }, + { x: -2, y: -3, kind: 'prop_decor' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + ], + }), + 337: withBorder('20,20', { + levelID: 337, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -6, y: -8, kind: 'prop' }, + { x: -3, y: -8, kind: 'prop' }, + { x: 3, y: -8, kind: 'prop_decor' }, + { x: 6, y: -8, kind: 'prop_decor' }, + { x: -6, y: -5, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop_decor' }, + { x: 6, y: -5, kind: 'prop_decor' }, + ], + }), + 338: withBorder('20,25', { + levelID: 338, + boundary: { x: 20, y: 25 }, + spawns: [ + { x: 8, y: -2, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: -5, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: -1, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -7, y: -3, kind: 'prop' }, + { x: -8, y: -4, kind: 'prop' }, + { x: -9, y: -5, kind: 'prop_decor' }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 339: withBorder('20,20', { + levelID: 339, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -4, kind: 'player', playerDirection: Direction.East }, + { x: -6, y: -6, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 5, y: -4, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 4, y: -5, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: 3, y: -6, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + { x: 2, y: -7, kind: 'prop' }, + { x: 1, y: -7, kind: 'prop' }, + { x: 1, y: -8, kind: 'prop' }, + { x: -1, y: -8, kind: 'prop' }, + { x: -2, y: -8, kind: 'prop' }, + { x: -2, y: -7, kind: 'prop' }, + { x: -3, y: -7, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop' }, + { x: -4, y: -6, kind: 'prop' }, + { x: -4, y: -5, kind: 'prop' }, + { x: -5, y: -5, kind: 'prop' }, + ], + }), + 340: withBorder('20,20', { + levelID: 340, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -10, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: -5, kind: 'prop_decor' }, + { x: 2, y: -8, kind: 'prop_decor' }, + { x: 5, y: -5, kind: 'prop_decor' }, + { x: 5, y: -4, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 5, y: -8, kind: 'prop_decor' }, + { x: 7, y: -2, kind: 'prop' }, + { x: 7, y: -4, kind: 'prop' }, + ], + }), + 341: withBorder('20,20', { + levelID: 341, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 0, kind: 'prop' }, + ], + }), + 342: withBorder('20,20', { + levelID: 342, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + ], + }), + 343: withBorder('20,20', { + levelID: 343, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 4, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + ], + }), + 344: withBorder('20,20', { + levelID: 344, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 345: withBorder('20,20', { + levelID: 345, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: -5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -2, y: 3, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop_decor' }, + { x: 3, y: -2, kind: 'prop_decor' }, + ], + }), + 346: withBorder('20,20', { + levelID: 346, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 8, kind: 'prop' }, + ], + }), + 347: withBorder('20,20', { + levelID: 347, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 5, kind: 'prop' }, + ], + }), + 348: withBorder('20,20', { + levelID: 348, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 3, kind: 'prop' }, + ], + }), + 349: withBorder('20,20', { + levelID: 349, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 5, kind: 'player', playerDirection: Direction.South }, + { x: 9, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 1, y: 5, kind: 'prop_decor' }, + { x: 1, y: 1, kind: 'prop_decor' }, + { x: -3, y: 1, kind: 'prop_decor' }, + { x: -3, y: -3, kind: 'prop_decor' }, + { x: -7, y: -3, kind: 'prop_decor' }, + ], + }), + 350: withBorder('20,20', { + levelID: 350, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: -5, y: -5, kind: 'prop' }, + ], + }), + 351: withBorder('20,20', { + levelID: 351, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 3, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + ], + }), + 352: withBorder('20,20', { + levelID: 352, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 0, kind: 'prop' }, + ], + }), + 353: withBorder('20,20', { + levelID: 353, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 5, y: -3, kind: 'prop' }, + ], + }), + 354: withBorder('20,20', { + levelID: 354, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 1, kind: 'prop' }, + ], + }), + 355: withBorder('20,20', { + levelID: 355, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 4, kind: 'prop' }, + ], + }), + 356: withBorder('20,20', { + levelID: 356, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 2, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop_decor' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: 5, y: -5, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 357: withBorder('20,20', { + levelID: 357, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: -1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: -2, y: 2, kind: 'prop_decor' }, + { x: -3, y: 3, kind: 'prop_decor' }, + ], + }), + 358: withBorder('20,20', { + levelID: 358, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -2, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 7, y: -5, kind: 'prop' }, + ], + }), + 359: withBorder('20,20', { + levelID: 359, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 3, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 6, y: 7, kind: 'prop' }, + ], + }), + 360: withBorder('20,20', { + levelID: 360, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 8, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 9, y: 2, kind: 'prop' }, + { x: 9, y: -3, kind: 'prop' }, + ], + }), + 361: withBorder('20,20', { + levelID: 361, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 4, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 5, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -3, y: 0, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: 1, y: 4, kind: 'prop_decor' }, + ], + }), + 362: withBorder('20,20', { + levelID: 362, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + ], + }), + 363: withBorder('20,20', { + levelID: 363, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 5, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 364: withBorder('20,20', { + levelID: 364, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 365: withBorder('20,20', { + levelID: 365, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 0, y: 6, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + ], + }), + 366: withBorder('20,20', { + levelID: 366, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 4, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 367: withBorder('20,20', { + levelID: 367, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 7, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + ], + }), + 368: withBorder('20,20', { + levelID: 368, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 6, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + ], + }), + 369: withBorder('20,20', { + levelID: 369, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -6, y: 1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 370: withBorder('20,20', { + levelID: 370, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 3, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 371: withBorder('20,20', { + levelID: 371, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: -1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop_decor' }, + { x: 1, y: -1, kind: 'prop_decor' }, + { x: 4, y: -1, kind: 'prop' }, + ], + }), + 372: withBorder('20,20', { + levelID: 372, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -3, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -5, y: -3, kind: 'prop' }, + ], + }), + 373: withBorder('20,20', { + levelID: 373, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + ], + }), + 374: withBorder('20,20', { + levelID: 374, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 375: withBorder('20,20', { + levelID: 375, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 4, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 6, y: 1, kind: 'prop_decor' }, + ], + }), + 376: withBorder('20,20', { + levelID: 376, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 0, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -3, y: 3, kind: 'prop_decor' }, + { x: -3, y: -3, kind: 'prop_decor' }, + { x: -1, y: 3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop_decor' }, + { x: 1, y: -3, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 377: withBorder('20,20', { + levelID: 377, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop_decor' }, + { x: 2, y: 0, kind: 'prop_decor' }, + { x: -2, y: -3, kind: 'prop_decor' }, + { x: 2, y: -3, kind: 'prop_decor' }, + { x: -2, y: -6, kind: 'prop_decor' }, + { x: 2, y: -6, kind: 'prop_decor' }, + ], + }), + 378: withBorder('20,20', { + levelID: 378, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 2, y: 1, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 3, y: 5, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop_decor' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop_decor' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + ], + }), + 379: withBorder('20,20', { + levelID: 379, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 5, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop_decor' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + ], + }), + 380: withBorder('20,20', { + levelID: 380, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: -1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 5, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop_decor' }, + { x: 2, y: 3, kind: 'prop_decor' }, + { x: -3, y: 1, kind: 'prop_decor' }, + { x: 2, y: 1, kind: 'prop_decor' }, + { x: -3, y: -1, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + ], + }), + 381: withBorder('20,20', { + levelID: 381, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -2, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + ], + }), + 382: withBorder('20,20', { + levelID: 382, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 383: withBorder('20,20', { + levelID: 383, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 5, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + ], + }), + 384: withBorder('20,20', { + levelID: 384, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 4, y: 0, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + ], + }), + 385: withBorder('20,20', { + levelID: 385, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 5, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + ], + }), + 386: withBorder('20,20', { + levelID: 386, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 6, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + ], + }), + 387: withBorder('20,20', { + levelID: 387, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 5, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + ], + }), + 388: withBorder('20,20', { + levelID: 388, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 389: withBorder('20,20', { + levelID: 389, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 2, y: 7, kind: 'prop' }, + { x: -2, y: -7, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + ], + }), + 390: withBorder('20,20', { + levelID: 390, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 5, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + ], + }), + 391: withBorder('20,20', { + levelID: 391, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 2, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + ], + }), + 392: withBorder('20,20', { + levelID: 392, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + ], + }), + 393: withBorder('20,20', { + levelID: 393, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 2, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + ], + }), + 394: withBorder('20,20', { + levelID: 394, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -9, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + ], + }), + 395: withBorder('20,20', { + levelID: 395, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -4, y: 2, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + ], + }), + 396: withBorder('20,20', { + levelID: 396, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -4, y: 2, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 397: withBorder('20,20', { + levelID: 397, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 8, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 8, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 8, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 398: withBorder('20,20', { + levelID: 398, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 2, kind: 'player', playerDirection: Direction.South }, + { x: -3, y: -1, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 399: withBorder('20,20', { + levelID: 399, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -7, y: 2, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + ], + }), + 400: withBorder('20,20', { + levelID: 400, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 3, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 5, y: 7, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + ], + }), + 401: withBorder('10,10', { + levelID: 401, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 3, y: 2, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 402: withBorder('10,10', { + levelID: 402, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -2, kind: 'prop' }, + ], + }), + 403: withBorder('10,10', { + levelID: 403, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'prop' }, + ], + }), + 404: withBorder('10,10', { + levelID: 404, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 5, y: 4, kind: 'prop' }, + ], + }), + 405: withBorder('10,10', { + levelID: 405, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -1, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: -2, kind: 'prop_decor' }, + ], + }), + 406: withBorder('10,10', { + levelID: 406, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: 2, kind: 'prop' }, + ], + }), + 407: withBorder('10,10', { + levelID: 407, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -5, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 8, y: -3, kind: 'prop' }, + ], + }), + 408: withBorder('10,10', { + levelID: 408, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: -2, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 6, kind: 'prop' }, + ], + }), + 409: withBorder('10,10', { + levelID: 409, + boundary: { x: 10, y: 10 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop' }, + ], + }), + 410: withBorder('20,20', { + levelID: 410, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: 8, y: 7, kind: 'prop' }, + ], + }), + 411: withBorder('20,20', { + levelID: 411, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 0, y: 1, kind: 'prop_decor' }, + { x: 1, y: 2, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop_decor' }, + { x: 6, y: 3, kind: 'prop_decor' }, + ], + }), + 412: withBorder('20,20', { + levelID: 412, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + ], + }), + 413: withBorder('20,20', { + levelID: 413, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -8, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 7, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: 3, y: -7, kind: 'prop' }, + { x: 3, y: -8, kind: 'prop' }, + ], + }), + 414: withBorder('20,20', { + levelID: 414, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 415: withBorder('20,20', { + levelID: 415, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 4, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + ], + }), + 416: withBorder('20,20', { + levelID: 416, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -1, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 417: withBorder('20,20', { + levelID: 417, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: -1, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + ], + }), + 418: withBorder('20,20', { + levelID: 418, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 0, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -4, y: 6, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + ], + }), + 419: withBorder('20,20', { + levelID: 419, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 7, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -5, y: -3, kind: 'prop' }, + ], + }), + 420: withBorder('20,20', { + levelID: 420, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 1, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + ], + }), + 421: withBorder('20,20', { + levelID: 421, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: -2, kind: 'prop_decor' }, + { x: -2, y: -1, kind: 'prop_decor' }, + { x: -3, y: 0, kind: 'prop_decor' }, + { x: -4, y: 1, kind: 'prop_decor' }, + { x: -5, y: 2, kind: 'prop_decor' }, + { x: 1, y: -2, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 5, y: 2, kind: 'prop_decor' }, + ], + }), + 422: withBorder('20,20', { + levelID: 422, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 5, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 423: withBorder('20,20', { + levelID: 423, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -3, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + ], + }), + 424: withBorder('20,20', { + levelID: 424, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 1, y: 4, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 4, y: -2, kind: 'prop_decor' }, + { x: 5, y: -4, kind: 'prop_decor' }, + ], + }), + 425: withBorder('20,20', { + levelID: 425, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -5, y: 6, kind: 'prop_decor' }, + ], + }), + 426: withBorder('20,20', { + levelID: 426, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 4, y: -4, kind: 'prop_decor' }, + ], + }), + 427: withBorder('20,20', { + levelID: 427, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 0, kind: 'prop_decor' }, + { x: 1, y: 9, kind: 'prop_decor' }, + ], + }), + 428: withBorder('20,20', { + levelID: 428, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 8, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 8, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 4, y: -6, kind: 'prop_decor' }, + ], + }), + 429: withBorder('20,20', { + levelID: 429, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 5, y: 2, kind: 'prop' }, + ], + }), + 430: withBorder('20,20', { + levelID: 430, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 0, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + ], + }), + 431: withBorder('20,20', { + levelID: 431, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -8, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 5, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: 5, y: 4, kind: 'prop_decor' }, + { x: 4, y: 2, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 2, y: -2, kind: 'prop_decor' }, + { x: 1, y: -4, kind: 'prop_decor' }, + { x: 0, y: -6, kind: 'prop_decor' }, + ], + }), + 432: withBorder('20,20', { + levelID: 432, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 3, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + ], + }), + 433: withBorder('20,20', { + levelID: 433, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -5, kind: 'player', playerDirection: Direction.East }, + { x: 3, y: 9, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + ], + }), + 434: withBorder('20,20', { + levelID: 434, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -5, kind: 'player', playerDirection: Direction.South }, + { x: -2, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 4, y: 5, kind: 'prop_decor' }, + { x: 3, y: 3, kind: 'prop_decor' }, + { x: 2, y: 1, kind: 'prop_decor' }, + { x: 1, y: -1, kind: 'prop_decor' }, + { x: 0, y: -3, kind: 'prop_decor' }, + ], + }), + 435: withBorder('20,20', { + levelID: 435, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 7, kind: 'player', playerDirection: Direction.South }, + { x: 5, y: 7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: 5, kind: 'prop_decor' }, + { x: -3, y: 3, kind: 'prop_decor' }, + { x: -3, y: 1, kind: 'prop_decor' }, + { x: -3, y: -1, kind: 'prop_decor' }, + { x: -3, y: -3, kind: 'prop_decor' }, + { x: -3, y: -5, kind: 'prop_decor' }, + { x: 4, y: -5, kind: 'prop_decor' }, + { x: 3, y: -3, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + { x: 1, y: 1, kind: 'prop_decor' }, + { x: 0, y: 3, kind: 'prop_decor' }, + ], + }), + 436: withBorder('20,20', { + levelID: 436, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 9, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 0, kind: 'prop_decor' }, + { x: -2, y: 2, kind: 'prop_decor' }, + { x: -4, y: 2, kind: 'prop_decor' }, + { x: -4, y: 5, kind: 'prop_decor' }, + { x: -6, y: 5, kind: 'prop_decor' }, + { x: -6, y: 9, kind: 'prop_decor' }, + { x: -8, y: 9, kind: 'prop_decor' }, + ], + }), + 437: withBorder('20,20', { + levelID: 437, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -6, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -5, y: 0, kind: 'prop_decor' }, + { x: -4, y: -1, kind: 'prop_decor' }, + { x: -1, y: -1, kind: 'prop_decor' }, + { x: -1, y: -3, kind: 'prop_decor' }, + { x: 2, y: -3, kind: 'prop_decor' }, + { x: 2, y: -6, kind: 'prop_decor' }, + ], + }), + 438: withBorder('20,20', { + levelID: 438, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 0, y: 2, kind: 'prop_decor' }, + { x: -3, y: 2, kind: 'prop_decor' }, + { x: 2, y: 4, kind: 'prop_decor' }, + { x: 4, y: 6, kind: 'prop_decor' }, + { x: -5, y: 4, kind: 'prop_decor' }, + { x: -7, y: 6, kind: 'prop_decor' }, + { x: -3, y: -2, kind: 'prop_decor' }, + { x: 2, y: -2, kind: 'prop_decor' }, + { x: 4, y: -4, kind: 'prop_decor' }, + { x: 6, y: -6, kind: 'prop_decor' }, + { x: -5, y: -4, kind: 'prop_decor' }, + { x: -7, y: -6, kind: 'prop_decor' }, + ], + }), + 439: withBorder('20,20', { + levelID: 439, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 6, y: 7, kind: 'prop_decor' }, + { x: 4, y: 5, kind: 'prop_decor' }, + { x: -2, y: 4, kind: 'prop_decor' }, + { x: -2, y: -1, kind: 'prop_decor' }, + { x: 4, y: 0, kind: 'prop_decor' }, + { x: 5, y: -2, kind: 'prop_decor' }, + ], + }), + 440: withBorder('20,20', { + levelID: 440, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 1, y: 6, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + ], + }), + 441: withBorder('20,20', { + levelID: 441, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 3, kind: 'prop_decor' }, + { x: -1, y: 2, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: -1, y: 0, kind: 'prop_decor' }, + { x: -1, y: -1, kind: 'prop_decor' }, + { x: -1, y: -2, kind: 'prop_decor' }, + { x: 1, y: -2, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 5, y: 2, kind: 'prop_decor' }, + ], + }), + 442: withBorder('20,20', { + levelID: 442, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + ], + }), + 443: withBorder('20,20', { + levelID: 443, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 8, y: -3, kind: 'prop' }, + ], + }), + 444: withBorder('20,20', { + levelID: 444, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: 2, y: -10, kind: 'prop' }, + ], + }), + 445: withBorder('20,20', { + levelID: 445, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: -1, kind: 'prop' }, + ], + }), + 446: withBorder('20,20', { + levelID: 446, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -9, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 447: withBorder('20,20', { + levelID: 447, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 1, kind: 'prop' }, + ], + }), + 448: withBorder('20,20', { + levelID: 448, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 7, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 449: withBorder('20,20', { + levelID: 449, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 450: withBorder('20,20', { + levelID: 450, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -5, y: 4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop_decor' }, + ], + }), + 451: withBorder('20,20', { + levelID: 451, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: 5, kind: 'prop_decor' }, + ], + }), + 452: withBorder('20,20', { + levelID: 452, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 7, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -8, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 7, y: -5, kind: 'prop_decor' }, + ], + }), + 453: withBorder('20,20', { + levelID: 453, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 5, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: 3, y: -5, kind: 'prop_decor' }, + ], + }), + 454: withBorder('20,20', { + levelID: 454, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -10, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: 11, y: 5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -10, y: 0, kind: 'prop_decor' }, + ], + }), + 455: withBorder('20,20', { + levelID: 455, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 3, kind: 'player', playerDirection: Direction.West }, + { x: 9, y: 0, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -7, y: 4, kind: 'prop_decor' }, + ], + }), + 456: withBorder('20,20', { + levelID: 456, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 5, y: -6, kind: 'prop' }, + ], + }), + 457: withBorder('20,20', { + levelID: 457, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -10, y: -6, kind: 'player', playerDirection: Direction.East }, + { x: -10, y: 5, kind: 'prop' }, + { x: -8, y: 4, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: 8, y: -4, kind: 'prop' }, + { x: 10, y: -5, kind: 'prop' }, + ], + }), + 458: withBorder('20,20', { + levelID: 458, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 8, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + ], + }), + 459: withBorder('20,20', { + levelID: 459, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 2, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + ], + }), + 460: withBorder('20,20', { + levelID: 460, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 6, kind: 'player', playerDirection: Direction.South }, + { x: 5, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 6, kind: 'prop_decor' }, + { x: 2, y: 4, kind: 'prop_decor' }, + { x: 4, y: 2, kind: 'prop_decor' }, + { x: 5, y: 1, kind: 'prop_decor' }, + { x: 5, y: -2, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 1, y: 2, kind: 'prop_decor' }, + { x: -1, y: 4, kind: 'prop_decor' }, + { x: -3, y: 6, kind: 'prop_decor' }, + ], + }), + 461: withBorder('20,20', { + levelID: 461, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -3, kind: 'prop' }, + ], + }), + 462: withBorder('20,20', { + levelID: 462, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 3, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + ], + }), + 463: withBorder('20,20', { + levelID: 463, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: 5, y: 3, kind: 'prop' }, + ], + }), + 464: withBorder('20,20', { + levelID: 464, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -2, kind: 'player', playerDirection: Direction.South }, + { x: 1, y: 8, kind: 'prop' }, + ], + }), + 465: withBorder('20,20', { + levelID: 465, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: -9, y: 1, kind: 'prop' }, + ], + }), + 466: withBorder('20,20', { + levelID: 466, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: -4, kind: 'prop' }, + ], + }), + 467: withBorder('20,20', { + levelID: 467, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + ], + }), + 468: withBorder('20,20', { + levelID: 468, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -1, y: -8, kind: 'prop' }, + { x: 1, y: -8, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + ], + }), + 469: withBorder('20,20', { + levelID: 469, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 470: withBorder('20,20', { + levelID: 470, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -6, y: 4, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 8, y: 4, kind: 'prop' }, + { x: 8, y: -1, kind: 'prop' }, + ], + }), + 471: withBorder('20,20', { + levelID: 471, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: -1, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + ], + }), + 472: withBorder('20,20', { + levelID: 472, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 9, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 7, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + ], + }), + 473: withBorder('20,20', { + levelID: 473, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 5, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 474: withBorder('20,20', { + levelID: 474, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 1, y: 0, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + { x: -4, y: 6, kind: 'prop' }, + ], + }), + 475: withBorder('20,20', { + levelID: 475, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -9, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: -2, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + ], + }), + 476: withBorder('20,20', { + levelID: 476, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 1, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -5, y: 4, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + ], + }), + 477: withBorder('20,20', { + levelID: 477, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + { x: 7, y: 2, kind: 'prop' }, + { x: 7, y: 0, kind: 'prop' }, + ], + }), + 478: withBorder('20,20', { + levelID: 478, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + ], + }), + 479: withBorder('20,20', { + levelID: 479, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + ], + }), + 480: withBorder('20,20', { + levelID: 480, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 9, kind: 'player', playerDirection: Direction.West }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: -1, y: -6, kind: 'prop' }, + { x: 1, y: -6, kind: 'prop' }, + { x: 0, y: -7, kind: 'prop' }, + ], + }), + 481: withBorder('20,20', { + levelID: 481, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -8, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 4, kind: 'prop' }, + ], + }), + 482: withBorder('20,20', { + levelID: 482, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 7, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop' }, + ], + }), + 483: withBorder('20,20', { + levelID: 483, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: 8, y: 7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 6, y: 4, kind: 'prop_decor' }, + ], + }), + 484: withBorder('20,20', { + levelID: 484, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 485: withBorder('20,20', { + levelID: 485, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 4, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 486: withBorder('20,20', { + levelID: 486, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -4, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 0, kind: 'prop_decor' }, + { x: 2, y: 4, kind: 'prop_decor' }, + { x: -4, y: 4, kind: 'prop_decor' }, + { x: -4, y: -4, kind: 'prop_decor' }, + { x: 6, y: -4, kind: 'prop_decor' }, + ], + }), + 487: withBorder('20,20', { + levelID: 487, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -5, kind: 'player', playerDirection: Direction.South }, + { x: -1, y: 5, kind: 'prop' }, + ], + }), + 488: withBorder('20,20', { + levelID: 488, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: -5, kind: 'prop' }, + ], + }), + 489: withBorder('20,20', { + levelID: 489, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -9, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 9, kind: 'prop' }, + ], + }), + 490: withBorder('20,20', { + levelID: 490, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: -1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 7, y: 2, kind: 'prop' }, + ], + }), + 491: withBorder('20,20', { + levelID: 491, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -2, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + ], + }), + 492: withBorder('20,20', { + levelID: 492, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 9, kind: 'prop' }, + { x: -2, y: 7, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + ], + }), + 493: withBorder('20,20', { + levelID: 493, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + ], + }), + 494: withBorder('20,20', { + levelID: 494, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -7, y: -1, kind: 'prop' }, + ], + }), + 495: withBorder('20,20', { + levelID: 495, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 5, kind: 'prop' }, + { x: 6, y: -5, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + ], + }), + 496: withBorder('20,20', { + levelID: 496, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 6, kind: 'prop' }, + ], + }), + 497: withBorder('20,20', { + levelID: 497, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 1, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 1, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: -5, y: 6, kind: 'prop' }, + { x: -6, y: 7, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 5, y: -4, kind: 'prop' }, + { x: 6, y: -5, kind: 'prop' }, + ], + }), + 498: withBorder('20,20', { + levelID: 498, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + ], + }), + 499: withBorder('20,20', { + levelID: 499, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: 8, kind: 'prop' }, + { x: -7, y: 5, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -7, y: -1, kind: 'prop' }, + { x: 6, y: 8, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 6, y: -4, kind: 'prop' }, + ], + }), + 500: withBorder('25,25', { + levelID: 500, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: -1, kind: 'player', playerDirection: Direction.South }, + { x: -10, y: -11, kind: 'prop' }, + { x: 0, y: -11, kind: 'prop' }, + { x: -6, y: -7, kind: 'prop' }, + { x: 0, y: -7, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: -10, y: -1, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 10, y: -1, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 6, y: 5, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + { x: 10, y: 9, kind: 'prop' }, + ], + }), + 501: withBorder('20,20', { + levelID: 501, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: -1, kind: 'prop' }, + { x: -6, y: -5, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + ], + }), + 502: withBorder('20,20', { + levelID: 502, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: 1, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -3, y: 3, kind: 'prop_decor' }, + { x: -2, y: 6, kind: 'prop_decor' }, + { x: -1, y: 8, kind: 'prop_decor' }, + { x: 0, y: 9, kind: 'prop_decor' }, + ], + }), + 503: withBorder('20,20', { + levelID: 503, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 6, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: 1, y: 0, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 0, kind: 'prop_decor' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + ], + }), + 504: withBorder('20,20', { + levelID: 504, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 1, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: 8, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop_decor' }, + ], + }), + 505: withBorder('20,20', { + levelID: 505, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 7, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 5, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 2, y: 3, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + ], + }), + 506: withBorder('20,20', { + levelID: 506, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: -1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 3, y: 6, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop_decor' }, + ], + }), + 507: withBorder('20,20', { + levelID: 507, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 7, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop_decor' }, + ], + }), + 508: withBorder('20,20', { + levelID: 508, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: -1, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + { x: -6, y: -4, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 5, y: -4, kind: 'prop' }, + ], + }), + 509: withBorder('20,20', { + levelID: 509, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 3, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 510: withBorder('20,20', { + levelID: 510, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 5, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -7, y: -3, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 8, y: -3, kind: 'prop' }, + ], + }), + 511: withBorder('20,20', { + levelID: 511, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: -3, y: 5, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + ], + }), + 512: withBorder('20,20', { + levelID: 512, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -7, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: 8, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + ], + }), + 513: withBorder('20,20', { + levelID: 513, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: 1, kind: 'vehicle', vehicleDirection: Direction.South }, + { x: -3, y: 3, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + ], + }), + 514: withBorder('20,20', { + levelID: 514, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: -2, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -7, y: -3, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop_decor' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + ], + }), + 515: withBorder('20,20', { + levelID: 515, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 8, kind: 'player', playerDirection: Direction.South }, + { x: 0, y: 7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 0, y: -3, kind: 'prop_decor' }, + { x: -8, y: 1, kind: 'prop_decor' }, + { x: -4, y: 1, kind: 'prop_decor' }, + { x: -6, y: -1, kind: 'prop_decor' }, + { x: -2, y: -1, kind: 'prop_decor' }, + { x: -4, y: -3, kind: 'prop_decor' }, + { x: 8, y: 1, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + { x: 6, y: -1, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + { x: 4, y: -3, kind: 'prop_decor' }, + ], + }), + 516: withBorder('20,20', { + levelID: 516, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 3, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -2, y: 3, kind: 'prop_decor' }, + { x: -2, y: 2, kind: 'prop_decor' }, + { x: -1, y: 2, kind: 'prop_decor' }, + { x: -1, y: 1, kind: 'prop_decor' }, + { x: 0, y: 1, kind: 'prop_decor' }, + { x: 0, y: 0, kind: 'prop_decor' }, + { x: 1, y: 2, kind: 'prop_decor' }, + { x: 1, y: 1, kind: 'prop_decor' }, + { x: 1, y: 0, kind: 'prop_decor' }, + { x: 2, y: 0, kind: 'prop_decor' }, + { x: 2, y: 2, kind: 'prop_decor' }, + { x: 2, y: 1, kind: 'prop_decor' }, + { x: 3, y: 2, kind: 'prop_decor' }, + { x: 3, y: 1, kind: 'prop_decor' }, + { x: 3, y: 0, kind: 'prop_decor' }, + { x: 4, y: 1, kind: 'prop_decor' }, + ], + }), + 517: withBorder('20,20', { + levelID: 517, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -5, y: -1, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + ], + }), + 518: withBorder('20,20', { + levelID: 518, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + ], + }), + 519: withBorder('20,20', { + levelID: 519, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: -1, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: 1, y: 1, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 6, y: 2, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: 10, y: 2, kind: 'prop' }, + { x: 10, y: -2, kind: 'prop' }, + ], + }), + 520: withBorder('20,20', { + levelID: 520, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: 3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -3, y: -1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -3, y: -7, kind: 'prop' }, + { x: 1, y: -7, kind: 'prop' }, + { x: -2, y: -9, kind: 'prop' }, + ], + }), + 521: withBorder('20,20', { + levelID: 521, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: -6, y: -2, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + ], + }), + 522: withBorder('20,20', { + levelID: 522, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: -1, y: 10, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + ], + }), + 523: withBorder('20,20', { + levelID: 523, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -4, y: 3, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 5, y: -7, kind: 'prop' }, + { x: 6, y: -6, kind: 'prop' }, + ], + }), + 524: withBorder('20,20', { + levelID: 524, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 9, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: 8, y: 4, kind: 'prop' }, + { x: 10, y: 4, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: 9, y: 1, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + { x: -7, y: -5, kind: 'prop' }, + ], + }), + 525: withBorder('20,20', { + levelID: 525, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 8, y: 6, kind: 'prop' }, + ], + }), + 526: withBorder('20,20', { + levelID: 526, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: 2, y: 0, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 6, y: 6, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + ], + }), + 527: withBorder('20,20', { + levelID: 527, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.East }, + { x: -7, y: -7, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 3, kind: 'prop' }, + { x: -1, y: -1, kind: 'prop' }, + { x: -4, y: -6, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop_decor' }, + { x: 2, y: -5, kind: 'prop_decor' }, + { x: 8, y: -4, kind: 'prop_decor' }, + ], + }), + 528: withBorder('20,20', { + levelID: 528, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + ], + }), + 529: withBorder('20,20', { + levelID: 529, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -7, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: -3, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 4, y: 8, kind: 'prop' }, + ], + }), + 530: withBorder('20,20', { + levelID: 530, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 6, y: 6, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + ], + }), + 531: withBorder('20,20', { + levelID: 531, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -2, y: -2, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -8, y: -1, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + ], + }), + 532: withBorder('30,20', { + levelID: 532, + boundary: { x: 30, y: 20 }, + spawns: [ + { x: -10, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: -6, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + { x: 10, y: 4, kind: 'prop' }, + ], + }), + 533: withBorder('20,20', { + levelID: 533, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 8, kind: 'prop_decor' }, + { x: -7, y: 3, kind: 'prop_decor' }, + { x: 0, y: 2, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + { x: -3, y: -4, kind: 'prop_decor' }, + { x: 2, y: -3, kind: 'prop_decor' }, + ], + }), + 534: withBorder('20,20', { + levelID: 534, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -1, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop_decor' }, + { x: -1, y: -2, kind: 'prop_decor' }, + { x: 0, y: -3, kind: 'prop_decor' }, + { x: 1, y: -2, kind: 'prop_decor' }, + { x: 2, y: -1, kind: 'prop_decor' }, + ], + }), + 535: withBorder('20,20', { + levelID: 535, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 7, kind: 'prop' }, + { x: 1, y: 7, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 7, y: 0, kind: 'prop' }, + { x: 7, y: -1, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 1, y: -6, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + ], + }), + 536: withBorder('20,20', { + levelID: 536, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -5, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: -1, y: -5, kind: 'prop' }, + { x: -1, y: -6, kind: 'prop' }, + ], + }), + 537: withBorder('20,20', { + levelID: 537, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -5, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -5, kind: 'prop' }, + { x: -4, y: -5, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 4, y: -5, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + ], + }), + 538: withBorder('20,20', { + levelID: 538, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -5, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: -1, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -4, y: -5, kind: 'prop_decor' }, + { x: -4, y: -1, kind: 'prop_decor' }, + { x: -2, y: -3, kind: 'prop_decor' }, + { x: -1, y: -3, kind: 'prop_decor' }, + { x: -1, y: -5, kind: 'prop_decor' }, + ], + }), + 539: withBorder('20,20', { + levelID: 539, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: -3, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 6, y: 3, kind: 'prop' }, + { x: 7, y: -3, kind: 'prop' }, + { x: 4, y: -6, kind: 'prop' }, + ], + }), + 540: withBorder('20,20', { + levelID: 540, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -6, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: -5, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -1, y: 4, kind: 'prop' }, + { x: -1, y: 8, kind: 'prop' }, + { x: 3, y: 8, kind: 'prop' }, + ], + }), + 541: withBorder('20,20', { + levelID: 541, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 9, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: 8, y: 2, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: 7, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + ], + }), + 542: withBorder('20,20', { + levelID: 542, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: 7, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: 3, y: 3, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 0, y: 1, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: -7, y: -4, kind: 'prop' }, + ], + }), + 543: withBorder('20,20', { + levelID: 543, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: -3, kind: 'vehicle', vehicleDirection: Direction.East }, + { x: -5, y: 6, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -3, y: 2, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + ], + }), + 544: withBorder('20,20', { + levelID: 544, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -9, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: -3, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: 7, y: 3, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + ], + }), + 545: withBorder('20,30', { + levelID: 545, + boundary: { x: 20, y: 30 }, + spawns: [ + { x: -8, y: -10, kind: 'player', playerDirection: Direction.North }, + { x: 8, y: -10, kind: 'prop' }, + { x: -6, y: -8, kind: 'prop' }, + { x: 6, y: -8, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: 0, y: 10, kind: 'prop' }, + ], + }), + 546: withBorder('20,20', { + levelID: 546, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: -1, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: 0, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + ], + }), + 547: withBorder('20,20', { + levelID: 547, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: 8, kind: 'prop' }, + { x: -6, y: 8, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + { x: 8, y: -6, kind: 'prop' }, + ], + }), + 548: withBorder('20,20', { + levelID: 548, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 2, kind: 'prop' }, + { x: -5, y: 6, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + ], + }), + 549: withBorder('20,20', { + levelID: 549, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -6, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -6, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -8, y: 2, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + ], + }), + 550: withBorder('20,20', { + levelID: 550, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -7, kind: 'prop' }, + { x: 2, y: -7, kind: 'prop' }, + { x: -4, y: -5, kind: 'prop' }, + { x: 4, y: -5, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: 8, y: 5, kind: 'prop' }, + { x: -8, y: 5, kind: 'prop' }, + ], + }), + 551: withBorder('20,20', { + levelID: 551, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 5, y: -2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + ], + }), + 552: withBorder('20,20', { + levelID: 552, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 8, y: -8, kind: 'player', playerDirection: Direction.West }, + { x: -2, y: -2, kind: 'prop' }, + ], + }), + 553: withBorder('20,20', { + levelID: 553, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -3, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 7, kind: 'prop' }, + { x: 6, y: 7, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 6, y: 2, kind: 'prop' }, + { x: -1, y: 0, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: -6, y: -5, kind: 'prop' }, + { x: -6, y: -7, kind: 'prop' }, + { x: -8, y: -7, kind: 'prop' }, + ], + }), + 554: withBorder('20,20', { + levelID: 554, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 9, y: -7, kind: 'player', playerDirection: Direction.South }, + { x: 3, y: 11, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: -4, y: 5, kind: 'prop' }, + { x: 4, y: 7, kind: 'prop' }, + { x: -2, y: 7, kind: 'prop' }, + { x: 4, y: 9, kind: 'prop' }, + { x: 0, y: 9, kind: 'prop' }, + ], + }), + 555: withBorder('20,20', { + levelID: 555, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 7, kind: 'prop' }, + { x: 0, y: -7, kind: 'prop' }, + { x: -7, y: 0, kind: 'prop' }, + { x: 7, y: 0, kind: 'prop' }, + { x: -2, y: 2, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -4, y: 6, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -6, y: -3, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 6, y: 5, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + ], + }), + 556: withBorder('20,20', { + levelID: 556, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 9, kind: 'prop' }, + { x: 0, y: -9, kind: 'prop' }, + { x: 9, y: 0, kind: 'prop' }, + { x: -9, y: 0, kind: 'prop' }, + { x: 1, y: 8, kind: 'prop' }, + { x: -1, y: 8, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop' }, + { x: -8, y: -1, kind: 'prop' }, + { x: -8, y: 1, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -6, y: 2, kind: 'prop' }, + { x: 8, y: -1, kind: 'prop' }, + { x: 8, y: 1, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: 6, y: 2, kind: 'prop' }, + { x: 1, y: -8, kind: 'prop' }, + { x: -1, y: -8, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + ], + }), + 557: withBorder('20,20', { + levelID: 557, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -4, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: -4, kind: 'prop' }, + { x: 6, y: -4, kind: 'prop' }, + { x: -6, y: 8, kind: 'prop' }, + { x: 6, y: 8, kind: 'prop' }, + { x: -2, y: 8, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + ], + }), + 558: withBorder('20,20', { + levelID: 558, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: -6, y: 6, kind: 'prop' }, + { x: -6, y: -6, kind: 'prop' }, + { x: 6, y: 6, kind: 'prop' }, + { x: 6, y: -6, kind: 'prop' }, + { x: 6, y: -2, kind: 'prop' }, + { x: -8, y: 0, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + { x: -8, y: -8, kind: 'prop' }, + { x: 0, y: -8, kind: 'prop' }, + { x: -4, y: -8, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + ], + }), + 559: withBorder('20,20', { + levelID: 559, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: 6, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 4, y: -5, kind: 'prop' }, + { x: -10, y: 5, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -10, y: -5, kind: 'prop' }, + ], + }), + 560: withBorder('20,20', { + levelID: 560, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 1, y: 6, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 6, kind: 'prop' }, + { x: 7, y: 6, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + { x: 7, y: -6, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: -1, y: 2, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: -3, y: -4, kind: 'prop' }, + { x: 5, y: -4, kind: 'prop' }, + ], + }), + 561: withBorder('20,20', { + levelID: 561, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 2, kind: 'player', playerDirection: Direction.North }, + { x: -8, y: -4, kind: 'prop' }, + ], + }), + 562: withBorder('20,20', { + levelID: 562, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 4, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: 4, y: -7, kind: 'prop' }, + { x: -2, y: -7, kind: 'prop' }, + { x: -8, y: -7, kind: 'prop' }, + { x: -8, y: 5, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + { x: -2, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + ], + }), + 563: withBorder('20,20', { + levelID: 563, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 7, y: -7, kind: 'player', playerDirection: Direction.West }, + { x: 7, y: -6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 1, y: 2, kind: 'prop_decor' }, + ], + }), + 564: withBorder('20,20', { + levelID: 564, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 0, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -6, y: 3, kind: 'prop_decor' }, + { x: 3, y: 6, kind: 'prop_decor' }, + { x: 6, y: -3, kind: 'prop_decor' }, + { x: -3, y: -6, kind: 'prop_decor' }, + ], + }), + 565: withBorder('20,20', { + levelID: 565, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 7, y: 0, kind: 'prop' }, + { x: 7, y: 2, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: -3, y: 5, kind: 'prop' }, + { x: -3, y: 8, kind: 'prop' }, + { x: 0, y: 8, kind: 'prop' }, + { x: -9, y: 0, kind: 'prop' }, + { x: -9, y: -4, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + { x: 5, y: -5, kind: 'prop' }, + { x: 5, y: -10, kind: 'prop' }, + { x: 0, y: -10, kind: 'prop' }, + ], + }), + 566: withBorder('25,25', { + levelID: 566, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -10, y: 0, kind: 'prop' }, + { x: -10, y: 3, kind: 'prop' }, + { x: -7, y: 0, kind: 'prop' }, + { x: -7, y: 3, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: 10, y: 0, kind: 'prop' }, + { x: 10, y: -3, kind: 'prop' }, + { x: 7, y: 0, kind: 'prop' }, + { x: 7, y: -3, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + { x: 0, y: 10, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: 10, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 0, y: -7, kind: 'prop' }, + { x: 0, y: -10, kind: 'prop' }, + { x: -3, y: -7, kind: 'prop' }, + { x: -3, y: -10, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + ], + }), + 567: withBorder('25,25', { + levelID: 567, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.East }, + { x: -8, y: 4, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -4, y: 2, kind: 'prop' }, + { x: 8, y: -4, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 4, y: 8, kind: 'prop' }, + { x: 3, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: -4, y: -8, kind: 'prop' }, + { x: -3, y: -6, kind: 'prop' }, + { x: -2, y: -4, kind: 'prop' }, + ], + }), + 568: withBorder('25,25', { + levelID: 568, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 10, kind: 'prop' }, + { x: -2, y: 8, kind: 'prop' }, + { x: -1, y: 6, kind: 'prop' }, + { x: 3, y: 10, kind: 'prop' }, + { x: 2, y: 8, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: -10, y: 3, kind: 'prop' }, + { x: -8, y: 2, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + { x: 10, y: 3, kind: 'prop' }, + { x: 8, y: 2, kind: 'prop' }, + { x: 6, y: 1, kind: 'prop' }, + { x: -3, y: -10, kind: 'prop' }, + { x: -2, y: -8, kind: 'prop' }, + { x: -1, y: -6, kind: 'prop' }, + { x: 3, y: -10, kind: 'prop' }, + { x: 2, y: -8, kind: 'prop' }, + { x: 1, y: -6, kind: 'prop' }, + { x: -10, y: -3, kind: 'prop' }, + { x: -8, y: -2, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: 10, y: -3, kind: 'prop' }, + { x: 8, y: -2, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + ], + }), + 569: withBorder('25,25', { + levelID: 569, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: -7, y: 2, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -3, y: 7, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 7, y: 3, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: -8, y: 0, kind: 'prop' }, + { x: 0, y: 8, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + { x: 3, y: -4, kind: 'prop' }, + { x: 3, y: -7, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: -2, y: -7, kind: 'prop' }, + { x: -3, y: -5, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -7, y: -3, kind: 'prop' }, + { x: -5, y: -2, kind: 'prop' }, + { x: -3, y: -1, kind: 'prop' }, + { x: 8, y: 0, kind: 'prop' }, + { x: 0, y: -8, kind: 'prop' }, + ], + }), + 570: withBorder('25,25', { + levelID: 570, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 3, y: 8, kind: 'prop' }, + { x: -8, y: 3, kind: 'prop' }, + { x: 8, y: -3, kind: 'prop' }, + { x: -3, y: -8, kind: 'prop' }, + ], + }), + 571: withBorder('25,25', { + levelID: 571, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 0, y: 7, kind: 'prop' }, + { x: 5, y: 0, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: -9, y: 0, kind: 'prop' }, + ], + }), + 572: withBorder('25,25', { + levelID: 572, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 1, y: 2, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: -3, y: 4, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + { x: -5, y: 0, kind: 'prop' }, + { x: -3, y: 1, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 5, y: -6, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + ], + }), + 573: withBorder('25,25', { + levelID: 573, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.South }, + { x: 4, y: 5, kind: 'prop' }, + { x: -7, y: 6, kind: 'prop' }, + { x: -8, y: -9, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + ], + }), + 574: withBorder('25,25', { + levelID: 574, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: -1, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 2, y: 6, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -9, y: 3, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: -4, y: -8, kind: 'prop' }, + { x: -4, y: -12, kind: 'prop' }, + ], + }), + 575: withBorder('30,30', { + levelID: 575, + boundary: { x: 30, y: 30 }, + spawns: [ + { x: 3, y: 3, kind: 'player', playerDirection: Direction.East }, + { x: -9, y: 5, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + { x: 9, y: 5, kind: 'prop' }, + { x: -9, y: 1, kind: 'prop' }, + { x: -5, y: 1, kind: 'prop' }, + { x: -1, y: 1, kind: 'prop' }, + { x: 9, y: 1, kind: 'prop' }, + { x: 5, y: 1, kind: 'prop' }, + { x: 7, y: 1, kind: 'prop' }, + { x: 1, y: 12, kind: 'prop' }, + { x: 1, y: 9, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 1, y: -2, kind: 'prop' }, + { x: 1, y: -7, kind: 'prop' }, + { x: 1, y: -12, kind: 'prop' }, + { x: 5, y: 12, kind: 'prop' }, + { x: 5, y: 9, kind: 'prop' }, + { x: 5, y: 6, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 5, y: -7, kind: 'prop' }, + { x: 5, y: -12, kind: 'prop' }, + ], + }), + 576: withBorder('25,25', { + levelID: 576, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 4, y: -5, kind: 'player', playerDirection: Direction.East }, + { x: 4, y: 6, kind: 'prop' }, + { x: 5, y: 5, kind: 'prop' }, + { x: -3, y: 7, kind: 'prop' }, + { x: -5, y: 5, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + ], + }), + 577: withBorder('25,25', { + levelID: 577, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 2, y: 6, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 8, kind: 'prop' }, + { x: 5, y: 8, kind: 'prop' }, + { x: 10, y: 4, kind: 'prop' }, + { x: 10, y: 1, kind: 'prop' }, + { x: 7, y: 1, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 4, y: -6, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + ], + }), + 578: withBorder('25,25', { + levelID: 578, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 4, y: 4, kind: 'player', playerDirection: Direction.West }, + { x: 10, y: -3, kind: 'prop' }, + { x: -1, y: -7, kind: 'prop' }, + { x: -3, y: 0, kind: 'prop' }, + { x: 0, y: 0, kind: 'prop' }, + ], + }), + 579: withBorder('25,25', { + levelID: 579, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.East }, + { x: -3, y: 9, kind: 'prop' }, + { x: -2, y: 7, kind: 'prop' }, + { x: -1, y: -9, kind: 'prop' }, + { x: 3, y: 9, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 1, y: -9, kind: 'prop' }, + { x: -9, y: -1, kind: 'prop' }, + { x: -9, y: 3, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -7, y: 0, kind: 'prop' }, + { x: 5, y: 4, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + { x: 7, y: 5, kind: 'prop' }, + { x: 7, y: -3, kind: 'prop' }, + ], + }), + 580: withBorder('25,25', { + levelID: 580, + boundary: { x: 25, y: 25 }, + spawns: [ + { x: -5, y: 3, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 4, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: 1, y: 6, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: 1, y: -6, kind: 'prop' }, + { x: -1, y: -7, kind: 'prop' }, + { x: -3, y: -8, kind: 'prop' }, + { x: -6, y: -3, kind: 'prop' }, + { x: -7, y: -1, kind: 'prop' }, + { x: -8, y: 1, kind: 'prop' }, + ], + }), + 581: withBorder('20,20', { + levelID: 581, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 3, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: 3, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 3, y: 10, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: -10, y: 0, kind: 'prop' }, + { x: -1, y: -10, kind: 'prop' }, + ], + }), + 582: withBorder('20,20', { + levelID: 582, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: -2, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 2, y: 6, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: -3, y: 7, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop_decor' }, + ], + }), + 583: withBorder('20,20', { + levelID: 583, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: -5, kind: 'player', playerDirection: Direction.West }, + { x: -4, y: -5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: -5, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: 2, y: -1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + ], + }), + 584: withBorder('20,20', { + levelID: 584, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 5, y: -3, kind: 'player', playerDirection: Direction.West }, + { x: 5, y: -3, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: 5, y: -2, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 3, y: 0, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 0, y: 3, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: -3, y: 3, kind: 'prop' }, + { x: -3, y: 6, kind: 'prop' }, + { x: -4, y: 6, kind: 'prop_decor' }, + ], + }), + 585: withBorder('20,20', { + levelID: 585, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -8, y: 8, kind: 'player', playerDirection: Direction.North }, + { x: -8, y: 3, kind: 'prop' }, + { x: -7, y: 2, kind: 'prop' }, + { x: -5, y: 2, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -3, y: -2, kind: 'prop' }, + { x: -3, y: -3, kind: 'prop' }, + { x: -1, y: -2, kind: 'prop' }, + { x: -1, y: -3, kind: 'prop' }, + { x: -1, y: -4, kind: 'prop' }, + { x: 0, y: -5, kind: 'prop' }, + { x: 0, y: -6, kind: 'prop' }, + { x: 0, y: -7, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + { x: 2, y: -7, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + ], + }), + 586: withBorder('20,20', { + levelID: 586, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 2, y: -2, kind: 'player', playerDirection: Direction.West }, + { x: 2, y: 8, kind: 'prop' }, + { x: 0, y: 6, kind: 'prop' }, + { x: 4, y: 6, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 8, y: -2, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + { x: 6, y: -1, kind: 'prop' }, + { x: 6, y: -3, kind: 'prop' }, + { x: -8, y: 2, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: -6, y: -1, kind: 'prop' }, + { x: -4, y: 4, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -2, y: -8, kind: 'prop' }, + { x: -6, y: -6, kind: 'prop' }, + { x: 2, y: -6, kind: 'prop' }, + { x: -5, y: -4, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 587: withBorder('20,20', { + levelID: 587, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -3, y: -6, kind: 'player', playerDirection: Direction.North }, + { x: 5, y: 6, kind: 'prop' }, + { x: 5, y: 2, kind: 'prop' }, + { x: 5, y: -1, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + ], + }), + 588: withBorder('20,20', { + levelID: 588, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: 8, kind: 'player', playerDirection: Direction.East }, + { x: 0, y: 9, kind: 'prop' }, + { x: 0, y: 7, kind: 'prop' }, + { x: 2, y: 9, kind: 'prop' }, + { x: 2, y: 7, kind: 'prop' }, + { x: 1, y: 4, kind: 'prop' }, + { x: 1, y: 2, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 4, y: 0, kind: 'prop' }, + { x: 4, y: -2, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 3, y: -5, kind: 'prop' }, + { x: 5, y: -3, kind: 'prop' }, + { x: 5, y: -5, kind: 'prop' }, + ], + }), + 589: withBorder('20,20', { + levelID: 589, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 5, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 6, kind: 'prop' }, + { x: 0, y: 4, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 6, y: 0, kind: 'prop' }, + { x: -2, y: -6, kind: 'prop' }, + { x: -4, y: -4, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: -6, y: 4, kind: 'prop' }, + ], + }), + 590: withBorder('20,20', { + levelID: 590, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -4, y: 5, kind: 'player', playerDirection: Direction.North }, + { x: -3, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 5, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 2, y: 5, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: 4, y: 3, kind: 'prop' }, + { x: 4, y: 1, kind: 'prop' }, + { x: 4, y: -1, kind: 'prop' }, + { x: 4, y: -3, kind: 'prop' }, + { x: 2, y: -3, kind: 'prop' }, + { x: 0, y: -3, kind: 'prop' }, + { x: -2, y: -3, kind: 'prop' }, + { x: -4, y: -3, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: -4, y: 3, kind: 'prop' }, + { x: -2, y: 6, kind: 'prop_decor' }, + { x: -2, y: 7, kind: 'prop_decor' }, + { x: -1, y: 7, kind: 'prop_decor' }, + { x: -1, y: 8, kind: 'prop_decor' }, + { x: 5, y: 2, kind: 'prop_decor' }, + { x: 6, y: 2, kind: 'prop_decor' }, + { x: 6, y: 1, kind: 'prop_decor' }, + { x: 7, y: 1, kind: 'prop_decor' }, + { x: 0, y: -4, kind: 'prop_decor' }, + { x: 0, y: -5, kind: 'prop_decor' }, + { x: -1, y: -5, kind: 'prop_decor' }, + { x: -1, y: -6, kind: 'prop_decor' }, + { x: -5, y: 2, kind: 'prop_decor' }, + { x: -6, y: 2, kind: 'prop_decor' }, + { x: -6, y: 3, kind: 'prop_decor' }, + { x: -7, y: 3, kind: 'prop_decor' }, + ], + }), + 591: withBorder('20,20', { + levelID: 591, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -7, y: 0, kind: 'player', playerDirection: Direction.West }, + { x: -7, y: 0, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -7, y: 4, kind: 'prop_decor' }, + { x: -7, y: 3, kind: 'prop_decor' }, + { x: -7, y: 2, kind: 'prop_decor' }, + { x: -7, y: 1, kind: 'prop_decor' }, + { x: -7, y: -4, kind: 'prop_decor' }, + { x: -7, y: -5, kind: 'prop_decor' }, + { x: -7, y: -6, kind: 'prop_decor' }, + { x: -7, y: -7, kind: 'prop_decor' }, + { x: -6, y: 8, kind: 'prop' }, + { x: -6, y: 7, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -6, y: -3, kind: 'prop' }, + { x: -6, y: -7, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + { x: 3, y: -3, kind: 'prop' }, + { x: 8, y: 8, kind: 'prop' }, + { x: 8, y: -7, kind: 'prop' }, + ], + }), + 592: withBorder('20,20', { + levelID: 592, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -1, y: 7, kind: 'player', playerDirection: Direction.East }, + { x: -10, y: 5, kind: 'prop' }, + { x: 0, y: 5, kind: 'prop' }, + { x: -8, y: 3, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: -6, y: 1, kind: 'prop' }, + { x: 2, y: 1, kind: 'prop' }, + { x: 3, y: -1, kind: 'prop' }, + { x: -4, y: -1, kind: 'prop' }, + ], + }), + 593: withBorder('20,20', { + levelID: 593, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: -2, y: -1, kind: 'player', playerDirection: Direction.North }, + { x: -2, y: -1, kind: 'vehicle', vehicleDirection: Direction.North }, + { x: -3, y: -1, kind: 'prop' }, + { x: 7, y: -1, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + { x: 6, y: 1, kind: 'prop' }, + { x: -5, y: 3, kind: 'prop' }, + { x: 5, y: 3, kind: 'prop' }, + { x: -6, y: 5, kind: 'prop' }, + { x: 4, y: 5, kind: 'prop' }, + { x: -7, y: 7, kind: 'prop' }, + { x: 3, y: 7, kind: 'prop' }, + ], + }), + 594: withBorder('20,20', { + levelID: 594, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: 4, y: 0, kind: 'prop' }, + { x: -2, y: 4, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: 0, y: -4, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: -4, kind: 'prop' }, + ], + }), + 595: withBorder('20,30', { + levelID: 595, + boundary: { x: 20, y: 30 }, + spawns: [ + { x: -2, y: 2, kind: 'player', playerDirection: Direction.East }, + { x: -5, y: 2, kind: 'prop' }, + { x: -5, y: -1, kind: 'prop' }, + { x: -2, y: 5, kind: 'prop' }, + { x: -2, y: -1, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: 0, y: -1, kind: 'prop' }, + { x: 0, y: 2, kind: 'prop' }, + { x: 1, y: 5, kind: 'prop' }, + { x: 1, y: 3, kind: 'prop' }, + { x: 1, y: 0, kind: 'prop' }, + { x: 1, y: -4, kind: 'prop' }, + ], + }), + 596: withBorder('20,20', { + levelID: 596, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 1, kind: 'player', playerDirection: Direction.North }, + { x: -1, y: 7, kind: 'prop' }, + { x: -1, y: 5, kind: 'prop' }, + { x: -1, y: 3, kind: 'prop' }, + { x: 1, y: -1, kind: 'prop' }, + { x: 1, y: -3, kind: 'prop' }, + { x: 1, y: -5, kind: 'prop' }, + { x: 1, y: -7, kind: 'prop' }, + { x: 1, y: -9, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -8, y: 0, kind: 'prop' }, + { x: 2, y: 2, kind: 'prop' }, + { x: 4, y: 2, kind: 'prop' }, + ], + }), + 597: withBorder('20,20', { + levelID: 597, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: Direction.North }, + { x: -5, y: 4, kind: 'prop' }, + { x: 3, y: 4, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: -5, y: -6, kind: 'prop' }, + ], + }), + 598: withBorder('20,20', { + levelID: 598, + boundary: { x: 20, y: 20 }, + spawns: [ + { x: 0, y: 4, kind: 'player', playerDirection: Direction.North }, + { x: 2, y: 6, kind: 'prop' }, + { x: 2, y: 4, kind: 'prop' }, + { x: 4, y: 4, kind: 'prop' }, + { x: 6, y: 4, kind: 'prop' }, + { x: 8, y: 2, kind: 'prop' }, + { x: 10, y: 2, kind: 'prop' }, + { x: 4, y: -4, kind: 'prop' }, + { x: 4, y: -6, kind: 'prop' }, + { x: 4, y: -8, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -4, y: 0, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -8, y: 0, kind: 'prop' }, + ], + }), + 599: withBorder('20,30', { + levelID: 599, + boundary: { x: 20, y: 30 }, + spawns: [ + { x: 6, y: -1, kind: 'player', playerDirection: Direction.East }, + { x: -10, y: 3, kind: 'prop' }, + { x: -10, y: 0, kind: 'prop' }, + { x: -10, y: -2, kind: 'prop' }, + { x: -10, y: -5, kind: 'prop' }, + { x: -6, y: 3, kind: 'prop' }, + { x: -6, y: 0, kind: 'prop' }, + { x: -6, y: -2, kind: 'prop' }, + { x: -6, y: -5, kind: 'prop' }, + { x: -2, y: 3, kind: 'prop' }, + { x: -2, y: 0, kind: 'prop' }, + { x: -2, y: -2, kind: 'prop' }, + { x: -2, y: -5, kind: 'prop' }, + { x: 2, y: 3, kind: 'prop' }, + { x: 2, y: 0, kind: 'prop' }, + { x: 2, y: -2, kind: 'prop' }, + { x: 2, y: -5, kind: 'prop' }, + { x: 3, y: 8, kind: 'prop' }, + { x: 9, y: 8, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 9, y: 5, kind: 'prop' }, + { x: 3, y: 2, kind: 'prop' }, + { x: 9, y: 2, kind: 'prop' }, + { x: 10, y: 1, kind: 'prop' }, + { x: 10, y: 0, kind: 'prop' }, + { x: 10, y: -1, kind: 'prop' }, + { x: 10, y: -2, kind: 'prop' }, + { x: 10, y: -3, kind: 'prop' }, + { x: 8, y: 1, kind: 'prop' }, + { x: 8, y: 0, kind: 'prop' }, + { x: 8, y: -2, kind: 'prop' }, + { x: 8, y: -3, kind: 'prop' }, + { x: 7, y: -2, kind: 'prop' }, + { x: 5, y: -2, kind: 'prop' }, + ], + }), + 600: withBorder('20,30', { + levelID: 600, + boundary: { x: 20, y: 30 }, + spawns: [ + { x: -4, y: 5, kind: 'player', playerDirection: Direction.West }, + { x: -3, y: 6, kind: 'vehicle', vehicleDirection: Direction.West }, + { x: -2, y: 7, kind: 'prop_decor' }, + { x: -2, y: 6, kind: 'prop_decor' }, + { x: -5, y: 0, kind: 'prop_decor' }, + { x: -6, y: 0, kind: 'prop_decor' }, + { x: -6, y: 1, kind: 'prop_decor' }, + { x: -7, y: 1, kind: 'prop_decor' }, + { x: -7, y: 2, kind: 'prop_decor' }, + { x: -8, y: 2, kind: 'prop_decor' }, + { x: -8, y: 3, kind: 'prop_decor' }, + { x: -9, y: 3, kind: 'prop_decor' }, + { x: 1, y: -3, kind: 'prop_decor' }, + { x: 1, y: -4, kind: 'prop_decor' }, + { x: 0, y: -4, kind: 'prop_decor' }, + { x: 0, y: -5, kind: 'prop_decor' }, + { x: -1, y: -5, kind: 'prop_decor' }, + { x: -1, y: -6, kind: 'prop_decor' }, + { x: 4, y: 3, kind: 'prop_decor' }, + { x: 5, y: 3, kind: 'prop_decor' }, + { x: 5, y: 2, kind: 'prop_decor' }, + { x: 6, y: 2, kind: 'prop_decor' }, + { x: 0, y: 5, kind: 'prop' }, + { x: 3, y: 5, kind: 'prop' }, + { x: 3, y: 1, kind: 'prop' }, + { x: 3, y: -2, kind: 'prop' }, + { x: 0, y: -2, kind: 'prop' }, + { x: -4, y: -2, kind: 'prop' }, + { x: -4, y: 1, kind: 'prop' }, + ], + }), +}; diff --git a/assets/scripts/level/levels-600.generated.ts.meta b/assets/scripts/level/levels-600.generated.ts.meta new file mode 100644 index 0000000..2dc932e --- /dev/null +++ b/assets/scripts/level/levels-600.generated.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "507007a3-8bd2-41d5-b962-44c38a653bbb", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/manager.meta b/assets/scripts/manager.meta new file mode 100644 index 0000000..10308fd --- /dev/null +++ b/assets/scripts/manager.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "f289d7c6-e9b4-45e2-9068-532f08608094", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/manager/GameManager.ts b/assets/scripts/manager/GameManager.ts new file mode 100644 index 0000000..7f11e84 --- /dev/null +++ b/assets/scripts/manager/GameManager.ts @@ -0,0 +1,388 @@ +import { _decorator, Component, Node, Vec3, Color, Graphics, UITransform, director } from 'cc'; +import { CELL_PIXEL } from '../AppBootstrap'; +import { + CELL_SIZE, CommonDefine, Direction, GameState, GridType, Skin, addDirection, +} from '../core/Define'; +import { EventManager, EventType } from '../core/EventManager'; +import { JsBridge } from '../bridge/JsBridge'; +import { getLevelConfig, hasLevel, registerLevel } from '../level/LevelRegistry'; +import { LevelConfig, SpawnConfig } from '../level/LevelTypes'; +import { PlayerController } from '../controller/PlayerController'; +import { VehicleController } from '../controller/VehicleController'; +import { PropController } from '../controller/PropController'; +import { VisualAssets } from '../visual/VisualAssets'; +import { SpawnKind } from '../level/LevelTypes'; + +const { ccclass, property } = _decorator; + +interface GridEntry { + type: GridType; + node: Node; +} + +@ccclass('GameManager') +export class GameManager extends Component { + static instance: GameManager | null = null; + + @property(Node) + mainLevelEntrance: Node | null = null; + + @property + initialLevelID = 1; + + playerSkin: Skin = Skin.Silu; + multMode = false; + multPlayerRole = ''; + gameState: GameState = GameState.Run; + isInputEnd = false; + uiStyle = 'default'; + curLevelID = 1; + + stepNum = 0; + stepA1Num = 0; + stepA2Num = 0; + stepA3Num = 0; + stepB1Num = 0; + stepB2Num = 0; + stepB3Num = 0; + + private creating = false; + private curLevel: Node | null = null; + private curConfig: LevelConfig | null = null; + private gridTypes = new Map(); + private gridTypesForProps = new Map(); + private groundCells = new Map(); + private borderCells = new Set(); + + onLoad() { + if (GameManager.instance && GameManager.instance !== this) { + this.destroy(); + return; + } + GameManager.instance = this; + } + + start() { + /* 关卡由 AppBootstrap 在就绪后加载 */ + } + + onDestroy() { + if (GameManager.instance === this) GameManager.instance = null; + } + + // --- 状态 --- + setGameState(s: GameState) { this.gameState = s; } + + initData() { + this.setGameState(GameState.Run); + this.stepNum = 0; + this.stepA1Num = this.stepA2Num = this.stepA3Num = 0; + this.stepB1Num = this.stepB2Num = this.stepB3Num = 0; + this.callSetIsInputEnd(0); + } + + jsCallCheck(n: number): boolean { + if (this.isInputEnd || this.gameState !== GameState.Run) return false; + this.stepNum += Math.abs(n); + return true; + } + + jsCallCheckMultMode(n: number, name: string): boolean { + if (this.isInputEnd || this.gameState !== GameState.Run) return false; + const a = Math.abs(n); + switch (name) { + case 'PlayerA1': + case 'VehicleA1': this.stepA1Num += a; break; + case 'PlayerA2': + case 'VehicleA2': this.stepA2Num += a; break; + case 'PlayerA3': + case 'VehicleA3': this.stepA3Num += a; break; + case 'PlayerB1': + case 'VehicleB1': this.stepB1Num += a; break; + case 'PlayerB2': + case 'VehicleB2': this.stepB2Num += a; break; + case 'PlayerB3': + case 'VehicleB3': this.stepB3Num += a; break; + default: break; + } + return true; + } + + callSetIsInputEnd(v: number) { + this.isInputEnd = v !== 0; + if (this.isInputEnd) EventManager.dispatch(EventType.InputEnd, this.gameState); + } + + getRelativePosition(given: Direction, input: Direction): string { + const rel = (((input - given) % 4) + 4) % 4; + return ['front', 'right', 'back', 'left'][rel]; + } + + // --- 坐标 --- + cellKey(x: number, y: number) { return `${x},${y}`; } + + cellToWorld(cell: Vec3): Vec3 { + return new Vec3(cell.x * CELL_PIXEL, cell.y * CELL_PIXEL, 0); + } + + worldToCell(world: Vec3): Vec3 { + return new Vec3(Math.round(world.x / CELL_PIXEL), Math.round(world.y / CELL_PIXEL), 0); + } + + nextGridPosition(pos: Vec3, dir: Direction): Vec3 { + const c = this.worldToCell(pos); + switch (dir) { + case Direction.North: c.x += 1; break; + case Direction.South: c.x -= 1; break; + case Direction.East: c.y -= 1; break; + case Direction.West: c.y += 1; break; + } + return this.cellToWorld(c); + } + + calculateGridType(pos: Vec3): GridType { + const cell = this.worldToCell(pos); + const key = this.cellKey(cell.x, cell.y); + const dyn = this.gridTypes.get(key); + if (dyn) return dyn.type; + if (this.borderCells.has(key)) return GridType.Block; + const g = this.groundCells.get(key); + if (g === CommonDefine.BlockBase) return GridType.Across; + if (g === CommonDefine.BlockJump) return GridType.Jump; + const b = this.curConfig?.boundary; + if (b && (Math.abs(cell.x) >= b.x || Math.abs(cell.y) >= b.y)) return GridType.Boundary; + return GridType.None; + } + + calculateNextGridType(pos: Vec3, dir: Direction): GridType { + return this.calculateGridType(this.nextGridPosition(pos, dir)); + } + + calculateLastGridType(pos: Vec3, dir: Direction): GridType { + return this.calculateGridType(this.nextGridPosition(pos, addDirection(dir, 2))); + } + + getGameObject(pos: Vec3): Node | null { + const key = this.cellKey(this.worldToCell(pos).x, this.worldToCell(pos).y); + return this.gridTypes.get(key)?.node ?? null; + } + + addObj(pos: Vec3, type: GridType, node: Node) { + const c = this.worldToCell(pos); + this.gridTypes.set(this.cellKey(c.x, c.y), { type, node }); + } + + removeObj(pos: Vec3) { + const c = this.worldToCell(pos); + this.gridTypes.delete(this.cellKey(c.x, c.y)); + } + + removeProp(pos: Vec3) { + const c = this.worldToCell(pos); + this.gridTypesForProps.delete(this.cellKey(c.x, c.y)); + } + + countProp(): number { + if (!this.curLevel) return 0; + return this.curLevel.children.filter((c) => c.isValid && c.getComponent(PropController)).length; + } + + getCurLevel() { return this.curConfig; } + + findNodeByName(name: string): Node | null { + const scene = director.getScene(); + if (!scene) return null; + return this.findInTree(scene, name); + } + + private findInTree(root: Node, name: string): Node | null { + if (root.name === name) return root; + for (const ch of root.children) { + const f = this.findInTree(ch, name); + if (f) return f; + } + return null; + } + + // --- 关卡 --- + destroyCurLevel() { + if (this.curLevel?.isValid) this.curLevel.destroy(); + this.curLevel = null; + this.gridTypes.clear(); + this.gridTypesForProps.clear(); + this.groundCells.clear(); + this.borderCells.clear(); + } + + switchLevel(levelID: number) { + if (!hasLevel(levelID) || this.creating) return; + this.multMode = levelID >= 999000; + this.destroyCurLevel(); + this.createNewLevel(levelID); + } + + async createNewLevel(levelID: number) { + if (this.creating) return; + this.creating = true; + const config = getLevelConfig(levelID); + if (!config || !this.mainLevelEntrance) { + this.creating = false; + return; + } + this.curLevelID = levelID; + this.curConfig = config; + + const levelRoot = new Node(`Level_${levelID}`); + levelRoot.parent = this.mainLevelEntrance; + this.curLevel = levelRoot; + + if (config.ground) { + for (const [k, v] of Object.entries(config.ground)) this.groundCells.set(k, v); + } + if (config.border) { + for (const k of Object.keys(config.border)) this.borderCells.add(k); + } + + this.drawGridDebug(levelRoot, config); + + const spawned: Node[] = []; + for (const s of config.spawns) { + const node = this.spawnEntity(levelRoot, s); + if (node) spawned.push(node); + } + + this.initGridTypes(); + this.initData(); + EventManager.dispatch(EventType.LevelInit); + this.externalCallLevelInfo(spawned); + this.creating = false; + } + + resetLevel() { + this.destroyCurLevel(); + this.createNewLevel(this.curLevelID); + } + + startMultPlay(role: string, coinsJson: string) { + this.multMode = true; + this.multPlayerRole = role; + let coins: string[] = []; + try { + coins = JSON.parse(coinsJson) as string[]; + } catch (e) { + console.error('StartMultPlay coins parse', e); + } + const base = getLevelConfig(999001); + if (!base) return; + const extra = coins.map((s) => { + const [xs, ys] = s.split(','); + return { x: parseInt(xs, 10), y: parseInt(ys, 10), kind: 'prop' as const }; + }); + registerLevel({ ...base, spawns: [...base.spawns, ...extra] }); + this.switchLevel(999001); + } + + changeUIStyle(style: string) { + this.uiStyle = style; + } + + callMute() { /* 可由 UIMain 实现 */ } + callUnmute() { /* 可由 UIMain 实现 */ } + + private initGridTypes() { + this.gridTypes.clear(); + this.gridTypesForProps.clear(); + if (!this.curLevel) return; + const vehicles = this.curLevel.children.filter((c) => c.name.includes('Vehicle')); + for (const v of vehicles) { + const c = this.worldToCell(v.worldPosition); + this.gridTypes.set(this.cellKey(c.x, c.y), { type: GridType.Ride, node: v }); + } + const props = this.curLevel.children.filter((c) => c.getComponent(PropController)); + for (const p of props) { + const c = this.worldToCell(p.worldPosition); + this.gridTypesForProps.set(this.cellKey(c.x, c.y), { + type: this.calculateGridType(p.worldPosition), + node: p, + }); + } + } + + private spawnEntity(parent: Node, s: SpawnConfig): Node | null { + const pos = this.cellToWorld(new Vec3(s.x, s.y, 0)); + let node: Node; + if (s.kind === 'player') { + node = new Node(s.x === -9 ? 'PlayerA1' : s.x === 9 ? 'PlayerB1' : 'Player'); + node.addComponent(PlayerController); + const pc = node.getComponent(PlayerController)!; + pc.direction = s.playerDirection ?? Direction.South; + } else if (s.kind === 'vehicle') { + node = new Node(s.x < 0 ? 'VehicleA1' : 'VehicleB1'); + node.addComponent(VehicleController); + const vc = node.getComponent(VehicleController)!; + vc.direction = s.vehicleDirection ?? Direction.North; + } else if (s.kind === 'prop') { + node = new Node('Prop'); + node.addComponent(PropController); + } else if (s.kind === 'prop_decor') { + node = new Node('PropDecor'); + } else { + return null; + } + this.attachVisual(node, s.kind, s.playerDirection, s.vehicleDirection); + node.setPosition(pos); + const ui = node.getComponent(UITransform) || node.addComponent(UITransform); + ui.setContentSize(CELL_PIXEL * 0.9, CELL_PIXEL * 0.9); + node.parent = parent; + return node; + } + + private attachVisual( + node: Node, + kind: SpawnKind, + playerDir?: Direction, + vehicleDir?: Direction, + ) { + const dir = kind === 'player' ? playerDir : kind === 'vehicle' ? vehicleDir : undefined; + VisualAssets.setupEntityVisual(node, kind, dir); + } + + private drawGridDebug(root: Node, config: LevelConfig) { + const tiles = new Node('Ground'); + tiles.parent = root; + const bx = config.boundary.x; + const by = config.boundary.y; + const half = CELL_PIXEL * 0.45; + for (let x = -bx + 1; x < bx; x++) { + for (let y = -by + 1; y < by; y++) { + const key = this.cellKey(x, y); + if (this.borderCells.has(key)) continue; + const p = this.cellToWorld(new Vec3(x, y, 0)); + const cell = new Node(`cell_${x}_${y}`); + cell.parent = tiles; + cell.setPosition(p); + const cui = cell.addComponent(UITransform); + cui.setContentSize(CELL_PIXEL * 0.9, CELL_PIXEL * 0.9); + VisualAssets.applySprite(cell, 'tile', false, 1, 50); + } + } + } + + externalCallLevelInfo(objects: Node[]) { + const info: { LevelID: number; PlayerName: string; VehicleName: string } = { + LevelID: this.curLevelID, + PlayerName: '', + VehicleName: '', + }; + for (const obj of objects) { + if (this.multMode) { + if (obj.name === this.multPlayerRole) info.PlayerName = obj.name; + else if (obj.name === this.multPlayerRole.replace('Player', 'Vehicle')) info.VehicleName = obj.name; + } else { + if (obj.name.includes('Player')) info.PlayerName = obj.name; + if (obj.name.includes('Vehicle')) info.VehicleName = obj.name; + } + } + JsBridge.call('externalLevelInfo', JSON.stringify(info)); + } +} diff --git a/assets/scripts/manager/GameManager.ts.meta b/assets/scripts/manager/GameManager.ts.meta new file mode 100644 index 0000000..bfc49b0 --- /dev/null +++ b/assets/scripts/manager/GameManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "bfc2e3c7-1217-4813-b019-2c0014cb1579", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/ui.meta b/assets/scripts/ui.meta new file mode 100644 index 0000000..71c9fad --- /dev/null +++ b/assets/scripts/ui.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "e5583f3f-b1d5-4acb-b0ff-33493e54c023", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/ui/UIMain.ts b/assets/scripts/ui/UIMain.ts new file mode 100644 index 0000000..ed637d8 --- /dev/null +++ b/assets/scripts/ui/UIMain.ts @@ -0,0 +1,20 @@ +import { _decorator, Component } from 'cc'; +import { GameManager } from '../manager/GameManager'; + +const { ccclass } = _decorator; + +/** 对应 Unity UIMain,JS 可 SendMessage("UIMain", "SetText", ...) */ +@ccclass('UIMain') +export class UIMain extends Component { + private textVisible = false; + private textContent = ''; + + setText(str: string) { + this.textContent = str; + console.log('[UIMain]', str); + } + + setTextActive(active: string) { + this.textVisible = active === 'true'; + } +} diff --git a/assets/scripts/ui/UIMain.ts.meta b/assets/scripts/ui/UIMain.ts.meta new file mode 100644 index 0000000..8632654 --- /dev/null +++ b/assets/scripts/ui/UIMain.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "0585296d-ea8c-427b-8cc0-8d89a56719bb", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/visual.meta b/assets/scripts/visual.meta new file mode 100644 index 0000000..641f9c2 --- /dev/null +++ b/assets/scripts/visual.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.2.0", + "importer": "directory", + "imported": true, + "uuid": "66712587-a8af-4a45-8c43-129ae3bc8ae7", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/scripts/visual/VisualAssets.ts b/assets/scripts/visual/VisualAssets.ts new file mode 100644 index 0000000..6da90b7 --- /dev/null +++ b/assets/scripts/visual/VisualAssets.ts @@ -0,0 +1,147 @@ +import { + Node, Sprite, SpriteFrame, UITransform, resources, Color, Graphics, + ImageAsset, Texture2D, +} from 'cc'; +import { Direction } from '../core/Define'; +import { SpawnKind } from '../level/LevelTypes'; + +type SpriteKey = 'player_F' | 'player_B' | 'ship_F' | 'ship_B' | 'coin' | 'tile'; + +const PATHS: Record = { + player_F: 'textures/silu/player_F', + player_B: 'textures/silu/player_B', + ship_F: 'textures/silu/ship_F', + ship_B: 'textures/silu/ship_B', + coin: 'textures/ui/coin', + tile: 'textures/silu/Baseblock', +}; + +export class VisualAssets { + private static frames = new Map(); + private static loading: Promise | null = null; + + static async preload(): Promise { + if (this.loading) return this.loading; + this.loading = (async () => { + const keys = Object.keys(PATHS) as SpriteKey[]; + const results = await Promise.all(keys.map((k) => this.loadOne(k))); + const ok = results.filter(Boolean).length; + console.log(`[VisualAssets] 贴图加载 ${ok}/${keys.length}`); + if (ok === 0) { + console.warn('[VisualAssets] 未加载到贴图,将使用色块。请确认 assets/resources/textures 已导入'); + } + })().catch((e) => { + console.error('[VisualAssets] preload failed', e); + this.loading = null; + }); + return this.loading; + } + + private static loadOne(key: SpriteKey): Promise { + if (this.frames.has(key)) return Promise.resolve(true); + const base = PATHS[key]; + return new Promise((resolve) => { + resources.load(`${base}/spriteFrame`, SpriteFrame, (err, sf) => { + if (!err && sf) { + this.frames.set(key, sf); + resolve(true); + return; + } + resources.load(base, SpriteFrame, (err2, sf2) => { + if (!err2 && sf2) { + this.frames.set(key, sf2); + resolve(true); + return; + } + resources.load(base, ImageAsset, (err3, img) => { + if (!err3 && img) { + const tex = new Texture2D(); + tex.image = img; + const frame = new SpriteFrame(); + frame.texture = tex; + this.frames.set(key, frame); + resolve(true); + } else { + console.warn(`[VisualAssets] 加载失败: ${base}`, err3 || err2 || err); + resolve(false); + } + }); + }); + }); + }); + } + + static getFrame(key: SpriteKey): SpriteFrame | null { + return this.frames.get(key) ?? null; + } + + static applyPlayerSprite(node: Node, direction: Direction) { + const isFront = direction === Direction.South || direction === Direction.East; + const flipX = direction === Direction.West || direction === Direction.East; + const key: SpriteKey = isFront ? 'player_F' : 'player_B'; + this.applySprite(node, key, flipX); + } + + static applyVehicleSprite(node: Node, direction: Direction, uiStyle = 'default') { + void uiStyle; + const isFront = direction === Direction.South || direction === Direction.East; + const flipX = direction === Direction.West || direction === Direction.East; + const key: SpriteKey = isFront ? 'ship_F' : 'ship_B'; + this.applySprite(node, key, flipX); + } + + static setupEntityVisual(node: Node, kind: SpawnKind, direction?: Direction) { + if (kind === 'player') { + this.applyPlayerSprite(node, direction ?? Direction.South); + return; + } + if (kind === 'vehicle') { + this.applyVehicleSprite(node, direction ?? Direction.North); + return; + } + if (kind === 'prop') { + this.applySprite(node, 'coin', false, 0.85); + return; + } + if (kind === 'prop_decor') { + this.applySprite(node, 'coin', false, 0.6, 120); + } + } + + /** Sprite 与 Graphics 不能共存,二选一 */ + static applySprite(node: Node, key: SpriteKey, flipX: boolean, scale = 1, alpha = 255) { + let ui = node.getComponent(UITransform); + if (!ui) { + ui = node.addComponent(UITransform); + ui.setContentSize(48, 48); + } + + const sf = this.getFrame(key); + const spr = node.getComponent(Sprite); + const g = node.getComponent(Graphics); + + if (sf) { + if (g) g.destroy(); + const sprite = spr || node.addComponent(Sprite); + sprite.spriteFrame = sf; + sprite.sizeMode = Sprite.SizeMode.CUSTOM; + const w = ui.contentSize.width * scale; + const h = ui.contentSize.height * scale; + ui.setContentSize(w, h); + sprite.color = new Color(255, 255, 255, alpha); + } else { + if (spr) spr.destroy(); + const graphics = g || node.addComponent(Graphics); + graphics.fillColor = key === 'coin' + ? new Color(255, 220, 0, alpha) + : new Color(80, 160, 255, alpha); + const w = ui.contentSize.width * 0.45 * scale; + graphics.clear(); + graphics.rect(-w, -w, w * 2, w * 2); + graphics.fill(); + } + + const sx = flipX ? -Math.abs(scale) : Math.abs(scale); + node.setScale(sx, Math.abs(scale), 1); + } +} diff --git a/assets/scripts/visual/VisualAssets.ts.meta b/assets/scripts/visual/VisualAssets.ts.meta new file mode 100644 index 0000000..9c29acd --- /dev/null +++ b/assets/scripts/visual/VisualAssets.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "c813fc15-e977-4bb5-9d75-abc460539690", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/extensions/game-controller-inspector/package.json b/extensions/game-controller-inspector/package.json new file mode 100644 index 0000000..4835559 --- /dev/null +++ b/extensions/game-controller-inspector/package.json @@ -0,0 +1,16 @@ +{ + "package_version": 2, + "name": "game-controller-inspector", + "version": "1.0.0", + "description": "GameController Inspector 调试按钮(对齐 Unity TestGame2)", + "main": "./dist/main.js", + "contributions": { + "inspector": { + "section": { + "node": { + "GameController": "./dist/inspector.js" + } + } + } + } +} diff --git a/extensions/game-controller-inspector/source/inspector.ts b/extensions/game-controller-inspector/source/inspector.ts new file mode 100644 index 0000000..1e9f958 --- /dev/null +++ b/extensions/game-controller-inspector/source/inspector.ts @@ -0,0 +1,83 @@ +/** + * GameController 自定义 Inspector(需启用扩展 game-controller-inspector) + * 构建: 在扩展目录执行 npm run build,或在 Creator 扩展管理器中启用 + */ + +export const template = ` +

+`; + +export const $ = { + inputLevel: '#input-level', + inputStyle: '#input-style', + inputCoins: '#input-coins', + btnSwitch: '#btn-switch', + btnEnd: '#btn-end', + btnStyle: '#btn-style', + btnMult: '#btn-mult', + btnMute: '#btn-mute', + btnUnmute: '#btn-unmute', +} as Record; + +type Dump = { value: Record }; + +export function update(this: { dump: Dump; $: Record }, dump: Dump) { + this.dump = dump; + const v = dump.value; + if (this.$.inputLevel && v.inputLevel) { + (this.$.inputLevel as unknown as { value: string }).value = String(v.inputLevel.value ?? '1'); + } + if (this.$.inputStyle && v.inputStyle) { + (this.$.inputStyle as unknown as { value: string }).value = String(v.inputStyle.value ?? 'default'); + } + if (this.$.inputCoins && v.coinStr) { + (this.$.inputCoins as unknown as { value: string }).value = String(v.coinStr.value ?? '[]'); + } +} + +function callMethod(uuid: string, name: string, args: unknown[] = []) { + // @ts-expect-error Editor global + if (typeof Editor !== 'undefined' && Editor.Message) { + // @ts-expect-error Editor API + Editor.Message.request('scene', 'execute-component-method', { uuid, name, args }); + } +} + +export function ready(this: { dump: Dump; $: Record }) { + const uuid = () => this.dump.value.uuid?.value as string; + + this.$.btnSwitch?.addEventListener('confirm', () => { + const id = parseInt((this.$.inputLevel as unknown as { value: string }).value || '1', 10); + callMethod(uuid(), 'switchLevel', [id]); + }); + this.$.btnEnd?.addEventListener('confirm', () => callMethod(uuid(), 'callSetIsInputEnd', [1])); + this.$.btnStyle?.addEventListener('confirm', () => { + const s = (this.$.inputStyle as unknown as { value: string }).value || 'default'; + callMethod(uuid(), 'changeUIStyle', [s]); + }); + this.$.btnMult?.addEventListener('confirm', () => { + const coins = (this.$.inputCoins as unknown as { value: string }).value || '[]'; + callMethod(uuid(), 'startMultPlay', ['PlayerA1', coins]); + }); + this.$.btnMute?.addEventListener('confirm', () => callMethod(uuid(), 'callMute', [])); + this.$.btnUnmute?.addEventListener('confirm', () => callMethod(uuid(), 'callUnmute', [])); +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..aefd098 --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "name": "tfrh001", + "uuid": "4683ce98-5131-488a-9c82-647c32645c91", + "creator": { + "version": "3.8.8" + } +} diff --git a/settings/v2/packages/builder.json b/settings/v2/packages/builder.json new file mode 100644 index 0000000..7526e40 --- /dev/null +++ b/settings/v2/packages/builder.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.3.9" +} diff --git a/settings/v2/packages/cocos-service.json b/settings/v2/packages/cocos-service.json new file mode 100644 index 0000000..1d16515 --- /dev/null +++ b/settings/v2/packages/cocos-service.json @@ -0,0 +1,23 @@ +{ + "__version__": "3.0.9", + "game": { + "name": "未知游戏", + "app_id": "UNKNOW", + "c_id": "0" + }, + "appConfigMaps": [ + { + "app_id": "UNKNOW", + "config_id": "38c154" + } + ], + "configs": [ + { + "app_id": "UNKNOW", + "config_id": "38c154", + "config_name": "Default", + "config_remarks": "", + "services": [] + } + ] +} diff --git a/settings/v2/packages/device.json b/settings/v2/packages/device.json new file mode 100644 index 0000000..70e599e --- /dev/null +++ b/settings/v2/packages/device.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.1" +} diff --git a/settings/v2/packages/engine.json b/settings/v2/packages/engine.json new file mode 100644 index 0000000..d3eab47 --- /dev/null +++ b/settings/v2/packages/engine.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.12" +} diff --git a/settings/v2/packages/information.json b/settings/v2/packages/information.json new file mode 100644 index 0000000..717d38e --- /dev/null +++ b/settings/v2/packages/information.json @@ -0,0 +1,23 @@ +{ + "__version__": "1.0.1", + "information": { + "customSplash": { + "id": "customSplash", + "label": "customSplash", + "enable": true, + "customSplash": { + "complete": false, + "form": "https://creator-api.cocos.com/api/form/show?sid=84b648999874269884ca64920657fb28" + } + }, + "removeSplash": { + "id": "removeSplash", + "label": "removeSplash", + "enable": true, + "removeSplash": { + "complete": false, + "form": "https://creator-api.cocos.com/api/form/show?sid=84b648999874269884ca64920657fb28" + } + } + } +} diff --git a/settings/v2/packages/program.json b/settings/v2/packages/program.json new file mode 100644 index 0000000..916c1b2 --- /dev/null +++ b/settings/v2/packages/program.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.4" +} diff --git a/settings/v2/packages/project.json b/settings/v2/packages/project.json new file mode 100644 index 0000000..4129dde --- /dev/null +++ b/settings/v2/packages/project.json @@ -0,0 +1,3 @@ +{ + "__version__": "1.0.6" +} diff --git a/settings/v2/packages/scene.json b/settings/v2/packages/scene.json new file mode 100644 index 0000000..0cbd3c3 --- /dev/null +++ b/settings/v2/packages/scene.json @@ -0,0 +1,4 @@ +{ + "__version__": "1.0.3", + "current-scene": "d071e7d3-2dc4-4815-8cb8-c258c4b7c515" +} diff --git a/tools/deploy-to-main.sh b/tools/deploy-to-main.sh new file mode 100644 index 0000000..8eb430c --- /dev/null +++ b/tools/deploy-to-main.sh @@ -0,0 +1,92 @@ +#!/bin/bash +# 将 Cocos Web 构建产物 + cocos-bridge 合并到主站静态目录 +# +# 用法: +# ./tools/deploy-to-main.sh \ +# --build build/web-desktop \ +# --target "/path/to/主站静态目录/cocos" +# +# 示例(部署到 Unity 项目 Template 旁,便于本地对比): +# ./tools/deploy-to-main.sh \ +# --build build/web-desktop \ +# --target "/Users/liuyufei/tfrh/主站文件/主站/Template/cocos" + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +BUILD_DIR="" +TARGET_DIR="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --build) BUILD_DIR="$2"; shift 2 ;; + --target) TARGET_DIR="$2"; shift 2 ;; + -h|--help) + echo "Usage: $0 --build --target <主站/cocos目录>" + exit 0 + ;; + *) echo "Unknown arg: $1"; exit 1 ;; + esac +done + +if [[ -z "$BUILD_DIR" || -z "$TARGET_DIR" ]]; then + echo "Error: 需要 --build 和 --target" + echo "Example:" + echo " $0 --build build/web-desktop --target /path/to/main-site/cocos" + exit 1 +fi + +BUILD_DIR="$(cd "$BUILD_DIR" 2>/dev/null && pwd || true)" +if [[ -z "$BUILD_DIR" || ! -f "$BUILD_DIR/index.html" ]]; then + echo "Error: 构建目录无效或缺少 index.html: $BUILD_DIR" + echo "请先在 Cocos Creator 中执行: 项目 → 构建发布 → Web Desktop" + exit 1 +fi + +mkdir -p "$TARGET_DIR" +echo ">>> 复制构建产物: $BUILD_DIR -> $TARGET_DIR" +rsync -a --delete \ + --exclude '.DS_Store' \ + "$BUILD_DIR/" "$TARGET_DIR/" + +echo ">>> 复制 cocos-bridge.js" +cp "$PROJECT_DIR/web-template/cocos-bridge.js" "$TARGET_DIR/../cocos-bridge.js" 2>/dev/null || \ +cp "$PROJECT_DIR/web-template/cocos-bridge.js" "$TARGET_DIR/cocos-bridge.js" + +# 若 target 是 .../cocos,bridge 放在上一级(与 index 同级) +if [[ -f "$TARGET_DIR/cocos-bridge.js" ]]; then + BRIDGE_PATH="$TARGET_DIR/cocos-bridge.js" +else + BRIDGE_PATH="$(dirname "$TARGET_DIR")/cocos-bridge.js" + cp "$PROJECT_DIR/web-template/cocos-bridge.js" "$BRIDGE_PATH" +fi + +echo ">>> 生成联调页 cocos-demo.html" +DEMO="$PROJECT_DIR/web-template/main-site.html" +if [[ -f "$DEMO" ]]; then + cp "$DEMO" "$(dirname "$TARGET_DIR")/cocos-demo.html" 2>/dev/null || \ + cp "$DEMO" "$TARGET_DIR/cocos-demo.html" +fi + +cat < 或游戏脚本前引入: + 2. 用 cocos/index.html 中的 script 标签替换原 Unity Build/*.js 段 + 3. 保留 processData / externalResult 等全局函数 + +本地预览(需先 cd 到含 cocos 的目录): + npx --yes serve "$(dirname "$TARGET_DIR")" -p 8080 + +EOF diff --git a/tools/export_all.sh b/tools/export_all.sh new file mode 100755 index 0000000..588b77d --- /dev/null +++ b/tools/export_all.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# 批量导出 Unity Levels*.cs → Cocos generated ts +set -e +UNITY_ROOT="${1:-/Users/liuyufei/tfrh/主站文件/主站}" +OUT_DIR="$(dirname "$0")/../assets/scripts/level" +PY="$(dirname "$0")/export_unity_levels.py" + +mkdir -p "$OUT_DIR" + +export_one() { + local file="$1" + local name="$2" + echo "Exporting $file -> levels-${name}.generated.ts" + python3 "$PY" \ + --input "$UNITY_ROOT/Assets/Scripts/Core/${file}" \ + --output "$OUT_DIR/levels-${name}.generated.ts" +} + +export_one "Levels600.cs" "600" +# 可按需取消注释: +# export_one "Levels1000.cs" "1000" +# export_one "Levels10000.cs" "10000" + +echo "Done. Update LevelRegistry.ts to import new LEVELS_* maps." diff --git a/tools/export_unity_levels.py b/tools/export_unity_levels.py new file mode 100644 index 0000000..ab92ee5 --- /dev/null +++ b/tools/export_unity_levels.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python3 +""" +从 Unity Levels*.cs 导出 Cocos LevelRegistry 数据。 +用法: + python3 tools/export_unity_levels.py \ + --input "/path/to/Levels600.cs" \ + --output assets/scripts/level/levels-600.generated.ts \ + --border-cache assets/scripts/level/border-cache.json +""" +from __future__ import annotations + +import argparse +import json +import re +import sys +from pathlib import Path + +DIR = { + "Direction.North": "Direction.North", + "Direction.East": "Direction.East", + "Direction.South": "Direction.South", + "Direction.West": "Direction.West", +} + +LEVEL_RE = re.compile( + r"\{(\d+),new Level\(\)\{LevelID\s*=\s*\d+,spawns\s*=\s*new List\(\)\{", + re.MULTILINE, +) + +SPAWN_RE = re.compile( + r"new Spawn\(\)\{([^}]+(?:\{[^}]*\})?)\}", + re.MULTILINE, +) + +POS_RE = re.compile(r"position\s*=\s*new Vector3Int\((-?\d+),(-?\d+),0\)") +PATH_RE = re.compile(r'path\s*=\s*"?([^",\s]+)"?') +PDIR_RE = re.compile(r"playerDirection\s*=\s*(Direction\.\w+)") +VDIR_RE = re.compile(r"vehicleDirection\s*=\s*(Direction\.\w+)") +BOUND_RE = re.compile(r"boundary\s*=\s*new Vector3Int\((\d+),(\d+),0\)") + + +def kind_from_path(path: str) -> str: + p = path.lower() + if "player" in p and "multplay" not in p: + return "player" + if "vehicle" in p: + return "vehicle" + if "enemy" in p: + return "enemy" + if "nprop" in p: + return "prop_decor" + if "prop" in p: + return "prop" + return "prop_decor" + + +def parse_spawns(block: str) -> list[dict]: + spawns = [] + for m in SPAWN_RE.finditer(block): + body = m.group(1) + pm = POS_RE.search(body) + if not pm: + continue + path_m = PATH_RE.search(body) + path = path_m.group(1) if path_m else "" + item: dict = { + "x": int(pm.group(1)), + "y": int(pm.group(2)), + "kind": kind_from_path(path), + } + pdir = PDIR_RE.search(body) + vdir = VDIR_RE.search(body) + if pdir: + item["playerDirection"] = pdir.group(1) + if vdir: + item["vehicleDirection"] = vdir.group(1) + spawns.append(item) + return spawns + + +def ring_border_key(bx: int, by: int) -> str: + return f"{bx},{by}" + + +def parse_file(text: str) -> dict[int, dict]: + levels: dict[int, dict] = {} + matches = list(LEVEL_RE.finditer(text)) + for i, m in enumerate(matches): + lid = int(m.group(1)) + start = m.end() + end = matches[i + 1].start() if i + 1 < len(matches) else len(text) + chunk = text[start:end] + bound = BOUND_RE.search(chunk) + bx, by = (10, 10) + if bound: + bx, by = int(bound.group(1)), int(bound.group(2)) + spawns = parse_spawns(chunk) + levels[lid] = { + "levelID": lid, + "boundary": {"x": bx, "y": by}, + "borderKey": ring_border_key(bx, by), + "spawns": spawns, + } + return levels + + +def spawn_to_ts(s: dict, indent: str) -> str: + parts = [ + f"x: {s['x']}", + f"y: {s['y']}", + f"kind: '{s['kind']}'", + ] + if "playerDirection" in s: + parts.append(f"playerDirection: {s['playerDirection']}") + if "vehicleDirection" in s: + parts.append(f"vehicleDirection: {s['vehicleDirection']}") + return indent + "{ " + ", ".join(parts) + " }" + + +def emit_ts(levels: dict[int, dict], border_cache: dict[str, dict]) -> str: + lines = [ + "/* AUTO-GENERATED by tools/export_unity_levels.py — DO NOT EDIT */", + "import { Direction } from '../core/Define';", + "import { LevelConfig, SpawnConfig } from './LevelTypes';", + "", + "const BORDER_CACHE: Record> = " + json.dumps(border_cache, separators=(',', ':')) + ";", + "", + "function withBorder(key: string, cfg: Omit): LevelConfig {", + " return { ...cfg, border: BORDER_CACHE[key] };", + "}", + "", + "export const LEVELS_600: Record = {", + ] + for lid in sorted(levels.keys()): + L = levels[lid] + lines.append(f" {lid}: withBorder('{L['borderKey']}', {{") + lines.append(f" levelID: {lid},") + lines.append(f" boundary: {{ x: {L['boundary']['x']}, y: {L['boundary']['y']} }},") + lines.append(" spawns: [") + for s in L["spawns"]: + lines.append(spawn_to_ts(s, " ") + ",") + lines.append(" ],") + lines.append(" }),") + lines.append("};") + lines.append("") + return "\n".join(lines) + + +def build_border_cache(levels: dict[int, dict]) -> dict[str, dict]: + cache: dict[str, dict] = {} + for L in levels.values(): + key = L["borderKey"] + if key in cache: + continue + bx, by = L["boundary"]["x"], L["boundary"]["y"] + border: dict[str, bool] = {} + for x in range(-bx, bx + 1): + for y in range(-by, by + 1): + if abs(x) == bx or abs(y) == by: + border[f"{x},{y}"] = True + cache[key] = border + return cache + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--input", required=True, help="Unity Levels*.cs path") + ap.add_argument("--output", required=True, help="Output .ts path") + ap.add_argument("--border-cache", default="", help="Optional border cache json") + args = ap.parse_args() + + text = Path(args.input).read_text(encoding="utf-8") + levels = parse_file(text) + if not levels: + print("No levels parsed", file=sys.stderr) + sys.exit(1) + + border_cache = build_border_cache(levels) + out = Path(args.output) + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(emit_ts(levels, border_cache), encoding="utf-8") + + if args.border_cache: + Path(args.border_cache).write_text(json.dumps(border_cache, indent=2), encoding="utf-8") + + print(f"Exported {len(levels)} levels -> {out}") + + +if __name__ == "__main__": + main() diff --git a/tools/patch-main-index.js b/tools/patch-main-index.js new file mode 100644 index 0000000..9a6d1ea --- /dev/null +++ b/tools/patch-main-index.js @@ -0,0 +1,55 @@ +#!/usr/bin/env node +/** + * 根据 Cocos 构建出的 index.html,生成可嵌入主站的片段说明 + * + * node tools/patch-main-index.js build/web-desktop + */ +const fs = require('fs'); +const path = require('path'); + +const buildDir = process.argv[2]; +if (!buildDir) { + console.error('Usage: node patch-main-index.js '); + process.exit(1); +} + +const indexPath = path.join(buildDir, 'index.html'); +if (!fs.existsSync(indexPath)) { + console.error('Not found:', indexPath); + process.exit(1); +} + +const html = fs.readFileSync(indexPath, 'utf8'); + +// 提取所有 script 标签(Cocos 启动链) +const scripts = []; +const re = /]*src=["']([^"']+)["'][^>]*><\/script>/gi; +let m; +while ((m = re.exec(html)) !== null) { + scripts.push(m[1]); +} + +// 提取内联 script(System.import 等) +const inline = html.match(/\n'); +console.log(''); +for (const src of scripts) { + const rel = src.startsWith('http') ? src : `cocos/${src.replace(/^\.\//, '')}`; + console.log(``); +} +console.log('\n'); +const canvasMatch = html.match(/]*id=["']([^"']+)["'][^>]*>/i); +const divMatch = html.match(/id=["'](GameDiv|Cocos3dGameContainer)["']/i); +console.log(''); + +if (inline.length) { + console.log('\n'); + inline.forEach((block) => console.log(block)); +} + +console.log('\n=== 删除原 Unity 段 ==='); +console.log('- Build/build.loader.js'); +console.log('- createUnityInstance(...)'); diff --git a/tools/unity-level-export.md b/tools/unity-level-export.md new file mode 100644 index 0000000..39258c9 --- /dev/null +++ b/tools/unity-level-export.md @@ -0,0 +1,30 @@ +# Unity 关卡迁移到 Cocos + +Unity 原项目约 1.1 万个 `Level*.prefab`,Cocos 版使用 **JSON/TS 配置** 代替 Tilemap Prefab。 + +## 配置格式 + +```typescript +registerLevel({ + levelID: 601, + boundary: { x: 20, y: 20 }, + border: { "10,0": true, ... }, // 可选 + ground: { "0,0": "Baseblock", "1,0": "JumpBlock" }, // 可选 + spawns: [ + { x: 0, y: 0, kind: 'player', playerDirection: 0 }, + { x: 3, y: 0, kind: 'prop' }, + ], +}); +``` + +## 批量迁移步骤 + +1. 从 `Assets/Scripts/Core/Levels*.cs` 提取 `LevelID`、`spawns`、`boundary` +2. 若有 Tiled 导出或 Tilemap 脚本,生成 `ground` / `border` 稀疏表 +3. 写入 `assets/scripts/level/LevelRegistry.ts` 或独立 `assets/resources/levels/{id}.json` +4. 在 `LevelRegistry.ts` 的 `getLevelConfig` 中合并 JSON 加载 + +## 资源迁移 + +- 角色/载具贴图:放入 `assets/resources/textures/`,替换 `GameManager.attachVisual` 为 Sprite 渲染 +- 音频:放入 `assets/resources/audio/` diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7dc649a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + /* Base configuration. Do not edit this field. */ + "extends": "./temp/tsconfig.cocos.json", + + /* Add your custom configuration here. */ + "compilerOptions": { + "strict": false + } +} diff --git a/web-template/cocos-bridge.js b/web-template/cocos-bridge.js new file mode 100644 index 0000000..a865f07 --- /dev/null +++ b/web-template/cocos-bridge.js @@ -0,0 +1,43 @@ +/** + * 主站页面对接层:在 Cocos 启动后提供与 Unity WebGL 相同的 unityInstance.SendMessage API + * 用法:构建产物 index.html 末尾引入本脚本,或在主站模板中引入 + */ +(function (global) { + function processData(json) { global.__tfrhOnProcessData?.(json); console.log('[processData]', JSON.parse(json)); } + function processVehicleData(json) { global.__tfrhOnProcessVehicleData?.(json); console.log('[processVehicleData]', JSON.parse(json)); } + function externalResult(json) { global.__tfrhOnExternalResult?.(json); console.log('[externalResult]', JSON.parse(json)); } + function externalLevelInfo(json) { global.__tfrhOnExternalLevelInfo?.(json); console.log('[externalLevelInfo]', JSON.parse(json)); } + function coinsData(json) { global.__tfrhOnCoinsData?.(json); console.log('[coinsData]', JSON.parse(json)); } + + global.processData = processData; + global.processVehicleData = processVehicleData; + global.externalResult = externalResult; + global.externalLevelInfo = externalLevelInfo; + global.coinsData = coinsData; + + // 动态 processPlayerA1 等 + ['A1','A2','A3','B1','B2','B3'].forEach(function (id) { + global['processPlayer' + id] = function (json) { console.log('[processPlayer' + id + ']', JSON.parse(json)); }; + global['processVehicle' + id] = function (json) { console.log('[processVehicle' + id + ']', JSON.parse(json)); }; + }); + + function waitInstance(maxMs) { + maxMs = maxMs || 30000; + return new Promise(function (resolve, reject) { + var t0 = Date.now(); + (function tick() { + if (global.cocosIns || global.unityInstance) return resolve(global.cocosIns || global.unityInstance); + if (Date.now() - t0 > maxMs) return reject(new Error('Cocos instance timeout')); + requestAnimationFrame(tick); + })(); + }); + } + + global.tfrhReady = waitInstance; + + document.addEventListener('DOMContentLoaded', function () { + waitInstance().then(function () { + console.log('[tfrh] Cocos bridge ready, use unityInstance.SendMessage(...)'); + }).catch(function (e) { console.warn('[tfrh]', e.message); }); + }); +})(typeof window !== 'undefined' ? window : globalThis); diff --git a/web-template/index.html b/web-template/index.html new file mode 100644 index 0000000..472705b --- /dev/null +++ b/web-template/index.html @@ -0,0 +1,24 @@ + + + + + 主站 Cocos Web + + + +
加载中…
+
+ + + + diff --git a/web-template/main-site.html b/web-template/main-site.html new file mode 100644 index 0000000..e3ec3dc --- /dev/null +++ b/web-template/main-site.html @@ -0,0 +1,77 @@ + + + + + + 主站 · Cocos 关卡引擎 + + + + + +
+
+ 主站 Cocos 联调 + + + + + +
+
+ +
+
+ +
+
+
+

+  
+ + + + + + + diff --git a/web-template/主站对接说明.md b/web-template/主站对接说明.md new file mode 100644 index 0000000..e116a07 --- /dev/null +++ b/web-template/主站对接说明.md @@ -0,0 +1,204 @@ +# 主站 Web 对接完整步骤(Cocos tfrh001) + +## 一、在 Cocos Creator 中构建 Web Desktop + +### 1. 打开工程 + +``` +/Users/liuyufei/tfrh/cocos/tfrh001 +``` + +确认已存在 `assets/scenes/main.scene`,且节点上挂了 **AppBootstrap**。 + +### 2. 设置启动场景 + +**项目 → 项目设置 → 项目数据 → 启动场景** → 选择 `main`。 + +### 3. 构建发布 + +1. 菜单 **项目 → 构建发布**(或顶部 **构建** 按钮) +2. **发布平台**:选 **Web Desktop**(不要选 Web Mobile,除非只做手机) +3. **构建路径**:默认 `build/web-desktop`(可保持默认) +4. **初始场景**:`main` +5. 建议勾选: + - **内联所有 SpriteFrame**(减少请求数,可选) + - **MD5 Cache**(按需) +6. 点击 **构建** +7. 构建成功后点击 **运行** 可先本地测一遍 + +### 4. 构建产物位置 + +``` +tfrh001/build/web-desktop/ +├── index.html ← 含 Cocos 启动 script 列表 +├── index.js +├── src/ +│ ├── system.bundle.js +│ ├── polyfills.bundle.js +│ └── ... +├── assets/ ← 资源 +└── ... +``` + +> 若 `build/web-desktop` 不存在,说明尚未在编辑器里点过「构建」。 + +--- + +## 二、合并到主站静态目录 + +### 方式 A:自动脚本(推荐) + +在终端执行(先完成上一节构建): + +```bash +cd /Users/liuyufei/tfrh/cocos/tfrh001 + +# 部署到主站 Template 下(与 Unity 模板并列,便于对比) +bash tools/deploy-to-main.sh \ + --build build/web-desktop \ + --target "/Users/liuyufei/tfrh/主站文件/主站/Template/cocos" +``` + +部署后目录: + +``` +主站/Template/ +├── index.html ← 原 Unity 页(参考) +├── cocos-bridge.js ← 新增:JS 桥 +├── cocos-demo.html ← 新增:联调页 +└── cocos/ ← Cocos 构建产物 + ├── index.html + └── src/ ... +``` + +### 方式 B:手动复制 + +| 复制源 | 复制到 | +|--------|--------| +| `build/web-desktop/*` | 主站静态目录下的 `cocos/` | +| `web-template/cocos-bridge.js` | 与主站 `index.html` **同级** | + +--- + +## 三、修改主站 index.html + +### 1. 引入 cocos-bridge(在 Unity 脚本之前) + +```html + +``` + +`cocos-bridge.js` 会注册: + +- `processData` / `processVehicleData` / `externalResult` / `externalLevelInfo` / `coinsData` +- 等待 `window.unityInstance` 就绪 + +### 2. 删除 Unity 加载段 + +删除类似内容: + +```html + + +``` + +### 3. 粘贴 Cocos 启动脚本 + +构建完成后运行(自动生成粘贴清单): + +```bash +node tools/patch-main-index.js build/web-desktop +``` + +将输出的 `