diff --git a/.gitignore b/.gitignore index 2309cc8..258d1d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,138 +1,6 @@ -# ---> Node -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - +*.log +.run.pid +.deploy-installed +data/backups/ +_deploy/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index c2ffe20..0000000 --- a/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -MIT License - -Copyright (c) 2026 jessikitty - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 7fd70ea..3d6a2ee 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,32 @@ a procedural blue "Sad" wisp. --- +## Scene workshop (admin GUI): `admin.html` + +A 3D authoring tool over `data/scene.json` — no more hand-editing JSON. Orbit the build, click to +select, drag on the table to position. Four tabs: + +- **World** — table dimensions (mm). X = length, Z = depth, Y = max ghost height. +- **Anchors** — the AR crests: marker type/id, size, position, yaw. (Note: existing scene used + `apriltag`; the detector is ArUco — the editor lets you set `aruco` and the matching id.) +- **Ghosts** — spawns with `hover` (position + radius + bob + yaw) or `patrol` (editable path of + points, loop period, face-travel) motion, plus lure colour. Drag the ghost to move it; drag + individual patrol points to reshape the path. +- **Buildings** — simple stackable box blockers for occlusion. Drag to place, set W×H×D, and + "Duplicate (stack +Y)" to pile boxes into a structure. (Occlusion rendering comes next; this + authors the geometry.) + +Tools: select (V), add ghost (G), add building (B), add anchor (A). Delete/Esc work on selection. + +**Save** POSTs to the server, which **backs up the old `scene.json`** to `data/backups/` first, +validates, writes, and **hot-reloads** — so connected viewers/phones get the new anchors and +ghosts immediately. **Export** downloads the JSON; **Reload** discards changes and re-fetches. + +Server endpoints: `GET /api/scene` (full scene), `POST /api/scene` (validated save + backup). + +> The scene schema gained a `blockers` array: `{ id, label, position:{x,y,z}, size:{x,y,z} }`, +> where `position` is the footprint corner (origin-relative) and `size` is the box extent in mm. + ## Forgiving scanning (`js/detect-tuned.js`) Raw js-aruco can feel finicky — slow to acquire, quick to drop on blur, jittery once locked. @@ -142,12 +168,17 @@ key numbers — they'll tell us how much multi-marker fusion is worth before we ```bash npm install npm start # PORT defaults to 34034 -# open http://localhost:34034/ar-test.html (camera needs HTTPS on phones) -# open http://localhost:34034/ god-view viewer (viewer.js) +# open http://localhost:34034/admin.html scene workshop (authoring GUI) +# open http://localhost:34034/ar-head.html 3D ghost AR (camera needs HTTPS on phones) +# open http://localhost:34034/ god-view viewer (viewer.js) ``` Env: `PORT` (default 34034), `TICK_HZ` (default 20). +### Deploy box (blackpearl) +`./run.sh {start|stop|restart|status|logs|update}` — background runner for testing. +`./run.sh update` syncs to origin/dev and restarts. `./deploy.sh` is the pull-only one-shot. + --- ## Status / roadmap @@ -159,8 +190,10 @@ Env: `PORT` (default 34034), `TICK_HZ` (default 20). - [x] AR PoC: camera + detection + ghost locked to marker (flat sprite) - [x] 3D LEGO-head ghost holding world orientation (`ar-head.html`) - [x] Pose jitter meter (`jitter.html`) with session logging + JSON export +- [x] Forgiving detection: tuned params, multi-scale, coast + smooth (`detect-tuned.js`) +- [x] Scene workshop admin GUI (`admin.html`) — author anchors, ghosts, motion, buildings; save+backup+hot-reload - [ ] Multi-marker pose fusion (one combined camera pose from all visible crests) -- [ ] Occluder geometry: ghosts vanish behind premapped buildings (depth-only boxes) +- [ ] Occluder geometry: ghosts vanish behind the building blockers (depth-only boxes) - [ ] Phone AR client: render anchored ghosts through the camera using marker pose - [ ] Calibration page: scan each crest, record its measured world position - [ ] Per-ghost colour/sprite wiring from the enriched roster diff --git a/data/ghosts.json b/data/ghosts.json new file mode 100644 index 0000000..14a3964 --- /dev/null +++ b/data/ghosts.json @@ -0,0 +1,2666 @@ +[ + { + "id": "air-marshall-brooks", + "name": "Air Marshall Brooks", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 1, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "sentry", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SentryIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "barney-mcphly", + "name": "Barney McPhly", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 1, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "sentry", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SentryIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "hilary-delivery", + "name": "Hilary Delivery", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 1, + "chargePips": 2, + "healthMax": 300, + "damageMax": 192, + "abilityId": "speed-boost", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "lumberjack-leroy", + "name": "Lumberjack Leroy", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 1, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "jump", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "nagging-nathan", + "name": "Nagging Nathan", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 300, + "damageMax": 192, + "abilityId": "speed-boost", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "poor-thaddeus", + "name": "Poor Thaddeus", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 1, + "chargePips": 3, + "healthMax": 338, + "damageMax": 212, + "abilityId": "flight", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FlightIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "vito-andale", + "name": "Vito Andale", + "color": "Red", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 1, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "ben-batter-jackson", + "name": "Ben \"Batter\" Jackson", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 5, + "chargePips": 1, + "healthMax": 263, + "damageMax": 212, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "doctor-julius", + "name": "Doctor Julius", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 4, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "janick", + "name": "Janick", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "gloombrella", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomCeilingIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "jenny", + "name": "Jenny", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 4, + "chargePips": 2, + "healthMax": 338, + "damageMax": 192, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "jeremy-jones", + "name": "Jeremy Jones", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 300, + "damageMax": 176, + "abilityId": "gloombrella", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomCeilingIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "jimothy", + "name": "Jimothy", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 4, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "mad-fenton", + "name": "Mad Fenton", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 1, + "healthMax": 300, + "damageMax": 176, + "abilityId": "jump-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkForwardIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "sir-kane-the-insane", + "name": "Sir Kane The Insane", + "color": "Red", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 1, + "chargePips": 2, + "healthMax": 413, + "damageMax": 225, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "bobby-big-cheese-marchese", + "name": "Bobby \"Big Cheese\" Marchese", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 263, + "damageMax": 225, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "chef-brennan", + "name": "Chef Brennan", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 1, + "healthMax": 300, + "damageMax": 212, + "abilityId": "heal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "don-hernando", + "name": "Don Hernando", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "joe-rotten", + "name": "Joe Rotten", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 300, + "damageMax": 192, + "abilityId": "jump-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkForwardIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "lil-bo-pumpkins", + "name": "Lil' Bo Pumpkins", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "murray-andreeves", + "name": "Murray Andreeves", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "old-leon", + "name": "Old Leon", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "gloom-wall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomWallIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "ugha", + "name": "Ugha", + "color": "Red", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "heal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "blaze-m-barr", + "name": "Blaze M. Barr", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "firestarter", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FireIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "butch-lindenburger", + "name": "Butch Lindenburger", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "captain-archibald", + "name": "Captain Archibald", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "kraken-call", + "faceSprite": "ArchibaldIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "ArchibaldIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "cassius-blackeye-sockem", + "name": "Cassius 'Blackeye' Sockem", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 1, + "chargePips": 1, + "healthMax": 338, + "damageMax": 192, + "abilityId": "jump-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkForwardIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "crooked-sven-robin", + "name": "Crooked Sven Robin", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 313, + "damageMax": 212, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "dr-drewell", + "name": "Dr. Drewell", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "powerful-potions", + "faceSprite": "DrewellIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "DrewellIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "drew-jockstrap-jones", + "name": "Drew \"Jockstrap\" Jones", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 1, + "chargePips": 2, + "healthMax": 375, + "damageMax": 225, + "abilityId": "gloom-wall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomWallIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "graak", + "name": "Graak", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 2, + "chargePips": 1, + "healthMax": null, + "damageMax": null, + "abilityId": "jump-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpPadIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "lady-e", + "name": "Lady E", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 178, + "abilityId": "hidden-portal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HiddenPortalIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "lumber-zack", + "name": "Lumber Zack", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "madame-digamberetto", + "name": "Madame Digamberetto", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 4, + "chargePips": 2, + "healthMax": 338, + "damageMax": 192, + "abilityId": "flight", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FlightIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "maxine-turbo", + "name": "Maxine Turbo", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "drag-race", + "faceSprite": "HotrodIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "HotrodIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "monsieur-forte", + "name": "Monsieur Forte", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 2, + "chargePips": 3, + "healthMax": 313, + "damageMax": 192, + "abilityId": "gloombrella", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomCeilingIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "samuel-mason", + "name": "Samuel Mason", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 4, + "chargePips": 1, + "healthMax": 338, + "damageMax": 225, + "abilityId": "soul-shot", + "faceSprite": "SamuelMasonIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "SamuelMasonIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "tragico", + "name": "Tragico", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "clown-car", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "ClownCar.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "trucker-dale", + "name": "Trucker Dale", + "color": "Red", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 4, + "chargePips": 1, + "healthMax": 338, + "damageMax": 225, + "abilityId": "gloom-engine", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomEngine.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "alice", + "name": "Alice", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 5, + "rangePips": 1, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "diana", + "name": "Diana", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 4, + "chargePips": 3, + "healthMax": 263, + "damageMax": 161, + "abilityId": "jump-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpPadIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "james", + "name": "James", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 161, + "abilityId": "flight", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FlightIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "luis-piedrecita", + "name": "Luis Piedrecita", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 3, + "rangePips": 5, + "chargePips": 3, + "healthMax": 300, + "damageMax": 135, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "mr-mueller", + "name": "Mr. Mueller", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 4, + "chargePips": 3, + "healthMax": 300, + "damageMax": 176, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "ms-sandri", + "name": "Ms. Sandri", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 161, + "abilityId": "jump", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "rufus", + "name": "Rufus", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "flight", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FlightIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "wild-thomas", + "name": "Wild Thomas", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 161, + "abilityId": "jump", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "zeb-jackson", + "name": "Zeb Jackson", + "color": "Yellow", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 161, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "archibald-the-1st", + "name": "Archibald The 1st", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "heal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "don-janko", + "name": "Don Janko", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 4, + "rangePips": 2, + "chargePips": 2, + "healthMax": 338, + "damageMax": 161, + "abilityId": "jump", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "doug", + "name": "Doug", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 4, + "rangePips": 2, + "chargePips": 1, + "healthMax": 375, + "damageMax": 161, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "everett", + "name": "Everett", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "garfield-gonzalez", + "name": "Garfield Gonzalez", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 4, + "rangePips": 5, + "chargePips": 1, + "healthMax": 338, + "damageMax": 161, + "abilityId": "jump-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkForwardIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "nanna-borom", + "name": "Nanna Borom", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 3, + "chargePips": 3, + "healthMax": 338, + "damageMax": 161, + "abilityId": "teleportal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TeleportToPortalIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "phil", + "name": "Phil", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "summer", + "name": "Summer", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 3, + "healthMax": 300, + "damageMax": 150, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "timothy", + "name": "Timothy", + "color": "Yellow", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "speed-boost", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "dave", + "name": "Dave", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 413, + "damageMax": 150, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "ivan-monroe", + "name": "Ivan Monroe", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 5, + "chargePips": 3, + "healthMax": 300, + "damageMax": 135, + "abilityId": "speed-boost", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "jake-rosebud", + "name": "Jake Rosebud", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 4, + "rangePips": 4, + "chargePips": 2, + "healthMax": 263, + "damageMax": 176, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "matt-with-the-propeller-hat", + "name": "Matt with the propeller hat", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 4, + "rangePips": 4, + "chargePips": 2, + "healthMax": 263, + "damageMax": 176, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "ollie", + "name": "Ollie", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 5, + "rangePips": 1, + "chargePips": 2, + "healthMax": 338, + "damageMax": 150, + "abilityId": "speed-boost", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "percy", + "name": "Percy", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 4, + "rangePips": 4, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "invisibility", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "InvisibilityIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "pickles", + "name": "Pickles", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 300, + "damageMax": 150, + "abilityId": "flight", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "FlightIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "professor-iken", + "name": "Professor Iken", + "color": "Yellow", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 5, + "chargePips": 3, + "healthMax": 300, + "damageMax": 135, + "abilityId": "jump-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpPadIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "anomolo", + "name": "Anomolo", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "spew", + "faceSprite": "AnomoloIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "AnomoloIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "chester-the-jester", + "name": "Chester The Jester", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "heal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "daisy", + "name": "Daisy", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "harry-cane", + "name": "Harry Cane", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 5, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 176, + "abilityId": "sonic-boom", + "faceSprite": "AirShowIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "AirShowIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "kreatoru", + "name": "Kreatoru", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "bubble-curtain", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BubbleShieldIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "old-niek", + "name": "Old Niek", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 3, + "rangePips": 3, + "chargePips": 3, + "healthMax": 338, + "damageMax": 161, + "abilityId": "sentry", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SentryIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "rat-shaun", + "name": "Rat Shaun", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "rat-king", + "faceSprite": "RatkingIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "RatkingIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "the-bawa", + "name": "The Bawa", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 4, + "chargePips": 1, + "healthMax": 375, + "damageMax": 176, + "abilityId": "shadowflight", + "faceSprite": "BawaIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "BawaIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "the-duke", + "name": "The Duke", + "color": "Yellow", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 4, + "rangePips": 3, + "chargePips": 2, + "healthMax": 338, + "damageMax": 176, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "andy-lasky", + "name": "Andy Lasky", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 1, + "rangePips": 5, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "annie-bonnie", + "name": "Annie Bonnie", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 4, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "gary-attric", + "name": "Gary Attric", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 4, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "tracking-gloom", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HomingShotIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "maiken-hill", + "name": "Maiken Hill", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 1, + "rangePips": 2, + "chargePips": 3, + "healthMax": 413, + "damageMax": 192, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "molly-jones", + "name": "Molly Jones", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "ol-elinor", + "name": "Ol' Elinor", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "teleportal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TeleportToPortalIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "ted-big-bun-bixby", + "name": "Ted \"Big Bun\" Bixby", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "heal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "wendy-batt", + "name": "Wendy Batt", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 2, + "rangePips": 4, + "chargePips": 1, + "healthMax": 375, + "damageMax": 176, + "abilityId": "gloom-wall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomWallIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "xiao-wen", + "name": "Xiao Wen", + "color": "Blue", + "rarity": "Common", + "rarityTier": 1, + "speedPips": 1, + "rangePips": 3, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "gloombrella", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomCeilingIcon.png", + "rarityIcon": null, + "baseVisual": "wisp" + }, + { + "id": "barry-the-bomber", + "name": "Barry The Bomber", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 5, + "chargePips": 2, + "healthMax": 313, + "damageMax": 225, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "grandma-winnie", + "name": "Grandma Winnie", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 1, + "rangePips": 4, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "jump-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkForwardIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "grandpa-sam", + "name": "Grandpa Sam", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 1, + "rangePips": 5, + "chargePips": 3, + "healthMax": 338, + "damageMax": 192, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "mr-tucker", + "name": "Mr. Tucker", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 2, + "chargePips": 1, + "healthMax": 313, + "damageMax": 161, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "mr-white", + "name": "Mr. White", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 3, + "chargePips": 1, + "healthMax": 450, + "damageMax": 176, + "abilityId": "jump", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "nurse-nellie", + "name": "Nurse Nellie", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 1, + "rangePips": 4, + "chargePips": 2, + "healthMax": 338, + "damageMax": 212, + "abilityId": "healing-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "HealPadIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "old-fuller", + "name": "Old Fuller", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 1, + "rangePips": 3, + "chargePips": 2, + "healthMax": 313, + "damageMax": 176, + "abilityId": "sentry", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SentryIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "ron-duke", + "name": "Ron Duke", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 4, + "chargePips": 3, + "healthMax": 375, + "damageMax": 161, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "t-e-anderson", + "name": "T.E. Anderson", + "color": "Blue", + "rarity": "Rare", + "rarityTier": 2, + "speedPips": 2, + "rangePips": 4, + "chargePips": 3, + "healthMax": 375, + "damageMax": 161, + "abilityId": "gloom-wall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomWallIcon.png", + "rarityIcon": "GhostRarity_Tier2.png", + "baseVisual": "wisp" + }, + { + "id": "alex-boudoun", + "name": "Alex Boudoun", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 2, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 192, + "abilityId": "jump-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "JumpPadIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "belulah-demonay", + "name": "Belulah Demonay", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 1, + "healthMax": 450, + "damageMax": 192, + "abilityId": "random-blink", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "BlinkRandomIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "joe-snow", + "name": "Joe Snow", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 3, + "healthMax": 338, + "damageMax": 161, + "abilityId": "sentry", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SentryIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "judge-higgins", + "name": "Judge Higgins", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 3, + "healthMax": null, + "damageMax": null, + "abilityId": "gloom-wall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomWallIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "luigi-gelato", + "name": "Luigi Gelato", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 3, + "chargePips": 3, + "healthMax": 338, + "damageMax": 161, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "morgan-walken", + "name": "Morgan Walken", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 1, + "rangePips": 4, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "teleportal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TeleportToPortalIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "roy", + "name": "Roy", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 1, + "rangePips": 3, + "chargePips": 2, + "healthMax": 313, + "damageMax": 176, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "trudy-joy", + "name": "Trudy Joy", + "color": "Blue", + "rarity": "Epic", + "rarityTier": 3, + "speedPips": 3, + "rangePips": 2, + "chargePips": 2, + "healthMax": 450, + "damageMax": 150, + "abilityId": "speed-boost-pad", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SpeedBoostPadIcon.png", + "rarityIcon": "GhostRarity_Tier3.png", + "baseVisual": "wisp" + }, + { + "id": "bart-chaney", + "name": "Bart Chaney", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 4, + "chargePips": 2, + "healthMax": 413, + "damageMax": 192, + "abilityId": "prison-break", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "PrisonbreakIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "beau", + "name": "Beau", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 1, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "shifting-bait", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "MatchingDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "flavio", + "name": "Flavio", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 3, + "chargePips": 2, + "healthMax": 375, + "damageMax": 176, + "abilityId": "teleportal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TeleportToPortalIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "gary-linemann", + "name": "Gary Linemann", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 2, + "chargePips": 2, + "healthMax": 450, + "damageMax": 161, + "abilityId": "gloombrella", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomCeilingIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "giacomo", + "name": "Giacomo", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 3, + "chargePips": 2, + "healthMax": null, + "damageMax": null, + "abilityId": "teleportal", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TeleportToPortalIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "joe-ishmael", + "name": "Joe Ishmael", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 4, + "chargePips": 2, + "healthMax": 413, + "damageMax": 176, + "abilityId": "gloom-seeker", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomSeeker.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "magnus-gornason", + "name": "Magnus Gornason", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 1, + "rangePips": 2, + "chargePips": 3, + "healthMax": 375, + "damageMax": 161, + "abilityId": "ghost-gang", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "SmokeDecoyIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "mamali", + "name": "Mamali", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 5, + "chargePips": 1, + "healthMax": 413, + "damageMax": 192, + "abilityId": "root-roof", + "faceSprite": "MamaliIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "MamaliIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "mr-nibs", + "name": "Mr. Nibs", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 4, + "chargePips": 2, + "healthMax": 413, + "damageMax": 192, + "abilityId": "shadow-bears", + "faceSprite": "MrNibsIcon.png", + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": true, + "locations": [], + "abilityIcon": "MrNibsIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "spewer", + "name": "Spewer", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 5, + "chargePips": 1, + "healthMax": 413, + "damageMax": 192, + "abilityId": "recall", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "TempAbilityIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + }, + { + "id": "the-maw", + "name": "The Maw", + "color": "Blue", + "rarity": "Legendary", + "rarityTier": 4, + "speedPips": 2, + "rangePips": 5, + "chargePips": 1, + "healthMax": 413, + "damageMax": 192, + "abilityId": "gloom-snack", + "faceSprite": null, + "fullBodySprite": null, + "webmPath": null, + "webpPath": null, + "arHealth": null, + "hauntValue": null, + "isBoss": null, + "locations": [], + "abilityIcon": "GloomSnackIcon.png", + "rarityIcon": "GhostRarity_Tier4.png", + "baseVisual": "wisp" + } +] diff --git a/public/admin.html b/public/admin.html new file mode 100644 index 0000000..fb64245 --- /dev/null +++ b/public/admin.html @@ -0,0 +1,166 @@ + + +
+ + +